From d5222d43a2434bb0eeff953378383e4231fb2ef5 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Thu, 22 May 2025 08:37:40 +0000 Subject: [PATCH 01/50] f --- .env.example | 4 +- .gitignore | 1 + README.md | 14 +- lib/slack-utils.ts | 6 +- package.json | 4 +- pnpm-lock.yaml | 1973 +++++++++++++++++++++++++++++++++++++++++++- 6 files changed, 1980 insertions(+), 22 deletions(-) diff --git a/.env.example b/.env.example index 282d37b..81db997 100644 --- a/.env.example +++ b/.env.example @@ -1,7 +1,7 @@ # Slack Credentials # Get these from your Slack app configuration at https://api.slack.com/apps -SLACK_BOT_TOKEN=xoxb-your-bot-token # Bot User OAuth Token from OAuth & Permissions -SLACK_SIGNING_SECRET=your-signing-secret # Signing Secret from Basic Information +DISCOURSE_BOT_TOKEN=xoxb-your-bot-token # Bot User OAuth Token from OAuth & Permissions +DISCOURSE_SIGNING_SECRET=your-signing-secret # Signing Secret from Basic Information # OpenAI Credentials # Get this from your OpenAI account at https://platform.openai.com/api-keys diff --git a/.gitignore b/.gitignore index 97e502e..160e029 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ ai-context dist .vercel .env*.local +.pnpm-store \ No newline at end of file diff --git a/README.md b/README.md index b318afa..738c39b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # AI SDK Slackbot -[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fnicoalbanese%2Fai-sdk-slackbot&env=SLACK_BOT_TOKEN,SLACK_SIGNING_SECRET,OPENAI_API_KEY,EXA_API_KEY&envDescription=API%20keys%20needed%20for%20application&envLink=https%3A%2F%2Fgithub.com%2Fnicoalbanese%2Fai-sdk-slackbot%3Ftab%3Dreadme-ov-file%234-set-environment-variables&project-name=ai-sdk-slackbot) +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fnicoalbanese%2Fai-sdk-slackbot&env=DISCOURSE_BOT_TOKEN,DISCOURSE_SIGNING_SECRET,OPENAI_API_KEY,EXA_API_KEY&envDescription=API%20keys%20needed%20for%20application&envLink=https%3A%2F%2Fgithub.com%2Fnicoalbanese%2Fai-sdk-slackbot%3Ftab%3Dreadme-ov-file%234-set-environment-variables&project-name=ai-sdk-slackbot) An AI-powered chatbot for Slack powered by the [AI SDK by Vercel](https://sdk.vercel.ai/docs). @@ -42,7 +42,7 @@ pnpm install ### 3. Configure Slack App Settings - Go to "Basic Information" - - Under "App Credentials", note down your "Signing Secret". This will be an environment variable `SLACK_SIGNING_SECRET` + - Under "App Credentials", note down your "Signing Secret". This will be an environment variable `DISCOURSE_SIGNING_SECRET` - Go to "App Home" - Under Show Tabs -> Messages Tab, Enable "Allow users to send Slash commands and messages from the messages tab" - Go to "OAuth & Permissions" @@ -53,7 +53,7 @@ pnpm install - `im:history` - `im:read` - `im:write` - - Install the app to your workspace and note down the "Bot User OAuth Token" for the environment variable `SLACK_BOT_TOKEN` + - Install the app to your workspace and note down the "Bot User OAuth Token" for the environment variable `DISCOURSE_BOT_TOKEN` - Go to "Event Subscriptions" - Enable Events @@ -76,8 +76,8 @@ Create a `.env` file in the root of your project with the following: ``` # Slack Credentials -SLACK_BOT_TOKEN=xoxb-your-bot-token -SLACK_SIGNING_SECRET=your-signing-secret +DISCOURSE_BOT_TOKEN=xoxb-your-bot-token +DISCOURSE_SIGNING_SECRET=your-signing-secret # OpenAI Credentials OPENAI_API_KEY=your-openai-api-key @@ -119,8 +119,8 @@ Make sure to modify the [subscription URL](./README.md/#enable-slack-events) to 3. Add your environment variables in the Vercel project settings: - - `SLACK_BOT_TOKEN` - - `SLACK_SIGNING_SECRET` + - `DISCOURSE_BOT_TOKEN` + - `DISCOURSE_SIGNING_SECRET` - `OPENAI_API_KEY` - `EXA_API_KEY` diff --git a/lib/slack-utils.ts b/lib/slack-utils.ts index 5d5f354..ab53338 100644 --- a/lib/slack-utils.ts +++ b/lib/slack-utils.ts @@ -2,9 +2,9 @@ import { WebClient } from '@slack/web-api'; import { CoreMessage } from 'ai' import crypto from 'crypto' -const signingSecret = process.env.SLACK_SIGNING_SECRET! +const signingSecret = process.env.DISCOURSE_SIGNING_SECRET! -export const client = new WebClient(process.env.SLACK_BOT_TOKEN); +export const client = new WebClient(process.env.DISCOURSE_BOT_TOKEN); // See https://api.slack.com/authentication/verifying-requests-from-slack export async function isValidSlackRequest({ @@ -16,7 +16,7 @@ export async function isValidSlackRequest({ }) { // console.log('Validating Slack request') const timestamp = request.headers.get('X-Slack-Request-Timestamp') - const slackSignature = request.headers.get('X-Slack-Signature') + const slackSignature = request.headers.get('X-Discourse-Event-Signature') // console.log(timestamp, slackSignature) if (!timestamp || !slackSignature) { diff --git a/package.json b/package.json index 2f8ea6f..bfeafa2 100644 --- a/package.json +++ b/package.json @@ -15,11 +15,13 @@ "@slack/web-api": "^7.0.2", "@vercel/functions": "^2.0.0", "ai": "^4.1.46", + "discourse2-chat": "^1.1.1", "exa-js": "^1.4.10", "zod": "^3.24.2" }, "devDependencies": { "@types/node": "^20.11.17", "typescript": "^5.3.3" - } + }, + "packageManager": "pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ae61c0e..1c0c266 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,9 +20,15 @@ importers: ai: specifier: ^4.1.46 version: 4.1.47(react@19.0.0)(zod@3.24.2) + discourse2-chat: + specifier: ^1.1.1 + version: 1.1.1 exa-js: specifier: ^1.4.10 version: 1.4.10 + vercel: + specifier: ^42.1.1 + version: 42.1.1 zod: specifier: ^3.24.2 version: 3.24.2 @@ -76,10 +82,89 @@ packages: zod: optional: true + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@edge-runtime/format@2.2.1': + resolution: {integrity: sha512-JQTRVuiusQLNNLe2W9tnzBlV/GvSVcozLl4XZHk5swnRZ/v6jp8TqR8P7sqmJsQqblDZ3EztcWmLDbhRje/+8g==} + engines: {node: '>=16'} + + '@edge-runtime/node-utils@2.3.0': + resolution: {integrity: sha512-uUtx8BFoO1hNxtHjp3eqVPC/mWImGb2exOfGjMLUoipuWgjej+f4o/VP4bUI8U40gu7Teogd5VTeZUkGvJSPOQ==} + engines: {node: '>=16'} + + '@edge-runtime/ponyfill@2.4.2': + resolution: {integrity: sha512-oN17GjFr69chu6sDLvXxdhg0Qe8EZviGSuqzR9qOiKh4MhFYGdBBcqRNzdmYeAdeRzOW2mM9yil4RftUQ7sUOA==} + engines: {node: '>=16'} + + '@edge-runtime/primitives@4.1.0': + resolution: {integrity: sha512-Vw0lbJ2lvRUqc7/soqygUX216Xb8T3WBZ987oywz6aJqRxcwSVWwr9e+Nqo2m9bxobA9mdbWNNoRY6S9eko1EQ==} + engines: {node: '>=16'} + + '@edge-runtime/vm@3.2.0': + resolution: {integrity: sha512-0dEVyRLM/lG4gp1R/Ik5bfPl/1wX00xFwd5KcNH602tzBa09oF7pbTKETEhR1GjZ75K6OJnYFu8II2dyMhONMw==} + engines: {node: '>=16'} + + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + + '@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/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@mapbox/node-pre-gyp@2.0.0': + resolution: {integrity: sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==} + engines: {node: '>=18'} + hasBin: true + + '@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'} + '@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'} + + '@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 + + '@sinclair/typebox@0.25.24': + resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} + '@slack/logger@4.0.0': resolution: {integrity: sha512-Wz7QYfPAlG/DR+DfABddUZeNgoeY7d1J39OCR2jR+v7VBsB8ezulDK5szTnDDPDwLH5IWhLvXIHlCFZV7MSKgA==} engines: {node: '>= 18', npm: '>= 8.6.0'} @@ -92,15 +177,53 @@ packages: resolution: {integrity: sha512-d4SdG+6UmGdzWw38a4sN3lF/nTEzsDxhzU13wm10ejOpPehtmRoqBKnPztQUfFiWbNvSb4czkWYJD4kt+5+Fuw==} engines: {node: '>= 18', npm: '>= 8.6.0'} + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@ts-morph/common@0.11.1': + resolution: {integrity: sha512-7hWZS0NRpEsNV8vWJzg7FEz6V8MaLNeJOmwmghqUXTpzk16V1LLZhdo+4QvE/+zv4cVci0OviuJFnqhEfoV3+g==} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@types/diff-match-patch@1.0.36': resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==} + '@types/estree@1.0.7': + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/node@16.18.11': + resolution: {integrity: sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==} + '@types/node@20.17.22': resolution: {integrity: sha512-9RV2zST+0s3EhfrMZIhrz2bhuhBwxgkbHEwP2gtGWPjBzVQjifMzJ9exw7aDZhR1wbpj8zBrfp3bo8oJcGiUUw==} '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + '@vercel/build-utils@10.5.1': + resolution: {integrity: sha512-BtqwEmU1AoITpd0KxYrdQOwyKZL8RKba+bWxI8mr3gXPQZWRAE9ok1zF0AXfvMGCstYPHBPNolZGDSfWmY2jqg==} + + '@vercel/error-utils@2.0.3': + resolution: {integrity: sha512-CqC01WZxbLUxoiVdh9B/poPbNpY9U+tO1N9oWHwTl5YAZxcqXmmWJ8KNMFItJCUUWdY3J3xv8LvAuQv2KZ5YdQ==} + + '@vercel/fun@1.1.6': + resolution: {integrity: sha512-xDiM+bD0fSZyzcjsAua3D+guXclvHOSTzr03UcZEQwYzIjwWjLduT7bl2gAaeNIe7fASAIZd0P00clcj0On4rQ==} + engines: {node: '>= 18'} + '@vercel/functions@2.0.0': resolution: {integrity: sha512-BSwIihLHoV18gerKZJyGuqd3rtaYM6rJvET1kOwKktshucyaHXTJel7Cxegs+sdX0NZqsX4LO2MFnMU2jG01Cw==} engines: {node: '>= 18'} @@ -110,6 +233,69 @@ packages: '@aws-sdk/credential-provider-web-identity': optional: true + '@vercel/gatsby-plugin-vercel-analytics@1.0.11': + resolution: {integrity: sha512-iTEA0vY6RBPuEzkwUTVzSHDATo1aF6bdLLspI68mQ/BTbi5UQEGjpjyzdKOVcSYApDtFU6M6vypZ1t4vIEnHvw==} + + '@vercel/gatsby-plugin-vercel-builder@2.0.81': + resolution: {integrity: sha512-nWzkA+bUzfysEUW3LdazbhydrnA17+Nhv/Ki6rlA+H5dDa4pBP6LeAh8kyKAsnH4beAlohCDbtmZ4OtK0HOGSg==} + + '@vercel/go@3.2.1': + resolution: {integrity: sha512-ezjmuUvLigH9V4egEaX0SZ+phILx8lb+Zkp1iTqKI+yl/ibPAtVo5o+dLSRAXU9U01LBmaLu3O8Oxd/JpWYCOw==} + + '@vercel/hydrogen@1.2.0': + resolution: {integrity: sha512-kdZp8cTVLoNmnu24wtoQPu9ZO+uB00zvDMTOXlQmNdq/V3k0mQa/Q5k2B8nliBQ3BMiBasoXxMKv59+F8rYvDw==} + + '@vercel/next@4.7.11': + resolution: {integrity: sha512-9qUrcxc9+LkoW+ffYnDalXi2KwZo4KAFv3dabdhOc5NGB6aN6kcgzISfrmTuNfLqRmG0CTtlaBl1VZs2PWhJ5g==} + + '@vercel/nft@0.29.2': + resolution: {integrity: sha512-A/Si4mrTkQqJ6EXJKv5EYCDQ3NL6nJXxG8VGXePsaiQigsomHYQC9xSpX8qGk7AEZk4b1ssbYIqJ0ISQQ7bfcA==} + engines: {node: '>=18'} + hasBin: true + + '@vercel/node@5.1.16': + resolution: {integrity: sha512-jz44zZDlDICAX2+JHs3ekTP1l9RJC5MkHRdkQiWvSgaNufoRxOo4nDkmFTiT53HeZCq+S2FYimn92n+prDh3QQ==} + + '@vercel/python@4.7.2': + resolution: {integrity: sha512-i2QBNMvNxUZQ2e5vLIL7mUkLg5Qkl9nqxUNXCYezdyvk2Ql6xYKjg7tMhpK/uiy094KfZSOECpDbDxkIN0jUSw==} + + '@vercel/redwood@2.3.1': + resolution: {integrity: sha512-CCu/lb+W58gfFdxrF1U41vvUdc2zEXiks0l01qXzbHOHQCWOC7NXWwtieeT/SLqG0K5pkR66q1TpLRtGHT0dYg==} + + '@vercel/remix-builder@5.4.7': + resolution: {integrity: sha512-pLJFAmeFtPvXVXdQU+yV2G4pflObvkqaGObcBl/5cLuhwyadhEGTxu4mWC+XOmU5ppbdNiHzywBPMiBwAQc+mg==} + + '@vercel/ruby@2.2.0': + resolution: {integrity: sha512-FJF9gKVNHAljGOgV6zS5ou2N7ZgjOqMMtcPA5lsJEUI5/AZzVDWCmtcowTP80wEtHuupkd7d7M399FA082kXYQ==} + + '@vercel/static-build@2.7.7': + resolution: {integrity: sha512-/WM1P/6suLgwiLlrUfjg47xSfgzNruHri/ECJ+xe73h35gwqi0ZQlb0Fl74VoRm7P6+8/rNz/3FLBTqJDziHcA==} + + '@vercel/static-config@3.0.0': + resolution: {integrity: sha512-2qtvcBJ1bGY0dYGYh3iM7yGKkk971FujLEDXzuW5wcZsPr1GSEjO/w2iSr3qve6nDDtBImsGoDEnus5FI4+fIw==} + + abbrev@3.0.1: + resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} + engines: {node: ^18.17.0 || >=20.5.0} + + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + ai@4.1.47: resolution: {integrity: sha512-9UZ8Mkv1HlprCJfQ0Kq+rgKbfkrkDtJjslr1WOHBRzvC70jDJJYp8r0Qq4vlF7zs9VBkGyy8Rhm5zQJJIUjvgw==} engines: {node: '>=18'} @@ -122,12 +308,93 @@ packages: zod: optional: true + ajv-errors@3.0.0: + resolution: {integrity: sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==} + peerDependencies: + ajv: ^8.0.1 + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ajv@8.6.3: + resolution: {integrity: sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==} + + 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@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + arg@4.1.0: + resolution: {integrity: sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + async-listen@1.2.0: + resolution: {integrity: sha512-CcEtRh/oc9Jc4uWeUwdpG/+Mb2YUHKmdaTf0gUr7Wa+bfp4xx70HOb3RuSTJMvqKNB1TkdTfjLdrcz2X4rkkZA==} + + async-listen@3.0.0: + resolution: {integrity: sha512-V+SsTpDqkrWTimiotsyl33ePSjA5/KrithwupuvJ6ztsqPvGv6ge4OredFhPffVXiLN/QUWvE0XcqJaYgt6fOg==} + engines: {node: '>= 14'} + + async-listen@3.0.1: + resolution: {integrity: sha512-cWMaNwUJnf37C/S5TfCkk/15MwbPRwVYALA2jtjkbHjCmAPiDXyNJy2q3p1KAZzDLHAWyarUWSujUoHR4pEgrA==} + engines: {node: '>= 14'} + + async-sema@3.1.1: + resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} axios@1.8.1: resolution: {integrity: sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + 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-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + bytes@3.1.0: + resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==} + engines: {node: '>= 0.8'} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -136,24 +403,104 @@ packages: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chokidar@4.0.0: + resolution: {integrity: sha512-mxIojEAQcuEvT/lyXq+jf/3cO/KoA6z4CeNDGGevTybECPOMFCnQy3OPahluUkbqgPNGw5Bi78UC7Po6Lhy+NA==} + engines: {node: '>= 14.16.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + + cjs-module-lexer@1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + + code-block-writer@10.1.1: + resolution: {integrity: sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + content-type@1.0.4: + resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} + engines: {node: '>= 0.6'} + + convert-hrtime@3.0.0: + resolution: {integrity: sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA==} + engines: {node: '>=8'} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + cross-fetch@4.1.0: resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + 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'} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + engines: {node: '>=8'} + diff-match-patch@1.0.5: resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + discourse2-chat@1.1.1: + resolution: {integrity: sha512-/LGKdE7k7E3E4BWZQCTeOtFuhZyzoZfC/7YUwC1Hw0fHqBVDf8t9oaljk4FHFuMLullYhR1CYT5sna0bTUbarw==} + dotenv@16.4.7: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} @@ -162,6 +509,23 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + edge-runtime@2.5.9: + resolution: {integrity: sha512-pk+k0oK0PVXdlT4oRp4lwh+unuKB7Ng4iZ2HB+EZ7QCEQizX360Rp/F4aRpgpRgdP2ufB35N+1KppHmYjqIGSg==} + engines: {node: '>=16'} + 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==} + + end-of-stream@1.1.0: + resolution: {integrity: sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -170,6 +534,9 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es-module-lexer@1.4.1: + resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -178,12 +545,147 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} + esbuild-android-64@0.14.47: + resolution: {integrity: sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + esbuild-android-arm64@0.14.47: + resolution: {integrity: sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + esbuild-darwin-64@0.14.47: + resolution: {integrity: sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + esbuild-darwin-arm64@0.14.47: + resolution: {integrity: sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + esbuild-freebsd-64@0.14.47: + resolution: {integrity: sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + esbuild-freebsd-arm64@0.14.47: + resolution: {integrity: sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + esbuild-linux-32@0.14.47: + resolution: {integrity: sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + esbuild-linux-64@0.14.47: + resolution: {integrity: sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + esbuild-linux-arm64@0.14.47: + resolution: {integrity: sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + esbuild-linux-arm@0.14.47: + resolution: {integrity: sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + esbuild-linux-mips64le@0.14.47: + resolution: {integrity: sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + esbuild-linux-ppc64le@0.14.47: + resolution: {integrity: sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + esbuild-linux-riscv64@0.14.47: + resolution: {integrity: sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + esbuild-linux-s390x@0.14.47: + resolution: {integrity: sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + esbuild-netbsd-64@0.14.47: + resolution: {integrity: sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + esbuild-openbsd-64@0.14.47: + resolution: {integrity: sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + esbuild-sunos-64@0.14.47: + resolution: {integrity: sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + esbuild-windows-32@0.14.47: + resolution: {integrity: sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + esbuild-windows-64@0.14.47: + resolution: {integrity: sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + esbuild-windows-arm64@0.14.47: + resolution: {integrity: sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + esbuild@0.14.47: + resolution: {integrity: sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==} + engines: {node: '>=12'} + hasBin: true + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + events-intercept@2.0.0: + resolution: {integrity: sha512-blk1va0zol9QOrdZt0rFXo5KMkNPVSp92Eju/Qz8THwKWKRKeE0T8Br/1aW6+Edkyq9xHYgYxn2QtOnUKPUp+Q==} + eventsource-parser@3.0.0: resolution: {integrity: sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==} engines: {node: '>=18.0.0'} @@ -191,6 +693,29 @@ packages: exa-js@1.4.10: resolution: {integrity: sha512-rffYWPU568gOiYmsHW3L5J6atoNfLJTrtAk/DAKyPuGtdDXrE9fsSfltP1X1pNVtLTsz8DIyhUHOXErueNLJrQ==} + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} @@ -200,13 +725,29 @@ packages: debug: optional: true + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + form-data@4.0.2: resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} engines: {node: '>= 6'} + fs-extra@11.1.0: + resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} + engines: {node: '>=14.14'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + generic-pool@3.4.2: + resolution: {integrity: sha512-H7cUpwCQSiJmAHM4c/aFu6fUfrhWXW1ncyh8ftxEPMu6AiYkHw9K8br720TGPZJbk5eOH2bynjZD1yPvdDAmag==} + engines: {node: '>= 4'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -215,10 +756,21 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + 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 + 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==} + has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -231,13 +783,69 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + http-errors@1.4.0: + resolution: {integrity: sha512-oLjPqve1tuOl5aRhv8GK5eHpqP1C9fb+Ol+XTLjKfLltE44zdDbEdjPSbU7Ch5rSNsVFqZn97SrMmZLdu1/YMw==} + engines: {node: '>= 0.6'} + + http-errors@1.7.3: + resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==} + engines: {node: '>= 0.6'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + inherits@2.0.1: + resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + is-electron@2.2.2: resolution: {integrity: sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==} + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jose@5.9.6: + resolution: {integrity: sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==} + + json-schema-to-ts@1.6.4: + resolution: {integrity: sha512-pR4yQ9DHz6itqswtHCm26mw45FSNfQ9rEQjosaZErhn5J3J2sIViQiz8rDaezjKAhFGpmsoczYVBgGHzFw/stA==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} @@ -246,10 +854,36 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + 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'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micro@9.3.5-canary.3: + resolution: {integrity: sha512-viYIo9PefV+w9dvoIBh1gI44Mvx1BOk67B4BpC2QK77qdY0xZF0Q+vWLt/BII6cLkIc8rLmSIcJaB/OrXXKe1g==} + engines: {node: '>= 8.0.0'} + hasBin: true + + 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'} @@ -258,13 +892,63 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + minizlib@3.0.2: + resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} + engines: {node: '>= 18'} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + ms@2.1.1: + resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + 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 - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -272,13 +956,50 @@ packages: encoding: optional: true - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - - p-queue@6.6.2: - resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} - engines: {node: '>=8'} + node-fetch@2.6.9: + resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + nopt@8.1.0: + resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + once@1.3.3: + resolution: {integrity: sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==} + + openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + + os-paths@4.4.0: + resolution: {integrity: sha512-wrAwOeXp1RRMFfQY8Sy7VaGVmPocaLwSFOYCGKSyo8qmJ+/yaafCl5BCA1IQZWqFSRBrKDYFeR9d/VyQzfH/jg==} + engines: {node: '>= 6.0'} + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} p-retry@4.6.2: resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} @@ -288,51 +1009,325 @@ packages: resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} engines: {node: '>=8'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + parse-ms@2.1.0: + resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} + engines: {node: '>=6'} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-match@1.2.4: + resolution: {integrity: sha512-UWlehEdqu36jmh4h5CWJ7tARp1OEVKGHKm6+dg9qMq5RKUTV5WJrGgaZ3dN2m7WFAXDbjlHzvJvL/IUpy84Ktw==} + deprecated: This package is archived and no longer maintained. For support, visit https://github.com/expressjs/express/discussions + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@1.9.0: + resolution: {integrity: sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==} + + path-to-regexp@6.1.0: + resolution: {integrity: sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw==} + + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pretty-ms@7.0.1: + resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} + engines: {node: '>=10'} + + promisepipe@3.0.0: + resolution: {integrity: sha512-V6TbZDJ/ZswevgkDNpGt/YqNCiZP9ASfgU+p83uJE6NrGtvSGoOcHLiDCqkMs2+yg7F5qHdLV8d0aS8O26G/KA==} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + raw-body@2.4.1: + resolution: {integrity: sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==} + engines: {node: '>= 0.8'} + react@19.0.0: resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} engines: {node: '>=0.10.0'} + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + retry@0.13.1: 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'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + setprototypeof@1.1.1: + resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@4.0.2: + resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} + engines: {node: '>=14'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + stat-mode@0.3.0: + resolution: {integrity: sha512-QjMLR0A3WwFY2aZdV0okfFEJB5TRjkggXZjxP3A1RsWsNHNu3YPv8btmtc6iCFZ0Rul3FE93OYogvhOUClU+ng==} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + stream-to-array@2.3.0: + resolution: {integrity: sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==} + + stream-to-promise@2.2.0: + resolution: {integrity: sha512-HAGUASw8NT0k8JvIVutB2Y/9iBk7gpgEyAudXwNJmZERdMITGdajOa4VJfD/kNiA3TppQpTP4J+CtcHwdzKBAw==} + + 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'} + + 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'} + swr@2.3.2: resolution: {integrity: sha512-RosxFpiabojs75IwQ316DGoDRmOqtiAj0tg8wCcbEu4CiLZBs/a9QNtHV7TUfDXmmlgqij/NqzKq/eLelyv9xA==} peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + tar@7.4.3: + resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + engines: {node: '>=18'} + throttleit@2.1.0: resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} engines: {node: '>=18'} + time-span@4.0.0: + resolution: {integrity: sha512-MyqZCTGLDZ77u4k+jqg4UlrzPTPZ49NDlaekU6uuFaJLzPIN1woaRXCbGeqOfxwc3Y37ZROGAJ614Rdv7Olt+g==} + engines: {node: '>=10'} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.0: + resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==} + engines: {node: '>=0.6'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + ts-morph@12.0.0: + resolution: {integrity: sha512-VHC8XgU2fFW7yO1f/b3mxKDje1vmyzFXHWzOYmKEkCEwcLjDtbdLgBQviqj4ZwP4MJkQtRo6Ha2I29lq/B+VxA==} + + ts-node@10.9.1: + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + ts-toolbelt@6.15.5: + resolution: {integrity: sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + typescript@5.8.2: resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} hasBin: true + uid-promise@1.0.0: + resolution: {integrity: sha512-R8375j0qwXyIu/7R0tjdF06/sElHqbmdmWC9M2qQHpEVbvE4I5+38KJI7LUUmQMp7NVq4tKHiBMkT0NFM453Ig==} + undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + engines: {node: '>=14.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + use-sync-external-store@1.4.0: resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + vercel@42.1.1: + resolution: {integrity: sha512-PtZhiNWen2VzglXCHJpjFPAQ9kH9ETAM5hBfvzy0HtWqlId07K5MVQdm8NKMYBOWj/297+/qYwhdKXsdPnnIHw==} + engines: {node: '>= 18'} + hasBin: true + + web-vitals@0.2.4: + resolution: {integrity: sha512-6BjspCO9VriYy12z356nL6JBS0GYeEcA457YyRzD+dD6XYCQ75NKhcOHUMHentOE7OcVCIXXDvOm0jKFfQG2Gg==} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + 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==} + + xdg-app-paths@5.1.0: + resolution: {integrity: sha512-RAQ3WkPf4KTU1A8RtFx3gWywzVKe00tfOPFfl2NDGqbIFENQO4kqAJp7mhQjNj/33W5x5hiWWUdyfPq/5SU3QA==} + engines: {node: '>=6'} + + xdg-portable@7.3.0: + resolution: {integrity: sha512-sqMMuL1rc0FmMBOzCpd0yuy9trqF2yTTVe+E9ogwCSWQCdDEtQUwrZPT6AxqtsFGRNxycgncbP/xmOOSPw5ZUw==} + engines: {node: '>= 6.0'} + + 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'} + + yauzl-clone@1.0.4: + resolution: {integrity: sha512-igM2RRCf3k8TvZoxR2oguuw4z1xasOnA31joCqHIyLkeWrvAc2Jgay5ISQ2ZplinkoGaJ6orCz56Ey456c5ESA==} + engines: {node: '>=6'} + + yauzl-promise@2.1.3: + resolution: {integrity: sha512-A1pf6fzh6eYkK0L4Qp7g9jzJSDrM6nN0bOn5T0IbY4Yo3w+YkWlHFkJP7mzknMXjqusHFHlKsK2N+4OLsK2MRA==} + engines: {node: '>=6'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + zod-to-json-schema@3.24.3: resolution: {integrity: sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A==} peerDependencies: @@ -380,8 +1375,84 @@ snapshots: optionalDependencies: zod: 3.24.2 + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@edge-runtime/format@2.2.1': {} + + '@edge-runtime/node-utils@2.3.0': {} + + '@edge-runtime/ponyfill@2.4.2': {} + + '@edge-runtime/primitives@4.1.0': {} + + '@edge-runtime/vm@3.2.0': + dependencies: + '@edge-runtime/primitives': 4.1.0 + + '@fastify/busboy@2.1.1': {} + + '@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/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@mapbox/node-pre-gyp@2.0.0': + dependencies: + consola: 3.4.2 + detect-libc: 2.0.4 + https-proxy-agent: 7.0.6 + node-fetch: 2.7.0 + nopt: 8.1.0 + semver: 7.7.2 + tar: 7.4.3 + transitivePeerDependencies: + - encoding + - supports-color + + '@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 + '@opentelemetry/api@1.9.0': {} + '@pkgjs/parseargs@0.11.0': + optional: true + + '@rollup/pluginutils@5.1.4': + dependencies: + '@types/estree': 1.0.7 + estree-walker: 2.0.2 + picomatch: 4.0.2 + + '@sinclair/typebox@0.25.24': {} + '@slack/logger@4.0.0': dependencies: '@types/node': 20.17.22 @@ -405,16 +1476,198 @@ snapshots: transitivePeerDependencies: - debug + '@tootallnate/once@2.0.0': {} + + '@ts-morph/common@0.11.1': + dependencies: + fast-glob: 3.3.3 + minimatch: 3.1.2 + mkdirp: 1.0.4 + path-browserify: 1.0.1 + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + '@types/diff-match-patch@1.0.36': {} + '@types/estree@1.0.7': {} + + '@types/json-schema@7.0.15': {} + + '@types/node@16.18.11': {} + '@types/node@20.17.22': dependencies: undici-types: 6.19.8 '@types/retry@0.12.0': {} + '@vercel/build-utils@10.5.1': {} + + '@vercel/error-utils@2.0.3': {} + + '@vercel/fun@1.1.6': + dependencies: + '@tootallnate/once': 2.0.0 + async-listen: 1.2.0 + debug: 4.3.4 + generic-pool: 3.4.2 + micro: 9.3.5-canary.3 + ms: 2.1.1 + node-fetch: 2.6.7 + path-match: 1.2.4 + promisepipe: 3.0.0 + semver: 7.5.4 + stat-mode: 0.3.0 + stream-to-promise: 2.2.0 + tar: 6.2.1 + tinyexec: 0.3.2 + tree-kill: 1.2.2 + uid-promise: 1.0.0 + xdg-app-paths: 5.1.0 + yauzl-promise: 2.1.3 + transitivePeerDependencies: + - encoding + - supports-color + '@vercel/functions@2.0.0': {} + '@vercel/gatsby-plugin-vercel-analytics@1.0.11': + dependencies: + web-vitals: 0.2.4 + + '@vercel/gatsby-plugin-vercel-builder@2.0.81': + dependencies: + '@sinclair/typebox': 0.25.24 + '@vercel/build-utils': 10.5.1 + esbuild: 0.14.47 + etag: 1.8.1 + fs-extra: 11.1.0 + + '@vercel/go@3.2.1': {} + + '@vercel/hydrogen@1.2.0': + dependencies: + '@vercel/static-config': 3.0.0 + ts-morph: 12.0.0 + + '@vercel/next@4.7.11': + dependencies: + '@vercel/nft': 0.29.2 + transitivePeerDependencies: + - encoding + - rollup + - supports-color + + '@vercel/nft@0.29.2': + dependencies: + '@mapbox/node-pre-gyp': 2.0.0 + '@rollup/pluginutils': 5.1.4 + 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 + + '@vercel/node@5.1.16': + dependencies: + '@edge-runtime/node-utils': 2.3.0 + '@edge-runtime/primitives': 4.1.0 + '@edge-runtime/vm': 3.2.0 + '@types/node': 16.18.11 + '@vercel/build-utils': 10.5.1 + '@vercel/error-utils': 2.0.3 + '@vercel/nft': 0.29.2 + '@vercel/static-config': 3.0.0 + async-listen: 3.0.0 + cjs-module-lexer: 1.2.3 + edge-runtime: 2.5.9 + es-module-lexer: 1.4.1 + esbuild: 0.14.47 + etag: 1.8.1 + node-fetch: 2.6.9 + path-to-regexp: 6.1.0 + path-to-regexp-updated: path-to-regexp@6.3.0 + ts-morph: 12.0.0 + ts-node: 10.9.1(@types/node@16.18.11)(typescript@4.9.5) + typescript: 4.9.5 + undici: 5.28.4 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - encoding + - rollup + - supports-color + + '@vercel/python@4.7.2': {} + + '@vercel/redwood@2.3.1': + dependencies: + '@vercel/nft': 0.29.2 + '@vercel/static-config': 3.0.0 + semver: 6.3.1 + ts-morph: 12.0.0 + transitivePeerDependencies: + - encoding + - rollup + - supports-color + + '@vercel/remix-builder@5.4.7': + dependencies: + '@vercel/error-utils': 2.0.3 + '@vercel/nft': 0.29.2 + '@vercel/static-config': 3.0.0 + path-to-regexp: 6.1.0 + path-to-regexp-updated: path-to-regexp@6.3.0 + ts-morph: 12.0.0 + transitivePeerDependencies: + - encoding + - rollup + - supports-color + + '@vercel/ruby@2.2.0': {} + + '@vercel/static-build@2.7.7': + dependencies: + '@vercel/gatsby-plugin-vercel-analytics': 1.0.11 + '@vercel/gatsby-plugin-vercel-builder': 2.0.81 + '@vercel/static-config': 3.0.0 + ts-morph: 12.0.0 + + '@vercel/static-config@3.0.0': + dependencies: + ajv: 8.6.3 + json-schema-to-ts: 1.6.4 + ts-morph: 12.0.0 + + abbrev@3.0.1: {} + + acorn-import-attributes@1.9.5(acorn@8.14.1): + dependencies: + acorn: 8.14.1 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.1 + + acorn@8.14.1: {} + + agent-base@7.1.3: {} + ai@4.1.47(react@19.0.0)(zod@3.24.2): dependencies: '@ai-sdk/provider': 1.0.9 @@ -427,6 +1680,52 @@ snapshots: react: 19.0.0 zod: 3.24.2 + ajv-errors@3.0.0(ajv@8.17.1): + dependencies: + ajv: 8.17.1 + + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ajv@8.6.3: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + arg@4.1.0: {} + + arg@4.1.3: {} + + async-listen@1.2.0: {} + + async-listen@3.0.0: {} + + async-listen@3.0.1: {} + + async-sema@3.1.1: {} + asynckit@0.4.0: {} axios@1.8.1: @@ -437,6 +1736,29 @@ snapshots: transitivePeerDependencies: - debug + balanced-match@1.0.2: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.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 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + buffer-crc32@0.2.13: {} + + bytes@3.1.0: {} + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -444,22 +1766,77 @@ snapshots: chalk@5.4.1: {} + chokidar@4.0.0: + dependencies: + readdirp: 4.1.2 + + chownr@2.0.0: {} + + chownr@3.0.0: {} + + cjs-module-lexer@1.2.3: {} + + code-block-writer@10.1.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 + concat-map@0.0.1: {} + + consola@3.4.2: {} + + content-type@1.0.4: {} + + convert-hrtime@3.0.0: {} + + create-require@1.1.1: {} + cross-fetch@4.1.0: dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + debug@4.4.1: + dependencies: + ms: 2.1.3 + delayed-stream@1.0.0: {} + depd@1.1.2: {} + dequal@2.0.3: {} + detect-libc@2.0.4: {} + diff-match-patch@1.0.5: {} + diff@4.0.2: {} + + discourse2-chat@1.1.1: + dependencies: + ajv: 8.17.1 + ajv-errors: 3.0.0(ajv@8.17.1) + ajv-formats: 3.0.1(ajv@8.17.1) + openapi-types: 12.1.3 + dotenv@16.4.7: {} dunder-proto@1.0.1: @@ -468,10 +1845,34 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + eastasianwidth@0.2.0: {} + + edge-runtime@2.5.9: + dependencies: + '@edge-runtime/format': 2.2.1 + '@edge-runtime/ponyfill': 2.4.2 + '@edge-runtime/vm': 3.2.0 + async-listen: 3.0.1 + mri: 1.2.0 + picocolors: 1.0.0 + pretty-ms: 7.0.1 + signal-exit: 4.0.2 + time-span: 4.0.0 + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + end-of-stream@1.1.0: + dependencies: + once: 1.3.3 + es-define-property@1.0.1: {} es-errors@1.3.0: {} + es-module-lexer@1.4.1: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -483,10 +1884,99 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + esbuild-android-64@0.14.47: + optional: true + + esbuild-android-arm64@0.14.47: + optional: true + + esbuild-darwin-64@0.14.47: + optional: true + + esbuild-darwin-arm64@0.14.47: + optional: true + + esbuild-freebsd-64@0.14.47: + optional: true + + esbuild-freebsd-arm64@0.14.47: + optional: true + + esbuild-linux-32@0.14.47: + optional: true + + esbuild-linux-64@0.14.47: + optional: true + + esbuild-linux-arm64@0.14.47: + optional: true + + esbuild-linux-arm@0.14.47: + optional: true + + esbuild-linux-mips64le@0.14.47: + optional: true + + esbuild-linux-ppc64le@0.14.47: + optional: true + + esbuild-linux-riscv64@0.14.47: + optional: true + + esbuild-linux-s390x@0.14.47: + optional: true + + esbuild-netbsd-64@0.14.47: + optional: true + + esbuild-openbsd-64@0.14.47: + optional: true + + esbuild-sunos-64@0.14.47: + optional: true + + esbuild-windows-32@0.14.47: + optional: true + + esbuild-windows-64@0.14.47: + optional: true + + esbuild-windows-arm64@0.14.47: + optional: true + + esbuild@0.14.47: + optionalDependencies: + esbuild-android-64: 0.14.47 + esbuild-android-arm64: 0.14.47 + esbuild-darwin-64: 0.14.47 + esbuild-darwin-arm64: 0.14.47 + esbuild-freebsd-64: 0.14.47 + esbuild-freebsd-arm64: 0.14.47 + esbuild-linux-32: 0.14.47 + esbuild-linux-64: 0.14.47 + esbuild-linux-arm: 0.14.47 + esbuild-linux-arm64: 0.14.47 + esbuild-linux-mips64le: 0.14.47 + esbuild-linux-ppc64le: 0.14.47 + esbuild-linux-riscv64: 0.14.47 + esbuild-linux-s390x: 0.14.47 + esbuild-netbsd-64: 0.14.47 + esbuild-openbsd-64: 0.14.47 + esbuild-sunos-64: 0.14.47 + esbuild-windows-32: 0.14.47 + esbuild-windows-64: 0.14.47 + esbuild-windows-arm64: 0.14.47 + + estree-walker@2.0.2: {} + + etag@1.8.1: {} + eventemitter3@4.0.7: {} eventemitter3@5.0.1: {} + events-intercept@2.0.0: {} + eventsource-parser@3.0.0: {} exa-js@1.4.10: @@ -496,8 +1986,39 @@ snapshots: transitivePeerDependencies: - encoding + fast-deep-equal@3.1.3: {} + + 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-uri@3.0.6: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + file-uri-to-path@1.0.0: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + follow-redirects@1.15.9: {} + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + form-data@4.0.2: dependencies: asynckit: 0.4.0 @@ -505,8 +2026,20 @@ snapshots: es-set-tostringtag: 2.1.0 mime-types: 2.1.35 + fs-extra@11.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + function-bind@1.1.2: {} + generic-pool@3.4.2: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -525,8 +2058,23 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + 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 + gopd@1.2.0: {} + graceful-fs@4.2.11: {} + has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -537,10 +2085,67 @@ snapshots: dependencies: function-bind: 1.1.2 + http-errors@1.4.0: + dependencies: + inherits: 2.0.1 + statuses: 1.5.0 + + http-errors@1.7.3: + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.1.1 + statuses: 1.5.0 + toidentifier: 1.0.0 + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + inherits@2.0.1: {} + + inherits@2.0.4: {} + is-electron@2.2.2: {} + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + is-stream@2.0.1: {} + isarray@0.0.1: {} + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jose@5.9.6: {} + + json-schema-to-ts@1.6.4: + dependencies: + '@types/json-schema': 7.0.15 + ts-toolbelt: 6.15.5 + + json-schema-traverse@1.0.0: {} + json-schema@0.4.0: {} jsondiffpatch@0.6.0: @@ -549,20 +2154,106 @@ snapshots: chalk: 5.4.1 diff-match-patch: 1.0.5 + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + lru-cache@10.4.3: {} + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + make-error@1.3.6: {} + math-intrinsics@1.1.0: {} + merge2@1.4.1: {} + + micro@9.3.5-canary.3: + dependencies: + arg: 4.1.0 + content-type: 1.0.4 + raw-body: 2.4.1 + + 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 + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + + minipass@7.1.2: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + minizlib@3.0.2: + dependencies: + minipass: 7.1.2 + + mkdirp@1.0.4: {} + + mkdirp@3.0.1: {} + + mri@1.2.0: {} + + ms@2.1.1: {} + + ms@2.1.2: {} + + ms@2.1.3: {} + nanoid@3.3.8: {} + node-fetch@2.6.7: + dependencies: + whatwg-url: 5.0.0 + + node-fetch@2.6.9: + dependencies: + whatwg-url: 5.0.0 + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 + node-gyp-build@4.8.4: {} + + nopt@8.1.0: + dependencies: + abbrev: 3.0.1 + + once@1.3.3: + dependencies: + wrappy: 1.0.2 + + openapi-types@12.1.3: {} + + os-paths@4.4.0: {} + p-finally@1.0.0: {} p-queue@6.6.2: @@ -579,32 +2270,250 @@ snapshots: dependencies: p-finally: 1.0.0 + package-json-from-dist@1.0.1: {} + + parse-ms@2.1.0: {} + + path-browserify@1.0.1: {} + + path-key@3.1.1: {} + + path-match@1.2.4: + dependencies: + http-errors: 1.4.0 + path-to-regexp: 1.9.0 + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@1.9.0: + dependencies: + isarray: 0.0.1 + + path-to-regexp@6.1.0: {} + + path-to-regexp@6.3.0: {} + + pend@1.2.0: {} + + picocolors@1.0.0: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + pretty-ms@7.0.1: + dependencies: + parse-ms: 2.1.0 + + promisepipe@3.0.0: {} + proxy-from-env@1.1.0: {} + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + raw-body@2.4.1: + dependencies: + bytes: 3.1.0 + http-errors: 1.7.3 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + react@19.0.0: {} + readdirp@4.1.2: {} + + require-from-string@2.0.2: {} + + resolve-from@5.0.0: {} + retry@0.13.1: {} + reusify@1.1.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safer-buffer@2.1.2: {} + secure-json-parse@2.7.0: {} + semver@6.3.1: {} + + semver@7.5.4: + dependencies: + lru-cache: 6.0.0 + + semver@7.7.2: {} + + setprototypeof@1.1.1: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@4.0.2: {} + + signal-exit@4.1.0: {} + + stat-mode@0.3.0: {} + + statuses@1.5.0: {} + + stream-to-array@2.3.0: + dependencies: + any-promise: 1.3.0 + + stream-to-promise@2.2.0: + dependencies: + any-promise: 1.3.0 + end-of-stream: 1.1.0 + stream-to-array: 2.3.0 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + swr@2.3.2(react@19.0.0): dependencies: dequal: 2.0.3 react: 19.0.0 use-sync-external-store: 1.4.0(react@19.0.0) + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + tar@7.4.3: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.0.2 + mkdirp: 3.0.1 + yallist: 5.0.0 + throttleit@2.1.0: {} + time-span@4.0.0: + dependencies: + convert-hrtime: 3.0.0 + + tinyexec@0.3.2: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.0: {} + tr46@0.0.3: {} + tree-kill@1.2.2: {} + + ts-morph@12.0.0: + dependencies: + '@ts-morph/common': 0.11.1 + code-block-writer: 10.1.1 + + ts-node@10.9.1(@types/node@16.18.11)(typescript@4.9.5): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 16.18.11 + acorn: 8.14.1 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.9.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + ts-toolbelt@6.15.5: {} + + typescript@4.9.5: {} + typescript@5.8.2: {} + uid-promise@1.0.0: {} + undici-types@6.19.8: {} + undici@5.28.4: + dependencies: + '@fastify/busboy': 2.1.1 + + universalify@2.0.1: {} + + unpipe@1.0.0: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + use-sync-external-store@1.4.0(react@19.0.0): dependencies: react: 19.0.0 + v8-compile-cache-lib@3.0.1: {} + + vercel@42.1.1: + dependencies: + '@vercel/build-utils': 10.5.1 + '@vercel/fun': 1.1.6 + '@vercel/go': 3.2.1 + '@vercel/hydrogen': 1.2.0 + '@vercel/next': 4.7.11 + '@vercel/node': 5.1.16 + '@vercel/python': 4.7.2 + '@vercel/redwood': 2.3.1 + '@vercel/remix-builder': 5.4.7 + '@vercel/ruby': 2.2.0 + '@vercel/static-build': 2.7.7 + chokidar: 4.0.0 + jose: 5.9.6 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - encoding + - rollup + - supports-color + + web-vitals@0.2.4: {} + webidl-conversions@3.0.1: {} whatwg-url@5.0.0: @@ -612,6 +2521,52 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + 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: {} + + xdg-app-paths@5.1.0: + dependencies: + xdg-portable: 7.3.0 + + xdg-portable@7.3.0: + dependencies: + os-paths: 4.4.0 + + yallist@4.0.0: {} + + yallist@5.0.0: {} + + yauzl-clone@1.0.4: + dependencies: + events-intercept: 2.0.0 + + yauzl-promise@2.1.3: + dependencies: + yauzl: 2.10.0 + yauzl-clone: 1.0.4 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yn@3.1.1: {} + zod-to-json-schema@3.24.3(zod@3.24.2): dependencies: zod: 3.24.2 From 14a7ed2e497d1a3078097f149a418499ac6a7ed9 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Thu, 22 May 2025 11:03:44 +0000 Subject: [PATCH 02/50] f --- .env.example | 1 + api/events.ts | 9 ++--- lib/handle-app-mention.ts | 16 ++++----- lib/handle-messages.ts | 62 ++++++++++++++++---------------- lib/slack-utils.ts | 76 +++++++++++++++++++-------------------- 5 files changed, 82 insertions(+), 82 deletions(-) diff --git a/.env.example b/.env.example index 81db997..744e2d3 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,7 @@ # Slack Credentials # Get these from your Slack app configuration at https://api.slack.com/apps DISCOURSE_BOT_TOKEN=xoxb-your-bot-token # Bot User OAuth Token from OAuth & Permissions +DISCOURSE_URL=https://community.yourdomain.com/ DISCOURSE_SIGNING_SECRET=your-signing-secret # Signing Secret from Basic Information # OpenAI Credentials diff --git a/api/events.ts b/api/events.ts index 3e5c777..02259eb 100644 --- a/api/events.ts +++ b/api/events.ts @@ -12,12 +12,13 @@ export async function POST(request: Request) { const payload = JSON.parse(rawBody); const requestType = payload.type as "url_verification" | "event_callback"; - // See https://api.slack.com/events/url_verification - if (requestType === "url_verification") { - return new Response(payload.challenge, { status: 200 }); - } + // // See https://api.slack.com/events/url_verification + // if (requestType === "url_verification") { + // return new Response(payload.challenge, { status: 200 }); + // } await verifyRequest({ requestType, request, rawBody }); + console.log('verified'); try { const botUserId = await getBotId(); diff --git a/lib/handle-app-mention.ts b/lib/handle-app-mention.ts index 5484839..d134669 100644 --- a/lib/handle-app-mention.ts +++ b/lib/handle-app-mention.ts @@ -6,20 +6,20 @@ const updateStatusUtil = async ( initialStatus: string, event: AppMentionEvent, ) => { - const initialMessage = await client.chat.postMessage({ - channel: event.channel, - thread_ts: event.thread_ts ?? event.ts, - text: initialStatus, + const initialMessage = await client.postMessage({ + channel_id: event.channel, + // thread_ts: event.thread_ts ?? event.ts, + message: initialStatus, }); if (!initialMessage || !initialMessage.ts) throw new Error("Failed to post initial message"); const updateMessage = async (status: string) => { - await client.chat.update({ - channel: event.channel, - ts: initialMessage.ts as string, - text: status, + await client.editMessage({ + channel_id: event.channel, + // ts: initialMessage.ts as string, + message: status, }); }; return updateMessage; diff --git a/lib/handle-messages.ts b/lib/handle-messages.ts index 6130409..ebbca89 100644 --- a/lib/handle-messages.ts +++ b/lib/handle-messages.ts @@ -12,26 +12,26 @@ export async function assistantThreadMessage( console.log(`Thread started: ${channel_id} ${thread_ts}`); console.log(JSON.stringify(event)); - await client.chat.postMessage({ - channel: channel_id, - thread_ts: thread_ts, + await client.postMessage({ + channel_id: channel_id, + // thread_ts: thread_ts, text: "Hello, I'm an AI assistant built with the AI SDK by Vercel!", }); - await client.assistant.threads.setSuggestedPrompts({ - channel_id: channel_id, - thread_ts: thread_ts, - prompts: [ - { - title: "Get the weather", - message: "What is the current weather in London?", - }, - { - title: "Get the news", - message: "What is the latest Premier League news from the BBC?", - }, - ], - }); + // await client.assistant.threads.setSuggestedPrompts({ + // channel_id: channel_id, + // thread_ts: thread_ts, + // prompts: [ + // { + // title: "Get the weather", + // message: "What is the current weather in London?", + // }, + // { + // title: "Get the news", + // message: "What is the latest Premier League news from the BBC?", + // }, + // ], + // }); } export async function handleNewAssistantMessage( @@ -53,20 +53,20 @@ export async function handleNewAssistantMessage( const messages = await getThread(channel, thread_ts, botUserId); const result = await generateResponse(messages, updateStatus); - await client.chat.postMessage({ - channel: channel, - thread_ts: thread_ts, - text: result, - unfurl_links: false, - blocks: [ - { - type: "section", - text: { - type: "mrkdwn", - text: result, - }, - }, - ], + await client.postMessage({ + channel_id: channel, + // thread_ts: thread_ts, + message: result, + // unfurl_links: false, + // blocks: [ + // { + // type: "section", + // text: { + // type: "mrkdwn", + // text: result, + // }, + // }, + // ], }); await updateStatus(""); diff --git a/lib/slack-utils.ts b/lib/slack-utils.ts index ab53338..bf53dbc 100644 --- a/lib/slack-utils.ts +++ b/lib/slack-utils.ts @@ -1,47 +1,45 @@ import { WebClient } from '@slack/web-api'; import { CoreMessage } from 'ai' import crypto from 'crypto' +import DiscourseAPI from 'discourse2-chat'; const signingSecret = process.env.DISCOURSE_SIGNING_SECRET! +const url = process.env.DISCOURSE_URL!; -export const client = new WebClient(process.env.DISCOURSE_BOT_TOKEN); +export const client = new DiscourseAPI(url, { + 'Api-Key': process.env.DISCOURSE_BOT_TOKEN! +}) // See https://api.slack.com/authentication/verifying-requests-from-slack -export async function isValidSlackRequest({ +export function isValidDiscourseRequest({ request, rawBody, }: { request: Request rawBody: string -}) { - // console.log('Validating Slack request') - const timestamp = request.headers.get('X-Slack-Request-Timestamp') - const slackSignature = request.headers.get('X-Discourse-Event-Signature') - // console.log(timestamp, slackSignature) - - if (!timestamp || !slackSignature) { - console.log('Missing timestamp or signature') - return false - } +}): boolean { + const signatureHeader = request.headers.get('X-Discourse-Event-Signature') - // Prevent replay attacks on the order of 5 minutes - if (Math.abs(Date.now() / 1000 - parseInt(timestamp)) > 60 * 5) { - console.log('Timestamp out of range') + if (!signatureHeader || !signatureHeader.startsWith('sha256=')) { + console.log('Missing or malformed signature') return false } - const base = `v0:${timestamp}:${rawBody}` - const hmac = crypto + const receivedHmac = signatureHeader.slice(7) // remove "sha256=" + const computedHmac = crypto .createHmac('sha256', signingSecret) - .update(base) + .update(rawBody) .digest('hex') - const computedSignature = `v0=${hmac}` - // Prevent timing attacks - return crypto.timingSafeEqual( - Buffer.from(computedSignature), - Buffer.from(slackSignature) - ) + try { + return crypto.timingSafeEqual( + Buffer.from(receivedHmac, 'utf8'), + Buffer.from(computedHmac, 'utf8') + ) + } catch (err) { + console.log('HMAC comparison failed:', err) + return false + } } export const verifyRequest = async ({ @@ -53,7 +51,7 @@ export const verifyRequest = async ({ request: Request; rawBody: string; }) => { - const validRequest = await isValidSlackRequest({ request, rawBody }); + const validRequest = await isValidDiscourseRequest({ request, rawBody }); if (!validRequest || requestType !== "event_callback") { return new Response("Invalid request", { status: 400 }); } @@ -61,23 +59,22 @@ export const verifyRequest = async ({ export const updateStatusUtil = (channel: string, thread_ts: string) => { return async (status: string) => { - await client.assistant.threads.setStatus({ - channel_id: channel, - thread_ts: thread_ts, - status: status, - }); + // await client.assistant.threads.setStatus({ + // channel_id: channel, + // thread_ts: thread_ts, + // status: status, + // }); }; }; export async function getThread( - channel_id: string, + channel_id: number, thread_ts: string, botUserId: string, ): Promise { - const { messages } = await client.conversations.replies({ - channel: channel_id, - ts: thread_ts, - limit: 50, + const { messages } = await client.getMessages({ + channel_id, + page_size: 50, }); // Ensure we have messages @@ -86,12 +83,12 @@ export async function getThread( const result = messages .map((message) => { - const isBot = !!message.bot_id; - if (!message.text) return null; + const isBot = message.user?.username === botUserId; + if (!message.message) return null; // For app mentions, remove the mention prefix // For IM messages, keep the full text - let content = message.text; + let content = message.message; if (!isBot && content.includes(`<@${botUserId}>`)) { content = content.replace(`<@${botUserId}> `, ""); } @@ -107,7 +104,8 @@ export async function getThread( } export const getBotId = async () => { - const { user_id: botUserId } = await client.auth.test(); + // const { user_id: botUserId } = await client.auth.test(); + const botUserId = 'gpt'; if (!botUserId) { throw new Error("botUserId is undefined"); From 3cd7c48abe682ff59c6f0d8162d10ee24d82e59f Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Thu, 22 May 2025 11:03:47 +0000 Subject: [PATCH 03/50] f --- api/events.ts | 44 +- lib/handle-app-mention.ts | 37 +- lib/handle-messages.ts | 24 +- lib/slack-utils.ts | 24 +- package.json | 2 +- pnpm-lock.yaml | 1895 +------------------------------------ tsconfig.json | 3 + types/chat.ts | 25 + types/discourse.ts | 655 +++++++++++++ types/index.ts | 2 + types/webhook.ts | 160 ++++ 11 files changed, 917 insertions(+), 1954 deletions(-) create mode 100644 types/chat.ts create mode 100644 types/discourse.ts create mode 100644 types/index.ts create mode 100644 types/webhook.ts diff --git a/api/events.ts b/api/events.ts index 02259eb..edc7bb5 100644 --- a/api/events.ts +++ b/api/events.ts @@ -1,4 +1,4 @@ -import type { SlackEvent } from "@slack/web-api"; +import type { AppMentionEvent, SlackEvent } from "@slack/web-api"; import { assistantThreadMessage, handleNewAssistantMessage, @@ -6,42 +6,42 @@ import { import { waitUntil } from "@vercel/functions"; import { handleNewAppMention } from "../lib/handle-app-mention"; import { verifyRequest, getBotId } from "../lib/slack-utils"; +import type { WebhookChatMessage, WebhookNotification } from "@/types"; export async function POST(request: Request) { const rawBody = await request.text(); const payload = JSON.parse(rawBody); - const requestType = payload.type as "url_verification" | "event_callback"; - // // See https://api.slack.com/events/url_verification - // if (requestType === "url_verification") { - // return new Response(payload.challenge, { status: 200 }); - // } - - await verifyRequest({ requestType, request, rawBody }); - console.log('verified'); + await verifyRequest({ request, rawBody }); try { const botUserId = await getBotId(); - const event = payload.event as SlackEvent; + const event = { + type: request.headers.get('X-Discourse-Event-Type'), + id: request.headers.get('X-Discourse-Event-Id') + }; - if (event.type === "app_mention") { - waitUntil(handleNewAppMention(event, botUserId)); + console.log('got request', event.type) + + if (event.type === "notification" && payload.notification_type === 29) { + waitUntil(handleNewAppMention(payload?.notification as WebhookNotification, botUserId)); } - if (event.type === "assistant_thread_started") { - waitUntil(assistantThreadMessage(event)); - } + // if (event.type === "assistant_thread_started") { + // waitUntil(assistantThreadMessage(event)); + // } if ( - event.type === "message" && - !event.subtype && - event.channel_type === "im" && - !event.bot_id && - !event.bot_profile && - event.bot_id !== botUserId + event.type === "chat_message" + // !event.subtype && + // event.channel_type === "im" && + // !event.bot_id && + // !event.bot_profile && + // event.bot_id !== botUserId ) { - waitUntil(handleNewAssistantMessage(event, botUserId)); + console.log('cmsg') + waitUntil(handleNewAssistantMessage(payload?.chat_message as WebhookChatMessage, botUserId)); } return new Response("Success!", { status: 200 }); diff --git a/lib/handle-app-mention.ts b/lib/handle-app-mention.ts index d134669..d9bf8ae 100644 --- a/lib/handle-app-mention.ts +++ b/lib/handle-app-mention.ts @@ -1,24 +1,25 @@ import { AppMentionEvent } from "@slack/web-api"; import { client, getThread } from "./slack-utils"; import { generateResponse } from "./generate-response"; +import { WebhookNotification } from "@/types"; const updateStatusUtil = async ( initialStatus: string, - event: AppMentionEvent, + event: WebhookNotification, ) => { const initialMessage = await client.postMessage({ - channel_id: event.channel, + channel_id: event.data?.chat_channel_id as number, // thread_ts: event.thread_ts ?? event.ts, message: initialStatus, }); - if (!initialMessage || !initialMessage.ts) + if (!initialMessage || !initialMessage.id) throw new Error("Failed to post initial message"); const updateMessage = async (status: string) => { await client.editMessage({ - channel_id: event.channel, - // ts: initialMessage.ts as string, + channel_id: event.data?.chat_channel_id as number, + message_id: initialMessage.id!, message: status, }); }; @@ -26,27 +27,27 @@ const updateStatusUtil = async ( }; export async function handleNewAppMention( - event: AppMentionEvent, - botUserId: string, + event: WebhookNotification, + botUserId: number, ) { console.log("Handling app mention"); - if (event.bot_id || event.bot_id === botUserId || event.bot_profile) { + if (event.user_id === botUserId) { console.log("Skipping app mention"); return; } - const { thread_ts, channel } = event; + const { chat_channel_id: channel_id } = event?.data; const updateMessage = await updateStatusUtil("is thinking...", event); - if (thread_ts) { - const messages = await getThread(channel, thread_ts, botUserId); + // if (thread_ts) { + const messages = await getThread(channel_id as any, botUserId); const result = await generateResponse(messages, updateMessage); await updateMessage(result); - } else { - const result = await generateResponse( - [{ role: "user", content: event.text }], - updateMessage, - ); - await updateMessage(result); - } + // } else { + // const result = await generateResponse( + // [{ role: "user", content: event.text }], + // updateMessage, + // ); + // await updateMessage(result); + // } } diff --git a/lib/handle-messages.ts b/lib/handle-messages.ts index ebbca89..43b3812 100644 --- a/lib/handle-messages.ts +++ b/lib/handle-messages.ts @@ -4,6 +4,7 @@ import type { } from "@slack/web-api"; import { client, getThread, updateStatusUtil } from "./slack-utils"; import { generateResponse } from "./generate-response"; +import { WebhookChatMessage } from "@/types"; export async function assistantThreadMessage( event: AssistantThreadStartedEvent, @@ -13,9 +14,9 @@ export async function assistantThreadMessage( console.log(JSON.stringify(event)); await client.postMessage({ - channel_id: channel_id, + channel_id: channel_id as any, // thread_ts: thread_ts, - text: "Hello, I'm an AI assistant built with the AI SDK by Vercel!", + message: "Hello, I'm an AI assistant built with the AI SDK by Vercel!", }); // await client.assistant.threads.setSuggestedPrompts({ @@ -35,26 +36,25 @@ export async function assistantThreadMessage( } export async function handleNewAssistantMessage( - event: GenericMessageEvent, - botUserId: string, + event: WebhookChatMessage, + botUserId: number, ) { + console.log(event) if ( - event.bot_id || - event.bot_id === botUserId || - event.bot_profile || - !event.thread_ts + event.message.user.id === botUserId ) return; - const { thread_ts, channel } = event; - const updateStatus = updateStatusUtil(channel, thread_ts); + const { channel } = event; + + const updateStatus = updateStatusUtil(channel.id); await updateStatus("is thinking..."); - const messages = await getThread(channel, thread_ts, botUserId); + const messages = await getThread(channel.id, botUserId); const result = await generateResponse(messages, updateStatus); await client.postMessage({ - channel_id: channel, + channel_id: channel.id, // thread_ts: thread_ts, message: result, // unfurl_links: false, diff --git a/lib/slack-utils.ts b/lib/slack-utils.ts index bf53dbc..222917f 100644 --- a/lib/slack-utils.ts +++ b/lib/slack-utils.ts @@ -43,21 +43,19 @@ export function isValidDiscourseRequest({ } export const verifyRequest = async ({ - requestType, request, rawBody, }: { - requestType: string; request: Request; rawBody: string; }) => { const validRequest = await isValidDiscourseRequest({ request, rawBody }); - if (!validRequest || requestType !== "event_callback") { + if (!validRequest) { return new Response("Invalid request", { status: 400 }); } }; -export const updateStatusUtil = (channel: string, thread_ts: string) => { +export const updateStatusUtil = (channel: number) => { return async (status: string) => { // await client.assistant.threads.setStatus({ // channel_id: channel, @@ -69,8 +67,8 @@ export const updateStatusUtil = (channel: string, thread_ts: string) => { export async function getThread( channel_id: number, - thread_ts: string, - botUserId: string, + // thread_ts: string, + botUserId: number, ): Promise { const { messages } = await client.getMessages({ channel_id, @@ -83,7 +81,9 @@ export async function getThread( const result = messages .map((message) => { - const isBot = message.user?.username === botUserId; + console.log(message.user) + // todo: use id + const isBot = message.user?.username === botUserId as any; if (!message.message) return null; // For app mentions, remove the mention prefix @@ -103,12 +103,14 @@ export async function getThread( return result; } -export const getBotId = async () => { +export const getBotId = async (): Promise => { // const { user_id: botUserId } = await client.auth.test(); - const botUserId = 'gpt'; + const session = await client.getSession(); + const id = session?.current_user?.id; - if (!botUserId) { + if (!id) { throw new Error("botUserId is undefined"); } - return botUserId; + + return id; }; diff --git a/package.json b/package.json index bfeafa2..2cc6ebd 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "@slack/web-api": "^7.0.2", "@vercel/functions": "^2.0.0", "ai": "^4.1.46", - "discourse2-chat": "^1.1.1", + "discourse2-chat": "^1.1.5", "exa-js": "^1.4.10", "zod": "^3.24.2" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1c0c266..fbba94c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,14 +21,11 @@ importers: specifier: ^4.1.46 version: 4.1.47(react@19.0.0)(zod@3.24.2) discourse2-chat: - specifier: ^1.1.1 - version: 1.1.1 + specifier: ^1.1.5 + version: 1.1.5 exa-js: specifier: ^1.4.10 version: 1.4.10 - vercel: - specifier: ^42.1.1 - version: 42.1.1 zod: specifier: ^3.24.2 version: 3.24.2 @@ -82,89 +79,10 @@ packages: zod: optional: true - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - - '@edge-runtime/format@2.2.1': - resolution: {integrity: sha512-JQTRVuiusQLNNLe2W9tnzBlV/GvSVcozLl4XZHk5swnRZ/v6jp8TqR8P7sqmJsQqblDZ3EztcWmLDbhRje/+8g==} - engines: {node: '>=16'} - - '@edge-runtime/node-utils@2.3.0': - resolution: {integrity: sha512-uUtx8BFoO1hNxtHjp3eqVPC/mWImGb2exOfGjMLUoipuWgjej+f4o/VP4bUI8U40gu7Teogd5VTeZUkGvJSPOQ==} - engines: {node: '>=16'} - - '@edge-runtime/ponyfill@2.4.2': - resolution: {integrity: sha512-oN17GjFr69chu6sDLvXxdhg0Qe8EZviGSuqzR9qOiKh4MhFYGdBBcqRNzdmYeAdeRzOW2mM9yil4RftUQ7sUOA==} - engines: {node: '>=16'} - - '@edge-runtime/primitives@4.1.0': - resolution: {integrity: sha512-Vw0lbJ2lvRUqc7/soqygUX216Xb8T3WBZ987oywz6aJqRxcwSVWwr9e+Nqo2m9bxobA9mdbWNNoRY6S9eko1EQ==} - engines: {node: '>=16'} - - '@edge-runtime/vm@3.2.0': - resolution: {integrity: sha512-0dEVyRLM/lG4gp1R/Ik5bfPl/1wX00xFwd5KcNH602tzBa09oF7pbTKETEhR1GjZ75K6OJnYFu8II2dyMhONMw==} - engines: {node: '>=16'} - - '@fastify/busboy@2.1.1': - resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} - engines: {node: '>=14'} - - '@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/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - - '@mapbox/node-pre-gyp@2.0.0': - resolution: {integrity: sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==} - engines: {node: '>=18'} - hasBin: true - - '@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'} - '@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'} - - '@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 - - '@sinclair/typebox@0.25.24': - resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} - '@slack/logger@4.0.0': resolution: {integrity: sha512-Wz7QYfPAlG/DR+DfABddUZeNgoeY7d1J39OCR2jR+v7VBsB8ezulDK5szTnDDPDwLH5IWhLvXIHlCFZV7MSKgA==} engines: {node: '>= 18', npm: '>= 8.6.0'} @@ -177,53 +95,15 @@ packages: resolution: {integrity: sha512-d4SdG+6UmGdzWw38a4sN3lF/nTEzsDxhzU13wm10ejOpPehtmRoqBKnPztQUfFiWbNvSb4czkWYJD4kt+5+Fuw==} engines: {node: '>= 18', npm: '>= 8.6.0'} - '@tootallnate/once@2.0.0': - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - - '@ts-morph/common@0.11.1': - resolution: {integrity: sha512-7hWZS0NRpEsNV8vWJzg7FEz6V8MaLNeJOmwmghqUXTpzk16V1LLZhdo+4QvE/+zv4cVci0OviuJFnqhEfoV3+g==} - - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@types/diff-match-patch@1.0.36': resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==} - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/node@16.18.11': - resolution: {integrity: sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==} - '@types/node@20.17.22': resolution: {integrity: sha512-9RV2zST+0s3EhfrMZIhrz2bhuhBwxgkbHEwP2gtGWPjBzVQjifMzJ9exw7aDZhR1wbpj8zBrfp3bo8oJcGiUUw==} '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - '@vercel/build-utils@10.5.1': - resolution: {integrity: sha512-BtqwEmU1AoITpd0KxYrdQOwyKZL8RKba+bWxI8mr3gXPQZWRAE9ok1zF0AXfvMGCstYPHBPNolZGDSfWmY2jqg==} - - '@vercel/error-utils@2.0.3': - resolution: {integrity: sha512-CqC01WZxbLUxoiVdh9B/poPbNpY9U+tO1N9oWHwTl5YAZxcqXmmWJ8KNMFItJCUUWdY3J3xv8LvAuQv2KZ5YdQ==} - - '@vercel/fun@1.1.6': - resolution: {integrity: sha512-xDiM+bD0fSZyzcjsAua3D+guXclvHOSTzr03UcZEQwYzIjwWjLduT7bl2gAaeNIe7fASAIZd0P00clcj0On4rQ==} - engines: {node: '>= 18'} - '@vercel/functions@2.0.0': resolution: {integrity: sha512-BSwIihLHoV18gerKZJyGuqd3rtaYM6rJvET1kOwKktshucyaHXTJel7Cxegs+sdX0NZqsX4LO2MFnMU2jG01Cw==} engines: {node: '>= 18'} @@ -233,69 +113,6 @@ packages: '@aws-sdk/credential-provider-web-identity': optional: true - '@vercel/gatsby-plugin-vercel-analytics@1.0.11': - resolution: {integrity: sha512-iTEA0vY6RBPuEzkwUTVzSHDATo1aF6bdLLspI68mQ/BTbi5UQEGjpjyzdKOVcSYApDtFU6M6vypZ1t4vIEnHvw==} - - '@vercel/gatsby-plugin-vercel-builder@2.0.81': - resolution: {integrity: sha512-nWzkA+bUzfysEUW3LdazbhydrnA17+Nhv/Ki6rlA+H5dDa4pBP6LeAh8kyKAsnH4beAlohCDbtmZ4OtK0HOGSg==} - - '@vercel/go@3.2.1': - resolution: {integrity: sha512-ezjmuUvLigH9V4egEaX0SZ+phILx8lb+Zkp1iTqKI+yl/ibPAtVo5o+dLSRAXU9U01LBmaLu3O8Oxd/JpWYCOw==} - - '@vercel/hydrogen@1.2.0': - resolution: {integrity: sha512-kdZp8cTVLoNmnu24wtoQPu9ZO+uB00zvDMTOXlQmNdq/V3k0mQa/Q5k2B8nliBQ3BMiBasoXxMKv59+F8rYvDw==} - - '@vercel/next@4.7.11': - resolution: {integrity: sha512-9qUrcxc9+LkoW+ffYnDalXi2KwZo4KAFv3dabdhOc5NGB6aN6kcgzISfrmTuNfLqRmG0CTtlaBl1VZs2PWhJ5g==} - - '@vercel/nft@0.29.2': - resolution: {integrity: sha512-A/Si4mrTkQqJ6EXJKv5EYCDQ3NL6nJXxG8VGXePsaiQigsomHYQC9xSpX8qGk7AEZk4b1ssbYIqJ0ISQQ7bfcA==} - engines: {node: '>=18'} - hasBin: true - - '@vercel/node@5.1.16': - resolution: {integrity: sha512-jz44zZDlDICAX2+JHs3ekTP1l9RJC5MkHRdkQiWvSgaNufoRxOo4nDkmFTiT53HeZCq+S2FYimn92n+prDh3QQ==} - - '@vercel/python@4.7.2': - resolution: {integrity: sha512-i2QBNMvNxUZQ2e5vLIL7mUkLg5Qkl9nqxUNXCYezdyvk2Ql6xYKjg7tMhpK/uiy094KfZSOECpDbDxkIN0jUSw==} - - '@vercel/redwood@2.3.1': - resolution: {integrity: sha512-CCu/lb+W58gfFdxrF1U41vvUdc2zEXiks0l01qXzbHOHQCWOC7NXWwtieeT/SLqG0K5pkR66q1TpLRtGHT0dYg==} - - '@vercel/remix-builder@5.4.7': - resolution: {integrity: sha512-pLJFAmeFtPvXVXdQU+yV2G4pflObvkqaGObcBl/5cLuhwyadhEGTxu4mWC+XOmU5ppbdNiHzywBPMiBwAQc+mg==} - - '@vercel/ruby@2.2.0': - resolution: {integrity: sha512-FJF9gKVNHAljGOgV6zS5ou2N7ZgjOqMMtcPA5lsJEUI5/AZzVDWCmtcowTP80wEtHuupkd7d7M399FA082kXYQ==} - - '@vercel/static-build@2.7.7': - resolution: {integrity: sha512-/WM1P/6suLgwiLlrUfjg47xSfgzNruHri/ECJ+xe73h35gwqi0ZQlb0Fl74VoRm7P6+8/rNz/3FLBTqJDziHcA==} - - '@vercel/static-config@3.0.0': - resolution: {integrity: sha512-2qtvcBJ1bGY0dYGYh3iM7yGKkk971FujLEDXzuW5wcZsPr1GSEjO/w2iSr3qve6nDDtBImsGoDEnus5FI4+fIw==} - - abbrev@3.0.1: - resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} - engines: {node: ^18.17.0 || >=20.5.0} - - acorn-import-attributes@1.9.5: - resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} - peerDependencies: - acorn: ^8 - - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} - - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} - engines: {node: '>=0.4.0'} - hasBin: true - - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} - engines: {node: '>= 14'} - ai@4.1.47: resolution: {integrity: sha512-9UZ8Mkv1HlprCJfQ0Kq+rgKbfkrkDtJjslr1WOHBRzvC70jDJJYp8r0Qq4vlF7zs9VBkGyy8Rhm5zQJJIUjvgw==} engines: {node: '>=18'} @@ -324,77 +141,12 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - ajv@8.6.3: - resolution: {integrity: sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==} - - 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@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - arg@4.1.0: - resolution: {integrity: sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==} - - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - - async-listen@1.2.0: - resolution: {integrity: sha512-CcEtRh/oc9Jc4uWeUwdpG/+Mb2YUHKmdaTf0gUr7Wa+bfp4xx70HOb3RuSTJMvqKNB1TkdTfjLdrcz2X4rkkZA==} - - async-listen@3.0.0: - resolution: {integrity: sha512-V+SsTpDqkrWTimiotsyl33ePSjA5/KrithwupuvJ6ztsqPvGv6ge4OredFhPffVXiLN/QUWvE0XcqJaYgt6fOg==} - engines: {node: '>= 14'} - - async-listen@3.0.1: - resolution: {integrity: sha512-cWMaNwUJnf37C/S5TfCkk/15MwbPRwVYALA2jtjkbHjCmAPiDXyNJy2q3p1KAZzDLHAWyarUWSujUoHR4pEgrA==} - engines: {node: '>= 14'} - - async-sema@3.1.1: - resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} - asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} axios@1.8.1: resolution: {integrity: sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==} - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - - 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-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - - bytes@3.1.0: - resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==} - engines: {node: '>= 0.8'} - call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -403,103 +155,26 @@ packages: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chokidar@4.0.0: - resolution: {integrity: sha512-mxIojEAQcuEvT/lyXq+jf/3cO/KoA6z4CeNDGGevTybECPOMFCnQy3OPahluUkbqgPNGw5Bi78UC7Po6Lhy+NA==} - engines: {node: '>= 14.16.0'} - - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - - cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - - code-block-writer@10.1.1: - resolution: {integrity: sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - consola@3.4.2: - resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} - engines: {node: ^14.18.0 || >=16.10.0} - - content-type@1.0.4: - resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} - engines: {node: '>= 0.6'} - - convert-hrtime@3.0.0: - resolution: {integrity: sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA==} - engines: {node: '>=8'} - - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - cross-fetch@4.1.0: resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - 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'} - dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - detect-libc@2.0.4: - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} - engines: {node: '>=8'} - diff-match-patch@1.0.5: resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - - discourse2-chat@1.1.1: - resolution: {integrity: sha512-/LGKdE7k7E3E4BWZQCTeOtFuhZyzoZfC/7YUwC1Hw0fHqBVDf8t9oaljk4FHFuMLullYhR1CYT5sna0bTUbarw==} + discourse2-chat@1.1.5: + resolution: {integrity: sha512-VbyHRV6C6uyYc5PMbgNjTm0FTm1tb2jJh75wKB+51xC6zhbFoJ8QmxlYHRfuw0Ct9M1xTkwqW8g/176rbx3eSg==} dotenv@16.4.7: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} @@ -509,23 +184,6 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - edge-runtime@2.5.9: - resolution: {integrity: sha512-pk+k0oK0PVXdlT4oRp4lwh+unuKB7Ng4iZ2HB+EZ7QCEQizX360Rp/F4aRpgpRgdP2ufB35N+1KppHmYjqIGSg==} - engines: {node: '>=16'} - 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==} - - end-of-stream@1.1.0: - resolution: {integrity: sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -534,9 +192,6 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.4.1: - resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} - es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -545,147 +200,12 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - esbuild-android-64@0.14.47: - resolution: {integrity: sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - esbuild-android-arm64@0.14.47: - resolution: {integrity: sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - esbuild-darwin-64@0.14.47: - resolution: {integrity: sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - esbuild-darwin-arm64@0.14.47: - resolution: {integrity: sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - esbuild-freebsd-64@0.14.47: - resolution: {integrity: sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - esbuild-freebsd-arm64@0.14.47: - resolution: {integrity: sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - esbuild-linux-32@0.14.47: - resolution: {integrity: sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - esbuild-linux-64@0.14.47: - resolution: {integrity: sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - esbuild-linux-arm64@0.14.47: - resolution: {integrity: sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - esbuild-linux-arm@0.14.47: - resolution: {integrity: sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - esbuild-linux-mips64le@0.14.47: - resolution: {integrity: sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - esbuild-linux-ppc64le@0.14.47: - resolution: {integrity: sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - esbuild-linux-riscv64@0.14.47: - resolution: {integrity: sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - esbuild-linux-s390x@0.14.47: - resolution: {integrity: sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - esbuild-netbsd-64@0.14.47: - resolution: {integrity: sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - esbuild-openbsd-64@0.14.47: - resolution: {integrity: sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - esbuild-sunos-64@0.14.47: - resolution: {integrity: sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - esbuild-windows-32@0.14.47: - resolution: {integrity: sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - esbuild-windows-64@0.14.47: - resolution: {integrity: sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - esbuild-windows-arm64@0.14.47: - resolution: {integrity: sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - esbuild@0.14.47: - resolution: {integrity: sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==} - engines: {node: '>=12'} - hasBin: true - - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - events-intercept@2.0.0: - resolution: {integrity: sha512-blk1va0zol9QOrdZt0rFXo5KMkNPVSp92Eju/Qz8THwKWKRKeE0T8Br/1aW6+Edkyq9xHYgYxn2QtOnUKPUp+Q==} - eventsource-parser@3.0.0: resolution: {integrity: sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==} engines: {node: '>=18.0.0'} @@ -696,26 +216,9 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - - file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} @@ -725,29 +228,13 @@ packages: debug: optional: true - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - form-data@4.0.2: resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} engines: {node: '>= 6'} - fs-extra@11.1.0: - resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} - engines: {node: '>=14.14'} - - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - generic-pool@3.4.2: - resolution: {integrity: sha512-H7cUpwCQSiJmAHM4c/aFu6fUfrhWXW1ncyh8ftxEPMu6AiYkHw9K8br720TGPZJbk5eOH2bynjZD1yPvdDAmag==} - engines: {node: '>= 4'} - get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -756,21 +243,10 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - 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 - 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==} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -783,66 +259,13 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - http-errors@1.4.0: - resolution: {integrity: sha512-oLjPqve1tuOl5aRhv8GK5eHpqP1C9fb+Ol+XTLjKfLltE44zdDbEdjPSbU7Ch5rSNsVFqZn97SrMmZLdu1/YMw==} - engines: {node: '>= 0.6'} - - http-errors@1.7.3: - resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==} - engines: {node: '>= 0.6'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - - inherits@2.0.1: - resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - is-electron@2.2.2: resolution: {integrity: sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==} - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jose@5.9.6: - resolution: {integrity: sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==} - - json-schema-to-ts@1.6.4: - resolution: {integrity: sha512-pR4yQ9DHz6itqswtHCm26mw45FSNfQ9rEQjosaZErhn5J3J2sIViQiz8rDaezjKAhFGpmsoczYVBgGHzFw/stA==} - json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -854,36 +277,10 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - - 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'} - - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micro@9.3.5-canary.3: - resolution: {integrity: sha512-viYIo9PefV+w9dvoIBh1gI44Mvx1BOk67B4BpC2QK77qdY0xZF0Q+vWLt/BII6cLkIc8rLmSIcJaB/OrXXKe1g==} - engines: {node: '>= 8.0.0'} - hasBin: true - - 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'} @@ -892,79 +289,11 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - - minizlib@3.0.2: - resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} - engines: {node: '>= 18'} - - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - - mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - - ms@2.1.1: - resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - 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 - node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - - node-fetch@2.6.9: - resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -974,25 +303,9 @@ packages: encoding: optional: true - node-gyp-build@4.8.4: - resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} - hasBin: true - - nopt@8.1.0: - resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - - once@1.3.3: - resolution: {integrity: sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==} - openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} - os-paths@4.4.0: - resolution: {integrity: sha512-wrAwOeXp1RRMFfQY8Sy7VaGVmPocaLwSFOYCGKSyo8qmJ+/yaafCl5BCA1IQZWqFSRBrKDYFeR9d/VyQzfH/jg==} - engines: {node: '>= 6.0'} - p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} @@ -1009,325 +322,55 @@ packages: resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} engines: {node: '>=8'} - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - parse-ms@2.1.0: - resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} - engines: {node: '>=6'} - - path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-match@1.2.4: - resolution: {integrity: sha512-UWlehEdqu36jmh4h5CWJ7tARp1OEVKGHKm6+dg9qMq5RKUTV5WJrGgaZ3dN2m7WFAXDbjlHzvJvL/IUpy84Ktw==} - deprecated: This package is archived and no longer maintained. For support, visit https://github.com/expressjs/express/discussions - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - path-to-regexp@1.9.0: - resolution: {integrity: sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==} - - path-to-regexp@6.1.0: - resolution: {integrity: sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw==} - - path-to-regexp@6.3.0: - resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} - - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - - pretty-ms@7.0.1: - resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} - engines: {node: '>=10'} - - promisepipe@3.0.0: - resolution: {integrity: sha512-V6TbZDJ/ZswevgkDNpGt/YqNCiZP9ASfgU+p83uJE6NrGtvSGoOcHLiDCqkMs2+yg7F5qHdLV8d0aS8O26G/KA==} - proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - raw-body@2.4.1: - resolution: {integrity: sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==} - engines: {node: '>= 0.8'} - react@19.0.0: resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} engines: {node: '>=0.10.0'} - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - retry@0.13.1: 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'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - - setprototypeof@1.1.1: - resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - signal-exit@4.0.2: - resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} - engines: {node: '>=14'} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - stat-mode@0.3.0: - resolution: {integrity: sha512-QjMLR0A3WwFY2aZdV0okfFEJB5TRjkggXZjxP3A1RsWsNHNu3YPv8btmtc6iCFZ0Rul3FE93OYogvhOUClU+ng==} - - statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - - stream-to-array@2.3.0: - resolution: {integrity: sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==} - - stream-to-promise@2.2.0: - resolution: {integrity: sha512-HAGUASw8NT0k8JvIVutB2Y/9iBk7gpgEyAudXwNJmZERdMITGdajOa4VJfD/kNiA3TppQpTP4J+CtcHwdzKBAw==} - - 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'} - - 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'} - swr@2.3.2: resolution: {integrity: sha512-RosxFpiabojs75IwQ316DGoDRmOqtiAj0tg8wCcbEu4CiLZBs/a9QNtHV7TUfDXmmlgqij/NqzKq/eLelyv9xA==} peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} - - tar@7.4.3: - resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} - engines: {node: '>=18'} - throttleit@2.1.0: resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} engines: {node: '>=18'} - time-span@4.0.0: - resolution: {integrity: sha512-MyqZCTGLDZ77u4k+jqg4UlrzPTPZ49NDlaekU6uuFaJLzPIN1woaRXCbGeqOfxwc3Y37ZROGAJ614Rdv7Olt+g==} - engines: {node: '>=10'} - - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - toidentifier@1.0.0: - resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==} - engines: {node: '>=0.6'} - tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - - ts-morph@12.0.0: - resolution: {integrity: sha512-VHC8XgU2fFW7yO1f/b3mxKDje1vmyzFXHWzOYmKEkCEwcLjDtbdLgBQviqj4ZwP4MJkQtRo6Ha2I29lq/B+VxA==} - - ts-node@10.9.1: - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - - ts-toolbelt@6.15.5: - resolution: {integrity: sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==} - - typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - typescript@5.8.2: resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} hasBin: true - uid-promise@1.0.0: - resolution: {integrity: sha512-R8375j0qwXyIu/7R0tjdF06/sElHqbmdmWC9M2qQHpEVbvE4I5+38KJI7LUUmQMp7NVq4tKHiBMkT0NFM453Ig==} - undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - undici@5.28.4: - resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} - engines: {node: '>=14.0'} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - use-sync-external-store@1.4.0: resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - - vercel@42.1.1: - resolution: {integrity: sha512-PtZhiNWen2VzglXCHJpjFPAQ9kH9ETAM5hBfvzy0HtWqlId07K5MVQdm8NKMYBOWj/297+/qYwhdKXsdPnnIHw==} - engines: {node: '>= 18'} - hasBin: true - - web-vitals@0.2.4: - resolution: {integrity: sha512-6BjspCO9VriYy12z356nL6JBS0GYeEcA457YyRzD+dD6XYCQ75NKhcOHUMHentOE7OcVCIXXDvOm0jKFfQG2Gg==} - webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - 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==} - - xdg-app-paths@5.1.0: - resolution: {integrity: sha512-RAQ3WkPf4KTU1A8RtFx3gWywzVKe00tfOPFfl2NDGqbIFENQO4kqAJp7mhQjNj/33W5x5hiWWUdyfPq/5SU3QA==} - engines: {node: '>=6'} - - xdg-portable@7.3.0: - resolution: {integrity: sha512-sqMMuL1rc0FmMBOzCpd0yuy9trqF2yTTVe+E9ogwCSWQCdDEtQUwrZPT6AxqtsFGRNxycgncbP/xmOOSPw5ZUw==} - engines: {node: '>= 6.0'} - - 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'} - - yauzl-clone@1.0.4: - resolution: {integrity: sha512-igM2RRCf3k8TvZoxR2oguuw4z1xasOnA31joCqHIyLkeWrvAc2Jgay5ISQ2ZplinkoGaJ6orCz56Ey456c5ESA==} - engines: {node: '>=6'} - - yauzl-promise@2.1.3: - resolution: {integrity: sha512-A1pf6fzh6eYkK0L4Qp7g9jzJSDrM6nN0bOn5T0IbY4Yo3w+YkWlHFkJP7mzknMXjqusHFHlKsK2N+4OLsK2MRA==} - engines: {node: '>=6'} - - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - zod-to-json-schema@3.24.3: resolution: {integrity: sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A==} peerDependencies: @@ -1375,84 +418,8 @@ snapshots: optionalDependencies: zod: 3.24.2 - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@edge-runtime/format@2.2.1': {} - - '@edge-runtime/node-utils@2.3.0': {} - - '@edge-runtime/ponyfill@2.4.2': {} - - '@edge-runtime/primitives@4.1.0': {} - - '@edge-runtime/vm@3.2.0': - dependencies: - '@edge-runtime/primitives': 4.1.0 - - '@fastify/busboy@2.1.1': {} - - '@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/resolve-uri@3.1.2': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@mapbox/node-pre-gyp@2.0.0': - dependencies: - consola: 3.4.2 - detect-libc: 2.0.4 - https-proxy-agent: 7.0.6 - node-fetch: 2.7.0 - nopt: 8.1.0 - semver: 7.7.2 - tar: 7.4.3 - transitivePeerDependencies: - - encoding - - supports-color - - '@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 - '@opentelemetry/api@1.9.0': {} - '@pkgjs/parseargs@0.11.0': - optional: true - - '@rollup/pluginutils@5.1.4': - dependencies: - '@types/estree': 1.0.7 - estree-walker: 2.0.2 - picomatch: 4.0.2 - - '@sinclair/typebox@0.25.24': {} - '@slack/logger@4.0.0': dependencies: '@types/node': 20.17.22 @@ -1476,198 +443,16 @@ snapshots: transitivePeerDependencies: - debug - '@tootallnate/once@2.0.0': {} - - '@ts-morph/common@0.11.1': - dependencies: - fast-glob: 3.3.3 - minimatch: 3.1.2 - mkdirp: 1.0.4 - path-browserify: 1.0.1 - - '@tsconfig/node10@1.0.11': {} - - '@tsconfig/node12@1.0.11': {} - - '@tsconfig/node14@1.0.3': {} - - '@tsconfig/node16@1.0.4': {} - '@types/diff-match-patch@1.0.36': {} - '@types/estree@1.0.7': {} - - '@types/json-schema@7.0.15': {} - - '@types/node@16.18.11': {} - '@types/node@20.17.22': dependencies: undici-types: 6.19.8 '@types/retry@0.12.0': {} - '@vercel/build-utils@10.5.1': {} - - '@vercel/error-utils@2.0.3': {} - - '@vercel/fun@1.1.6': - dependencies: - '@tootallnate/once': 2.0.0 - async-listen: 1.2.0 - debug: 4.3.4 - generic-pool: 3.4.2 - micro: 9.3.5-canary.3 - ms: 2.1.1 - node-fetch: 2.6.7 - path-match: 1.2.4 - promisepipe: 3.0.0 - semver: 7.5.4 - stat-mode: 0.3.0 - stream-to-promise: 2.2.0 - tar: 6.2.1 - tinyexec: 0.3.2 - tree-kill: 1.2.2 - uid-promise: 1.0.0 - xdg-app-paths: 5.1.0 - yauzl-promise: 2.1.3 - transitivePeerDependencies: - - encoding - - supports-color - '@vercel/functions@2.0.0': {} - '@vercel/gatsby-plugin-vercel-analytics@1.0.11': - dependencies: - web-vitals: 0.2.4 - - '@vercel/gatsby-plugin-vercel-builder@2.0.81': - dependencies: - '@sinclair/typebox': 0.25.24 - '@vercel/build-utils': 10.5.1 - esbuild: 0.14.47 - etag: 1.8.1 - fs-extra: 11.1.0 - - '@vercel/go@3.2.1': {} - - '@vercel/hydrogen@1.2.0': - dependencies: - '@vercel/static-config': 3.0.0 - ts-morph: 12.0.0 - - '@vercel/next@4.7.11': - dependencies: - '@vercel/nft': 0.29.2 - transitivePeerDependencies: - - encoding - - rollup - - supports-color - - '@vercel/nft@0.29.2': - dependencies: - '@mapbox/node-pre-gyp': 2.0.0 - '@rollup/pluginutils': 5.1.4 - 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 - - '@vercel/node@5.1.16': - dependencies: - '@edge-runtime/node-utils': 2.3.0 - '@edge-runtime/primitives': 4.1.0 - '@edge-runtime/vm': 3.2.0 - '@types/node': 16.18.11 - '@vercel/build-utils': 10.5.1 - '@vercel/error-utils': 2.0.3 - '@vercel/nft': 0.29.2 - '@vercel/static-config': 3.0.0 - async-listen: 3.0.0 - cjs-module-lexer: 1.2.3 - edge-runtime: 2.5.9 - es-module-lexer: 1.4.1 - esbuild: 0.14.47 - etag: 1.8.1 - node-fetch: 2.6.9 - path-to-regexp: 6.1.0 - path-to-regexp-updated: path-to-regexp@6.3.0 - ts-morph: 12.0.0 - ts-node: 10.9.1(@types/node@16.18.11)(typescript@4.9.5) - typescript: 4.9.5 - undici: 5.28.4 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - encoding - - rollup - - supports-color - - '@vercel/python@4.7.2': {} - - '@vercel/redwood@2.3.1': - dependencies: - '@vercel/nft': 0.29.2 - '@vercel/static-config': 3.0.0 - semver: 6.3.1 - ts-morph: 12.0.0 - transitivePeerDependencies: - - encoding - - rollup - - supports-color - - '@vercel/remix-builder@5.4.7': - dependencies: - '@vercel/error-utils': 2.0.3 - '@vercel/nft': 0.29.2 - '@vercel/static-config': 3.0.0 - path-to-regexp: 6.1.0 - path-to-regexp-updated: path-to-regexp@6.3.0 - ts-morph: 12.0.0 - transitivePeerDependencies: - - encoding - - rollup - - supports-color - - '@vercel/ruby@2.2.0': {} - - '@vercel/static-build@2.7.7': - dependencies: - '@vercel/gatsby-plugin-vercel-analytics': 1.0.11 - '@vercel/gatsby-plugin-vercel-builder': 2.0.81 - '@vercel/static-config': 3.0.0 - ts-morph: 12.0.0 - - '@vercel/static-config@3.0.0': - dependencies: - ajv: 8.6.3 - json-schema-to-ts: 1.6.4 - ts-morph: 12.0.0 - - abbrev@3.0.1: {} - - acorn-import-attributes@1.9.5(acorn@8.14.1): - dependencies: - acorn: 8.14.1 - - acorn-walk@8.3.4: - dependencies: - acorn: 8.14.1 - - acorn@8.14.1: {} - - agent-base@7.1.3: {} - ai@4.1.47(react@19.0.0)(zod@3.24.2): dependencies: '@ai-sdk/provider': 1.0.9 @@ -1695,37 +480,6 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - ajv@8.6.3: - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - - ansi-regex@5.0.1: {} - - ansi-regex@6.1.0: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@6.2.1: {} - - any-promise@1.3.0: {} - - arg@4.1.0: {} - - arg@4.1.3: {} - - async-listen@1.2.0: {} - - async-listen@3.0.0: {} - - async-listen@3.0.1: {} - - async-sema@3.1.1: {} - asynckit@0.4.0: {} axios@1.8.1: @@ -1736,29 +490,6 @@ snapshots: transitivePeerDependencies: - debug - balanced-match@1.0.2: {} - - bindings@1.5.0: - dependencies: - file-uri-to-path: 1.0.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 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - buffer-crc32@0.2.13: {} - - bytes@3.1.0: {} - call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -1766,71 +497,23 @@ snapshots: chalk@5.4.1: {} - chokidar@4.0.0: - dependencies: - readdirp: 4.1.2 - - chownr@2.0.0: {} - - chownr@3.0.0: {} - - cjs-module-lexer@1.2.3: {} - - code-block-writer@10.1.1: {} - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - concat-map@0.0.1: {} - - consola@3.4.2: {} - - content-type@1.0.4: {} - - convert-hrtime@3.0.0: {} - - create-require@1.1.1: {} - cross-fetch@4.1.0: dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - debug@4.3.4: - dependencies: - ms: 2.1.2 - - debug@4.4.1: - dependencies: - ms: 2.1.3 - delayed-stream@1.0.0: {} - depd@1.1.2: {} - dequal@2.0.3: {} - detect-libc@2.0.4: {} - diff-match-patch@1.0.5: {} - diff@4.0.2: {} - - discourse2-chat@1.1.1: + discourse2-chat@1.1.5: dependencies: ajv: 8.17.1 ajv-errors: 3.0.0(ajv@8.17.1) @@ -1845,34 +528,10 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - eastasianwidth@0.2.0: {} - - edge-runtime@2.5.9: - dependencies: - '@edge-runtime/format': 2.2.1 - '@edge-runtime/ponyfill': 2.4.2 - '@edge-runtime/vm': 3.2.0 - async-listen: 3.0.1 - mri: 1.2.0 - picocolors: 1.0.0 - pretty-ms: 7.0.1 - signal-exit: 4.0.2 - time-span: 4.0.0 - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - end-of-stream@1.1.0: - dependencies: - once: 1.3.3 - es-define-property@1.0.1: {} es-errors@1.3.0: {} - es-module-lexer@1.4.1: {} - es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -1884,99 +543,10 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - esbuild-android-64@0.14.47: - optional: true - - esbuild-android-arm64@0.14.47: - optional: true - - esbuild-darwin-64@0.14.47: - optional: true - - esbuild-darwin-arm64@0.14.47: - optional: true - - esbuild-freebsd-64@0.14.47: - optional: true - - esbuild-freebsd-arm64@0.14.47: - optional: true - - esbuild-linux-32@0.14.47: - optional: true - - esbuild-linux-64@0.14.47: - optional: true - - esbuild-linux-arm64@0.14.47: - optional: true - - esbuild-linux-arm@0.14.47: - optional: true - - esbuild-linux-mips64le@0.14.47: - optional: true - - esbuild-linux-ppc64le@0.14.47: - optional: true - - esbuild-linux-riscv64@0.14.47: - optional: true - - esbuild-linux-s390x@0.14.47: - optional: true - - esbuild-netbsd-64@0.14.47: - optional: true - - esbuild-openbsd-64@0.14.47: - optional: true - - esbuild-sunos-64@0.14.47: - optional: true - - esbuild-windows-32@0.14.47: - optional: true - - esbuild-windows-64@0.14.47: - optional: true - - esbuild-windows-arm64@0.14.47: - optional: true - - esbuild@0.14.47: - optionalDependencies: - esbuild-android-64: 0.14.47 - esbuild-android-arm64: 0.14.47 - esbuild-darwin-64: 0.14.47 - esbuild-darwin-arm64: 0.14.47 - esbuild-freebsd-64: 0.14.47 - esbuild-freebsd-arm64: 0.14.47 - esbuild-linux-32: 0.14.47 - esbuild-linux-64: 0.14.47 - esbuild-linux-arm: 0.14.47 - esbuild-linux-arm64: 0.14.47 - esbuild-linux-mips64le: 0.14.47 - esbuild-linux-ppc64le: 0.14.47 - esbuild-linux-riscv64: 0.14.47 - esbuild-linux-s390x: 0.14.47 - esbuild-netbsd-64: 0.14.47 - esbuild-openbsd-64: 0.14.47 - esbuild-sunos-64: 0.14.47 - esbuild-windows-32: 0.14.47 - esbuild-windows-64: 0.14.47 - esbuild-windows-arm64: 0.14.47 - - estree-walker@2.0.2: {} - - etag@1.8.1: {} - eventemitter3@4.0.7: {} eventemitter3@5.0.1: {} - events-intercept@2.0.0: {} - eventsource-parser@3.0.0: {} exa-js@1.4.10: @@ -1988,37 +558,10 @@ snapshots: fast-deep-equal@3.1.3: {} - 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-uri@3.0.6: {} - fastq@1.19.1: - dependencies: - reusify: 1.1.0 - - fd-slicer@1.1.0: - dependencies: - pend: 1.2.0 - - file-uri-to-path@1.0.0: {} - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - follow-redirects@1.15.9: {} - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - form-data@4.0.2: dependencies: asynckit: 0.4.0 @@ -2026,20 +569,8 @@ snapshots: es-set-tostringtag: 2.1.0 mime-types: 2.1.35 - fs-extra@11.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 - function-bind@1.1.2: {} - generic-pool@3.4.2: {} - get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -2058,23 +589,8 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - 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 - gopd@1.2.0: {} - graceful-fs@4.2.11: {} - has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -2085,65 +601,10 @@ snapshots: dependencies: function-bind: 1.1.2 - http-errors@1.4.0: - dependencies: - inherits: 2.0.1 - statuses: 1.5.0 - - http-errors@1.7.3: - dependencies: - depd: 1.1.2 - inherits: 2.0.4 - setprototypeof: 1.1.1 - statuses: 1.5.0 - toidentifier: 1.0.0 - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.3 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - - iconv-lite@0.4.24: - dependencies: - safer-buffer: 2.1.2 - - inherits@2.0.1: {} - - inherits@2.0.4: {} - is-electron@2.2.2: {} - is-extglob@2.1.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-number@7.0.0: {} - is-stream@2.0.1: {} - isarray@0.0.1: {} - - isexe@2.0.0: {} - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jose@5.9.6: {} - - json-schema-to-ts@1.6.4: - dependencies: - '@types/json-schema': 7.0.15 - ts-toolbelt: 6.15.5 - json-schema-traverse@1.0.0: {} json-schema@0.4.0: {} @@ -2154,106 +615,22 @@ snapshots: chalk: 5.4.1 diff-match-patch: 1.0.5 - jsonfile@6.1.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - - lru-cache@10.4.3: {} - - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - make-error@1.3.6: {} - math-intrinsics@1.1.0: {} - merge2@1.4.1: {} - - micro@9.3.5-canary.3: - dependencies: - arg: 4.1.0 - content-type: 1.0.4 - raw-body: 2.4.1 - - 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 - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.1 - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@5.0.0: {} - - minipass@7.1.2: {} - - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - - minizlib@3.0.2: - dependencies: - minipass: 7.1.2 - - mkdirp@1.0.4: {} - - mkdirp@3.0.1: {} - - mri@1.2.0: {} - - ms@2.1.1: {} - - ms@2.1.2: {} - - ms@2.1.3: {} - nanoid@3.3.8: {} - node-fetch@2.6.7: - dependencies: - whatwg-url: 5.0.0 - - node-fetch@2.6.9: - dependencies: - whatwg-url: 5.0.0 - node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - node-gyp-build@4.8.4: {} - - nopt@8.1.0: - dependencies: - abbrev: 3.0.1 - - once@1.3.3: - dependencies: - wrappy: 1.0.2 - openapi-types@12.1.3: {} - os-paths@4.4.0: {} - p-finally@1.0.0: {} p-queue@6.6.2: @@ -2270,250 +647,34 @@ snapshots: dependencies: p-finally: 1.0.0 - package-json-from-dist@1.0.1: {} - - parse-ms@2.1.0: {} - - path-browserify@1.0.1: {} - - path-key@3.1.1: {} - - path-match@1.2.4: - dependencies: - http-errors: 1.4.0 - path-to-regexp: 1.9.0 - - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - path-to-regexp@1.9.0: - dependencies: - isarray: 0.0.1 - - path-to-regexp@6.1.0: {} - - path-to-regexp@6.3.0: {} - - pend@1.2.0: {} - - picocolors@1.0.0: {} - - picomatch@2.3.1: {} - - picomatch@4.0.2: {} - - pretty-ms@7.0.1: - dependencies: - parse-ms: 2.1.0 - - promisepipe@3.0.0: {} - proxy-from-env@1.1.0: {} - punycode@2.3.1: {} - - queue-microtask@1.2.3: {} - - raw-body@2.4.1: - dependencies: - bytes: 3.1.0 - http-errors: 1.7.3 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - react@19.0.0: {} - readdirp@4.1.2: {} - require-from-string@2.0.2: {} - resolve-from@5.0.0: {} - retry@0.13.1: {} - reusify@1.1.0: {} - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - safer-buffer@2.1.2: {} - secure-json-parse@2.7.0: {} - semver@6.3.1: {} - - semver@7.5.4: - dependencies: - lru-cache: 6.0.0 - - semver@7.7.2: {} - - setprototypeof@1.1.1: {} - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - signal-exit@4.0.2: {} - - signal-exit@4.1.0: {} - - stat-mode@0.3.0: {} - - statuses@1.5.0: {} - - stream-to-array@2.3.0: - dependencies: - any-promise: 1.3.0 - - stream-to-promise@2.2.0: - dependencies: - any-promise: 1.3.0 - end-of-stream: 1.1.0 - stream-to-array: 2.3.0 - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.1.0 - swr@2.3.2(react@19.0.0): dependencies: dequal: 2.0.3 react: 19.0.0 use-sync-external-store: 1.4.0(react@19.0.0) - tar@6.2.1: - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - - tar@7.4.3: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.0.2 - mkdirp: 3.0.1 - yallist: 5.0.0 - throttleit@2.1.0: {} - time-span@4.0.0: - dependencies: - convert-hrtime: 3.0.0 - - tinyexec@0.3.2: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - toidentifier@1.0.0: {} - tr46@0.0.3: {} - tree-kill@1.2.2: {} - - ts-morph@12.0.0: - dependencies: - '@ts-morph/common': 0.11.1 - code-block-writer: 10.1.1 - - ts-node@10.9.1(@types/node@16.18.11)(typescript@4.9.5): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 16.18.11 - acorn: 8.14.1 - acorn-walk: 8.3.4 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 4.9.5 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - - ts-toolbelt@6.15.5: {} - - typescript@4.9.5: {} - typescript@5.8.2: {} - uid-promise@1.0.0: {} - undici-types@6.19.8: {} - undici@5.28.4: - dependencies: - '@fastify/busboy': 2.1.1 - - universalify@2.0.1: {} - - unpipe@1.0.0: {} - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - use-sync-external-store@1.4.0(react@19.0.0): dependencies: react: 19.0.0 - v8-compile-cache-lib@3.0.1: {} - - vercel@42.1.1: - dependencies: - '@vercel/build-utils': 10.5.1 - '@vercel/fun': 1.1.6 - '@vercel/go': 3.2.1 - '@vercel/hydrogen': 1.2.0 - '@vercel/next': 4.7.11 - '@vercel/node': 5.1.16 - '@vercel/python': 4.7.2 - '@vercel/redwood': 2.3.1 - '@vercel/remix-builder': 5.4.7 - '@vercel/ruby': 2.2.0 - '@vercel/static-build': 2.7.7 - chokidar: 4.0.0 - jose: 5.9.6 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - encoding - - rollup - - supports-color - - web-vitals@0.2.4: {} - webidl-conversions@3.0.1: {} whatwg-url@5.0.0: @@ -2521,52 +682,6 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 - 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: {} - - xdg-app-paths@5.1.0: - dependencies: - xdg-portable: 7.3.0 - - xdg-portable@7.3.0: - dependencies: - os-paths: 4.4.0 - - yallist@4.0.0: {} - - yallist@5.0.0: {} - - yauzl-clone@1.0.4: - dependencies: - events-intercept: 2.0.0 - - yauzl-promise@2.1.3: - dependencies: - yauzl: 2.10.0 - yauzl-clone: 1.0.4 - - yauzl@2.10.0: - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - - yn@3.1.1: {} - zod-to-json-schema@3.24.3(zod@3.24.2): dependencies: zod: 3.24.2 diff --git a/tsconfig.json b/tsconfig.json index a6c6918..6d45f4e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,6 +7,9 @@ "forceConsistentCasingInFileNames": true, "skipLibCheck": true, "outDir": "./dist", + "paths": { + "@/*": ["./*"] + } }, "exclude": [ "node_modules", diff --git a/types/chat.ts b/types/chat.ts new file mode 100644 index 0000000..7ea314d --- /dev/null +++ b/types/chat.ts @@ -0,0 +1,25 @@ +import { Uploads } from "./discourse"; + +export interface BasicChatMessage { + id: number; + message: string; + cooked: string; + created_at: string; + edited?: boolean; + excerpt: string; + deleted_at?: null | string; + deleted_by_id?: null | number; + thread_id?: null | number; + chat_channel_id: number; +} + +export type ChatMessageOptions = { + /** + * Reply to message id + */ + in_reply_to_id?: number; + /** + * An array of uploads_ids + */ + uploads?: Uploads[] | { id: number }[] | number[]; +}; \ No newline at end of file diff --git a/types/discourse.ts b/types/discourse.ts new file mode 100644 index 0000000..2395936 --- /dev/null +++ b/types/discourse.ts @@ -0,0 +1,655 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/** + * The uploads from server + * + * @see createUpload + * *Example:* + * + * ```json + * { + * id: 2973, + * url: "https://discourse.example/uploads/default/original/2X/4/436ccd13b6e46397a792d51fbef445380b1cc1d3.jpeg", + * original_filename: "photo_2023-05-28_17-35-00.jpg", + * filesize: 122190, + * width: 640, + * height: 640, + * thumbnail_width: 500, + * thumbnail_height: 500, + * extension: jpeg, + * short_url: "upload://9Ct5W75p3SHRlq6I3TfD1OaFEdR.jpeg", + * short_path: "/uploads/short-url/9Ct5W75p3SHRlq6I3TfD1OaFEdR.jpeg", + * retain_hours: null, + * human_filesize: "119 KB", + * dominant_color: "67545B" + * } + * ``` + */ +export interface Uploads { + [propname: string]: unknown; + /** + * Uploads unique id + */ + id: number; + url: string; + original_filename: string; + filesize: number; + width?: number; + height?: number; + thumbnail_width?: number; + thumbnail_height?: number; + /** + * file extension + */ + extension: string; + short_url: string; + short_path: string; + retain_hours: number | null; + human_filesize: string; + dominant_color?: string | null; +} + +/** + * Post type + */ +export interface Post { + [propname: string]: unknown; + id: number; + name: string | null; + username: string; + avatar_template: string; + created_at: string; + raw?: string; + cooked: string; + post_number: number; + post_type: number; + updated_at: string; + reply_count: number; + reply_to_post_number: string | null; + quote_count: number; + incoming_link_count: number; + reads: number; + readers_count: number; + score: number; + yours: boolean; + topic_id: number; + topic_slug: string; + display_username: string | null; + primary_group_name: string | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + flair_group_id?: string | null; + version: number; + can_edit: boolean; + can_delete: boolean; + can_recover: boolean; + can_see_hidden_post?: boolean; + can_wiki: boolean; + user_title: string | null; + bookmarked: boolean; + actions_summary: unknown[]; + moderator: boolean; + admin: boolean; + staff: boolean; + user_id: number; + draft_sequence: number; + hidden: boolean; + trust_level: number; + deleted_at: string | null; + user_deleted: boolean; + edit_reason: string | null; + can_view_edit_history: boolean; + wiki: boolean; + reviewable_id: string | null; + reviewable_score_count: number; + reviewable_score_pending_count: number; + mentioned_users: unknown[]; +} + +export interface PostAction { + [propname: string]: unknown; + id: number; + count: number; + hidden: boolean; + can_act: boolean; +} + +export interface SuggestedTopic { + [propname: string]: unknown; + id: number; + title: string; + fancy_title: string; + slug: string; + posts_count: number; + reply_count: number; + highest_post_number: number; + image_url: string; + created_at: string; + last_posted_at: string; + bumped: boolean; + bumped_at: string; + archetype: string; + unseen: boolean; + pinned: boolean; + unpinned: string; + excerpt: string; + visible: boolean; + closed: boolean; + archived: boolean; + bookmarked: boolean; + liked: string; + tags: unknown[] | string[]; + tags_descriptions: unknown; + like_count: number; + views: number; + category_id: number; + featured_link: string; + posters: { + extras: string; + description: string; + user: { + id: number; + username: string; + name: string; + avatar_template: string; + }; + }[]; +} + +/** + * Topic + */ +export interface Topic extends BasicTopic { + [propname: string]: unknown; + post_stream: { + posts: Post[]; + stream: number[]; + }; + timeline_lookup: unknown[]; + suggested_topics: SuggestedTopic[]; + tags: unknown[] | string[]; + tags_descriptions: unknown; + id: number; + title: string; + fancy_title: string; + posts_count: number; + created_at: string; + views: number; + reply_count: number; + like_count: number; + last_posted_at: string; + visible: boolean; + closed: boolean; + archived: boolean; + has_summary: boolean; + archetype: string; + slug: string; + category_id: number; + word_count: number; + deleted_at: string; + user_id: number; + featured_link: string; + pinned_globally: boolean; + pinned_at: string; + pinned_until: string; + image_url: string; + slow_mode_seconds: number; + draft: string; + draft_key: string; + draft_sequence: number; + unpinned: string; + pinned: boolean; + current_post_number?: number; + highest_post_number: number; + deleted_by: string; + has_deleted: boolean; + actions_summary: PostAction[]; + chunk_size: number; + bookmarked: boolean; + bookmarks: unknown[]; + topic_timer: string; + message_bus_last_id: number; + participant_count: number; + show_read_indicator: boolean; + thumbnails: string; + slow_mode_enabled_until: string; + summarizable: boolean; + details: { + can_edit: boolean; + notification_level: number; + can_move_posts: boolean; + can_delete: boolean; + can_remove_allowed_users: boolean; + can_create_post: boolean; + can_reply_as_new_topic: boolean; + can_invite_to?: boolean; + can_invite_via_email?: boolean; + can_flag_topic?: boolean; + can_convert_topic: boolean; + can_review_topic: boolean; + can_close_topic: boolean; + can_archive_topic: boolean; + can_split_merge_topic: boolean; + can_edit_staff_notes: boolean; + can_toggle_topic_visibility: boolean; + can_pin_unpin_topic: boolean; + can_moderate_category: boolean; + can_remove_self_id: number; + participants?: (BasicUserExtendsFlair & { post_count: number })[]; + created_by: BasicUser; + last_poster: BasicUser; + }; +} + +export interface BasicUser { + [propname: string]: unknown; + id: number; + username: string; + name: string | null; + avatar_template: string; +} + +export interface BasicTopic { + [propname: string]: unknown; + id: number; + title: string; + fancy_title: string; + slug: string; + posts_count: number; +} + +export interface Notification { + [propname: string]: unknown; + id?: number; + user_id?: number; + notification_type?: number; + read?: boolean; + created_at?: string; + post_number?: string; + topic_id?: number; + fancy_title?: string; + slug?: string; + high_priority?: boolean; + data?: { + badge_id?: number; + badge_name?: string; + badge_slug?: string; + badge_title?: boolean; + username?: string; + }; +} +/** + * @see {@link https://docs.discourse.org/#tag/Notifications/operation/getNotifications} + */ +export interface Notifications { + [propname: string]: unknown; + notifications?: Notification[]; + total_rows_notifications?: number; + seen_notification_id?: number; + load_more_notifications?: string; +} + +/** + * User info by getting `/u/username.json` + * @see getUser + */ +export interface UserInfo { + [propname: string]: unknown; + user_badges: UserBadge[]; + badges?: BasicBadge[]; + badge_types?: BadgeType[]; + users?: BasicUserExtendsFlair[]; + topics?: BasicTopic[]; + user: User; +} + +/** + * User + */ +export interface User extends BasicUser { + [propname: string]: unknown; + id: number; + username: string; + name: string; + avatar_template: string; + /** + * Shows if you get yourself + */ + email?: string; + /** + * @todo Check the type + */ + secondary_emails?: unknown[]; + /** + * @todo Check the type + */ + unconfirmed_emails?: unknown[]; + last_posted_at: string | null; + last_seen_at: string | null; + created_at: string; + ignored: boolean; + muted: boolean; + can_ignore_user: boolean; + can_mute_user: boolean; + can_send_private_messages: boolean; + can_send_private_message_to_user: boolean; + trust_level: number; + /** + * if the user is a moderator + */ + moderator: boolean; + /** + * if the user is a admin + */ + admin: boolean; + title: string | null; + badge_count: number; + second_factor_backup_enabled?: boolean; + user_fields?: UserField; + custom_fields: UserCustomField; + /** + * User's reading time. Unit: seconds + */ + time_read: number; + /** + * User's recent reading time. Unit: seconds + */ + recent_time_read: number; + primary_group_id: number | null; + primary_group_name: string | null; + flair_group_id: number | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + featured_topic: string | null; + pending_posts_count?: number; + staged: boolean; + status?: UserStatus; + can_edit: boolean; + can_edit_username: boolean; + can_edit_email: boolean; + can_edit_name: boolean; + uploaded_avatar_id: number; + has_title_badges: boolean; + pending_count: number; + profile_view_count: number; + second_factor_enabled: boolean; + can_upload_profile_header: boolean; + can_upload_user_card_background: boolean; + post_count: number; + can_be_deleted: boolean; + can_delete_all_posts: boolean; + locale: string; + muted_category_ids: number[]; + regular_category_ids: number[]; + watched_tags: string[]; + watching_first_post_tags: string[]; + tracked_tags: string[]; + muted_tags: string[]; + tracked_category_ids: number[]; + watched_category_ids: number[]; + watched_first_post_category_ids: number[]; + system_avatar_upload_id: string | null; + system_avatar_template: string; + muted_usernames: string[]; + ignored_usernames: string[]; + allowed_pm_usernames: string[]; + mailing_list_posts_per_day: number; + can_change_bio: boolean; + can_change_location: boolean; + can_change_website: boolean; + can_change_tracking_preferences: boolean; + user_api_keys: UserApiKey[]; + user_auth_tokens: UserAuthToken[]; + user_notification_schedule: UserNotificationSchedule; + use_logo_small_as_avatar: boolean; + sidebar_tags?: UserSidebarTag[]; + sidebar_category_ids?: number[]; + display_sidebar_tags?: boolean; + can_chat_user?: boolean; + featured_user_badge_ids: number[]; + invited_by: string | null; + groups: Group[]; + group_users: GroupUser[]; + user_option: UserOption; + + bio_excerpt?: string; + website?: string; + website_name?: string; + location?: string; + card_background_upload_url?: string; + bio_raw?: string; + bio_cooked?: string; + gravatar_avatar_upload_id?: number; + gravatar_avatar_template?: string; + associated_accounts?: UserAssociatedAccount[]; + profile_background_upload_url: string; + custom_avatar_upload_id?: number; + custom_avatar_template?: string; +} + +export interface UserOption { + [propname: string]: unknown; + user_id: number; + mailing_list_mode: boolean; + mailing_list_mode_frequency: number; + email_digests: boolean; + email_level: number; + email_messages_level: number; + external_links_in_new_tab: boolean; + bookmark_auto_delete_preference?: number; + color_scheme_id: number | null; + dark_scheme_id: number | null; + dynamic_favicon: boolean; + enable_quoting: boolean; + enable_defer: boolean; + digest_after_minutes: number; + automatically_unpin_topics: boolean; + auto_track_topics_after_msecs: number; + notification_level_when_replying: number; + new_topic_duration_minutes: number; + email_previous_replies: number; + email_in_reply_to: boolean; + like_notification_frequency: number; + include_tl0_in_digests: boolean; + theme_ids: number[]; + theme_key_seq: number; + allow_private_messages: boolean; + enable_allowed_pm_users: boolean; + homepage_id: string | null; + hide_profile_and_presence: boolean; + text_size: string; + text_size_seq: number; + title_count_mode: string; + timezone: string | null; + skip_new_user_tips: boolean; + default_calendar?: string; + oldest_search_log_date?: string | null; + seen_popups?: unknown[] | null; + sidebar_link_to_filtered_list?: boolean; + sidebar_show_count_of_new_items?: boolean; + watched_precedence_over_muted?: boolean | null; + chat_enabled?: boolean; + only_chat_push_notifications?: boolean | null; + ignore_channel_wide_mention?: boolean | null; + chat_email_frequency?: string; + chat_header_indicator_preference?: string; + chat_separate_sidebar_mode?: string; +} + +export interface GroupUser { + [propname: string]: unknown; + group_id: number; + user_id: number; + notification_level: number; + owner?: boolean; +} + +export interface Group { + [propname: string]: unknown; + id: number; + automatic: boolean; + name: string; + display_name: string; + user_count: number; + mentionable_level: number; + messageable_level: number; + visibility_level: number; + primary_group: boolean; + title: string | null; + grant_trust_level: string | null; + incoming_email: string | null; + has_messages: boolean; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + bio_raw: string | null; + bio_cooked: string | null; + bio_excerpt: string | null; + public_admission: boolean; + public_exit: boolean; + allow_membership_requests: boolean; + full_name: string | null; + default_notification_level: number; + membership_request_template: string | null; + members_visibility_level: number; + can_see_members: boolean; + can_admin_group: boolean; + publish_read_state: boolean; + custom_fields?: unknown; +} + +export interface UserSidebarTag { + [propname: string]: unknown; + name: string; + description: void /* 未知类型 */; + pm_only: boolean; +} + +export interface UserNotificationSchedule { + [propname: string]: unknown; + id: number; + user_id: number; + enabled: boolean; + day_0_start_time: number; + day_0_end_time: number; + day_1_start_time: number; + day_1_end_time: number; + day_2_start_time: number; + day_2_end_time: number; + day_3_start_time: number; + day_3_end_time: number; + day_4_start_time: number; + day_4_end_time: number; + day_5_start_time: number; + day_5_end_time: number; + day_6_start_time: number; + day_6_end_time: number; +} + +export interface UserAuthToken { + [propname: string]: unknown; + id: number; + client_ip?: string; + location?: string; + browser?: string; + device?: string; + os?: string; + icon?: string; + created_at?: string; + seen_at?: string; + is_active?: boolean; +} + +export interface UserApiKey { + [propname: string]: unknown; + id: number; + application_name: string; + scopes: string[]; + created_at: string; + last_used_at: string | null; +} + +export interface UserAssociatedAccount { + [propname: string]: unknown; + name: string; + description: string; +} + +export interface UserStatus { + [propname: string]: unknown; + description: string; + emoji: string; + ends_at: string | null; + message_bus_last_id?: number; +} + +export type UserCustomField = Record; + +export type UserField = Record; + +export interface BasicUserExtendsFlair extends BasicUser { + [propname: string]: unknown; + id: number; + username: string; + name: string; + avatar_template: string; + primary_group_name?: string; + flair_name?: string; + flair_url?: string; + flair_bg_color?: string; + flair_color?: string; + flair_group_id?: number; + admin: boolean; + moderator: boolean; + trust_level: number; +} + +export interface BadgeType { + [propname: string]: unknown; + id: number; + name: string; + sort_order: number; +} + +export interface BasicBadge { + [propname: string]: unknown; + id: number; + name: string; + description: string; + grant_count: number; + allow_title: boolean; + multiple_grant: boolean; + icon: string; + image_url: string | null; + listable: boolean; + enabled: boolean; + badge_grouping_id: number; + system: boolean; + slug: string; + manually_grantable: boolean; + badge_type_id: number; + i18n_name?: string; +} + +export interface Badge extends BasicBadge { + [propname: string]: unknown; + query: string | null; + trigger: number | null; + target_posts: boolean; + auto_revoke: boolean; + show_posts: boolean; +} + +export interface UserBadge { + [propname: string]: unknown; + id: number; + granted_at: string; + created_at: string; + count: number; + badge_id: number; + user_id: number; + granted_by_id: number; +} \ No newline at end of file diff --git a/types/index.ts b/types/index.ts new file mode 100644 index 0000000..7b71d5b --- /dev/null +++ b/types/index.ts @@ -0,0 +1,2 @@ +export * from './webhook' +export * from './chat' \ No newline at end of file diff --git a/types/webhook.ts b/types/webhook.ts new file mode 100644 index 0000000..f06632d --- /dev/null +++ b/types/webhook.ts @@ -0,0 +1,160 @@ +import { BasicChatMessage } from "./chat"; +import { BasicUser, Uploads } from "./discourse"; + +export interface WebhookPost { + id: number; + name: string | null; + username: string; + avatar_template: string; + created_at: string; + cooked: string; + post_number: number; + post_type: number; + updated_at: string; + reply_count: number; + reply_to_post_number: number | null; + quote_count: number; + incoming_link_count: number; + reads: number; + score: number; + topic_id: number; + topic_slug: number; + topic_title: string; + category_id: number; + display_username: string; + primary_group_name: null | string; + flair_name: null | string; + flair_group_id: null | number; + version: number; + user_title: null | string; + bookmarked?: boolean; + raw: string; + moderator: boolean; + admin: boolean; + staff: boolean; + user_id: number; + hidden: boolean; + trust_level: 1; + deleted_at: null | string; + user_deleted: boolean; + edit_reason: null | string; + wiki: boolean; + reviewable_id: null | number; + reviewable_score_count: number; + reviewable_score_pending_count: number; + topic_posts_count: number; + topic_filtered_posts_count: number; + /** + * @todo Don't know if it's private message + */ + topic_archetype: "regular" | string; + category_slug: string; +} + +export interface WebhookNotification { + id: number + user_id?: number | null; + notification_type: number + read: boolean + created_at: string + post_number: number | null + topic_id: number | null + fancy_title?: string + slug: string | null + data: Record +} + +export interface WebhookChatMessage { + message: { + id: number; + message: string; + cooked: string; + created_at: string; + excerpt: string; + chat_channel_id: string; + deleted_at?: string; + deleted_by_id?: number; + mentioned_users: unknown[]; + available_flags: unknown[]; + user: { + id: number; + username: string; + name: string | null; + avatar_template: string; + moderator: boolean; + admin: boolean; + staff: boolean; + new_user: boolean; + primary_group_name?: string; + status?: { + description: string; + emoji: string; + ends_at: null | string; + message_bus_last_id?: number; + }; + }; + chat_webhook_event: null | unknown; + uploads: Uploads[]; + edited?: boolean; + in_reply_to?: { + id: number; + cooked: string; + excerpt: string; + user: BasicUser; + chat_webhook_event: null | unknown; + }; + }; + channel: { + id: number; + allow_channel_wide_mentions: boolean; + /** + * The Chatable associated with the chat channel + * @beta I don’t know if there will be `chatable` other than `"Category"`. + * @todo add other `chatable` s + */ + chatable: { + id: number; + name: string; + color: string | null; + text_color: string | null; + slug: string; + topic_count: number; + post_count: number; + position: number; + description: string; + description_text: string; + description_excerpt: string; + topic_url: string; + read_restricted: boolean; + permission: null | unknown; + notification_level: null | unknown; + topic_template: null | unknown; + has_children: null | unknown; + sort_order: null | unknown; + sort_ascending: null | unknown; + show_subcategory_list: boolean; + num_featured_topics: number; + default_view: null | unknown; + subcategory_list_style: string; + default_top_period: string; + default_list_filter: string; + minimum_required_tags: number; + navigate_to_first_post_after_read: boolean; + uploaded_logo: null | string; + uploaded_logo_dark: null | string; + uploaded_background: null | string; + }; + chatable_id: number; + chatable_type: "Category" | string; + chatable_url: string; + description: string; + title: string; + slug: string; + status: "open" | string; + memberships_count: number; + current_user_membership: unknown; + meta: unknown; + threading_enabled: false; + last_message: BasicChatMessage; + }; +} \ No newline at end of file From fb56b1641fda04ce7c200899fa40a80576fa4268 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Thu, 22 May 2025 11:23:12 +0000 Subject: [PATCH 04/50] ff --- lib/generate-response.ts | 9 ++- lib/handle-app-mention.ts | 1 - lib/slack-utils.ts | 1 - package.json | 5 +- pnpm-lock.yaml | 112 ++++++++++++++++++-------------------- 5 files changed, 65 insertions(+), 63 deletions(-) diff --git a/lib/generate-response.ts b/lib/generate-response.ts index 2ff2d4d..0f08010 100644 --- a/lib/generate-response.ts +++ b/lib/generate-response.ts @@ -2,13 +2,20 @@ import { openai } from "@ai-sdk/openai"; import { CoreMessage, generateText, tool } from "ai"; import { z } from "zod"; import { exa } from "./utils"; +import { createOpenAICompatible } from "@ai-sdk/openai-compatible"; + +const hackclub = createOpenAICompatible({ + name: "hackclub", + apiKey: process.env.HACKCLUB_API_KEY!, + baseURL: "https://ai.hackclub.com", +}); export const generateResponse = async ( messages: CoreMessage[], updateStatus?: (status: string) => void, ) => { const { text } = await generateText({ - model: openai("gpt-4o"), + model: hackclub("llama-3.3-70b-versatile"), system: `You are a Slack bot assistant Keep your responses concise and to the point. - Do not tag users. - Current date is: ${new Date().toISOString().split("T")[0]} diff --git a/lib/handle-app-mention.ts b/lib/handle-app-mention.ts index d9bf8ae..b0a1f0d 100644 --- a/lib/handle-app-mention.ts +++ b/lib/handle-app-mention.ts @@ -1,4 +1,3 @@ -import { AppMentionEvent } from "@slack/web-api"; import { client, getThread } from "./slack-utils"; import { generateResponse } from "./generate-response"; import { WebhookNotification } from "@/types"; diff --git a/lib/slack-utils.ts b/lib/slack-utils.ts index 222917f..4370103 100644 --- a/lib/slack-utils.ts +++ b/lib/slack-utils.ts @@ -1,4 +1,3 @@ -import { WebClient } from '@slack/web-api'; import { CoreMessage } from 'ai' import crypto from 'crypto' import DiscourseAPI from 'discourse2-chat'; diff --git a/package.json b/package.json index 2cc6ebd..e66182a 100644 --- a/package.json +++ b/package.json @@ -11,10 +11,11 @@ "author": "", "license": "ISC", "dependencies": { - "@ai-sdk/openai": "^1.1.14", + "@ai-sdk/openai": "^1.3.22", + "@ai-sdk/openai-compatible": "^0.2.14", "@slack/web-api": "^7.0.2", "@vercel/functions": "^2.0.0", - "ai": "^4.1.46", + "ai": "^4.3.16", "discourse2-chat": "^1.1.5", "exa-js": "^1.4.10", "zod": "^3.24.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fbba94c..87aa6b0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,11 @@ importers: .: dependencies: '@ai-sdk/openai': - specifier: ^1.1.14 - version: 1.1.15(zod@3.24.2) + specifier: ^1.3.22 + version: 1.3.22(zod@3.24.2) + '@ai-sdk/openai-compatible': + specifier: ^0.2.14 + version: 0.2.14(zod@3.24.2) '@slack/web-api': specifier: ^7.0.2 version: 7.8.0 @@ -18,8 +21,8 @@ importers: specifier: ^2.0.0 version: 2.0.0 ai: - specifier: ^4.1.46 - version: 4.1.47(react@19.0.0)(zod@3.24.2) + specifier: ^4.3.16 + version: 4.3.16(react@19.0.0)(zod@3.24.2) discourse2-chat: specifier: ^1.1.5 version: 1.1.5 @@ -39,45 +42,43 @@ importers: packages: - '@ai-sdk/openai@1.1.15': - resolution: {integrity: sha512-irGQx5lMrYI9gub7Sy2ZHu49D3Icf7OtfOu3X8fVKMONOyi54RTKRNjVZTewkfRNE44psTbZDO8j8qmPirOTNQ==} + '@ai-sdk/openai-compatible@0.2.14': + resolution: {integrity: sha512-icjObfMCHKSIbywijaoLdZ1nSnuRnWgMEMLgwoxPJgxsUHMx0aVORnsLUid4SPtdhHI3X2masrt6iaEQLvOSFw==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 - '@ai-sdk/provider-utils@2.1.10': - resolution: {integrity: sha512-4GZ8GHjOFxePFzkl3q42AU0DQOtTQ5w09vmaWUf/pKFXJPizlnzKSUkF0f+VkapIUfDugyMqPMT1ge8XQzVI7Q==} + '@ai-sdk/openai@1.3.22': + resolution: {integrity: sha512-QwA+2EkG0QyjVR+7h6FE7iOu2ivNqAVMm9UJZkVxxTk5OIq5fFJDTEI/zICEMuHImTTXR2JjsL6EirJ28Jc4cw==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 - peerDependenciesMeta: - zod: - optional: true - '@ai-sdk/provider@1.0.9': - resolution: {integrity: sha512-jie6ZJT2ZR0uVOVCDc9R2xCX5I/Dum/wEK28lx21PJx6ZnFAN9EzD2WsPhcDWfCgGx3OAZZ0GyM3CEobXpa9LA==} + '@ai-sdk/provider-utils@2.2.8': + resolution: {integrity: sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.23.8 + + '@ai-sdk/provider@1.1.3': + resolution: {integrity: sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==} engines: {node: '>=18'} - '@ai-sdk/react@1.1.19': - resolution: {integrity: sha512-zqSOWmJxpB45ZrwZ04+Q7Uo3xeGM0tva2eUYz2T4gv9Yk6MQAfOBA6+scsKg8CyIuUy4M4/C4pCY3eWQf7sfQg==} + '@ai-sdk/react@1.2.12': + resolution: {integrity: sha512-jK1IZZ22evPZoQW3vlkZ7wvjYGYF+tRBKXtrcolduIkQ/m/sOAVcVeVDUDvh1T91xCnWCdUGCPZg2avZ90mv3g==} engines: {node: '>=18'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.0.0 + zod: ^3.23.8 peerDependenciesMeta: - react: - optional: true zod: optional: true - '@ai-sdk/ui-utils@1.1.16': - resolution: {integrity: sha512-jfblR2yZVISmNK2zyNzJZFtkgX57WDAUQXcmn3XUBJyo8LFsADu+/vYMn5AOyBi9qJT0RBk11PEtIxIqvByw3Q==} + '@ai-sdk/ui-utils@1.2.11': + resolution: {integrity: sha512-3zcwCc8ezzFlwp3ZD15wAPjf2Au4s3vAbKsXQVyhxODHcmu0iyPO2Eua6D/vicq/AUm/BAo60r97O6HU+EI0+w==} engines: {node: '>=18'} peerDependencies: - zod: ^3.0.0 - peerDependenciesMeta: - zod: - optional: true + zod: ^3.23.8 '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} @@ -113,17 +114,15 @@ packages: '@aws-sdk/credential-provider-web-identity': optional: true - ai@4.1.47: - resolution: {integrity: sha512-9UZ8Mkv1HlprCJfQ0Kq+rgKbfkrkDtJjslr1WOHBRzvC70jDJJYp8r0Qq4vlF7zs9VBkGyy8Rhm5zQJJIUjvgw==} + ai@4.3.16: + resolution: {integrity: sha512-KUDwlThJ5tr2Vw0A1ZkbDKNME3wzWhuVfAOwIvFUzl1TPVDFAXDFTXio3p+jaKneB+dKNCvFFlolYmmgHttG1g==} engines: {node: '>=18'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.0.0 + zod: ^3.23.8 peerDependenciesMeta: react: optional: true - zod: - optional: true ajv-errors@3.0.0: resolution: {integrity: sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==} @@ -206,10 +205,6 @@ packages: eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - eventsource-parser@3.0.0: - resolution: {integrity: sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==} - engines: {node: '>=18.0.0'} - exa-js@1.4.10: resolution: {integrity: sha512-rffYWPU568gOiYmsHW3L5J6atoNfLJTrtAk/DAKyPuGtdDXrE9fsSfltP1X1pNVtLTsz8DIyhUHOXErueNLJrQ==} @@ -381,42 +376,45 @@ packages: snapshots: - '@ai-sdk/openai@1.1.15(zod@3.24.2)': + '@ai-sdk/openai-compatible@0.2.14(zod@3.24.2)': dependencies: - '@ai-sdk/provider': 1.0.9 - '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) + '@ai-sdk/provider': 1.1.3 + '@ai-sdk/provider-utils': 2.2.8(zod@3.24.2) zod: 3.24.2 - '@ai-sdk/provider-utils@2.1.10(zod@3.24.2)': + '@ai-sdk/openai@1.3.22(zod@3.24.2)': dependencies: - '@ai-sdk/provider': 1.0.9 - eventsource-parser: 3.0.0 + '@ai-sdk/provider': 1.1.3 + '@ai-sdk/provider-utils': 2.2.8(zod@3.24.2) + zod: 3.24.2 + + '@ai-sdk/provider-utils@2.2.8(zod@3.24.2)': + dependencies: + '@ai-sdk/provider': 1.1.3 nanoid: 3.3.8 secure-json-parse: 2.7.0 - optionalDependencies: zod: 3.24.2 - '@ai-sdk/provider@1.0.9': + '@ai-sdk/provider@1.1.3': dependencies: json-schema: 0.4.0 - '@ai-sdk/react@1.1.19(react@19.0.0)(zod@3.24.2)': + '@ai-sdk/react@1.2.12(react@19.0.0)(zod@3.24.2)': dependencies: - '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) - '@ai-sdk/ui-utils': 1.1.16(zod@3.24.2) + '@ai-sdk/provider-utils': 2.2.8(zod@3.24.2) + '@ai-sdk/ui-utils': 1.2.11(zod@3.24.2) + react: 19.0.0 swr: 2.3.2(react@19.0.0) throttleit: 2.1.0 optionalDependencies: - react: 19.0.0 zod: 3.24.2 - '@ai-sdk/ui-utils@1.1.16(zod@3.24.2)': + '@ai-sdk/ui-utils@1.2.11(zod@3.24.2)': dependencies: - '@ai-sdk/provider': 1.0.9 - '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) - zod-to-json-schema: 3.24.3(zod@3.24.2) - optionalDependencies: + '@ai-sdk/provider': 1.1.3 + '@ai-sdk/provider-utils': 2.2.8(zod@3.24.2) zod: 3.24.2 + zod-to-json-schema: 3.24.3(zod@3.24.2) '@opentelemetry/api@1.9.0': {} @@ -453,17 +451,17 @@ snapshots: '@vercel/functions@2.0.0': {} - ai@4.1.47(react@19.0.0)(zod@3.24.2): + ai@4.3.16(react@19.0.0)(zod@3.24.2): dependencies: - '@ai-sdk/provider': 1.0.9 - '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) - '@ai-sdk/react': 1.1.19(react@19.0.0)(zod@3.24.2) - '@ai-sdk/ui-utils': 1.1.16(zod@3.24.2) + '@ai-sdk/provider': 1.1.3 + '@ai-sdk/provider-utils': 2.2.8(zod@3.24.2) + '@ai-sdk/react': 1.2.12(react@19.0.0)(zod@3.24.2) + '@ai-sdk/ui-utils': 1.2.11(zod@3.24.2) '@opentelemetry/api': 1.9.0 jsondiffpatch: 0.6.0 + zod: 3.24.2 optionalDependencies: react: 19.0.0 - zod: 3.24.2 ajv-errors@3.0.0(ajv@8.17.1): dependencies: @@ -547,8 +545,6 @@ snapshots: eventemitter3@5.0.1: {} - eventsource-parser@3.0.0: {} - exa-js@1.4.10: dependencies: cross-fetch: 4.1.0 From 4b7b6454803ac2b1f102d4650521e6eb25f3c7ae Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Thu, 22 May 2025 11:43:08 +0000 Subject: [PATCH 05/50] f --- api/events.ts | 9 ++------- lib/handle-messages.ts | 1 - lib/slack-utils.ts | 7 +++---- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/api/events.ts b/api/events.ts index edc7bb5..c72f6c2 100644 --- a/api/events.ts +++ b/api/events.ts @@ -33,14 +33,9 @@ export async function POST(request: Request) { // } if ( - event.type === "chat_message" - // !event.subtype && - // event.channel_type === "im" && - // !event.bot_id && - // !event.bot_profile && - // event.bot_id !== botUserId + event.type === "chat_message" && + payload?.chat_message.message.user.id !== botUserId ) { - console.log('cmsg') waitUntil(handleNewAssistantMessage(payload?.chat_message as WebhookChatMessage, botUserId)); } diff --git a/lib/handle-messages.ts b/lib/handle-messages.ts index 43b3812..0420fa7 100644 --- a/lib/handle-messages.ts +++ b/lib/handle-messages.ts @@ -39,7 +39,6 @@ export async function handleNewAssistantMessage( event: WebhookChatMessage, botUserId: number, ) { - console.log(event) if ( event.message.user.id === botUserId ) diff --git a/lib/slack-utils.ts b/lib/slack-utils.ts index 4370103..3549129 100644 --- a/lib/slack-utils.ts +++ b/lib/slack-utils.ts @@ -80,13 +80,12 @@ export async function getThread( const result = messages .map((message) => { - console.log(message.user) - // todo: use id - const isBot = message.user?.username === botUserId as any; + // @ts-expect-error the types for this are broken + const isBot = message.user?.id === botUserId as any; if (!message.message) return null; // For app mentions, remove the mention prefix - // For IM messages, keep the full text + // For DM messages, keep the full text let content = message.message; if (!isBot && content.includes(`<@${botUserId}>`)) { content = content.replace(`<@${botUserId}> `, ""); From d9225371dd3203610d0f8d50c73fa8ca070d1ecb Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Thu, 22 May 2025 11:48:07 +0000 Subject: [PATCH 06/50] f --- lib/generate-response.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/generate-response.ts b/lib/generate-response.ts index 0f08010..23dd986 100644 --- a/lib/generate-response.ts +++ b/lib/generate-response.ts @@ -16,7 +16,7 @@ export const generateResponse = async ( ) => { const { text } = await generateText({ model: hackclub("llama-3.3-70b-versatile"), - system: `You are a Slack bot assistant Keep your responses concise and to the point. + system: `You are a Discourse bot assistant Keep your responses concise and to the point. - Do not tag users. - Current date is: ${new Date().toISOString().split("T")[0]} - Make sure to ALWAYS include sources in your final response if you use web search. Put sources inline if possible.`, From 1cdb1eb82e3feb1ff1917a51b9b529b1e04d10bb Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Thu, 22 May 2025 13:20:11 +0000 Subject: [PATCH 07/50] Refactor event handling and add configuration files for environment variables and providers --- api/events.ts | 1 - config.ts | 21 ++++++++++++++++++ env.ts | 46 +++++++++++++++++++++++++++++++++++++++ lib/ai/providers.ts | 30 +++++++++++++++++++++++++ lib/handle-app-mention.ts | 4 ++-- lib/handle-messages.ts | 21 ++---------------- lib/slack-utils.ts | 28 ++++++++++++++++++------ 7 files changed, 122 insertions(+), 29 deletions(-) create mode 100644 config.ts create mode 100644 env.ts create mode 100644 lib/ai/providers.ts diff --git a/api/events.ts b/api/events.ts index c72f6c2..b4fd2ec 100644 --- a/api/events.ts +++ b/api/events.ts @@ -1,4 +1,3 @@ -import type { AppMentionEvent, SlackEvent } from "@slack/web-api"; import { assistantThreadMessage, handleNewAssistantMessage, diff --git a/config.ts b/config.ts new file mode 100644 index 0000000..c2b0b92 --- /dev/null +++ b/config.ts @@ -0,0 +1,21 @@ +export const keywords = ["zenix", "zenith", "ai", "bot"]; +export const country = "Greece"; +export const city = "Athens"; +export const timezone = "Europe/Athens"; + +export const speed = { + minDelay: 5, + maxDelay: 15, + speedMethod: "divide", + speedFactor: 60, +}; + +// export const statuses = ["online", "idle", "dnd", "offline"]; +// export const statuses = [ +// { type: ActivityType.Playing, name: "with humans 🤖" }, +// { type: ActivityType.Listening, name: "to conversations đź‘‚" }, +// { type: ActivityType.Watching, name: "the server đź‘€" }, +// { type: ActivityType.Competing, name: "in chatting đź’­" }, +// ] as const; + +export const messageThreshold = 10; diff --git a/env.ts b/env.ts new file mode 100644 index 0000000..27fd941 --- /dev/null +++ b/env.ts @@ -0,0 +1,46 @@ +import { createEnv } from "@t3-oss/env-core"; +import { z } from "zod"; + +export const env = createEnv({ + server: { + // Discord + DISCORD_TOKEN: z.string().min(1), + DISCORD_CLIENT_ID: z.string().min(1), + // AI + OPENAI_API_KEY: z.string().optional(), + HACKCLUB_API_KEY: z.string().optional(), + OPENROUTER_API_KEY: z.string().optional(), + // Logging + LOG_DIRECTORY: z.string().optional().default("logs"), + LOG_LEVEL: z + .enum(["debug", "info", "warn", "error"]) + .optional() + .default("info"), + // Redis + UPSTASH_REDIS_REST_URL: z.string().min(1).url(), + UPSTASH_REDIS_REST_TOKEN: z.string().min(1), + // Mem0 + MEM0_API_KEY: z.string().min(1).startsWith("m0-"), + }, + + /** + * What object holds the environment variables at runtime. This is usually + * `process.env` or `import.meta.env`. + */ + runtimeEnv: process.env, + + /** + * By default, this library will feed the environment variables directly to + * the Zod validator. + * + * This means that if you have an empty string for a value that is supposed + * to be a number (e.g. `PORT=` in a ".env" file), Zod will incorrectly flag + * it as a type mismatch violation. Additionally, if you have an empty string + * for a value that is supposed to be a string with a default value (e.g. + * `DOMAIN=` in an ".env" file), the default value will never be applied. + * + * In order to solve these issues, we recommend that all new projects + * explicitly specify this option as true. + */ + emptyStringAsUndefined: true, +}); diff --git a/lib/ai/providers.ts b/lib/ai/providers.ts new file mode 100644 index 0000000..abc01f3 --- /dev/null +++ b/lib/ai/providers.ts @@ -0,0 +1,30 @@ +import { + customProvider, + extractReasoningMiddleware, + wrapLanguageModel, +} from "ai"; + +import { createOpenRouter } from "@openrouter/ai-sdk-provider"; +import { createOpenAICompatible } from "@ai-sdk/openai-compatible"; +import { env } from "@/env"; +import { createMem0 } from "@mem0/vercel-ai-provider"; + +const hackclub = createOpenAICompatible({ + name: "hackclub", + apiKey: env.HACKCLUB_API_KEY, + baseURL: "https://ai.hackclub.com", +}); + +const openrouter = createOpenRouter({ + apiKey: env.OPENROUTER_API_KEY!, +}); + +export const myProvider = customProvider({ + languageModels: { + "chat-model": hackclub("llama-3.3-70b-versatile"), + "artifact-model": hackclub("llama-3.3-70b-versatile"), + }, + imageModels: { + // 'small-model': openai.image('dall-e-2'), + }, +}); diff --git a/lib/handle-app-mention.ts b/lib/handle-app-mention.ts index b0a1f0d..de7bdb1 100644 --- a/lib/handle-app-mention.ts +++ b/lib/handle-app-mention.ts @@ -12,13 +12,13 @@ const updateStatusUtil = async ( message: initialStatus, }); - if (!initialMessage || !initialMessage.id) + if (!initialMessage || !initialMessage.message_id) throw new Error("Failed to post initial message"); const updateMessage = async (status: string) => { await client.editMessage({ channel_id: event.data?.chat_channel_id as number, - message_id: initialMessage.id!, + message_id: initialMessage.message_id!, message: status, }); }; diff --git a/lib/handle-messages.ts b/lib/handle-messages.ts index 0420fa7..cf0e406 100644 --- a/lib/handle-messages.ts +++ b/lib/handle-messages.ts @@ -46,27 +46,10 @@ export async function handleNewAssistantMessage( const { channel } = event; - const updateStatus = updateStatusUtil(channel.id); - await updateStatus("is thinking..."); + const updateStatus = await updateStatusUtil("is thinking...", event); const messages = await getThread(channel.id, botUserId); const result = await generateResponse(messages, updateStatus); - await client.postMessage({ - channel_id: channel.id, - // thread_ts: thread_ts, - message: result, - // unfurl_links: false, - // blocks: [ - // { - // type: "section", - // text: { - // type: "mrkdwn", - // text: result, - // }, - // }, - // ], - }); - - await updateStatus(""); + await updateStatus(result); } diff --git a/lib/slack-utils.ts b/lib/slack-utils.ts index 3549129..968cd03 100644 --- a/lib/slack-utils.ts +++ b/lib/slack-utils.ts @@ -1,3 +1,4 @@ +import { WebhookChatMessage, WebhookNotification } from '@/types'; import { CoreMessage } from 'ai' import crypto from 'crypto' import DiscourseAPI from 'discourse2-chat'; @@ -54,14 +55,27 @@ export const verifyRequest = async ({ } }; -export const updateStatusUtil = (channel: number) => { - return async (status: string) => { - // await client.assistant.threads.setStatus({ - // channel_id: channel, - // thread_ts: thread_ts, - // status: status, - // }); +export const updateStatusUtil = async ( + initialStatus: string, + event: WebhookChatMessage, +) => { + const initialMessage = await client.postMessage({ + channel_id: event.channel?.id, + // thread_ts: event.thread_ts ?? event.ts, + message: initialStatus, + }); + + if (!initialMessage || !initialMessage.message_id) + throw new Error("Failed to post initial message"); + + const updateMessage = async (status: string) => { + await client.editMessage({ + channel_id: event.channel?.id, + message_id: initialMessage.message_id!, + message: status, + }); }; + return updateMessage; }; export async function getThread( From 324dcdc6356828d95cc7b7911098ee7943969623 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Thu, 22 May 2025 16:09:16 +0000 Subject: [PATCH 08/50] refactor: update TypeScript configuration and improve type imports - Removed unnecessary "paths" configuration from tsconfig.json. - Changed import statements in chat.ts and webhook.ts to use 'import type' for better clarity and performance. --- TODO.md | 7 + api/events.ts | 2 +- client/client.gen.ts | 16 + client/index.ts | 3 + client/sdk.gen.ts | 1539 +++ client/transformers.gen.ts | 15 + client/types.gen.ts | 5484 +++++++++++ client/zod.gen.ts | 4610 +++++++++ env.ts | 86 +- lib/ai/providers.ts | 52 +- lib/generate-response.ts | 4 +- lib/handle-app-mention.ts | 38 +- lib/handle-messages.ts | 15 +- lib/slack-utils.ts | 72 +- openapi-ts.config.ts | 28 + openapi.json | 17757 +++++++++++++++++++++++++++++++++++ package.json | 9 +- pnpm-lock.yaml | 2461 ++++- tsconfig.json | 5 +- types/chat.ts | 2 +- types/webhook.ts | 4 +- 21 files changed, 32075 insertions(+), 134 deletions(-) create mode 100644 TODO.md create mode 100644 client/client.gen.ts create mode 100644 client/index.ts create mode 100644 client/sdk.gen.ts create mode 100644 client/transformers.gen.ts create mode 100644 client/types.gen.ts create mode 100644 client/zod.gen.ts create mode 100644 openapi-ts.config.ts create mode 100644 openapi.json diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..8fd473c --- /dev/null +++ b/TODO.md @@ -0,0 +1,7 @@ +discourse-2 chat openapi is broken it doesn't have proper spec it thinks that in the const initialMessage = await client.postMessage({ + channel_id: event.channel?.id, + // thread_ts: event.thread_ts ?? event.ts, + message: initialStatus, + }); + +has a .message.id instead of a message_id \ No newline at end of file diff --git a/api/events.ts b/api/events.ts index b4fd2ec..4be6e02 100644 --- a/api/events.ts +++ b/api/events.ts @@ -5,7 +5,7 @@ import { import { waitUntil } from "@vercel/functions"; import { handleNewAppMention } from "../lib/handle-app-mention"; import { verifyRequest, getBotId } from "../lib/slack-utils"; -import type { WebhookChatMessage, WebhookNotification } from "@/types"; +import type { WebhookChatMessage, WebhookNotification } from "../types"; export async function POST(request: Request) { const rawBody = await request.text(); diff --git a/client/client.gen.ts b/client/client.gen.ts new file mode 100644 index 0000000..6759c1f --- /dev/null +++ b/client/client.gen.ts @@ -0,0 +1,16 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { ClientOptions } from './types.gen'; +import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from '@hey-api/client-fetch'; + +/** + * The `createClientConfig()` function will be called on client initialization + * and the returned object will become the client's initial configuration. + * + * You may want to initialize your client this way instead of calling + * `setConfig()`. This is useful for example if you're using Next.js + * to ensure your client always has the correct values. + */ +export type CreateClientConfig = (override?: Config) => Config & T>; + +export const client = createClient(createConfig()); \ No newline at end of file diff --git a/client/index.ts b/client/index.ts new file mode 100644 index 0000000..e64537d --- /dev/null +++ b/client/index.ts @@ -0,0 +1,3 @@ +// This file is auto-generated by @hey-api/openapi-ts +export * from './types.gen'; +export * from './sdk.gen'; \ No newline at end of file diff --git a/client/sdk.gen.ts b/client/sdk.gen.ts new file mode 100644 index 0000000..0f147c8 --- /dev/null +++ b/client/sdk.gen.ts @@ -0,0 +1,1539 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { type Options as ClientOptions, type TDataShape, type Client, formDataBodySerializer } from '@hey-api/client-fetch'; +import type { GetBackupsData, GetBackupsResponse, CreateBackupData, CreateBackupResponse, DownloadBackupData, SendDownloadBackupEmailData, AdminListBadgesData, AdminListBadgesResponse, CreateBadgeData, CreateBadgeResponse, DeleteBadgeData, UpdateBadgeData, UpdateBadgeResponse, ListCategoriesData, ListCategoriesResponse, CreateCategoryData, CreateCategoryResponse, UpdateCategoryData, UpdateCategoryResponse, ListCategoryTopicsData, ListCategoryTopicsResponse, GetCategoryData, GetCategoryResponse, CreateGroupData, CreateGroupResponse, DeleteGroupData, DeleteGroupResponse, GetGroupData, GetGroupResponse, UpdateGroupData, UpdateGroupResponse, RemoveGroupMembersData, RemoveGroupMembersResponse, ListGroupMembersData, ListGroupMembersResponse, AddGroupMembersData, AddGroupMembersResponse, ListGroupsData, ListGroupsResponse, CreateInviteData, CreateInviteResponse, CreateMultipleInvitesData, CreateMultipleInvitesResponse, GetNotificationsData, GetNotificationsResponse, MarkNotificationsAsReadData, MarkNotificationsAsReadResponse, ListPostsData, ListPostsResponse, CreateTopicPostPmData, CreateTopicPostPmResponse, DeletePostData, GetPostData, GetPostResponse, UpdatePostData, UpdatePostResponse, PostRepliesData, PostRepliesResponse, LockPostData, LockPostResponse, PerformPostActionData, PerformPostActionResponse, ListUserPrivateMessagesData, ListUserPrivateMessagesResponse, GetUserSentPrivateMessagesData, GetUserSentPrivateMessagesResponse, SearchData, SearchResponse, GetSiteData, GetSiteResponse, GetSiteBasicInfoData, GetSiteBasicInfoResponse, ListTagGroupsData, ListTagGroupsResponse, CreateTagGroupData, CreateTagGroupResponse, GetTagGroupData, GetTagGroupResponse, UpdateTagGroupData, UpdateTagGroupResponse, ListTagsData, ListTagsResponse, GetTagData, GetTagResponse, GetSpecificPostsFromTopicData, GetSpecificPostsFromTopicResponse, RemoveTopicData, GetTopicData, GetTopicResponse, UpdateTopicData, UpdateTopicResponse, InviteToTopicData, InviteToTopicResponse, InviteGroupToTopicData, InviteGroupToTopicResponse, BookmarkTopicData, UpdateTopicStatusData, UpdateTopicStatusResponse, ListLatestTopicsData, ListLatestTopicsResponse, ListTopTopicsData, ListTopTopicsResponse, SetNotificationLevelData, SetNotificationLevelResponse, UpdateTopicTimestampData, UpdateTopicTimestampResponse, CreateTopicTimerData, CreateTopicTimerResponse, GetTopicByExternalIdData, CreateUploadData, CreateUploadResponse, GeneratePresignedPutData, GeneratePresignedPutResponse, CompleteExternalUploadData, CompleteExternalUploadResponse, CreateMultipartUploadData, CreateMultipartUploadResponse, BatchPresignMultipartPartsData, BatchPresignMultipartPartsResponse, AbortMultipartData, AbortMultipartResponse, CompleteMultipartData, CompleteMultipartResponse, ListUserBadgesData, ListUserBadgesResponse, CreateUserData, CreateUserResponse, GetUserData, GetUserResponse, UpdateUserData, UpdateUserResponse, GetUserExternalIdData, GetUserExternalIdResponse, GetUserIdentiyProviderExternalIdData, GetUserIdentiyProviderExternalIdResponse, UpdateAvatarData, UpdateAvatarResponse, UpdateEmailData, UpdateUsernameData, ListUsersPublicData, ListUsersPublicResponse, DeleteUserData, DeleteUserResponse, AdminGetUserData, AdminGetUserResponse, ActivateUserData, ActivateUserResponse, DeactivateUserData, DeactivateUserResponse, SuspendUserData, SuspendUserResponse, SilenceUserData, SilenceUserResponse, AnonymizeUserData, AnonymizeUserResponse, LogOutUserData, LogOutUserResponse, RefreshGravatarData, RefreshGravatarResponse, AdminListUsersData, AdminListUsersResponse, ListUserActionsData, ListUserActionsResponse, SendPasswordResetEmailData, SendPasswordResetEmailResponse, ChangePasswordData, GetUserEmailsData, GetUserEmailsResponse, PostMessageData, PostMessageResponse, ReactToMessageData, ReactToMessageResponse, EditMessageData, GetMessagesData, GetMessagesResponse, GetChatChannelData, GetChatChannelResponse, GetUserInfoData, GetUserInfoResponse, GetSessionData, GetSessionResponse } from './types.gen'; +import { zGetBackupsResponse, zCreateBackupResponse, zAdminListBadgesResponse, zCreateBadgeResponse, zUpdateBadgeResponse, zListCategoriesResponse, zCreateCategoryResponse, zUpdateCategoryResponse, zListCategoryTopicsResponse, zGetCategoryResponse, zCreateGroupResponse, zDeleteGroupResponse, zGetGroupResponse, zUpdateGroupResponse, zRemoveGroupMembersResponse, zListGroupMembersResponse, zAddGroupMembersResponse, zListGroupsResponse, zCreateInviteResponse, zCreateMultipleInvitesResponse, zGetNotificationsResponse, zMarkNotificationsAsReadResponse, zListPostsResponse, zCreateTopicPostPmResponse, zGetPostResponse, zUpdatePostResponse, zPostRepliesResponse, zLockPostResponse, zPerformPostActionResponse, zListUserPrivateMessagesResponse, zGetUserSentPrivateMessagesResponse, zSearchResponse, zGetSiteResponse, zGetSiteBasicInfoResponse, zListTagGroupsResponse, zCreateTagGroupResponse, zGetTagGroupResponse, zUpdateTagGroupResponse, zListTagsResponse, zGetTagResponse, zGetSpecificPostsFromTopicResponse, zGetTopicResponse, zUpdateTopicResponse, zInviteToTopicResponse, zInviteGroupToTopicResponse, zUpdateTopicStatusResponse, zListLatestTopicsResponse, zListTopTopicsResponse, zSetNotificationLevelResponse, zUpdateTopicTimestampResponse, zCreateTopicTimerResponse, zCreateUploadResponse, zGeneratePresignedPutResponse, zCompleteExternalUploadResponse, zCreateMultipartUploadResponse, zBatchPresignMultipartPartsResponse, zAbortMultipartResponse, zCompleteMultipartResponse, zListUserBadgesResponse, zCreateUserResponse, zGetUserResponse, zUpdateUserResponse, zGetUserExternalIdResponse, zGetUserIdentiyProviderExternalIdResponse, zUpdateAvatarResponse, zListUsersPublicResponse, zDeleteUserResponse, zAdminGetUserResponse, zActivateUserResponse, zDeactivateUserResponse, zSuspendUserResponse, zSilenceUserResponse, zAnonymizeUserResponse, zLogOutUserResponse, zRefreshGravatarResponse, zAdminListUsersResponse, zListUserActionsResponse, zSendPasswordResetEmailResponse, zGetUserEmailsResponse, zPostMessageResponse, zReactToMessageResponse, zGetMessagesResponse, zGetChatChannelResponse, zGetUserInfoResponse, zGetSessionResponse } from './zod.gen'; +import { client as _heyApiClient } from './client.gen'; +import { getMessagesResponseTransformer } from './transformers.gen'; + +export type Options = ClientOptions & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record; +}; + +/** + * List backups + */ +export const getBackups = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zGetBackupsResponse.parseAsync(data); + }, + url: '/admin/backups.json', + ...options + }); +}; + +/** + * Create backup + */ +export const createBackup = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zCreateBackupResponse.parseAsync(data); + }, + url: '/admin/backups.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Download backup + */ +export const downloadBackup = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + url: '/admin/backups/{filename}', + ...options + }); +}; + +/** + * Send download backup email + */ +export const sendDownloadBackupEmail = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + url: '/admin/backups/{filename}', + ...options + }); +}; + +/** + * List badges + */ +export const adminListBadges = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zAdminListBadgesResponse.parseAsync(data); + }, + url: '/admin/badges.json', + ...options + }); +}; + +/** + * Create badge + */ +export const createBadge = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zCreateBadgeResponse.parseAsync(data); + }, + url: '/admin/badges.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Delete badge + */ +export const deleteBadge = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + url: '/admin/badges/{id}.json', + ...options + }); +}; + +/** + * Update badge + */ +export const updateBadge = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zUpdateBadgeResponse.parseAsync(data); + }, + url: '/admin/badges/{id}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Retrieves a list of categories + */ +export const listCategories = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zListCategoriesResponse.parseAsync(data); + }, + url: '/categories.json', + ...options + }); +}; + +/** + * Creates a category + */ +export const createCategory = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zCreateCategoryResponse.parseAsync(data); + }, + url: '/categories.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Updates a category + */ +export const updateCategory = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zUpdateCategoryResponse.parseAsync(data); + }, + url: '/categories/{id}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * List topics + */ +export const listCategoryTopics = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zListCategoryTopicsResponse.parseAsync(data); + }, + url: '/c/{slug}/{id}.json', + ...options + }); +}; + +/** + * Show category + */ +export const getCategory = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zGetCategoryResponse.parseAsync(data); + }, + url: '/c/{id}/show.json', + ...options + }); +}; + +/** + * Create a group + */ +export const createGroup = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zCreateGroupResponse.parseAsync(data); + }, + url: '/admin/groups.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Delete a group + */ +export const deleteGroup = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + responseValidator: async (data) => { + return await zDeleteGroupResponse.parseAsync(data); + }, + url: '/admin/groups/{id}.json', + ...options + }); +}; + +/** + * Get a group + */ +export const getGroup = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zGetGroupResponse.parseAsync(data); + }, + url: '/groups/{id}.json', + ...options + }); +}; + +/** + * Update a group + */ +export const updateGroup = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zUpdateGroupResponse.parseAsync(data); + }, + url: '/groups/{id}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Remove group members + */ +export const removeGroupMembers = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + responseValidator: async (data) => { + return await zRemoveGroupMembersResponse.parseAsync(data); + }, + url: '/groups/{id}/members.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * List group members + */ +export const listGroupMembers = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zListGroupMembersResponse.parseAsync(data); + }, + url: '/groups/{id}/members.json', + ...options + }); +}; + +/** + * Add group members + */ +export const addGroupMembers = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zAddGroupMembersResponse.parseAsync(data); + }, + url: '/groups/{id}/members.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * List groups + */ +export const listGroups = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zListGroupsResponse.parseAsync(data); + }, + url: '/groups.json', + ...options + }); +}; + +/** + * Create an invite + */ +export const createInvite = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zCreateInviteResponse.parseAsync(data); + }, + url: '/invites.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Create multiple invites + */ +export const createMultipleInvites = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zCreateMultipleInvitesResponse.parseAsync(data); + }, + url: '/invites/create-multiple.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Get the notifications that belong to the current user + */ +export const getNotifications = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zGetNotificationsResponse.parseAsync(data); + }, + url: '/notifications.json', + ...options + }); +}; + +/** + * Mark notifications as read + */ +export const markNotificationsAsRead = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zMarkNotificationsAsReadResponse.parseAsync(data); + }, + url: '/notifications/mark-read.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * List latest posts across topics + */ +export const listPosts = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zListPostsResponse.parseAsync(data); + }, + url: '/posts.json', + ...options + }); +}; + +/** + * Creates a new topic, a new post, or a private message + */ +export const createTopicPostPm = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zCreateTopicPostPmResponse.parseAsync(data); + }, + url: '/posts.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * delete a single post + */ +export const deletePost = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + url: '/posts/{id}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Retrieve a single post + * This endpoint can be used to get the number of likes on a post using the + * `actions_summary` property in the response. `actions_summary` responses + * with the id of `2` signify a `like`. If there are no `actions_summary` + * items with the id of `2`, that means there are 0 likes. Other ids likely + * refer to various different flag types. + * + */ +export const getPost = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zGetPostResponse.parseAsync(data); + }, + url: '/posts/{id}.json', + ...options + }); +}; + +/** + * Update a single post + */ +export const updatePost = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zUpdatePostResponse.parseAsync(data); + }, + url: '/posts/{id}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * List replies to a post + */ +export const postReplies = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zPostRepliesResponse.parseAsync(data); + }, + url: '/posts/{id}/replies.json', + ...options + }); +}; + +/** + * Lock a post from being edited + */ +export const lockPost = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zLockPostResponse.parseAsync(data); + }, + url: '/posts/{id}/locked.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Like a post and other actions + */ +export const performPostAction = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zPerformPostActionResponse.parseAsync(data); + }, + url: '/post_actions.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Get a list of private messages for a user + */ +export const listUserPrivateMessages = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zListUserPrivateMessagesResponse.parseAsync(data); + }, + url: '/topics/private-messages/{username}.json', + ...options + }); +}; + +/** + * Get a list of private messages sent for a user + */ +export const getUserSentPrivateMessages = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zGetUserSentPrivateMessagesResponse.parseAsync(data); + }, + url: '/topics/private-messages-sent/{username}.json', + ...options + }); +}; + +/** + * Search for a term + */ +export const search = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zSearchResponse.parseAsync(data); + }, + url: '/search.json', + ...options + }); +}; + +/** + * Get site info + * Can be used to fetch all categories and subcategories + */ +export const getSite = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zGetSiteResponse.parseAsync(data); + }, + url: '/site.json', + ...options + }); +}; + +/** + * Get site basic info + * Can be used to fetch basic info about a site + */ +export const getSiteBasicInfo = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zGetSiteBasicInfoResponse.parseAsync(data); + }, + url: '/site/basic-info.json', + ...options + }); +}; + +/** + * Get a list of tag groups + */ +export const listTagGroups = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zListTagGroupsResponse.parseAsync(data); + }, + url: '/tag_groups.json', + ...options + }); +}; + +/** + * Creates a tag group + */ +export const createTagGroup = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zCreateTagGroupResponse.parseAsync(data); + }, + url: '/tag_groups.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Get a single tag group + */ +export const getTagGroup = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zGetTagGroupResponse.parseAsync(data); + }, + url: '/tag_groups/{id}.json', + ...options + }); +}; + +/** + * Update tag group + */ +export const updateTagGroup = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zUpdateTagGroupResponse.parseAsync(data); + }, + url: '/tag_groups/{id}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Get a list of tags + */ +export const listTags = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zListTagsResponse.parseAsync(data); + }, + url: '/tags.json', + ...options + }); +}; + +/** + * Get a specific tag + */ +export const getTag = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zGetTagResponse.parseAsync(data); + }, + url: '/tag/{name}.json', + ...options + }); +}; + +/** + * Get specific posts from a topic + */ +export const getSpecificPostsFromTopic = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zGetSpecificPostsFromTopicResponse.parseAsync(data); + }, + url: '/t/{id}/posts.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Remove a topic + */ +export const removeTopic = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + url: '/t/{id}.json', + ...options + }); +}; + +/** + * Get a single topic + */ +export const getTopic = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zGetTopicResponse.parseAsync(data); + }, + url: '/t/{id}.json', + ...options + }); +}; + +/** + * Update a topic + */ +export const updateTopic = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zUpdateTopicResponse.parseAsync(data); + }, + url: '/t/-/{id}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Invite to topic + */ +export const inviteToTopic = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zInviteToTopicResponse.parseAsync(data); + }, + url: '/t/{id}/invite.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Invite group to topic + */ +export const inviteGroupToTopic = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zInviteGroupToTopicResponse.parseAsync(data); + }, + url: '/t/{id}/invite-group.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Bookmark topic + */ +export const bookmarkTopic = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + url: '/t/{id}/bookmark.json', + ...options + }); +}; + +/** + * Update the status of a topic + */ +export const updateTopicStatus = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zUpdateTopicStatusResponse.parseAsync(data); + }, + url: '/t/{id}/status.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Get the latest topics + */ +export const listLatestTopics = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zListLatestTopicsResponse.parseAsync(data); + }, + url: '/latest.json', + ...options + }); +}; + +/** + * Get the top topics filtered by period + */ +export const listTopTopics = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zListTopTopicsResponse.parseAsync(data); + }, + url: '/top.json', + ...options + }); +}; + +/** + * Set notification level + */ +export const setNotificationLevel = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zSetNotificationLevelResponse.parseAsync(data); + }, + url: '/t/{id}/notifications.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Update topic timestamp + */ +export const updateTopicTimestamp = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zUpdateTopicTimestampResponse.parseAsync(data); + }, + url: '/t/{id}/change-timestamp.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Create topic timer + */ +export const createTopicTimer = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zCreateTopicTimerResponse.parseAsync(data); + }, + url: '/t/{id}/timer.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Get topic by external_id + */ +export const getTopicByExternalId = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + url: '/t/external_id/{external_id}.json', + ...options + }); +}; + +/** + * Creates an upload + */ +export const createUpload = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + ...formDataBodySerializer, + responseValidator: async (data) => { + return await zCreateUploadResponse.parseAsync(data); + }, + url: '/uploads.json', + ...options, + headers: { + 'Content-Type': null, + ...options?.headers + } + }); +}; + +/** + * Initiates a direct external upload + * Direct external uploads bypass the usual method of creating uploads + * via the POST /uploads route, and upload directly to an external provider, + * which by default is S3. This route begins the process, and will return + * a unique identifier for the external upload as well as a presigned URL + * which is where the file binary blob should be uploaded to. + * + * Once the upload is complete to the external service, you must call the + * POST /complete-external-upload route using the unique identifier returned + * by this route, which will create any required Upload record in the Discourse + * database and also move file from its temporary location to the final + * destination in the external storage service. + * + * You must have the correct permissions and CORS settings configured in your + * external provider. We support AWS S3 as the default. See: + * + * https://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4. + * + * An external file store must be set up and `enable_direct_s3_uploads` must + * be set to true for this endpoint to function. + * + * + */ +export const generatePresignedPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zGeneratePresignedPutResponse.parseAsync(data); + }, + url: '/uploads/generate-presigned-put.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Completes a direct external upload + * Completes an external upload initialized with /get-presigned-put. The + * file will be moved from its temporary location in external storage to + * a final destination in the S3 bucket. An Upload record will also be + * created in the database in most cases. + * + * If a sha1-checksum was provided in the initial request it will also + * be compared with the uploaded file in storage to make sure the same + * file was uploaded. The file size will be compared for the same reason. + * + * You must have the correct permissions and CORS settings configured in your + * external provider. We support AWS S3 as the default. See: + * + * https://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4. + * + * An external file store must be set up and `enable_direct_s3_uploads` must + * be set to true for this endpoint to function. + * + * + */ +export const completeExternalUpload = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zCompleteExternalUploadResponse.parseAsync(data); + }, + url: '/uploads/complete-external-upload.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Creates a multipart external upload + * Creates a multipart upload in the external storage provider, storing + * a temporary reference to the external upload similar to /get-presigned-put. + * + * You must have the correct permissions and CORS settings configured in your + * external provider. We support AWS S3 as the default. See: + * + * https://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4. + * + * An external file store must be set up and `enable_direct_s3_uploads` must + * be set to true for this endpoint to function. + * + * + */ +export const createMultipartUpload = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zCreateMultipartUploadResponse.parseAsync(data); + }, + url: '/uploads/create-multipart.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Generates batches of presigned URLs for multipart parts + * Multipart uploads are uploaded in chunks or parts to individual presigned + * URLs, similar to the one generated by /generate-presigned-put. The part + * numbers provided must be between 1 and 10000. The total number of parts + * will depend on the chunk size in bytes that you intend to use to upload + * each chunk. For example a 12MB file may have 2 5MB chunks and a final + * 2MB chunk, for part numbers 1, 2, and 3. + * + * This endpoint will return a presigned URL for each part number provided, + * which you can then use to send PUT requests for the binary chunk corresponding + * to that part. When the part is uploaded, the provider should return an + * ETag for the part, and this should be stored along with the part number, + * because this is needed to complete the multipart upload. + * + * You must have the correct permissions and CORS settings configured in your + * external provider. We support AWS S3 as the default. See: + * + * https://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4. + * + * An external file store must be set up and `enable_direct_s3_uploads` must + * be set to true for this endpoint to function. + * + * + */ +export const batchPresignMultipartParts = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zBatchPresignMultipartPartsResponse.parseAsync(data); + }, + url: '/uploads/batch-presign-multipart-parts.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Abort multipart upload + * This endpoint aborts the multipart upload initiated with /create-multipart. + * This should be used when cancelling the upload. It does not matter if parts + * were already uploaded into the external storage provider. + * + * You must have the correct permissions and CORS settings configured in your + * external provider. We support AWS S3 as the default. See: + * + * https://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4. + * + * An external file store must be set up and `enable_direct_s3_uploads` must + * be set to true for this endpoint to function. + * + * + */ +export const abortMultipart = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zAbortMultipartResponse.parseAsync(data); + }, + url: '/uploads/abort-multipart.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Complete multipart upload + * Completes the multipart upload in the external store, and copies the + * file from its temporary location to its final location in the store. + * All of the parts must have been uploaded to the external storage provider. + * An Upload record will be completed in most cases once the file is copied + * to its final location. + * + * You must have the correct permissions and CORS settings configured in your + * external provider. We support AWS S3 as the default. See: + * + * https://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4. + * + * An external file store must be set up and `enable_direct_s3_uploads` must + * be set to true for this endpoint to function. + * + * + */ +export const completeMultipart = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zCompleteMultipartResponse.parseAsync(data); + }, + url: '/uploads/complete-multipart.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * List badges for a user + */ +export const listUserBadges = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zListUserBadgesResponse.parseAsync(data); + }, + url: '/user-badges/{username}.json', + ...options + }); +}; + +/** + * Creates a user + */ +export const createUser = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zCreateUserResponse.parseAsync(data); + }, + url: '/users.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Get a single user by username + */ +export const getUser = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zGetUserResponse.parseAsync(data); + }, + url: '/u/{username}.json', + ...options + }); +}; + +/** + * Update a user + */ +export const updateUser = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zUpdateUserResponse.parseAsync(data); + }, + url: '/u/{username}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Get a user by external_id + */ +export const getUserExternalId = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zGetUserExternalIdResponse.parseAsync(data); + }, + url: '/u/by-external/{external_id}.json', + ...options + }); +}; + +/** + * Get a user by identity provider external ID + */ +export const getUserIdentiyProviderExternalId = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zGetUserIdentiyProviderExternalIdResponse.parseAsync(data); + }, + url: '/u/by-external/{provider}/{external_id}.json', + ...options + }); +}; + +/** + * Update avatar + */ +export const updateAvatar = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zUpdateAvatarResponse.parseAsync(data); + }, + url: '/u/{username}/preferences/avatar/pick.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Update email + */ +export const updateEmail = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + url: '/u/{username}/preferences/email.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Update username + */ +export const updateUsername = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + url: '/u/{username}/preferences/username.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Get a public list of users + */ +export const listUsersPublic = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zListUsersPublicResponse.parseAsync(data); + }, + url: '/directory_items.json', + ...options + }); +}; + +/** + * Delete a user + */ +export const deleteUser = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + responseValidator: async (data) => { + return await zDeleteUserResponse.parseAsync(data); + }, + url: '/admin/users/{id}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Get a user by id + */ +export const adminGetUser = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zAdminGetUserResponse.parseAsync(data); + }, + url: '/admin/users/{id}.json', + ...options + }); +}; + +/** + * Activate a user + */ +export const activateUser = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zActivateUserResponse.parseAsync(data); + }, + url: '/admin/users/{id}/activate.json', + ...options + }); +}; + +/** + * Deactivate a user + */ +export const deactivateUser = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zDeactivateUserResponse.parseAsync(data); + }, + url: '/admin/users/{id}/deactivate.json', + ...options + }); +}; + +/** + * Suspend a user + */ +export const suspendUser = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zSuspendUserResponse.parseAsync(data); + }, + url: '/admin/users/{id}/suspend.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Silence a user + */ +export const silenceUser = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zSilenceUserResponse.parseAsync(data); + }, + url: '/admin/users/{id}/silence.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Anonymize a user + */ +export const anonymizeUser = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zAnonymizeUserResponse.parseAsync(data); + }, + url: '/admin/users/{id}/anonymize.json', + ...options + }); +}; + +/** + * Log a user out + */ +export const logOutUser = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zLogOutUserResponse.parseAsync(data); + }, + url: '/admin/users/{id}/log_out.json', + ...options + }); +}; + +/** + * Refresh gravatar + */ +export const refreshGravatar = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zRefreshGravatarResponse.parseAsync(data); + }, + url: '/user_avatar/{username}/refresh_gravatar.json', + ...options + }); +}; + +/** + * Get a list of users + */ +export const adminListUsers = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zAdminListUsersResponse.parseAsync(data); + }, + url: '/admin/users/list/{flag}.json', + ...options + }); +}; + +/** + * Get a list of user actions + */ +export const listUserActions = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zListUserActionsResponse.parseAsync(data); + }, + url: '/user_actions.json', + ...options + }); +}; + +/** + * Send password reset email + */ +export const sendPasswordResetEmail = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zSendPasswordResetEmailResponse.parseAsync(data); + }, + url: '/session/forgot_password.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Change password + */ +export const changePassword = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + url: '/users/password-reset/{token}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Get email addresses belonging to a user + */ +export const getUserEmails = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zGetUserEmailsResponse.parseAsync(data); + }, + url: '/u/{username}/emails.json', + ...options + }); +}; + +/** + * Post a new message to a chat channel + */ +export const postMessage = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zPostMessageResponse.parseAsync(data); + }, + url: '/chat/{channel_id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Add or remove a reaction on a chat message + */ +export const reactToMessage = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + responseValidator: async (data) => { + return await zReactToMessageResponse.parseAsync(data); + }, + url: '/chat/{channel_id}/react/{message_id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Edit an existing chat message + */ +export const editMessage = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + url: '/chat/api/channels/{channel_id}/messages/{message_id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Get messages from a chat channel + */ +export const getMessages = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseTransformer: getMessagesResponseTransformer, + responseValidator: async (data) => { + return await zGetMessagesResponse.parseAsync(data); + }, + url: '/chat/api/channels/{channel_id}/messages', + ...options + }); +}; + +/** + * Create or get a direct message channel + */ +export const getChatChannel = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + responseValidator: async (data) => { + return await zGetChatChannelResponse.parseAsync(data); + }, + url: '/chat/api/direct-message-channels.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Get user-card info + */ +export const getUserInfo = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zGetUserInfoResponse.parseAsync(data); + }, + url: '/u/{username}/card.json', + ...options + }); +}; + +/** + * Get current session information + */ +export const getSession = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + responseValidator: async (data) => { + return await zGetSessionResponse.parseAsync(data); + }, + url: '/session/current.json', + ...options + }); +}; \ No newline at end of file diff --git a/client/transformers.gen.ts b/client/transformers.gen.ts new file mode 100644 index 0000000..759e520 --- /dev/null +++ b/client/transformers.gen.ts @@ -0,0 +1,15 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { GetMessagesResponse } from './types.gen'; + +export const getMessagesResponseTransformer = async (data: any): Promise => { + if (data.messages) { + data.messages = data.messages.map((item: any) => { + if (item.created_at) { + item.created_at = new Date(item.created_at); + } + return item; + }); + } + return data; +}; \ No newline at end of file diff --git a/client/types.gen.ts b/client/types.gen.ts new file mode 100644 index 0000000..2ffae56 --- /dev/null +++ b/client/types.gen.ts @@ -0,0 +1,5484 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type GetBackupsData = { + body?: never; + path?: never; + query?: never; + url: '/admin/backups.json'; +}; + +export type GetBackupsResponses = { + /** + * success response + */ + 200: Array<{ + filename: string; + size: number; + last_modified: string; + }>; +}; + +export type GetBackupsResponse = GetBackupsResponses[keyof GetBackupsResponses]; + +export type CreateBackupData = { + body?: { + with_uploads: boolean; + }; + path?: never; + query?: never; + url: '/admin/backups.json'; +}; + +export type CreateBackupResponses = { + /** + * success response + */ + 200: { + success: string; + }; +}; + +export type CreateBackupResponse = CreateBackupResponses[keyof CreateBackupResponses]; + +export type DownloadBackupData = { + body?: never; + path: { + filename: string; + }; + query: { + token: string; + }; + url: '/admin/backups/{filename}'; +}; + +export type DownloadBackupResponses = { + /** + * success response + */ + 200: unknown; +}; + +export type SendDownloadBackupEmailData = { + body?: never; + path: { + filename: string; + }; + query?: never; + url: '/admin/backups/{filename}'; +}; + +export type SendDownloadBackupEmailResponses = { + /** + * success response + */ + 200: unknown; +}; + +export type AdminListBadgesData = { + body?: never; + path?: never; + query?: never; + url: '/admin/badges.json'; +}; + +export type AdminListBadgesResponses = { + /** + * success response + */ + 200: { + badges: Array<{ + id: number; + name: string; + description: string; + grant_count: number; + allow_title: boolean; + multiple_grant: boolean; + icon: string; + image_url: string | null; + listable: boolean; + enabled: boolean; + badge_grouping_id: number; + system: boolean; + long_description: string; + slug: string; + manually_grantable: boolean; + query: string | null; + trigger: number | null; + target_posts: boolean; + auto_revoke: boolean; + show_posts: boolean; + i18n_name?: string | null; + image_upload_id: number | null; + badge_type_id: number; + show_in_post_header: boolean; + }>; + badge_types: Array<{ + id: number; + name: string; + sort_order: number; + }>; + badge_groupings: Array<{ + id: number; + name: string; + description: string | null; + position: number; + system: boolean; + }>; + admin_badges: { + protected_system_fields: Array; + triggers: { + user_change: number; + none: number; + post_revision: number; + trust_level_change: number; + post_action: number; + }; + badge_ids: Array; + badge_grouping_ids: Array; + badge_type_ids: Array; + }; + }; +}; + +export type AdminListBadgesResponse = AdminListBadgesResponses[keyof AdminListBadgesResponses]; + +export type CreateBadgeData = { + body?: { + /** + * The name for the new badge. + */ + name: string; + /** + * The ID for the badge type. 1 for Gold, 2 for Silver, + * 3 for Bronze. + */ + badge_type_id: number; + }; + path?: never; + query?: never; + url: '/admin/badges.json'; +}; + +export type CreateBadgeResponses = { + /** + * success response + */ + 200: { + badge_types: Array<{ + id: number; + name: string; + sort_order: number; + }>; + badge: { + id: number; + name: string; + description: string; + grant_count: number; + allow_title: boolean; + multiple_grant: boolean; + icon: string; + image_url: string | null; + image_upload_id: number | null; + listable: boolean; + enabled: boolean; + badge_grouping_id: number; + system: boolean; + long_description: string; + slug: string; + manually_grantable: boolean; + query: string | null; + trigger: string | null; + target_posts: boolean; + auto_revoke: boolean; + show_posts: boolean; + badge_type_id: number; + show_in_post_header: boolean; + }; + }; +}; + +export type CreateBadgeResponse = CreateBadgeResponses[keyof CreateBadgeResponses]; + +export type DeleteBadgeData = { + body?: never; + path: { + id: number; + }; + query?: never; + url: '/admin/badges/{id}.json'; +}; + +export type DeleteBadgeResponses = { + /** + * success response + */ + 200: unknown; +}; + +export type UpdateBadgeData = { + body?: { + /** + * The name for the new badge. + */ + name: string; + /** + * The ID for the badge type. 1 for Gold, 2 for Silver, + * 3 for Bronze. + */ + badge_type_id: number; + }; + path: { + id: number; + }; + query?: never; + url: '/admin/badges/{id}.json'; +}; + +export type UpdateBadgeResponses = { + /** + * success response + */ + 200: { + badge_types: Array<{ + id: number; + name: string; + sort_order: number; + }>; + badge: { + id: number; + name: string; + description: string; + grant_count: number; + allow_title: boolean; + multiple_grant: boolean; + icon: string; + image_url: string | null; + image_upload_id: number | null; + listable: boolean; + enabled: boolean; + badge_grouping_id: number; + system: boolean; + long_description: string; + slug: string; + manually_grantable: boolean; + query: string | null; + trigger: string | null; + target_posts: boolean; + auto_revoke: boolean; + show_posts: boolean; + badge_type_id: number; + show_in_post_header: boolean; + }; + }; +}; + +export type UpdateBadgeResponse = UpdateBadgeResponses[keyof UpdateBadgeResponses]; + +export type ListCategoriesData = { + body?: never; + path?: never; + query?: { + include_subcategories?: true; + }; + url: '/categories.json'; +}; + +export type ListCategoriesResponses = { + /** + * success response + */ + 200: { + category_list: { + can_create_category: boolean; + can_create_topic: boolean; + categories: Array<{ + id: number; + name: string; + color: string; + text_color: string; + slug: string; + topic_count: number; + post_count: number; + position: number; + description: string | null; + description_text: string | null; + description_excerpt: string | null; + topic_url: string | null; + read_restricted: boolean; + permission: number; + notification_level: number; + can_edit: boolean; + topic_template: string | null; + has_children: boolean; + subcategory_count: number | null; + sort_order: string | null; + sort_ascending: string | null; + show_subcategory_list: boolean; + num_featured_topics: number; + default_view: string | null; + subcategory_list_style: string; + default_top_period: string; + default_list_filter: string; + minimum_required_tags: number; + navigate_to_first_post_after_read: boolean; + topics_day: number; + topics_week: number; + topics_month: number; + topics_year: number; + topics_all_time: number; + is_uncategorized?: boolean; + subcategory_ids: Array; + subcategory_list?: Array | null; + uploaded_logo: string | null; + uploaded_logo_dark: string | null; + uploaded_background: string | null; + uploaded_background_dark: string | null; + }>; + }; + }; +}; + +export type ListCategoriesResponse = ListCategoriesResponses[keyof ListCategoriesResponses]; + +export type CreateCategoryData = { + body?: { + name: string; + color?: string; + text_color?: string; + parent_category_id?: number; + allow_badges?: boolean; + slug?: string; + topic_featured_links_allowed?: boolean; + permissions?: { + everyone?: number; + staff?: number; + [key: string]: unknown | number | undefined; + }; + search_priority?: number; + form_template_ids?: Array; + }; + path?: never; + query?: never; + url: '/categories.json'; +}; + +export type CreateCategoryResponses = { + /** + * success response + */ + 200: { + category: { + id: number; + name: string; + color: string; + text_color: string; + slug: string; + topic_count: number; + post_count: number; + position: number; + description: string | null; + description_text: string | null; + description_excerpt: string | null; + topic_url: string | null; + read_restricted: boolean; + permission: number | null; + notification_level: number; + can_edit: boolean; + topic_template: string | null; + form_template_ids?: Array; + has_children: boolean | null; + subcategory_count: number | null; + sort_order: string | null; + sort_ascending: string | null; + show_subcategory_list: boolean; + num_featured_topics: number; + default_view: string | null; + subcategory_list_style: string; + default_top_period: string; + default_list_filter: string; + minimum_required_tags: number; + navigate_to_first_post_after_read: boolean; + custom_fields: { + [key: string]: never; + }; + allowed_tags?: Array; + allowed_tag_groups?: Array; + allow_global_tags?: boolean; + required_tag_groups: Array<{ + name: string; + min_count: number; + }>; + category_setting?: unknown; + read_only_banner: string | null; + available_groups: Array; + auto_close_hours: string | null; + auto_close_based_on_last_post: boolean; + allow_unlimited_owner_edits_on_first_post: boolean; + default_slow_mode_seconds: string | null; + group_permissions: Array<{ + permission_type: number; + group_name: string; + }>; + email_in: string | null; + email_in_allow_strangers: boolean; + mailinglist_mirror: boolean; + all_topics_wiki: boolean; + can_delete: boolean; + allow_badges: boolean; + topic_featured_link_allowed: boolean; + search_priority: number; + uploaded_logo: string | null; + uploaded_logo_dark: string | null; + uploaded_background: string | null; + uploaded_background_dark: string | null; + }; + }; +}; + +export type CreateCategoryResponse = CreateCategoryResponses[keyof CreateCategoryResponses]; + +export type UpdateCategoryData = { + body?: { + name: string; + color?: string; + text_color?: string; + parent_category_id?: number; + allow_badges?: boolean; + slug?: string; + topic_featured_links_allowed?: boolean; + permissions?: { + everyone?: number; + staff?: number; + [key: string]: unknown | number | undefined; + }; + search_priority?: number; + form_template_ids?: Array; + }; + path: { + id: number; + }; + query?: never; + url: '/categories/{id}.json'; +}; + +export type UpdateCategoryResponses = { + /** + * success response + */ + 200: { + success: string; + category: { + id: number; + name: string; + color: string; + text_color: string; + slug: string; + topic_count: number; + post_count: number; + position: number; + description: string | null; + description_text: string | null; + description_excerpt: string | null; + topic_url: string | null; + read_restricted: boolean; + permission: number | null; + notification_level: number; + can_edit: boolean; + topic_template: string | null; + form_template_ids: Array; + has_children: boolean | null; + subcategory_count: number | null; + sort_order: string | null; + sort_ascending: string | null; + show_subcategory_list: boolean; + num_featured_topics: number; + default_view: string | null; + subcategory_list_style: string; + default_top_period: string; + default_list_filter: string; + minimum_required_tags: number; + navigate_to_first_post_after_read: boolean; + custom_fields: { + [key: string]: never; + }; + allowed_tags?: Array; + allowed_tag_groups?: Array; + allow_global_tags?: boolean; + required_tag_groups: Array<{ + name: string; + min_count: number; + }>; + category_setting?: unknown; + read_only_banner: string | null; + available_groups: Array; + auto_close_hours: string | null; + auto_close_based_on_last_post: boolean; + allow_unlimited_owner_edits_on_first_post: boolean; + default_slow_mode_seconds: string | null; + group_permissions: Array<{ + permission_type: number; + group_name: string; + }>; + email_in: string | null; + email_in_allow_strangers: boolean; + mailinglist_mirror: boolean; + all_topics_wiki: boolean; + can_delete: boolean; + allow_badges: boolean; + topic_featured_link_allowed: boolean; + search_priority: number; + uploaded_logo: string | null; + uploaded_logo_dark: string | null; + uploaded_background: string | null; + uploaded_background_dark: string | null; + }; + }; +}; + +export type UpdateCategoryResponse = UpdateCategoryResponses[keyof UpdateCategoryResponses]; + +export type ListCategoryTopicsData = { + body?: never; + path: { + slug: string; + id: number; + }; + query?: never; + url: '/c/{slug}/{id}.json'; +}; + +export type ListCategoryTopicsResponses = { + /** + * success response + */ + 200: { + users?: Array<{ + id: number; + username: string; + name: string; + avatar_template: string; + }>; + primary_groups?: Array; + topic_list: { + can_create_topic: boolean; + per_page: number; + top_tags?: Array; + topics: Array<{ + id: number; + title: string; + fancy_title: string; + slug: string; + posts_count: number; + reply_count: number; + highest_post_number: number; + image_url: string | null; + created_at: string; + last_posted_at: string; + bumped: boolean; + bumped_at: string; + archetype: string; + unseen: boolean; + pinned: boolean; + unpinned: string | null; + excerpt: string; + visible: boolean; + closed: boolean; + archived: boolean; + bookmarked: string | null; + liked: string | null; + views: number; + like_count: number; + has_summary: boolean; + last_poster_username: string; + category_id: number; + pinned_globally: boolean; + featured_link: string | null; + posters: Array<{ + extras: string; + description: string; + user_id: number; + primary_group_id: number | null; + }>; + }>; + }; + }; +}; + +export type ListCategoryTopicsResponse = ListCategoryTopicsResponses[keyof ListCategoryTopicsResponses]; + +export type GetCategoryData = { + body?: never; + path: { + id: number; + }; + query?: never; + url: '/c/{id}/show.json'; +}; + +export type GetCategoryResponses = { + /** + * response + */ + 200: { + category: { + id: number; + name: string; + color: string; + text_color: string; + slug: string; + topic_count: number; + post_count: number; + position: number; + description: string | null; + description_text: string | null; + description_excerpt: string | null; + topic_url: string | null; + read_restricted: boolean; + permission: number | null; + notification_level: number; + can_edit: boolean; + topic_template: string | null; + form_template_ids?: Array; + has_children: boolean | null; + subcategory_count: number | null; + sort_order: string | null; + sort_ascending: string | null; + show_subcategory_list: boolean; + num_featured_topics: number; + default_view: string | null; + subcategory_list_style: string; + default_top_period: string; + default_list_filter: string; + minimum_required_tags: number; + navigate_to_first_post_after_read: boolean; + custom_fields: { + [key: string]: never; + }; + allowed_tags?: Array; + allowed_tag_groups?: Array; + allow_global_tags?: boolean; + required_tag_groups: Array<{ + name: string; + min_count: number; + }>; + category_setting?: unknown; + read_only_banner: string | null; + available_groups: Array; + auto_close_hours: string | null; + auto_close_based_on_last_post: boolean; + allow_unlimited_owner_edits_on_first_post: boolean; + default_slow_mode_seconds: string | null; + group_permissions: Array<{ + permission_type: number; + group_name: string; + }>; + email_in: string | null; + email_in_allow_strangers: boolean; + mailinglist_mirror: boolean; + all_topics_wiki: boolean; + can_delete: boolean; + allow_badges: boolean; + topic_featured_link_allowed: boolean; + search_priority: number; + uploaded_logo: string | null; + uploaded_logo_dark: string | null; + uploaded_background: string | null; + uploaded_background_dark: string | null; + }; + }; +}; + +export type GetCategoryResponse = GetCategoryResponses[keyof GetCategoryResponses]; + +export type CreateGroupData = { + body?: { + group: { + name: string; + full_name?: string; + /** + * About Group + */ + bio_raw?: string; + /** + * comma,separated + */ + usernames?: string; + /** + * comma,separated + */ + owner_usernames?: string; + /** + * pipe|separated + */ + automatic_membership_email_domains?: string; + visibility_level?: number; + primary_group?: boolean; + flair_icon?: string; + flair_upload_id?: number; + flair_bg_color?: string; + public_admission?: boolean; + public_exit?: boolean; + default_notification_level?: number; + muted_category_ids?: Array; + regular_category_ids?: Array; + watching_category_ids?: Array; + tracking_category_ids?: Array; + watching_first_post_category_ids?: Array; + }; + }; + path?: never; + query?: never; + url: '/admin/groups.json'; +}; + +export type CreateGroupResponses = { + /** + * group created + */ + 200: { + basic_group: { + id: number; + automatic: boolean; + name: string; + user_count: number; + mentionable_level: number; + messageable_level: number; + visibility_level: number; + primary_group: boolean; + title: string | null; + grant_trust_level: string | null; + incoming_email: string | null; + has_messages: boolean; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + bio_raw: string | null; + bio_cooked: string | null; + bio_excerpt: string | null; + public_admission: boolean; + public_exit: boolean; + allow_membership_requests: boolean; + full_name: string | null; + default_notification_level: number; + membership_request_template: string | null; + members_visibility_level: number; + can_see_members: boolean; + can_admin_group: boolean; + can_edit_group?: boolean; + publish_read_state: boolean; + }; + }; +}; + +export type CreateGroupResponse = CreateGroupResponses[keyof CreateGroupResponses]; + +export type DeleteGroupData = { + body?: never; + path: { + id: number; + }; + query?: never; + url: '/admin/groups/{id}.json'; +}; + +export type DeleteGroupResponses = { + /** + * response + */ + 200: { + success: string; + }; +}; + +export type DeleteGroupResponse = DeleteGroupResponses[keyof DeleteGroupResponses]; + +export type GetGroupData = { + body?: never; + path: { + /** + * Use group name instead of id + */ + id: string; + }; + query?: never; + url: '/groups/{id}.json'; +}; + +export type GetGroupResponses = { + /** + * success response + */ + 200: { + group: { + id: number; + automatic: boolean; + name: string; + user_count: number; + mentionable_level: number; + messageable_level: number; + visibility_level: number; + primary_group: boolean; + title: string | null; + grant_trust_level: string | null; + incoming_email: string | null; + has_messages: boolean; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + bio_raw: string | null; + bio_cooked: string | null; + bio_excerpt: string | null; + public_admission: boolean; + public_exit: boolean; + allow_membership_requests: boolean; + full_name: string | null; + default_notification_level: number; + membership_request_template: string | null; + is_group_user: boolean; + members_visibility_level: number; + can_see_members: boolean; + can_admin_group: boolean; + can_edit_group?: boolean; + publish_read_state: boolean; + is_group_owner_display: boolean; + mentionable: boolean; + messageable: boolean; + automatic_membership_email_domains: string | null; + smtp_updated_at?: string | null; + smtp_updated_by?: { + [key: string]: unknown; + } | null; + smtp_enabled?: boolean; + smtp_server: string | null; + smtp_port: string | null; + smtp_ssl_mode: number | null; + imap_enabled?: boolean; + imap_updated_at?: string | null; + imap_updated_by?: { + [key: string]: unknown; + } | null; + imap_server: string | null; + imap_port: string | null; + imap_ssl: string | null; + imap_mailbox_name: string; + imap_mailboxes: Array; + email_username: string | null; + email_from_alias?: string | null; + email_password: string | null; + imap_last_error: string | null; + imap_old_emails: string | null; + imap_new_emails: string | null; + message_count: number; + allow_unknown_sender_topic_replies: boolean; + associated_group_ids?: Array; + watching_category_ids: Array; + tracking_category_ids: Array; + watching_first_post_category_ids: Array; + regular_category_ids: Array; + muted_category_ids: Array; + watching_tags?: Array; + watching_first_post_tags?: Array; + tracking_tags?: Array; + regular_tags?: Array; + muted_tags?: Array; + }; + extras: { + visible_group_names: Array; + }; + }; +}; + +export type GetGroupResponse = GetGroupResponses[keyof GetGroupResponses]; + +export type UpdateGroupData = { + body?: { + group: { + name: string; + full_name?: string; + /** + * About Group + */ + bio_raw?: string; + /** + * comma,separated + */ + usernames?: string; + /** + * comma,separated + */ + owner_usernames?: string; + /** + * pipe|separated + */ + automatic_membership_email_domains?: string; + visibility_level?: number; + primary_group?: boolean; + flair_icon?: string; + flair_upload_id?: number; + flair_bg_color?: string; + public_admission?: boolean; + public_exit?: boolean; + default_notification_level?: number; + muted_category_ids?: Array; + regular_category_ids?: Array; + watching_category_ids?: Array; + tracking_category_ids?: Array; + watching_first_post_category_ids?: Array; + }; + }; + path: { + id: number; + }; + query?: never; + url: '/groups/{id}.json'; +}; + +export type UpdateGroupResponses = { + /** + * success response + */ + 200: { + success?: string; + }; +}; + +export type UpdateGroupResponse = UpdateGroupResponses[keyof UpdateGroupResponses]; + +export type RemoveGroupMembersData = { + body?: { + /** + * comma separated list + */ + usernames?: string; + }; + path: { + id: number; + }; + query?: never; + url: '/groups/{id}/members.json'; +}; + +export type RemoveGroupMembersResponses = { + /** + * success response + */ + 200: { + success: string; + usernames: Array; + skipped_usernames: Array; + }; +}; + +export type RemoveGroupMembersResponse = RemoveGroupMembersResponses[keyof RemoveGroupMembersResponses]; + +export type ListGroupMembersData = { + body?: never; + path: { + /** + * Use group name instead of id + */ + id: string; + }; + query?: never; + url: '/groups/{id}/members.json'; +}; + +export type ListGroupMembersResponses = { + /** + * success response + */ + 200: { + members: Array<{ + id: number; + username: string; + name: string | null; + avatar_template: string; + title: string | null; + last_posted_at: string; + last_seen_at: string; + added_at: string; + timezone: string; + }>; + owners: Array<{ + id: number; + username: string; + name: string | null; + avatar_template: string; + title: string | null; + last_posted_at: string; + last_seen_at: string; + added_at: string; + timezone: string; + }>; + meta: { + total: number; + limit: number; + offset: number; + }; + }; +}; + +export type ListGroupMembersResponse = ListGroupMembersResponses[keyof ListGroupMembersResponses]; + +export type AddGroupMembersData = { + body?: { + /** + * comma separated list + */ + usernames?: string; + }; + path: { + id: number; + }; + query?: never; + url: '/groups/{id}/members.json'; +}; + +export type AddGroupMembersResponses = { + /** + * success response + */ + 200: { + success: string; + usernames: Array; + emails: Array; + }; +}; + +export type AddGroupMembersResponse = AddGroupMembersResponses[keyof AddGroupMembersResponses]; + +export type ListGroupsData = { + body?: never; + path?: never; + query?: never; + url: '/groups.json'; +}; + +export type ListGroupsResponses = { + /** + * response + */ + 200: { + groups: Array<{ + id: number; + automatic: boolean; + name: string; + display_name: string; + user_count: number; + mentionable_level: number; + messageable_level: number; + visibility_level: number; + primary_group: boolean; + title: string | null; + grant_trust_level: string | null; + incoming_email: string | null; + has_messages: boolean; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + bio_raw: string | null; + bio_cooked: string | null; + bio_excerpt: string | null; + public_admission: boolean; + public_exit: boolean; + allow_membership_requests: boolean; + full_name: string | null; + default_notification_level: number; + membership_request_template: string | null; + is_group_user?: boolean; + is_group_owner?: boolean; + members_visibility_level: number; + can_see_members: boolean; + can_admin_group: boolean; + can_edit_group?: boolean; + publish_read_state: boolean; + }>; + extras: { + type_filters: Array; + }; + total_rows_groups: number; + load_more_groups: string; + }; +}; + +export type ListGroupsResponse = ListGroupsResponses[keyof ListGroupsResponses]; + +export type CreateInviteData = { + body?: { + /** + * required for email invites only + */ + email?: string; + skip_email?: boolean; + /** + * optional, for email invites + */ + custom_message?: string; + /** + * optional, for link invites + */ + max_redemptions_allowed?: number; + topic_id?: number; + /** + * Optional, either this or `group_names`. Comma separated + * list for multiple ids. + */ + group_ids?: string; + /** + * Optional, either this or `group_ids`. Comma separated + * list for multiple names. + */ + group_names?: string; + /** + * optional, if not supplied, the invite_expiry_days site + * setting is used + */ + expires_at?: string; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path?: never; + query?: never; + url: '/invites.json'; +}; + +export type CreateInviteResponses = { + /** + * success response + */ + 200: { + id?: number; + link?: string; + email?: string; + emailed?: boolean; + custom_message?: string | null; + topics?: Array; + groups?: Array; + created_at?: string; + updated_at?: string; + expires_at?: string; + expired?: boolean; + }; +}; + +export type CreateInviteResponse = CreateInviteResponses[keyof CreateInviteResponses]; + +export type CreateMultipleInvitesData = { + body?: { + /** + * pass 1 email per invite to be generated. other properties + * will be shared by each invite. + */ + email?: string; + skip_email?: boolean; + /** + * optional, for email invites + */ + custom_message?: string; + /** + * optional, for link invites + */ + max_redemptions_allowed?: number; + topic_id?: number; + /** + * Optional, either this or `group_names`. Comma separated + * list for multiple ids. + */ + group_ids?: string; + /** + * Optional, either this or `group_ids`. Comma separated + * list for multiple names. + */ + group_names?: string; + /** + * optional, if not supplied, the invite_expiry_days site + * setting is used + */ + expires_at?: string; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path?: never; + query?: never; + url: '/invites/create-multiple.json'; +}; + +export type CreateMultipleInvitesResponses = { + /** + * success response + */ + 200: { + num_successfully_created_invitations?: number; + num_failed_invitations?: number; + failed_invitations?: Array; + successful_invitations?: Array; + }; +}; + +export type CreateMultipleInvitesResponse = CreateMultipleInvitesResponses[keyof CreateMultipleInvitesResponses]; + +export type GetNotificationsData = { + body?: never; + path?: never; + query?: never; + url: '/notifications.json'; +}; + +export type GetNotificationsResponses = { + /** + * notifications + */ + 200: { + notifications?: Array<{ + id?: number; + user_id?: number; + notification_type?: number; + read?: boolean; + created_at?: string; + post_number?: number | null; + topic_id?: number | null; + slug?: string | null; + data?: { + badge_id?: number; + badge_name?: string; + badge_slug?: string; + badge_title?: boolean; + username?: string; + }; + }>; + total_rows_notifications?: number; + seen_notification_id?: number; + load_more_notifications?: string; + }; +}; + +export type GetNotificationsResponse = GetNotificationsResponses[keyof GetNotificationsResponses]; + +export type MarkNotificationsAsReadData = { + body?: { + /** + * (optional) Leave off to mark all notifications as + * read + */ + id?: number; + }; + path?: never; + query?: never; + url: '/notifications/mark-read.json'; +}; + +export type MarkNotificationsAsReadResponses = { + /** + * notifications marked read + */ + 200: { + success?: string; + }; +}; + +export type MarkNotificationsAsReadResponse = MarkNotificationsAsReadResponses[keyof MarkNotificationsAsReadResponses]; + +export type ListPostsData = { + body?: never; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path?: never; + query?: { + /** + * Load posts with an id lower than this value. Useful for pagination. + */ + before?: string; + }; + url: '/posts.json'; +}; + +export type ListPostsResponses = { + /** + * latest posts + */ + 200: { + latest_posts?: Array<{ + id?: number; + name?: string; + username?: string; + avatar_template?: string; + created_at?: string; + cooked?: string; + post_number?: number; + post_type?: number; + updated_at?: string; + reply_count?: number; + reply_to_post_number?: string | null; + quote_count?: number; + incoming_link_count?: number; + reads?: number; + readers_count?: number; + score?: number; + yours?: boolean; + topic_id?: number; + topic_slug?: string; + topic_title?: string; + topic_html_title?: string; + category_id?: number; + display_username?: string; + primary_group_name?: string | null; + flair_name?: string | null; + flair_url?: string | null; + flair_bg_color?: string | null; + flair_color?: string | null; + flair_group_id?: number | null; + version?: number; + can_edit?: boolean; + can_delete?: boolean; + can_recover?: boolean; + can_see_hidden_post?: boolean; + can_wiki?: boolean; + user_title?: string | null; + raw?: string; + actions_summary?: Array<{ + id?: number; + can_act?: boolean; + }>; + moderator?: boolean; + admin?: boolean; + staff?: boolean; + user_id?: number; + hidden?: boolean; + trust_level?: number; + deleted_at?: string | null; + user_deleted?: boolean; + edit_reason?: string | null; + can_view_edit_history?: boolean; + wiki?: boolean; + reviewable_id?: number | null; + reviewable_score_count?: number; + reviewable_score_pending_count?: number; + }>; + }; +}; + +export type ListPostsResponse = ListPostsResponses[keyof ListPostsResponses]; + +export type CreateTopicPostPmData = { + body?: { + /** + * Required if creating a new topic or new private message. + */ + title?: string; + raw: string; + /** + * Required if creating a new post. + */ + topic_id?: number; + /** + * Optional if creating a new topic, and ignored if creating + * a new post. + */ + category?: number; + /** + * Required for private message, comma separated. + */ + target_recipients?: string; + /** + * Deprecated. Use target_recipients instead. + * @deprecated + */ + target_usernames?: string; + /** + * Required for new private message. + */ + archetype?: string; + created_at?: string; + /** + * Optional, the post number to reply to inside a topic. + */ + reply_to_post_number?: number; + /** + * Provide a URL from a remote system to associate a forum + * topic with that URL, typically for using Discourse as a comments + * system for an external blog. + */ + embed_url?: string; + /** + * Provide an external_id from a remote system to associate + * a forum topic with that id. + */ + external_id?: string; + }; + path?: never; + query?: never; + url: '/posts.json'; +}; + +export type CreateTopicPostPmResponses = { + /** + * post created + */ + 200: { + id: number; + name: string | null; + username: string; + avatar_template: string; + created_at: string; + raw?: string; + cooked: string; + post_number: number; + post_type: number; + posts_count: number; + updated_at: string; + reply_count: number; + reply_to_post_number: string | null; + quote_count: number; + incoming_link_count: number; + reads: number; + readers_count: number; + score: number; + yours: boolean; + topic_id: number; + topic_slug: string; + display_username: string | null; + primary_group_name: string | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + flair_group_id?: number | null; + badges_granted?: Array; + version: number; + can_edit: boolean; + can_delete: boolean; + can_recover: boolean; + can_see_hidden_post?: boolean; + can_wiki: boolean; + user_title: string | null; + bookmarked: boolean; + actions_summary: Array<{ + id: number; + can_act: boolean; + }>; + moderator: boolean; + admin: boolean; + staff: boolean; + user_id: number; + draft_sequence: number; + hidden: boolean; + trust_level: number; + deleted_at: string | null; + user_deleted: boolean; + edit_reason: string | null; + can_view_edit_history: boolean; + wiki: boolean; + reviewable_id: number | null; + reviewable_score_count: number; + reviewable_score_pending_count: number; + post_url: string; + mentioned_users?: Array; + }; +}; + +export type CreateTopicPostPmResponse = CreateTopicPostPmResponses[keyof CreateTopicPostPmResponses]; + +export type DeletePostData = { + body?: { + /** + * The `SiteSetting.can_permanently_delete` needs to be + * enabled first before this param can be used. Also this endpoint + * needs to be called first without `force_destroy` and then followed + * up with a second call 5 minutes later with `force_destroy` to + * permanently delete. + */ + force_destroy?: boolean; + }; + path: { + id: number; + }; + query?: never; + url: '/posts/{id}.json'; +}; + +export type DeletePostResponses = { + /** + * success response + */ + 200: unknown; +}; + +export type GetPostData = { + body?: never; + path: { + id: string; + }; + query?: never; + url: '/posts/{id}.json'; +}; + +export type GetPostResponses = { + /** + * single reviewable post + */ + 200: { + id: number; + username: string; + avatar_template: string; + created_at: string; + cooked: string; + post_number: number; + post_type: number; + posts_count: number; + updated_at: string; + reply_count: number; + reply_to_post_number: string | null; + quote_count: number; + incoming_link_count: number; + reads: number; + readers_count: number; + score: number; + yours: boolean; + topic_id: number; + topic_slug: string; + primary_group_name: string | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + flair_group_id?: number | null; + version: number; + can_edit: boolean; + can_delete: boolean; + can_recover: boolean; + can_see_hidden_post?: boolean; + can_wiki: boolean; + user_title: string | null; + bookmarked: boolean; + raw: string; + actions_summary: Array<{ + /** + * `2`: like, `3`, `4`, `6`, `7`, `8`: flag + */ + id: number; + count?: number; + acted?: boolean; + can_undo?: boolean; + can_act?: boolean; + }>; + moderator: boolean; + admin: boolean; + staff: boolean; + user_id: number; + hidden: boolean; + trust_level: number; + deleted_at: string | null; + user_deleted: boolean; + edit_reason: string | null; + can_view_edit_history: boolean; + wiki: boolean; + reviewable_id: number | null; + reviewable_score_count: number; + reviewable_score_pending_count: number; + post_url: string; + mentioned_users?: Array; + name?: string | null; + display_username?: string | null; + [key: string]: unknown | number | string | (string | null) | number | boolean | (string | null) | (string | null) | (string | null) | (string | null) | (string | null) | (number | null) | (string | null) | Array<{ + /** + * `2`: like, `3`, `4`, `6`, `7`, `8`: flag + */ + id: number; + count?: number; + acted?: boolean; + can_undo?: boolean; + can_act?: boolean; + }> | (string | null) | (string | null) | (number | null) | Array | (string | null) | (string | null) | undefined; + }; +}; + +export type GetPostResponse = GetPostResponses[keyof GetPostResponses]; + +export type UpdatePostData = { + body?: { + post?: { + raw: string; + edit_reason?: string; + }; + }; + path: { + id: string; + }; + query?: never; + url: '/posts/{id}.json'; +}; + +export type UpdatePostResponses = { + /** + * post updated + */ + 200: { + post: { + id: number; + username: string; + avatar_template: string; + created_at: string; + cooked: string; + post_number: number; + post_type: number; + posts_count: number; + updated_at: string; + reply_count: number; + reply_to_post_number: string | null; + quote_count: number; + incoming_link_count: number; + reads: number; + readers_count: number; + score: number; + yours: boolean; + topic_id: number; + topic_slug: string; + primary_group_name: string | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + flair_group_id?: number | null; + badges_granted?: Array; + version: number; + can_edit: boolean; + can_delete: boolean; + can_recover: boolean; + can_see_hidden_post?: boolean; + can_wiki: boolean; + user_title: string | null; + bookmarked: boolean; + raw: string; + actions_summary: Array<{ + id: number; + can_act: boolean; + }>; + moderator: boolean; + admin: boolean; + staff: boolean; + user_id: number; + draft_sequence: number; + hidden: boolean; + trust_level: number; + deleted_at: string | null; + user_deleted: boolean; + edit_reason: string | null; + can_view_edit_history: boolean; + wiki: boolean; + reviewable_id: number | null; + reviewable_score_count: number; + reviewable_score_pending_count: number; + post_url: string; + mentioned_users?: Array; + name?: string | null; + display_username?: string | null; + }; + }; +}; + +export type UpdatePostResponse = UpdatePostResponses[keyof UpdatePostResponses]; + +export type PostRepliesData = { + body?: never; + path: { + id: string; + }; + query?: never; + url: '/posts/{id}/replies.json'; +}; + +export type PostRepliesResponses = { + /** + * post replies + */ + 200: Array<{ + id: number; + name: string | null; + username: string; + avatar_template: string; + created_at: string; + cooked: string; + post_number: number; + post_type: number; + posts_count: number; + updated_at: string; + reply_count: number; + reply_to_post_number: number; + quote_count: number; + incoming_link_count: number; + reads: number; + readers_count: number; + score: number; + yours: boolean; + topic_id: number; + topic_slug: string; + display_username: string | null; + primary_group_name: string | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + flair_group_id?: number | null; + version: number; + can_edit: boolean; + can_delete: boolean; + can_recover: boolean; + can_see_hidden_post: boolean; + can_wiki: boolean; + user_title: string | null; + reply_to_user: { + username: string; + name?: string; + avatar_template: string; + }; + bookmarked: boolean; + actions_summary: Array<{ + id: number; + can_act: boolean; + }>; + moderator: boolean; + admin: boolean; + staff: boolean; + user_id: number; + hidden: boolean; + trust_level: number; + deleted_at: string | null; + user_deleted: boolean; + edit_reason: string | null; + can_view_edit_history: boolean; + wiki: boolean; + reviewable_id: number | null; + reviewable_score_count: number; + reviewable_score_pending_count: number; + post_url: string; + }>; +}; + +export type PostRepliesResponse = PostRepliesResponses[keyof PostRepliesResponses]; + +export type LockPostData = { + body?: { + locked: string; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/posts/{id}/locked.json'; +}; + +export type LockPostResponses = { + /** + * post updated + */ + 200: { + locked?: boolean; + }; +}; + +export type LockPostResponse = LockPostResponses[keyof LockPostResponses]; + +export type PerformPostActionData = { + body?: { + id: number; + post_action_type_id: number; + flag_topic?: boolean; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path?: never; + query?: never; + url: '/post_actions.json'; +}; + +export type PerformPostActionResponses = { + /** + * post updated + */ + 200: { + id?: number; + name?: string; + username?: string; + avatar_template?: string; + created_at?: string; + cooked?: string; + post_number?: number; + post_type?: number; + updated_at?: string; + reply_count?: number; + reply_to_post_number?: string | null; + quote_count?: number; + incoming_link_count?: number; + reads?: number; + readers_count?: number; + score?: number; + yours?: boolean; + topic_id?: number; + topic_slug?: string; + display_username?: string; + primary_group_name?: string | null; + flair_name?: string | null; + flair_url?: string | null; + flair_bg_color?: string | null; + flair_color?: string | null; + version?: number; + can_edit?: boolean; + can_delete?: boolean; + can_recover?: boolean; + can_wiki?: boolean; + user_title?: string | null; + actions_summary?: Array<{ + id?: number; + count?: number; + acted?: boolean; + can_undo?: boolean; + }>; + moderator?: boolean; + admin?: boolean; + staff?: boolean; + user_id?: number; + hidden?: boolean; + trust_level?: number; + deleted_at?: string | null; + user_deleted?: boolean; + edit_reason?: string | null; + can_view_edit_history?: boolean; + wiki?: boolean; + notice?: { + [key: string]: unknown; + }; + notice_created_by_user?: { + [key: string]: unknown; + } | null; + reviewable_id?: number | null; + reviewable_score_count?: number; + reviewable_score_pending_count?: number; + }; +}; + +export type PerformPostActionResponse = PerformPostActionResponses[keyof PerformPostActionResponses]; + +export type ListUserPrivateMessagesData = { + body?: never; + path: { + username: string; + }; + query?: never; + url: '/topics/private-messages/{username}.json'; +}; + +export type ListUserPrivateMessagesResponses = { + /** + * private messages + */ + 200: { + users?: Array<{ + id?: number; + username?: string; + name?: string; + avatar_template?: string; + }>; + primary_groups?: Array; + topic_list?: { + can_create_topic?: boolean; + draft?: string | null; + draft_key?: string; + draft_sequence?: number; + per_page?: number; + topics?: Array<{ + id?: number; + title?: string; + fancy_title?: string; + slug?: string; + posts_count?: number; + reply_count?: number; + highest_post_number?: number; + image_url?: string | null; + created_at?: string; + last_posted_at?: string; + bumped?: boolean; + bumped_at?: string; + archetype?: string; + unseen?: boolean; + last_read_post_number?: number; + unread_posts?: number; + pinned?: boolean; + unpinned?: string | null; + visible?: boolean; + closed?: boolean; + archived?: boolean; + notification_level?: number; + bookmarked?: boolean; + liked?: boolean; + views?: number; + like_count?: number; + has_summary?: boolean; + last_poster_username?: string; + category_id?: string | null; + pinned_globally?: boolean; + featured_link?: string | null; + allowed_user_count?: number; + posters?: Array<{ + extras?: string; + description?: string; + user_id?: number; + primary_group_id?: number | null; + }>; + participants?: Array<{ + extras?: string; + description?: string | null; + user_id?: number; + primary_group_id?: number | null; + }>; + }>; + }; + }; +}; + +export type ListUserPrivateMessagesResponse = ListUserPrivateMessagesResponses[keyof ListUserPrivateMessagesResponses]; + +export type GetUserSentPrivateMessagesData = { + body?: never; + path: { + username: string; + }; + query?: never; + url: '/topics/private-messages-sent/{username}.json'; +}; + +export type GetUserSentPrivateMessagesResponses = { + /** + * private messages + */ + 200: { + users?: Array<{ + id?: number; + username?: string; + name?: string | null; + avatar_template?: string; + }>; + primary_groups?: Array; + topic_list?: { + can_create_topic?: boolean; + draft?: string | null; + draft_key?: string; + draft_sequence?: number; + per_page?: number; + topics?: Array<{ + id?: number; + title?: string; + fancy_title?: string; + slug?: string; + posts_count?: number; + reply_count?: number; + highest_post_number?: number; + image_url?: string | null; + created_at?: string; + last_posted_at?: string; + bumped?: boolean; + bumped_at?: string; + archetype?: string; + unseen?: boolean; + last_read_post_number?: number; + unread_posts?: number; + pinned?: boolean; + unpinned?: string | null; + visible?: boolean; + closed?: boolean; + archived?: boolean; + notification_level?: number; + bookmarked?: boolean; + liked?: boolean; + views?: number; + like_count?: number; + has_summary?: boolean; + last_poster_username?: string; + category_id?: string | null; + pinned_globally?: boolean; + featured_link?: string | null; + allowed_user_count?: number; + posters?: Array<{ + extras?: string; + description?: string; + user_id?: number; + primary_group_id?: number | null; + }>; + participants?: Array; + }>; + }; + }; +}; + +export type GetUserSentPrivateMessagesResponse = GetUserSentPrivateMessagesResponses[keyof GetUserSentPrivateMessagesResponses]; + +export type SearchData = { + body?: never; + path?: never; + query?: { + /** + * The query string needs to be url encoded and is made up of the following options: + * - Search term. This is just a string. Usually it would be the first item in the query. + * - `@`: Use the `@` followed by the username to specify posts by this user. + * - `#`: Use the `#` followed by the category slug to search within this category. + * - `tags:`: `api,solved` or for posts that have all the specified tags `api+solved`. + * - `before:`: `yyyy-mm-dd` + * - `after:`: `yyyy-mm-dd` + * - `order:`: `latest`, `likes`, `views`, `latest_topic` + * - `assigned:`: username (without `@`) + * - `in:`: `title`, `likes`, `personal`, `messages`, `seen`, `unseen`, `posted`, `created`, `watching`, `tracking`, `bookmarks`, `assigned`, `unassigned`, `first`, `pinned`, `wiki` + * - `with:`: `images` + * - `status:`: `open`, `closed`, `public`, `archived`, `noreplies`, `single_user`, `solved`, `unsolved` + * - `group:`: group_name or group_id + * - `group_messages:`: group_name or group_id + * - `min_posts:`: 1 + * - `max_posts:`: 10 + * - `min_views:`: 1 + * - `max_views:`: 10 + * + * If you are using cURL you can use the `-G` and the `--data-urlencode` flags to encode the query: + * + * ``` + * curl -i -sS -X GET -G "http://localhost:4200/search.json" \ + * --data-urlencode 'q=wordpress @scossar #fun after:2020-01-01' + * ``` + * + */ + q?: string; + page?: number; + }; + url: '/search.json'; +}; + +export type SearchResponses = { + /** + * success response + */ + 200: { + posts: Array; + users: Array; + categories: Array; + tags: Array; + groups: Array; + grouped_search_result: { + more_posts: string | null; + more_users: string | null; + more_categories: string | null; + term: string; + search_log_id: number; + more_full_page_results: string | null; + can_create_topic: boolean; + error: string | null; + extra?: { + categories?: Array | null; + }; + post_ids: Array; + user_ids: Array; + category_ids: Array; + tag_ids: Array; + group_ids: Array; + }; + }; +}; + +export type SearchResponse = SearchResponses[keyof SearchResponses]; + +export type GetSiteData = { + body?: never; + path?: never; + query?: never; + url: '/site.json'; +}; + +export type GetSiteResponses = { + /** + * success response + */ + 200: { + default_archetype: string; + notification_types: { + mentioned: number; + replied: number; + quoted: number; + edited: number; + liked: number; + private_message: number; + invited_to_private_message: number; + invitee_accepted: number; + posted: number; + watching_category_or_tag: number; + new_features?: number; + admin_problems?: number; + moved_post: number; + linked: number; + granted_badge: number; + invited_to_topic: number; + custom: number; + group_mentioned: number; + group_message_summary: number; + watching_first_post: number; + topic_reminder: number; + liked_consolidated: number; + linked_consolidated: number; + post_approved: number; + code_review_commit_approved: number; + membership_request_accepted: number; + membership_request_consolidated: number; + bookmark_reminder: number; + reaction: number; + votes_released: number; + event_reminder: number; + event_invitation: number; + chat_mention: number; + chat_message: number; + chat_invitation: number; + chat_group_mention: number; + chat_quoted?: number; + chat_watched_thread?: number; + assigned?: number; + question_answer_user_commented?: number; + following?: number; + following_created_topic?: number; + following_replied?: number; + circles_activity?: number; + }; + post_types: { + regular: number; + moderator_action: number; + small_action: number; + whisper: number; + }; + trust_levels: { + newuser: number; + basic: number; + member: number; + regular: number; + leader: number; + }; + user_tips?: { + first_notification: number; + topic_timeline: number; + post_menu: number; + topic_notification_levels: number; + suggested_topics: number; + }; + groups: Array<{ + id: number; + name: string; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + }>; + filters: Array; + periods: Array; + top_menu_items: Array; + anonymous_top_menu_items: Array; + uncategorized_category_id: number; + user_field_max_length: number; + post_action_types: Array<{ + id: number | null; + name_key: string | null; + name: string; + description: string; + short_description: string; + is_flag: boolean; + require_message: boolean; + enabled: boolean; + applies_to: Array; + is_used: boolean; + position?: number; + auto_action_type: boolean; + }>; + topic_flag_types: Array<{ + id: number | null; + name_key: string | null; + name: string; + description: string; + short_description: string; + is_flag: boolean; + require_message: boolean; + enabled: boolean; + applies_to: Array; + is_used: boolean; + position?: number; + auto_action_type: boolean; + }>; + can_create_tag: boolean; + can_tag_topics: boolean; + can_tag_pms: boolean; + tags_filter_regexp: string; + top_tags: Array; + wizard_required?: boolean; + can_associate_groups?: boolean; + topic_featured_link_allowed_category_ids: Array; + user_themes: Array<{ + theme_id: number; + name: string; + default: boolean; + color_scheme_id: number | null; + }>; + user_color_schemes: Array<{ + id: number; + name: string; + is_dark: boolean; + }>; + default_dark_color_scheme: { + [key: string]: unknown; + } | null; + censored_regexp: Array<{ + [key: string]: unknown; + }>; + custom_emoji_translation: { + [key: string]: never; + }; + watched_words_replace: string | null; + watched_words_link: string | null; + markdown_additional_options?: { + [key: string]: unknown; + }; + hashtag_configurations?: { + [key: string]: unknown; + }; + hashtag_icons?: { + [key: string]: unknown; + }; + displayed_about_plugin_stat_groups?: Array; + categories: Array<{ + id: number; + name: string; + color: string; + text_color: string; + slug: string; + topic_count: number; + post_count: number; + position: number; + description?: string | null; + description_text?: string | null; + description_excerpt?: string | null; + topic_url: string; + read_restricted: boolean; + permission: number; + notification_level: number; + topic_template: string | null; + has_children: boolean; + subcategory_count: number | null; + sort_order: string | null; + sort_ascending: string | null; + show_subcategory_list: boolean; + num_featured_topics: number; + default_view: string | null; + subcategory_list_style: string; + default_top_period: string; + default_list_filter: string; + minimum_required_tags: number; + navigate_to_first_post_after_read: boolean; + allowed_tags: Array; + allowed_tag_groups: Array; + allow_global_tags: boolean; + required_tag_groups: Array<{ + name: string; + min_count: number; + }>; + read_only_banner: string | null; + uploaded_logo: string | null; + uploaded_logo_dark: string | null; + uploaded_background: string | null; + uploaded_background_dark: string | null; + can_edit: boolean; + custom_fields?: { + [key: string]: unknown; + } | null; + parent_category_id?: number; + form_template_ids?: Array; + }>; + archetypes: Array<{ + id: string; + name: string; + options: Array; + }>; + user_fields: Array; + auth_providers: Array; + whispers_allowed_groups_names?: Array; + denied_emojis?: Array; + valid_flag_applies_to_types?: Array; + navigation_menu_site_top_tags?: Array; + full_name_required_for_signup: boolean; + full_name_visible_in_signup: boolean; + }; +}; + +export type GetSiteResponse = GetSiteResponses[keyof GetSiteResponses]; + +export type GetSiteBasicInfoData = { + body?: never; + path?: never; + query?: never; + url: '/site/basic-info.json'; +}; + +export type GetSiteBasicInfoResponses = { + /** + * success response + */ + 200: { + logo_url: string; + logo_small_url: string; + apple_touch_icon_url: string; + favicon_url: string; + title: string; + description: string; + header_primary_color: string; + header_background_color: string; + login_required: boolean; + locale: string; + include_in_discourse_discover: boolean; + mobile_logo_url: string; + }; +}; + +export type GetSiteBasicInfoResponse = GetSiteBasicInfoResponses[keyof GetSiteBasicInfoResponses]; + +export type ListTagGroupsData = { + body?: never; + path?: never; + query?: never; + url: '/tag_groups.json'; +}; + +export type ListTagGroupsResponses = { + /** + * tags + */ + 200: { + tag_groups?: Array<{ + id?: number; + name?: string; + tag_names?: Array; + parent_tag_name?: Array; + one_per_topic?: boolean; + permissions?: { + staff?: number; + }; + }>; + }; +}; + +export type ListTagGroupsResponse = ListTagGroupsResponses[keyof ListTagGroupsResponses]; + +export type CreateTagGroupData = { + body?: { + name: string; + }; + path?: never; + query?: never; + url: '/tag_groups.json'; +}; + +export type CreateTagGroupResponses = { + /** + * tag group created + */ + 200: { + tag_group: { + id: number; + name: string; + tag_names: Array; + parent_tag_name: Array; + one_per_topic: boolean; + permissions: { + [key: string]: unknown; + }; + }; + }; +}; + +export type CreateTagGroupResponse = CreateTagGroupResponses[keyof CreateTagGroupResponses]; + +export type GetTagGroupData = { + body?: never; + path: { + id: string; + }; + query?: never; + url: '/tag_groups/{id}.json'; +}; + +export type GetTagGroupResponses = { + /** + * notifications + */ + 200: { + tag_group?: { + id?: number; + name?: string; + tag_names?: Array; + parent_tag_name?: Array; + one_per_topic?: boolean; + permissions?: { + everyone?: number; + }; + }; + }; +}; + +export type GetTagGroupResponse = GetTagGroupResponses[keyof GetTagGroupResponses]; + +export type UpdateTagGroupData = { + body?: { + name?: string; + }; + path: { + id: string; + }; + query?: never; + url: '/tag_groups/{id}.json'; +}; + +export type UpdateTagGroupResponses = { + /** + * Tag group updated + */ + 200: { + success?: string; + tag_group?: { + id?: number; + name?: string; + tag_names?: Array; + parent_tag_name?: Array; + one_per_topic?: boolean; + permissions?: { + everyone?: number; + }; + }; + }; +}; + +export type UpdateTagGroupResponse = UpdateTagGroupResponses[keyof UpdateTagGroupResponses]; + +export type ListTagsData = { + body?: never; + path?: never; + query?: never; + url: '/tags.json'; +}; + +export type ListTagsResponses = { + /** + * notifications + */ + 200: { + tags?: Array<{ + id?: string; + text?: string; + count?: number; + pm_count?: number; + target_tag?: string | null; + }>; + extras?: { + categories?: Array; + }; + }; +}; + +export type ListTagsResponse = ListTagsResponses[keyof ListTagsResponses]; + +export type GetTagData = { + body?: never; + path: { + name: string; + }; + query?: never; + url: '/tag/{name}.json'; +}; + +export type GetTagResponses = { + /** + * notifications + */ + 200: { + users?: Array<{ + id?: number; + username?: string; + name?: string | null; + avatar_template?: string; + }>; + primary_groups?: Array; + topic_list?: { + can_create_topic?: boolean; + draft?: string | null; + draft_key?: string; + draft_sequence?: number; + per_page?: number; + tags?: Array<{ + id?: number; + name?: string; + topic_count?: number; + staff?: boolean; + }>; + topics?: Array<{ + id?: number; + title?: string; + fancy_title?: string; + slug?: string; + posts_count?: number; + reply_count?: number; + highest_post_number?: number; + image_url?: string | null; + created_at?: string; + last_posted_at?: string; + bumped?: boolean; + bumped_at?: string; + archetype?: string; + unseen?: boolean; + last_read_post_number?: number; + unread_posts?: number; + pinned?: boolean; + unpinned?: string | null; + visible?: boolean; + closed?: boolean; + archived?: boolean; + notification_level?: number; + bookmarked?: boolean; + liked?: boolean; + tags?: Array; + views?: number; + like_count?: number; + has_summary?: boolean; + last_poster_username?: string; + category_id?: number; + pinned_globally?: boolean; + featured_link?: string | null; + posters?: Array<{ + extras?: string; + description?: string; + user_id?: number; + primary_group_id?: number | null; + }>; + }>; + }; + }; +}; + +export type GetTagResponse = GetTagResponses[keyof GetTagResponses]; + +export type GetSpecificPostsFromTopicData = { + body?: { + 'post_ids[]': number; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}/posts.json'; +}; + +export type GetSpecificPostsFromTopicResponses = { + /** + * specific posts + */ + 200: { + post_stream?: { + posts?: Array<{ + id?: number; + name?: string | null; + username?: string; + avatar_template?: string; + created_at?: string; + cooked?: string; + post_number?: number; + post_type?: number; + updated_at?: string; + reply_count?: number; + reply_to_post_number?: string | null; + quote_count?: number; + incoming_link_count?: number; + reads?: number; + readers_count?: number; + score?: number; + yours?: boolean; + topic_id?: number; + topic_slug?: string; + display_username?: string | null; + primary_group_name?: string | null; + flair_name?: string | null; + flair_url?: string | null; + flair_bg_color?: string | null; + flair_color?: string | null; + version?: number; + can_edit?: boolean; + can_delete?: boolean; + can_recover?: boolean; + can_wiki?: boolean; + read?: boolean; + user_title?: string | null; + actions_summary?: Array<{ + id?: number; + can_act?: boolean; + }>; + moderator?: boolean; + admin?: boolean; + staff?: boolean; + user_id?: number; + hidden?: boolean; + trust_level?: number; + deleted_at?: string | null; + user_deleted?: boolean; + edit_reason?: string | null; + can_view_edit_history?: boolean; + wiki?: boolean; + reviewable_id?: number; + reviewable_score_count?: number; + reviewable_score_pending_count?: number; + }>; + }; + id?: number; + }; +}; + +export type GetSpecificPostsFromTopicResponse = GetSpecificPostsFromTopicResponses[keyof GetSpecificPostsFromTopicResponses]; + +export type RemoveTopicData = { + body?: never; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}.json'; +}; + +export type RemoveTopicResponses = { + /** + * specific posts + */ + 200: unknown; +}; + +export type GetTopicData = { + body?: never; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}.json'; +}; + +export type GetTopicResponses = { + /** + * specific posts + */ + 200: { + post_stream: { + posts: Array<{ + id: number; + name: string; + username: string; + avatar_template: string; + created_at: string; + cooked: string; + post_number: number; + post_type: number; + updated_at: string; + reply_count: number; + reply_to_post_number: string | null; + quote_count: number; + incoming_link_count: number; + reads: number; + readers_count: number; + score: number; + yours: boolean; + topic_id: number; + topic_slug: string; + display_username: string; + primary_group_name: string | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + version: number; + can_edit: boolean; + can_delete: boolean; + can_recover: boolean; + can_see_hidden_post?: boolean; + can_wiki: boolean; + link_counts: Array<{ + url: string; + internal: boolean; + reflection: boolean; + title: string; + clicks: number; + }>; + read: boolean; + user_title: string | null; + bookmarked: boolean; + actions_summary: Array<{ + id: number; + can_act: boolean; + }>; + moderator: boolean; + admin: boolean; + staff: boolean; + user_id: number; + hidden: boolean; + trust_level: number; + deleted_at: string | null; + user_deleted: boolean; + edit_reason: string | null; + can_view_edit_history: boolean; + wiki: boolean; + reviewable_id: number; + reviewable_score_count: number; + reviewable_score_pending_count: number; + }>; + stream: Array; + }; + timeline_lookup: Array; + suggested_topics: Array<{ + id: number; + title: string; + fancy_title: string; + slug: string; + posts_count: number; + reply_count: number; + highest_post_number: number; + image_url: string | null; + created_at: string; + last_posted_at: string | null; + bumped: boolean; + bumped_at: string; + archetype: string; + unseen: boolean; + pinned: boolean; + unpinned: string | null; + excerpt: string; + visible: boolean; + closed: boolean; + archived: boolean; + bookmarked: string | null; + liked: string | null; + tags: Array; + tags_descriptions: { + [key: string]: never; + }; + like_count: number; + views: number; + category_id: number; + featured_link: string | null; + posters: Array<{ + extras: string; + description: string; + user: { + id: number; + username: string; + name: string; + avatar_template: string; + }; + }>; + }>; + tags: Array; + tags_descriptions: { + [key: string]: never; + }; + id: number; + title: string; + fancy_title: string; + posts_count: number; + created_at: string; + views: number; + reply_count: number; + like_count: number; + last_posted_at: string | null; + visible: boolean; + closed: boolean; + archived: boolean; + has_summary: boolean; + archetype: string; + slug: string; + category_id: number; + word_count: number | null; + deleted_at: string | null; + user_id: number; + featured_link: string | null; + pinned_globally: boolean; + pinned_at: string | null; + pinned_until: string | null; + image_url: string | null; + slow_mode_seconds: number; + draft: string | null; + draft_key: string; + draft_sequence: number; + unpinned: string | null; + pinned: boolean; + current_post_number?: number; + highest_post_number: number | null; + deleted_by: string | null; + has_deleted: boolean; + actions_summary: Array<{ + id: number; + count: number; + hidden: boolean; + can_act: boolean; + }>; + chunk_size: number; + bookmarked: boolean; + bookmarks: Array; + topic_timer: string | null; + message_bus_last_id: number; + participant_count: number; + show_read_indicator: boolean; + thumbnails: string | null; + slow_mode_enabled_until: string | null; + details: { + can_edit: boolean; + notification_level: number; + can_move_posts: boolean; + can_delete: boolean; + can_remove_allowed_users: boolean; + can_create_post: boolean; + can_reply_as_new_topic: boolean; + can_invite_to?: boolean; + can_invite_via_email?: boolean; + can_flag_topic?: boolean; + can_convert_topic: boolean; + can_review_topic: boolean; + can_close_topic: boolean; + can_archive_topic: boolean; + can_split_merge_topic: boolean; + can_edit_staff_notes: boolean; + can_toggle_topic_visibility: boolean; + can_pin_unpin_topic: boolean; + can_moderate_category: boolean; + can_remove_self_id: number; + participants?: Array<{ + id: number; + username: string; + name: string; + avatar_template: string; + post_count: number; + primary_group_name: string | null; + flair_name: string | null; + flair_url: string | null; + flair_color: string | null; + flair_bg_color: string | null; + flair_group_id?: number | null; + admin: boolean; + moderator: boolean; + trust_level: number; + }>; + created_by: { + id: number; + username: string; + name: string; + avatar_template: string; + }; + last_poster: { + id: number; + username: string; + name: string; + avatar_template: string; + }; + }; + }; +}; + +export type GetTopicResponse = GetTopicResponses[keyof GetTopicResponses]; + +export type UpdateTopicData = { + body?: { + topic?: { + title?: string; + category_id?: number; + }; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/-/{id}.json'; +}; + +export type UpdateTopicResponses = { + /** + * topic updated + */ + 200: { + basic_topic?: { + id?: number; + title?: string; + fancy_title?: string; + slug?: string; + posts_count?: number; + }; + }; +}; + +export type UpdateTopicResponse = UpdateTopicResponses[keyof UpdateTopicResponses]; + +export type InviteToTopicData = { + body?: { + user?: string; + email?: string; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}/invite.json'; +}; + +export type InviteToTopicResponses = { + /** + * topic updated + */ + 200: { + user?: { + id?: number; + username?: string; + name?: string; + avatar_template?: string; + }; + }; +}; + +export type InviteToTopicResponse = InviteToTopicResponses[keyof InviteToTopicResponses]; + +export type InviteGroupToTopicData = { + body?: { + /** + * The name of the group to invite + */ + group?: string; + /** + * Whether to notify the group, it defaults to true + */ + should_notify?: boolean; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}/invite-group.json'; +}; + +export type InviteGroupToTopicResponses = { + /** + * invites to a PM + */ + 200: { + group?: { + id?: number; + name?: string; + }; + }; +}; + +export type InviteGroupToTopicResponse = InviteGroupToTopicResponses[keyof InviteGroupToTopicResponses]; + +export type BookmarkTopicData = { + body?: never; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}/bookmark.json'; +}; + +export type BookmarkTopicResponses = { + /** + * topic updated + */ + 200: unknown; +}; + +export type UpdateTopicStatusData = { + body?: { + status: 'closed' | 'pinned' | 'pinned_globally' | 'archived' | 'visible'; + enabled: 'true' | 'false'; + /** + * Only required for `pinned` and `pinned_globally` + */ + until?: string; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}/status.json'; +}; + +export type UpdateTopicStatusResponses = { + /** + * topic updated + */ + 200: { + success?: string; + topic_status_update?: string | null; + }; +}; + +export type UpdateTopicStatusResponse = UpdateTopicStatusResponses[keyof UpdateTopicStatusResponses]; + +export type ListLatestTopicsData = { + body?: never; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path?: never; + query?: { + /** + * Enum: `default`, `created`, `activity`, `views`, `posts`, `category`, + * `likes`, `op_likes`, `posters` + */ + order?: string; + /** + * Defaults to `desc`, add `ascending=true` to sort asc + */ + ascending?: string; + /** + * Maximum number of topics returned, between 1-100 + */ + per_page?: number; + }; + url: '/latest.json'; +}; + +export type ListLatestTopicsResponses = { + /** + * topic updated + */ + 200: { + users?: Array<{ + id?: number; + username?: string; + name?: string | null; + avatar_template?: string; + }>; + primary_groups?: Array; + topic_list?: { + can_create_topic?: boolean; + draft?: string | null; + draft_key?: string; + draft_sequence?: number; + per_page?: number; + topics?: Array<{ + id?: number; + title?: string; + fancy_title?: string; + slug?: string; + posts_count?: number; + reply_count?: number; + highest_post_number?: number; + image_url?: string; + created_at?: string; + last_posted_at?: string; + bumped?: boolean; + bumped_at?: string; + archetype?: string; + unseen?: boolean; + last_read_post_number?: number; + unread_posts?: number; + pinned?: boolean; + unpinned?: string | null; + visible?: boolean; + closed?: boolean; + archived?: boolean; + notification_level?: number; + bookmarked?: boolean; + liked?: boolean; + views?: number; + like_count?: number; + has_summary?: boolean; + last_poster_username?: string; + category_id?: number; + op_like_count?: number; + pinned_globally?: boolean; + featured_link?: string | null; + posters?: Array<{ + extras?: string; + description?: string; + user_id?: number; + primary_group_id?: number | null; + }>; + }>; + }; + }; +}; + +export type ListLatestTopicsResponse = ListLatestTopicsResponses[keyof ListLatestTopicsResponses]; + +export type ListTopTopicsData = { + body?: never; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path?: never; + query?: { + /** + * Enum: `all`, `yearly`, `quarterly`, `monthly`, `weekly`, `daily` + */ + period?: string; + /** + * Maximum number of topics returned, between 1-100 + */ + per_page?: number; + }; + url: '/top.json'; +}; + +export type ListTopTopicsResponses = { + /** + * response + */ + 200: { + users?: Array<{ + id?: number; + username?: string; + name?: string; + avatar_template?: string; + }>; + primary_groups?: Array; + topic_list?: { + can_create_topic?: boolean; + draft?: string | null; + draft_key?: string; + draft_sequence?: number; + for_period?: string; + per_page?: number; + topics?: Array<{ + id?: number; + title?: string; + fancy_title?: string; + slug?: string; + posts_count?: number; + reply_count?: number; + highest_post_number?: number; + image_url?: string | null; + created_at?: string; + last_posted_at?: string; + bumped?: boolean; + bumped_at?: string; + archetype?: string; + unseen?: boolean; + last_read_post_number?: number; + unread_posts?: number; + pinned?: boolean; + unpinned?: boolean; + visible?: boolean; + closed?: boolean; + archived?: boolean; + notification_level?: number; + bookmarked?: boolean; + liked?: boolean; + views?: number; + like_count?: number; + has_summary?: boolean; + last_poster_username?: string; + category_id?: number; + op_like_count?: number; + pinned_globally?: boolean; + featured_link?: string | null; + posters?: Array<{ + extras?: string | null; + description?: string; + user_id?: number; + primary_group_id?: number | null; + }>; + }>; + }; + }; +}; + +export type ListTopTopicsResponse = ListTopTopicsResponses[keyof ListTopTopicsResponses]; + +export type SetNotificationLevelData = { + body?: { + notification_level: '0' | '1' | '2' | '3'; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}/notifications.json'; +}; + +export type SetNotificationLevelResponses = { + /** + * topic updated + */ + 200: { + success?: string; + }; +}; + +export type SetNotificationLevelResponse = SetNotificationLevelResponses[keyof SetNotificationLevelResponses]; + +export type UpdateTopicTimestampData = { + body?: { + timestamp: string; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}/change-timestamp.json'; +}; + +export type UpdateTopicTimestampResponses = { + /** + * topic updated + */ + 200: { + success?: string; + }; +}; + +export type UpdateTopicTimestampResponse = UpdateTopicTimestampResponses[keyof UpdateTopicTimestampResponses]; + +export type CreateTopicTimerData = { + body?: { + time?: string; + status_type?: string; + based_on_last_post?: boolean; + category_id?: number; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}/timer.json'; +}; + +export type CreateTopicTimerResponses = { + /** + * topic updated + */ + 200: { + success?: string; + execute_at?: string; + duration?: string | null; + based_on_last_post?: boolean; + closed?: boolean; + category_id?: number | null; + }; +}; + +export type CreateTopicTimerResponse = CreateTopicTimerResponses[keyof CreateTopicTimerResponses]; + +export type GetTopicByExternalIdData = { + body?: never; + path: { + external_id: string; + }; + query?: never; + url: '/t/external_id/{external_id}.json'; +}; + +export type CreateUploadData = { + body?: { + type: 'avatar' | 'profile_background' | 'card_background' | 'custom_emoji' | 'composer'; + /** + * required if uploading an avatar + */ + user_id?: number; + /** + * Use this flag to return an id and url + */ + synchronous?: boolean; + file?: Blob | File; + }; + path?: never; + query?: never; + url: '/uploads.json'; +}; + +export type CreateUploadResponses = { + /** + * file uploaded + */ + 200: { + id: number; + url: string; + original_filename: string; + filesize: number; + width: number; + height: number; + thumbnail_width: number; + thumbnail_height: number; + extension: string; + short_url: string; + short_path: string; + retain_hours: string | null; + human_filesize: string; + dominant_color?: string | null; + thumbnail?: { + id?: number; + upload_id?: number; + url?: string; + extension?: string; + width?: number; + height?: number; + filesize?: number; + } | null; + }; +}; + +export type CreateUploadResponse = CreateUploadResponses[keyof CreateUploadResponses]; + +export type GeneratePresignedPutData = { + body?: { + type: 'avatar' | 'profile_background' | 'card_background' | 'custom_emoji' | 'composer'; + file_name: string; + /** + * File size should be represented in bytes. + */ + file_size: number; + metadata?: { + /** + * The SHA1 checksum of the upload binary blob. Optionally + * be provided and serves as an additional security check when + * later processing the file in complete-external-upload endpoint. + */ + 'sha1-checksum'?: string; + }; + }; + path?: never; + query?: never; + url: '/uploads/generate-presigned-put.json'; +}; + +export type GeneratePresignedPutResponses = { + /** + * external upload initialized + */ + 200: { + /** + * The path of the temporary file on the external storage + * service. + */ + key?: string; + /** + * A presigned PUT URL which must be used to upload + * the file binary blob to. + */ + url?: string; + /** + * A map of headers that must be sent with the PUT request. + */ + signed_headers?: { + [key: string]: unknown; + }; + /** + * A unique string that identifies the external upload. + * This must be stored and then sent in the /complete-external-upload + * endpoint to complete the direct upload. + */ + unique_identifier?: string; + }; +}; + +export type GeneratePresignedPutResponse = GeneratePresignedPutResponses[keyof GeneratePresignedPutResponses]; + +export type CompleteExternalUploadData = { + body?: { + /** + * The unique identifier returned in the original /generate-presigned-put + * request. + */ + unique_identifier: string; + /** + * Optionally set this to true if the upload is for a + * private message. + */ + for_private_message?: string; + /** + * Optionally set this to true if the upload is for a + * site setting. + */ + for_site_setting?: string; + /** + * Optionally set this to true if the upload was pasted + * into the upload area. This will convert PNG files to JPEG. + */ + pasted?: string; + }; + path?: never; + query?: never; + url: '/uploads/complete-external-upload.json'; +}; + +export type CompleteExternalUploadResponses = { + /** + * external upload initialized + */ + 200: { + id: number; + url: string; + original_filename: string; + filesize: number; + width: number; + height: number; + thumbnail_width: number; + thumbnail_height: number; + extension: string; + short_url: string; + short_path: string; + retain_hours: string | null; + human_filesize: string; + dominant_color?: string | null; + thumbnail?: { + id?: number; + upload_id?: number; + url?: string; + extension?: string; + width?: number; + height?: number; + filesize?: number; + } | null; + }; +}; + +export type CompleteExternalUploadResponse = CompleteExternalUploadResponses[keyof CompleteExternalUploadResponses]; + +export type CreateMultipartUploadData = { + body?: { + upload_type: 'avatar' | 'profile_background' | 'card_background' | 'custom_emoji' | 'composer'; + file_name: string; + /** + * File size should be represented in bytes. + */ + file_size: number; + metadata?: { + /** + * The SHA1 checksum of the upload binary blob. Optionally + * be provided and serves as an additional security check when + * later processing the file in complete-external-upload endpoint. + */ + 'sha1-checksum'?: string; + }; + }; + path?: never; + query?: never; + url: '/uploads/create-multipart.json'; +}; + +export type CreateMultipartUploadResponses = { + /** + * external upload initialized + */ + 200: { + /** + * The path of the temporary file on the external storage + * service. + */ + key: string; + /** + * The identifier of the multipart upload in the external + * storage provider. This is the multipart upload_id in AWS S3. + */ + external_upload_identifier: string; + /** + * A unique string that identifies the external upload. + * This must be stored and then sent in the /complete-multipart + * and /batch-presign-multipart-parts endpoints. + */ + unique_identifier: string; + }; +}; + +export type CreateMultipartUploadResponse = CreateMultipartUploadResponses[keyof CreateMultipartUploadResponses]; + +export type BatchPresignMultipartPartsData = { + body?: { + /** + * The part numbers to generate the presigned URLs for, + * must be between 1 and 10000. + */ + part_numbers: Array; + /** + * The unique identifier returned in the original /create-multipart + * request. + */ + unique_identifier: string; + }; + path?: never; + query?: never; + url: '/uploads/batch-presign-multipart-parts.json'; +}; + +export type BatchPresignMultipartPartsResponses = { + /** + * external upload initialized + */ + 200: { + /** + * The presigned URLs for each part number, which has + * the part numbers as keys. + */ + presigned_urls: { + [key: string]: unknown; + }; + }; +}; + +export type BatchPresignMultipartPartsResponse = BatchPresignMultipartPartsResponses[keyof BatchPresignMultipartPartsResponses]; + +export type AbortMultipartData = { + body?: { + /** + * The identifier of the multipart upload in the external + * storage provider. This is the multipart upload_id in AWS S3. + */ + external_upload_identifier: string; + }; + path?: never; + query?: never; + url: '/uploads/abort-multipart.json'; +}; + +export type AbortMultipartResponses = { + /** + * external upload initialized + */ + 200: { + success: string; + }; +}; + +export type AbortMultipartResponse = AbortMultipartResponses[keyof AbortMultipartResponses]; + +export type CompleteMultipartData = { + body?: { + /** + * The unique identifier returned in the original /create-multipart + * request. + */ + unique_identifier: string; + /** + * All of the part numbers and their corresponding ETags + * that have been uploaded must be provided. + */ + parts: Array; + }; + path?: never; + query?: never; + url: '/uploads/complete-multipart.json'; +}; + +export type CompleteMultipartResponses = { + /** + * external upload initialized + */ + 200: { + id: number; + url: string; + original_filename: string; + filesize: number; + width: number; + height: number; + thumbnail_width: number; + thumbnail_height: number; + extension: string; + short_url: string; + short_path: string; + retain_hours: string | null; + human_filesize: string; + dominant_color?: string | null; + thumbnail?: { + id?: number; + upload_id?: number; + url?: string; + extension?: string; + width?: number; + height?: number; + filesize?: number; + } | null; + }; +}; + +export type CompleteMultipartResponse = CompleteMultipartResponses[keyof CompleteMultipartResponses]; + +export type ListUserBadgesData = { + body?: never; + path: { + username: string; + }; + query?: never; + url: '/user-badges/{username}.json'; +}; + +export type ListUserBadgesResponses = { + /** + * success response + */ + 200: { + badges?: Array<{ + id: number; + name: string; + description: string; + grant_count: number; + allow_title: boolean; + multiple_grant: boolean; + icon: string; + image_url: string | null; + listable: boolean; + enabled: boolean; + badge_grouping_id: number; + system: boolean; + slug: string; + manually_grantable: boolean; + badge_type_id: number; + }>; + badge_types?: Array<{ + id: number; + name: string; + sort_order: number; + }>; + granted_bies?: Array<{ + id: number; + username: string; + name: string; + avatar_template: string; + flair_name: string | null; + admin: boolean; + moderator: boolean; + trust_level: number; + }>; + user_badges: Array<{ + id: number; + granted_at: string; + grouping_position: number; + is_favorite: string | null; + can_favorite: boolean; + badge_id: number; + granted_by_id: number; + }>; + }; +}; + +export type ListUserBadgesResponse = ListUserBadgesResponses[keyof ListUserBadgesResponses]; + +export type CreateUserData = { + body?: { + name: string; + email: string; + password: string; + username: string; + /** + * This param requires an api key in the request header + * or it will be ignored + */ + active?: boolean; + approved?: boolean; + user_fields?: { + 1?: boolean; + [key: string]: unknown | boolean | undefined; + }; + external_ids?: { + [key: string]: unknown; + }; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path?: never; + query?: never; + url: '/users.json'; +}; + +export type CreateUserResponses = { + /** + * user created + */ + 200: { + success: boolean; + active: boolean; + message: string; + user_id?: number; + }; +}; + +export type CreateUserResponse = CreateUserResponses[keyof CreateUserResponses]; + +export type GetUserData = { + body?: never; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + username: string; + }; + query?: never; + url: '/u/{username}.json'; +}; + +export type GetUserResponses = { + /** + * user with primary group response + */ + 200: { + user_badges: Array; + user: { + id: number; + username: string; + name: string; + avatar_template: string; + last_posted_at: string | null; + last_seen_at: string | null; + created_at: string; + ignored: boolean; + muted: boolean; + can_ignore_user: boolean; + can_ignore_users?: boolean; + can_mute_user: boolean; + can_mute_users?: boolean; + can_send_private_messages: boolean; + can_send_private_message_to_user: boolean; + trust_level: number; + moderator: boolean; + admin: boolean; + title: string | null; + badge_count: number; + second_factor_backup_enabled?: boolean; + user_fields?: { + 1: string | null; + 2: string | null; + }; + custom_fields: { + first_name?: string | null; + }; + time_read: number; + recent_time_read: number; + primary_group_id: number | null; + primary_group_name: string | null; + flair_group_id: number | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + featured_topic: string | null; + staged: boolean; + can_edit: boolean; + can_edit_username: boolean; + can_edit_email: boolean; + can_edit_name: boolean; + uploaded_avatar_id: number | null; + has_title_badges: boolean; + pending_count: number; + pending_posts_count?: number; + profile_view_count: number; + second_factor_enabled: boolean; + can_upload_profile_header: boolean; + can_upload_user_card_background: boolean; + post_count: number; + can_be_deleted: boolean; + can_delete_all_posts: boolean; + locale: string | null; + muted_category_ids: Array; + regular_category_ids: Array; + watched_tags: Array; + watching_first_post_tags: Array; + tracked_tags: Array; + muted_tags: Array; + tracked_category_ids: Array; + watched_category_ids: Array; + watched_first_post_category_ids: Array; + system_avatar_upload_id: string | null; + system_avatar_template: string; + muted_usernames: Array; + ignored_usernames: Array; + allowed_pm_usernames: Array; + mailing_list_posts_per_day: number; + can_change_bio: boolean; + can_change_location: boolean; + can_change_website: boolean; + can_change_tracking_preferences: boolean; + user_api_keys: string | null; + user_passkeys?: Array; + sidebar_tags?: Array; + sidebar_category_ids?: Array; + display_sidebar_tags?: boolean; + can_pick_theme_with_custom_homepage?: boolean; + user_auth_tokens: Array<{ + id: number; + client_ip: string; + location: string; + browser: string; + device: string; + os: string; + icon: string; + created_at: string; + seen_at: string; + is_active: boolean; + }>; + user_notification_schedule: { + enabled: boolean; + day_0_start_time: number; + day_0_end_time: number; + day_1_start_time: number; + day_1_end_time: number; + day_2_start_time: number; + day_2_end_time: number; + day_3_start_time: number; + day_3_end_time: number; + day_4_start_time: number; + day_4_end_time: number; + day_5_start_time: number; + day_5_end_time: number; + day_6_start_time: number; + day_6_end_time: number; + }; + use_logo_small_as_avatar: boolean; + featured_user_badge_ids: Array; + invited_by: string | null; + groups: Array<{ + id: number; + automatic: boolean; + name: string; + display_name: string; + user_count: number; + mentionable_level: number; + messageable_level: number; + visibility_level: number; + primary_group: boolean; + title: string | null; + grant_trust_level: string | null; + incoming_email: string | null; + has_messages: boolean; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + bio_raw: string | null; + bio_cooked: string | null; + bio_excerpt: string | null; + public_admission: boolean; + public_exit: boolean; + allow_membership_requests: boolean; + full_name: string | null; + default_notification_level: number; + membership_request_template: string | null; + members_visibility_level: number; + can_see_members: boolean; + can_admin_group: boolean; + publish_read_state: boolean; + }>; + group_users: Array<{ + group_id: number; + user_id: number; + notification_level: number; + owner?: boolean; + }>; + user_option: { + user_id: number; + mailing_list_mode: boolean; + mailing_list_mode_frequency: number; + email_digests: boolean; + email_level: number; + email_messages_level: number; + external_links_in_new_tab: boolean; + bookmark_auto_delete_preference?: number; + color_scheme_id: string | null; + dark_scheme_id: string | null; + dynamic_favicon: boolean; + enable_quoting: boolean; + enable_smart_lists: boolean; + enable_defer: boolean; + digest_after_minutes: number; + automatically_unpin_topics: boolean; + auto_track_topics_after_msecs: number; + notification_level_when_replying: number; + new_topic_duration_minutes: number; + email_previous_replies: number; + email_in_reply_to: boolean; + like_notification_frequency: number; + include_tl0_in_digests: boolean; + theme_ids: Array; + theme_key_seq: number; + allow_private_messages: boolean; + enable_allowed_pm_users: boolean; + homepage_id: string | null; + hide_profile_and_presence: boolean; + hide_profile: boolean; + hide_presence: boolean; + text_size: string; + text_size_seq: number; + title_count_mode: string; + timezone: string | null; + skip_new_user_tips: boolean; + default_calendar?: string; + oldest_search_log_date?: string | null; + sidebar_link_to_filtered_list?: boolean; + sidebar_show_count_of_new_items?: boolean; + watched_precedence_over_muted?: boolean | null; + seen_popups?: Array | null; + topics_unread_when_closed: boolean; + }; + }; + }; +}; + +export type GetUserResponse = GetUserResponses[keyof GetUserResponses]; + +export type UpdateUserData = { + body?: { + name?: string; + external_ids?: { + [key: string]: unknown; + }; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + username: string; + }; + query?: never; + url: '/u/{username}.json'; +}; + +export type UpdateUserResponses = { + /** + * user updated + */ + 200: { + success: string; + user: { + [key: string]: unknown; + }; + }; +}; + +export type UpdateUserResponse = UpdateUserResponses[keyof UpdateUserResponses]; + +export type GetUserExternalIdData = { + body?: never; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + external_id: string; + }; + query?: never; + url: '/u/by-external/{external_id}.json'; +}; + +export type GetUserExternalIdResponses = { + /** + * user response + */ + 200: { + user_badges: Array; + user: { + id: number; + username: string; + name: string; + avatar_template: string; + last_posted_at: string | null; + last_seen_at: string | null; + created_at: string; + ignored: boolean; + muted: boolean; + can_ignore_user: boolean; + can_ignore_users?: boolean; + can_mute_user: boolean; + can_mute_users?: boolean; + can_send_private_messages: boolean; + can_send_private_message_to_user: boolean; + trust_level: number; + moderator: boolean; + admin: boolean; + title: string | null; + badge_count: number; + second_factor_backup_enabled?: boolean; + user_fields?: { + 1: string | null; + 2: string | null; + }; + custom_fields: { + first_name?: string | null; + }; + time_read: number; + recent_time_read: number; + primary_group_id: number | null; + primary_group_name: string | null; + flair_group_id: number | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + featured_topic: string | null; + staged: boolean; + can_edit: boolean; + can_edit_username: boolean; + can_edit_email: boolean; + can_edit_name: boolean; + uploaded_avatar_id: number | null; + has_title_badges: boolean; + pending_count: number; + pending_posts_count?: number; + profile_view_count: number; + second_factor_enabled: boolean; + can_upload_profile_header: boolean; + can_upload_user_card_background: boolean; + post_count: number; + can_be_deleted: boolean; + can_delete_all_posts: boolean; + locale: string | null; + muted_category_ids: Array; + regular_category_ids: Array; + watched_tags: Array; + watching_first_post_tags: Array; + tracked_tags: Array; + muted_tags: Array; + tracked_category_ids: Array; + watched_category_ids: Array; + watched_first_post_category_ids: Array; + system_avatar_upload_id: string | null; + system_avatar_template: string; + muted_usernames: Array; + ignored_usernames: Array; + allowed_pm_usernames: Array; + mailing_list_posts_per_day: number; + can_change_bio: boolean; + can_change_location: boolean; + can_change_website: boolean; + can_change_tracking_preferences: boolean; + user_api_keys: string | null; + user_passkeys?: Array; + sidebar_tags?: Array; + sidebar_category_ids?: Array; + display_sidebar_tags?: boolean; + can_pick_theme_with_custom_homepage?: boolean; + user_auth_tokens: Array<{ + id: number; + client_ip: string; + location: string; + browser: string; + device: string; + os: string; + icon: string; + created_at: string; + seen_at: string; + is_active: boolean; + }>; + user_notification_schedule: { + enabled: boolean; + day_0_start_time: number; + day_0_end_time: number; + day_1_start_time: number; + day_1_end_time: number; + day_2_start_time: number; + day_2_end_time: number; + day_3_start_time: number; + day_3_end_time: number; + day_4_start_time: number; + day_4_end_time: number; + day_5_start_time: number; + day_5_end_time: number; + day_6_start_time: number; + day_6_end_time: number; + }; + use_logo_small_as_avatar: boolean; + featured_user_badge_ids: Array; + invited_by: string | null; + groups: Array<{ + id: number; + automatic: boolean; + name: string; + display_name: string; + user_count: number; + mentionable_level: number; + messageable_level: number; + visibility_level: number; + primary_group: boolean; + title: string | null; + grant_trust_level: string | null; + incoming_email: string | null; + has_messages: boolean; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + bio_raw: string | null; + bio_cooked: string | null; + bio_excerpt: string | null; + public_admission: boolean; + public_exit: boolean; + allow_membership_requests: boolean; + full_name: string | null; + default_notification_level: number; + membership_request_template: string | null; + members_visibility_level: number; + can_see_members: boolean; + can_admin_group: boolean; + publish_read_state: boolean; + }>; + group_users: Array<{ + group_id: number; + user_id: number; + notification_level: number; + owner?: boolean; + }>; + user_option: { + user_id: number; + mailing_list_mode: boolean; + mailing_list_mode_frequency: number; + email_digests: boolean; + email_level: number; + email_messages_level: number; + external_links_in_new_tab: boolean; + bookmark_auto_delete_preference?: number; + color_scheme_id: string | null; + dark_scheme_id: string | null; + dynamic_favicon: boolean; + enable_quoting: boolean; + enable_smart_lists: boolean; + enable_defer: boolean; + digest_after_minutes: number; + automatically_unpin_topics: boolean; + auto_track_topics_after_msecs: number; + notification_level_when_replying: number; + new_topic_duration_minutes: number; + email_previous_replies: number; + email_in_reply_to: boolean; + like_notification_frequency: number; + include_tl0_in_digests: boolean; + theme_ids: Array; + theme_key_seq: number; + allow_private_messages: boolean; + enable_allowed_pm_users: boolean; + homepage_id: string | null; + hide_profile_and_presence: boolean; + hide_profile: boolean; + hide_presence: boolean; + text_size: string; + text_size_seq: number; + title_count_mode: string; + timezone: string | null; + skip_new_user_tips: boolean; + default_calendar?: string; + oldest_search_log_date?: string | null; + sidebar_link_to_filtered_list?: boolean; + sidebar_show_count_of_new_items?: boolean; + watched_precedence_over_muted?: boolean | null; + seen_popups?: Array | null; + topics_unread_when_closed: boolean; + }; + }; + }; +}; + +export type GetUserExternalIdResponse = GetUserExternalIdResponses[keyof GetUserExternalIdResponses]; + +export type GetUserIdentiyProviderExternalIdData = { + body?: never; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + /** + * Authentication provider name. Can be found in the provider callback + * URL: `/auth/{provider}/callback` + */ + provider: string; + external_id: string; + }; + query?: never; + url: '/u/by-external/{provider}/{external_id}.json'; +}; + +export type GetUserIdentiyProviderExternalIdResponses = { + /** + * user response + */ + 200: { + user_badges: Array; + user: { + id: number; + username: string; + name: string; + avatar_template: string; + last_posted_at: string | null; + last_seen_at: string | null; + created_at: string; + ignored: boolean; + muted: boolean; + can_ignore_user: boolean; + can_ignore_users?: boolean; + can_mute_user: boolean; + can_mute_users?: boolean; + can_send_private_messages: boolean; + can_send_private_message_to_user: boolean; + trust_level: number; + moderator: boolean; + admin: boolean; + title: string | null; + badge_count: number; + second_factor_backup_enabled?: boolean; + user_fields?: { + 1: string | null; + 2: string | null; + }; + custom_fields: { + first_name?: string | null; + }; + time_read: number; + recent_time_read: number; + primary_group_id: number | null; + primary_group_name: string | null; + flair_group_id: number | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + featured_topic: string | null; + staged: boolean; + can_edit: boolean; + can_edit_username: boolean; + can_edit_email: boolean; + can_edit_name: boolean; + uploaded_avatar_id: number | null; + has_title_badges: boolean; + pending_count: number; + pending_posts_count?: number; + profile_view_count: number; + second_factor_enabled: boolean; + can_upload_profile_header: boolean; + can_upload_user_card_background: boolean; + post_count: number; + can_be_deleted: boolean; + can_delete_all_posts: boolean; + locale: string | null; + muted_category_ids: Array; + regular_category_ids: Array; + watched_tags: Array; + watching_first_post_tags: Array; + tracked_tags: Array; + muted_tags: Array; + tracked_category_ids: Array; + watched_category_ids: Array; + watched_first_post_category_ids: Array; + system_avatar_upload_id: string | null; + system_avatar_template: string; + muted_usernames: Array; + ignored_usernames: Array; + allowed_pm_usernames: Array; + mailing_list_posts_per_day: number; + can_change_bio: boolean; + can_change_location: boolean; + can_change_website: boolean; + can_change_tracking_preferences: boolean; + user_api_keys: string | null; + user_passkeys?: Array; + sidebar_tags?: Array; + sidebar_category_ids?: Array; + display_sidebar_tags?: boolean; + can_pick_theme_with_custom_homepage?: boolean; + user_auth_tokens: Array<{ + id: number; + client_ip: string; + location: string; + browser: string; + device: string; + os: string; + icon: string; + created_at: string; + seen_at: string; + is_active: boolean; + }>; + user_notification_schedule: { + enabled: boolean; + day_0_start_time: number; + day_0_end_time: number; + day_1_start_time: number; + day_1_end_time: number; + day_2_start_time: number; + day_2_end_time: number; + day_3_start_time: number; + day_3_end_time: number; + day_4_start_time: number; + day_4_end_time: number; + day_5_start_time: number; + day_5_end_time: number; + day_6_start_time: number; + day_6_end_time: number; + }; + use_logo_small_as_avatar: boolean; + featured_user_badge_ids: Array; + invited_by: string | null; + groups: Array<{ + id: number; + automatic: boolean; + name: string; + display_name: string; + user_count: number; + mentionable_level: number; + messageable_level: number; + visibility_level: number; + primary_group: boolean; + title: string | null; + grant_trust_level: string | null; + incoming_email: string | null; + has_messages: boolean; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + bio_raw: string | null; + bio_cooked: string | null; + bio_excerpt: string | null; + public_admission: boolean; + public_exit: boolean; + allow_membership_requests: boolean; + full_name: string | null; + default_notification_level: number; + membership_request_template: string | null; + members_visibility_level: number; + can_see_members: boolean; + can_admin_group: boolean; + publish_read_state: boolean; + }>; + group_users: Array<{ + group_id: number; + user_id: number; + notification_level: number; + owner?: boolean; + }>; + user_option: { + user_id: number; + mailing_list_mode: boolean; + mailing_list_mode_frequency: number; + email_digests: boolean; + email_level: number; + email_messages_level: number; + external_links_in_new_tab: boolean; + bookmark_auto_delete_preference?: number; + color_scheme_id: string | null; + dark_scheme_id: string | null; + dynamic_favicon: boolean; + enable_quoting: boolean; + enable_smart_lists: boolean; + enable_defer: boolean; + digest_after_minutes: number; + automatically_unpin_topics: boolean; + auto_track_topics_after_msecs: number; + notification_level_when_replying: number; + new_topic_duration_minutes: number; + email_previous_replies: number; + email_in_reply_to: boolean; + like_notification_frequency: number; + include_tl0_in_digests: boolean; + theme_ids: Array; + theme_key_seq: number; + allow_private_messages: boolean; + enable_allowed_pm_users: boolean; + homepage_id: string | null; + hide_profile_and_presence: boolean; + hide_profile: boolean; + hide_presence: boolean; + text_size: string; + text_size_seq: number; + title_count_mode: string; + timezone: string | null; + skip_new_user_tips: boolean; + default_calendar?: string; + oldest_search_log_date?: string | null; + sidebar_link_to_filtered_list?: boolean; + sidebar_show_count_of_new_items?: boolean; + watched_precedence_over_muted?: boolean | null; + seen_popups?: Array | null; + topics_unread_when_closed: boolean; + }; + }; + }; +}; + +export type GetUserIdentiyProviderExternalIdResponse = GetUserIdentiyProviderExternalIdResponses[keyof GetUserIdentiyProviderExternalIdResponses]; + +export type UpdateAvatarData = { + body?: { + upload_id: number; + type: 'uploaded' | 'custom' | 'gravatar' | 'system'; + }; + path: { + username: string; + }; + query?: never; + url: '/u/{username}/preferences/avatar/pick.json'; +}; + +export type UpdateAvatarResponses = { + /** + * avatar updated + */ + 200: { + success: string; + }; +}; + +export type UpdateAvatarResponse = UpdateAvatarResponses[keyof UpdateAvatarResponses]; + +export type UpdateEmailData = { + body?: { + email: string; + }; + path: { + username: string; + }; + query?: never; + url: '/u/{username}/preferences/email.json'; +}; + +export type UpdateEmailResponses = { + /** + * email updated + */ + 200: unknown; +}; + +export type UpdateUsernameData = { + body?: { + new_username: string; + }; + path: { + username: string; + }; + query?: never; + url: '/u/{username}/preferences/username.json'; +}; + +export type UpdateUsernameResponses = { + /** + * username updated + */ + 200: unknown; +}; + +export type ListUsersPublicData = { + body?: never; + path?: never; + query: { + period: 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'yearly' | 'all'; + order: 'likes_received' | 'likes_given' | 'topic_count' | 'post_count' | 'topics_entered' | 'posts_read' | 'days_visited'; + asc?: 'true'; + page?: number; + }; + url: '/directory_items.json'; +}; + +export type ListUsersPublicResponses = { + /** + * directory items response + */ + 200: { + directory_items: Array<{ + id: number; + likes_received: number; + likes_given: number; + topics_entered: number; + topic_count: number; + post_count: number; + posts_read: number; + days_visited: number; + user: { + id: number; + username: string; + name: string | null; + avatar_template: string; + title: string | null; + }; + }>; + meta: { + last_updated_at: string | null; + total_rows_directory_items: number; + load_more_directory_items: string; + }; + }; +}; + +export type ListUsersPublicResponse = ListUsersPublicResponses[keyof ListUsersPublicResponses]; + +export type DeleteUserData = { + body?: { + delete_posts?: boolean; + block_email?: boolean; + block_urls?: boolean; + block_ip?: boolean; + }; + path: { + id: number; + }; + query?: never; + url: '/admin/users/{id}.json'; +}; + +export type DeleteUserResponses = { + /** + * response + */ + 200: { + deleted: boolean; + }; +}; + +export type DeleteUserResponse = DeleteUserResponses[keyof DeleteUserResponses]; + +export type AdminGetUserData = { + body?: never; + path: { + id: number; + }; + query?: never; + url: '/admin/users/{id}.json'; +}; + +export type AdminGetUserResponses = { + /** + * response + */ + 200: { + id: number; + username: string; + name: string | null; + avatar_template: string; + active: boolean; + admin: boolean; + moderator: boolean; + last_seen_at: string | null; + last_emailed_at: string | null; + created_at: string; + last_seen_age: number | null; + last_emailed_age: number | null; + created_at_age: number | null; + trust_level: number; + manual_locked_trust_level: string | null; + title: string | null; + time_read: number; + staged: boolean; + days_visited: number; + posts_read_count: number; + topics_entered: number; + post_count: number; + associated_accounts?: Array; + can_send_activation_email: boolean; + can_activate: boolean; + can_deactivate: boolean; + ip_address: string; + registration_ip_address: string | null; + can_grant_admin: boolean; + can_revoke_admin: boolean; + can_grant_moderation: boolean; + can_revoke_moderation: boolean; + can_impersonate: boolean; + like_count: number; + like_given_count: number; + topic_count: number; + flags_given_count: number; + flags_received_count: number; + private_topics_count: number; + can_delete_all_posts: boolean; + can_be_deleted?: boolean; + can_be_anonymized: boolean; + can_be_merged: boolean; + full_suspend_reason: string | null; + latest_export?: { + [key: string]: unknown; + } | null; + silence_reason?: string | null; + post_edits_count?: number | null; + primary_group_id: number | null; + badge_count: number; + warnings_received_count: number; + bounce_score: number | null; + reset_bounce_score_after: string | null; + can_view_action_logs: boolean; + can_disable_second_factor: boolean; + can_delete_sso_record: boolean; + api_key_count: number; + similar_users_count?: number; + single_sign_on_record: string | null; + approved_by: { + id: number; + username: string; + name: string; + avatar_template: string; + } | null; + suspended_by: string | null; + silenced_by: string | null; + penalty_counts?: { + silenced: number; + suspended: number; + }; + next_penalty?: string; + tl3_requirements?: { + time_period: number; + requirements_met: boolean; + requirements_lost: boolean; + trust_level_locked: boolean; + on_grace_period: boolean; + days_visited: number; + min_days_visited: number; + num_topics_replied_to: number; + min_topics_replied_to: number; + topics_viewed: number; + min_topics_viewed: number; + posts_read: number; + min_posts_read: number; + topics_viewed_all_time: number; + min_topics_viewed_all_time: number; + posts_read_all_time: number; + min_posts_read_all_time: number; + num_flagged_posts: number; + max_flagged_posts: number; + num_flagged_by_users: number; + max_flagged_by_users: number; + num_likes_given: number; + min_likes_given: number; + num_likes_received: number; + min_likes_received: number; + num_likes_received_days: number; + min_likes_received_days: number; + num_likes_received_users: number; + min_likes_received_users: number; + penalty_counts: { + silenced: number; + suspended: number; + total: number; + }; + }; + groups: Array<{ + id: number; + automatic: boolean; + name: string; + display_name: string; + user_count: number; + mentionable_level: number; + messageable_level: number; + visibility_level: number; + primary_group: boolean; + title: string | null; + grant_trust_level: string | null; + incoming_email: string | null; + has_messages: boolean; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + flair_group_id?: number | null; + bio_raw: string | null; + bio_cooked: string | null; + bio_excerpt: string | null; + public_admission: boolean; + public_exit: boolean; + allow_membership_requests: boolean; + full_name: string | null; + default_notification_level: number; + membership_request_template: string | null; + members_visibility_level: number; + can_see_members: boolean; + can_admin_group: boolean; + publish_read_state: boolean; + }>; + external_ids: { + [key: string]: unknown; + }; + }; +}; + +export type AdminGetUserResponse = AdminGetUserResponses[keyof AdminGetUserResponses]; + +export type ActivateUserData = { + body?: never; + path: { + id: number; + }; + query?: never; + url: '/admin/users/{id}/activate.json'; +}; + +export type ActivateUserResponses = { + /** + * response + */ + 200: { + success: string; + }; +}; + +export type ActivateUserResponse = ActivateUserResponses[keyof ActivateUserResponses]; + +export type DeactivateUserData = { + body?: never; + path: { + id: number; + }; + query?: never; + url: '/admin/users/{id}/deactivate.json'; +}; + +export type DeactivateUserResponses = { + /** + * response + */ + 200: { + success: string; + }; +}; + +export type DeactivateUserResponse = DeactivateUserResponses[keyof DeactivateUserResponses]; + +export type SuspendUserData = { + body?: { + suspend_until: string; + reason: string; + /** + * Will send an email with this message when present + */ + message?: string; + post_action?: string; + }; + path: { + id: number; + }; + query?: never; + url: '/admin/users/{id}/suspend.json'; +}; + +export type SuspendUserResponses = { + /** + * response + */ + 200: { + suspension: { + suspend_reason: string; + full_suspend_reason: string; + suspended_till: string; + suspended_at: string; + suspended_by: { + id: number; + username: string; + name: string; + avatar_template: string; + }; + }; + }; +}; + +export type SuspendUserResponse = SuspendUserResponses[keyof SuspendUserResponses]; + +export type SilenceUserData = { + body?: { + silenced_till: string; + reason: string; + /** + * Will send an email with this message when present + */ + message?: string; + post_action?: string; + }; + path: { + id: number; + }; + query?: never; + url: '/admin/users/{id}/silence.json'; +}; + +export type SilenceUserResponses = { + /** + * response + */ + 200: { + silence: { + silenced: boolean; + silence_reason: string; + silenced_till: string; + silenced_at: string; + silenced_by: { + id: number; + username: string; + name: string; + avatar_template: string; + }; + }; + }; +}; + +export type SilenceUserResponse = SilenceUserResponses[keyof SilenceUserResponses]; + +export type AnonymizeUserData = { + body?: never; + path: { + id: number; + }; + query?: never; + url: '/admin/users/{id}/anonymize.json'; +}; + +export type AnonymizeUserResponses = { + /** + * response + */ + 200: { + success: string; + username: string; + }; +}; + +export type AnonymizeUserResponse = AnonymizeUserResponses[keyof AnonymizeUserResponses]; + +export type LogOutUserData = { + body?: never; + path: { + id: number; + }; + query?: never; + url: '/admin/users/{id}/log_out.json'; +}; + +export type LogOutUserResponses = { + /** + * response + */ + 200: { + success: string; + }; +}; + +export type LogOutUserResponse = LogOutUserResponses[keyof LogOutUserResponses]; + +export type RefreshGravatarData = { + body?: never; + path: { + username: string; + }; + query?: never; + url: '/user_avatar/{username}/refresh_gravatar.json'; +}; + +export type RefreshGravatarResponses = { + /** + * response + */ + 200: { + gravatar_upload_id: number | null; + gravatar_avatar_template: string | null; + }; +}; + +export type RefreshGravatarResponse = RefreshGravatarResponses[keyof RefreshGravatarResponses]; + +export type AdminListUsersData = { + body?: never; + path: { + flag: 'active' | 'new' | 'staff' | 'suspended' | 'blocked' | 'suspect'; + }; + query?: { + order?: 'created' | 'last_emailed' | 'seen' | 'username' | 'email' | 'trust_level' | 'days_visited' | 'posts_read' | 'topics_viewed' | 'posts' | 'read_time'; + asc?: 'true'; + page?: number; + /** + * Include user email addresses in response. These requests will + * be logged in the staff action logs. + */ + show_emails?: boolean; + /** + * Include user stats information + */ + stats?: boolean; + /** + * Filter to the user with this email address + */ + email?: string; + /** + * Filter to users with this IP address + */ + ip?: string; + }; + url: '/admin/users/list/{flag}.json'; +}; + +export type AdminListUsersResponses = { + /** + * response + */ + 200: Array<{ + id: number; + username: string; + name: string | null; + avatar_template: string; + email?: string; + secondary_emails?: Array; + active: boolean; + admin: boolean; + moderator: boolean; + last_seen_at: string | null; + last_emailed_at: string | null; + created_at: string; + last_seen_age: number | null; + last_emailed_age: number | null; + created_at_age: number | null; + trust_level: number; + manual_locked_trust_level: string | null; + title: string | null; + time_read: number; + staged: boolean; + days_visited: number; + posts_read_count: number; + topics_entered: number; + post_count: number; + }>; +}; + +export type AdminListUsersResponse = AdminListUsersResponses[keyof AdminListUsersResponses]; + +export type ListUserActionsData = { + body?: never; + path?: never; + query: { + offset: number; + username: string; + filter: string; + }; + url: '/user_actions.json'; +}; + +export type ListUserActionsResponses = { + /** + * response + */ + 200: { + user_actions: Array<{ + excerpt: string; + action_type: number; + created_at: string; + avatar_template: string; + acting_avatar_template: string; + slug: string; + topic_id: number; + target_user_id: number; + target_name: string | null; + target_username: string; + post_number: number; + post_id: string | null; + username: string; + name: string | null; + user_id: number; + acting_username: string; + acting_name: string | null; + acting_user_id: number; + title: string; + deleted: boolean; + hidden: string | null; + post_type: string | null; + action_code: string | null; + category_id: number; + closed: boolean; + archived: boolean; + }>; + }; +}; + +export type ListUserActionsResponse = ListUserActionsResponses[keyof ListUserActionsResponses]; + +export type SendPasswordResetEmailData = { + body?: { + login: string; + }; + path?: never; + query?: never; + url: '/session/forgot_password.json'; +}; + +export type SendPasswordResetEmailResponses = { + /** + * success response + */ + 200: { + success: string; + user_found: boolean; + }; +}; + +export type SendPasswordResetEmailResponse = SendPasswordResetEmailResponses[keyof SendPasswordResetEmailResponses]; + +export type ChangePasswordData = { + body?: { + username: string; + password: string; + }; + path: { + token: string; + }; + query?: never; + url: '/users/password-reset/{token}.json'; +}; + +export type ChangePasswordResponses = { + /** + * success response + */ + 200: unknown; +}; + +export type GetUserEmailsData = { + body?: never; + path: { + username: string; + }; + query?: never; + url: '/u/{username}/emails.json'; +}; + +export type GetUserEmailsResponses = { + /** + * success response + */ + 200: { + email: string; + secondary_emails: Array; + unconfirmed_emails: Array; + associated_accounts: Array; + }; +}; + +export type GetUserEmailsResponse = GetUserEmailsResponses[keyof GetUserEmailsResponses]; + +export type PostMessageData = { + body: { + /** + * The content of the message. + */ + message: string; + }; + headers?: { + /** + * Referer URL (e.g. https:///chat/c/{channel_name}/{channel_id}) + */ + Referer?: string; + }; + path: { + /** + * The ID of the chat channel. + */ + channel_id: number; + }; + query?: never; + url: '/chat/{channel_id}'; +}; + +export type PostMessageErrors = { + /** + * Bad Request + */ + 400: unknown; + /** + * Forbidden + */ + 403: unknown; + /** + * Too Many Requests + */ + 429: unknown; + /** + * Internal Server Error + */ + 500: unknown; +}; + +export type PostMessageResponses = { + /** + * Posted message response + */ + 200: { + id?: number; + cooked?: string; + raw?: string; + errors?: Array; + }; +}; + +export type PostMessageResponse = PostMessageResponses[keyof PostMessageResponses]; + +export type ReactToMessageData = { + body: { + /** + * Reaction action. + */ + react_action: 'add' | 'remove'; + /** + * The emoji to react with (e.g. :smile:). + */ + emoji: string; + }; + headers?: { + /** + * Referer URL + */ + Referer?: string; + }; + path: { + /** + * Chat channel ID. + */ + channel_id: number; + /** + * Chat message ID. + */ + message_id: number; + }; + query?: never; + url: '/chat/{channel_id}/react/{message_id}'; +}; + +export type ReactToMessageErrors = { + /** + * Bad Request + */ + 400: unknown; + /** + * Forbidden + */ + 403: unknown; + /** + * Too Many Requests + */ + 429: unknown; + /** + * Internal Server Error + */ + 500: unknown; +}; + +export type ReactToMessageResponses = { + /** + * Reaction result + */ + 200: { + success?: 'OK'; + }; +}; + +export type ReactToMessageResponse = ReactToMessageResponses[keyof ReactToMessageResponses]; + +export type EditMessageData = { + body: { + /** + * New message content. + */ + message: string; + }; + headers?: { + /** + * Referer URL + */ + Referer?: string; + }; + path: { + /** + * Chat channel ID + */ + channel_id: number; + /** + * Message ID + */ + message_id: number; + }; + query?: never; + url: '/chat/api/channels/{channel_id}/messages/{message_id}'; +}; + +export type EditMessageErrors = { + /** + * Bad Request + */ + 400: unknown; + /** + * Forbidden + */ + 403: unknown; + /** + * Not Found + */ + 404: unknown; + /** + * Internal Server Error + */ + 500: unknown; +}; + +export type EditMessageResponses = { + /** + * Edited message response + */ + 200: unknown; +}; + +export type GetMessagesData = { + body?: never; + headers?: { + /** + * Referer URL + */ + Referer?: string; + }; + path: { + /** + * Chat channel ID + */ + channel_id: number; + }; + query?: { + /** + * Start from last-read + */ + fetch_from_last_read?: boolean; + /** + * Number of messages + */ + page_size?: number; + }; + url: '/chat/api/channels/{channel_id}/messages'; +}; + +export type GetMessagesErrors = { + /** + * Bad Request + */ + 400: unknown; + /** + * Forbidden + */ + 403: unknown; + /** + * Too Many Requests + */ + 429: unknown; + /** + * Internal Server Error + */ + 500: unknown; +}; + +export type GetMessagesResponses = { + /** + * List of chat messages + */ + 200: { + messages?: Array<{ + id?: number; + message?: string; + created_at?: Date; + user?: { + username?: string; + }; + }>; + }; +}; + +export type GetMessagesResponse = GetMessagesResponses[keyof GetMessagesResponses]; + +export type GetChatChannelData = { + body: { + /** + * Username of the other user + */ + 'target_usernames[]': string; + }; + headers?: { + /** + * Referer URL + */ + Referer?: string; + }; + path?: never; + query?: never; + url: '/chat/api/direct-message-channels.json'; +}; + +export type GetChatChannelErrors = { + /** + * Bad Request + */ + 400: unknown; + /** + * Forbidden + */ + 403: unknown; + /** + * Too Many Requests + */ + 429: unknown; + /** + * Internal Server Error + */ + 500: unknown; +}; + +export type GetChatChannelResponses = { + /** + * DM channel info + */ + 200: { + channel?: { + id?: number; + chatable?: { + users?: Array<{ + id?: number; + username?: string; + name?: string; + avatar_template?: string; + admin?: boolean; + moderator?: boolean; + }>; + }; + }; + }; +}; + +export type GetChatChannelResponse = GetChatChannelResponses[keyof GetChatChannelResponses]; + +export type GetUserInfoData = { + body?: never; + path: { + /** + * Discourse username + */ + username: string; + }; + query?: never; + url: '/u/{username}/card.json'; +}; + +export type GetUserInfoErrors = { + /** + * Not Found + */ + 404: unknown; + /** + * Internal Server Error + */ + 500: unknown; +}; + +export type GetUserInfoResponses = { + /** + * User card info + */ + 200: { + user?: { + id?: number; + username?: string; + name?: string; + avatar_template?: string; + admin?: boolean; + moderator?: boolean; + }; + }; +}; + +export type GetUserInfoResponse = GetUserInfoResponses[keyof GetUserInfoResponses]; + +export type GetSessionData = { + body?: never; + path?: never; + query?: never; + url: '/session/current.json'; +}; + +export type GetSessionErrors = { + /** + * Bad Request + */ + 400: unknown; + /** + * Forbidden – invalid API key or insufficient permissions + */ + 403: unknown; + /** + * Too Many Requests + */ + 429: unknown; + /** + * Internal Server Error + */ + 500: unknown; +}; + +export type GetSessionResponses = { + /** + * Current session info + */ + 200: { + current_user: { + id: number; + username: string; + name?: string; + avatar_template: string; + admin: boolean; + moderator: boolean; + }; + }; +}; + +export type GetSessionResponse = GetSessionResponses[keyof GetSessionResponses]; + +export type ClientOptions = { + baseUrl: 'https://{defaultHost}' | (string & {}); +}; \ No newline at end of file diff --git a/client/zod.gen.ts b/client/zod.gen.ts new file mode 100644 index 0000000..973092b --- /dev/null +++ b/client/zod.gen.ts @@ -0,0 +1,4610 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { z } from 'zod'; + +export const zGetBackupsResponse = z.array(z.object({ + filename: z.string(), + size: z.number().int(), + last_modified: z.string() +})).min(1); + +export const zCreateBackupResponse = z.object({ + success: z.string() +}); + +export const zAdminListBadgesResponse = z.object({ + badges: z.array(z.object({ + id: z.number().int(), + name: z.string(), + description: z.string(), + grant_count: z.number().int(), + allow_title: z.boolean(), + multiple_grant: z.boolean(), + icon: z.string(), + image_url: z.union([ + z.string(), + z.null() + ]), + listable: z.boolean(), + enabled: z.boolean(), + badge_grouping_id: z.number().int(), + system: z.boolean(), + long_description: z.string(), + slug: z.string(), + manually_grantable: z.boolean(), + query: z.union([ + z.string(), + z.null() + ]), + trigger: z.union([ + z.number().int(), + z.null() + ]), + target_posts: z.boolean(), + auto_revoke: z.boolean(), + show_posts: z.boolean(), + i18n_name: z.union([ + z.string(), + z.null() + ]).optional(), + image_upload_id: z.union([ + z.number().int(), + z.null() + ]), + badge_type_id: z.number().int(), + show_in_post_header: z.boolean() + })), + badge_types: z.array(z.object({ + id: z.number().int(), + name: z.string(), + sort_order: z.number().int() + })), + badge_groupings: z.array(z.object({ + id: z.number().int(), + name: z.string(), + description: z.union([ + z.string(), + z.null() + ]), + position: z.number().int(), + system: z.boolean() + })), + admin_badges: z.object({ + protected_system_fields: z.array(z.unknown()), + triggers: z.object({ + user_change: z.number().int(), + none: z.number().int(), + post_revision: z.number().int(), + trust_level_change: z.number().int(), + post_action: z.number().int() + }), + badge_ids: z.array(z.unknown()), + badge_grouping_ids: z.array(z.unknown()), + badge_type_ids: z.array(z.unknown()) + }) +}); + +export const zCreateBadgeResponse = z.object({ + badge_types: z.array(z.object({ + id: z.number().int(), + name: z.string(), + sort_order: z.number().int() + })), + badge: z.object({ + id: z.number().int(), + name: z.string(), + description: z.string(), + grant_count: z.number().int(), + allow_title: z.boolean(), + multiple_grant: z.boolean(), + icon: z.string(), + image_url: z.union([ + z.string(), + z.null() + ]), + image_upload_id: z.union([ + z.number().int(), + z.null() + ]), + listable: z.boolean(), + enabled: z.boolean(), + badge_grouping_id: z.number().int(), + system: z.boolean(), + long_description: z.string(), + slug: z.string(), + manually_grantable: z.boolean(), + query: z.union([ + z.string(), + z.null() + ]), + trigger: z.union([ + z.string(), + z.null() + ]), + target_posts: z.boolean(), + auto_revoke: z.boolean(), + show_posts: z.boolean(), + badge_type_id: z.number().int(), + show_in_post_header: z.boolean() + }) +}); + +export const zUpdateBadgeResponse = z.object({ + badge_types: z.array(z.object({ + id: z.number().int(), + name: z.string(), + sort_order: z.number().int() + })), + badge: z.object({ + id: z.number().int(), + name: z.string(), + description: z.string(), + grant_count: z.number().int(), + allow_title: z.boolean(), + multiple_grant: z.boolean(), + icon: z.string(), + image_url: z.union([ + z.string(), + z.null() + ]), + image_upload_id: z.union([ + z.number().int(), + z.null() + ]), + listable: z.boolean(), + enabled: z.boolean(), + badge_grouping_id: z.number().int(), + system: z.boolean(), + long_description: z.string(), + slug: z.string(), + manually_grantable: z.boolean(), + query: z.union([ + z.string(), + z.null() + ]), + trigger: z.union([ + z.string(), + z.null() + ]), + target_posts: z.boolean(), + auto_revoke: z.boolean(), + show_posts: z.boolean(), + badge_type_id: z.number().int(), + show_in_post_header: z.boolean() + }) +}); + +export const zListCategoriesResponse = z.object({ + category_list: z.object({ + can_create_category: z.boolean(), + can_create_topic: z.boolean(), + categories: z.array(z.object({ + id: z.number().int(), + name: z.string(), + color: z.string(), + text_color: z.string(), + slug: z.string(), + topic_count: z.number().int(), + post_count: z.number().int(), + position: z.number().int(), + description: z.union([ + z.string(), + z.null() + ]), + description_text: z.union([ + z.string(), + z.null() + ]), + description_excerpt: z.union([ + z.string(), + z.null() + ]), + topic_url: z.union([ + z.string(), + z.null() + ]), + read_restricted: z.boolean(), + permission: z.number().int(), + notification_level: z.number().int(), + can_edit: z.boolean(), + topic_template: z.union([ + z.string(), + z.null() + ]), + has_children: z.boolean(), + subcategory_count: z.union([ + z.number().int(), + z.null() + ]), + sort_order: z.union([ + z.string(), + z.null() + ]), + sort_ascending: z.union([ + z.string(), + z.null() + ]), + show_subcategory_list: z.boolean(), + num_featured_topics: z.number().int(), + default_view: z.union([ + z.string(), + z.null() + ]), + subcategory_list_style: z.string(), + default_top_period: z.string(), + default_list_filter: z.string(), + minimum_required_tags: z.number().int(), + navigate_to_first_post_after_read: z.boolean(), + topics_day: z.number().int(), + topics_week: z.number().int(), + topics_month: z.number().int(), + topics_year: z.number().int(), + topics_all_time: z.number().int(), + is_uncategorized: z.boolean().optional(), + subcategory_ids: z.array(z.unknown()), + subcategory_list: z.union([ + z.array(z.unknown()), + z.null() + ]).optional(), + uploaded_logo: z.union([ + z.string(), + z.null() + ]), + uploaded_logo_dark: z.union([ + z.string(), + z.null() + ]), + uploaded_background: z.union([ + z.string(), + z.null() + ]), + uploaded_background_dark: z.union([ + z.string(), + z.null() + ]) + })) + }) +}); + +export const zCreateCategoryResponse = z.object({ + category: z.object({ + id: z.number().int(), + name: z.string(), + color: z.string(), + text_color: z.string(), + slug: z.string(), + topic_count: z.number().int(), + post_count: z.number().int(), + position: z.number().int(), + description: z.union([ + z.string(), + z.null() + ]), + description_text: z.union([ + z.string(), + z.null() + ]), + description_excerpt: z.union([ + z.string(), + z.null() + ]), + topic_url: z.union([ + z.string(), + z.null() + ]), + read_restricted: z.boolean(), + permission: z.union([ + z.number().int(), + z.null() + ]), + notification_level: z.number().int(), + can_edit: z.boolean(), + topic_template: z.union([ + z.string(), + z.null() + ]), + form_template_ids: z.array(z.unknown()).optional(), + has_children: z.union([ + z.boolean(), + z.null() + ]), + subcategory_count: z.union([ + z.number().int(), + z.null() + ]), + sort_order: z.union([ + z.string(), + z.null() + ]), + sort_ascending: z.union([ + z.string(), + z.null() + ]), + show_subcategory_list: z.boolean(), + num_featured_topics: z.number().int(), + default_view: z.union([ + z.string(), + z.null() + ]), + subcategory_list_style: z.string(), + default_top_period: z.string(), + default_list_filter: z.string(), + minimum_required_tags: z.number().int(), + navigate_to_first_post_after_read: z.boolean(), + custom_fields: z.object({}), + allowed_tags: z.array(z.unknown()).optional(), + allowed_tag_groups: z.array(z.unknown()).optional(), + allow_global_tags: z.boolean().optional(), + required_tag_groups: z.array(z.object({ + name: z.string(), + min_count: z.number().int() + })), + category_setting: z.unknown().optional(), + read_only_banner: z.union([ + z.string(), + z.null() + ]), + available_groups: z.array(z.unknown()), + auto_close_hours: z.union([ + z.string(), + z.null() + ]), + auto_close_based_on_last_post: z.boolean(), + allow_unlimited_owner_edits_on_first_post: z.boolean(), + default_slow_mode_seconds: z.union([ + z.string(), + z.null() + ]), + group_permissions: z.array(z.object({ + permission_type: z.number().int(), + group_name: z.string() + })), + email_in: z.union([ + z.string(), + z.null() + ]), + email_in_allow_strangers: z.boolean(), + mailinglist_mirror: z.boolean(), + all_topics_wiki: z.boolean(), + can_delete: z.boolean(), + allow_badges: z.boolean(), + topic_featured_link_allowed: z.boolean(), + search_priority: z.number().int(), + uploaded_logo: z.union([ + z.string(), + z.null() + ]), + uploaded_logo_dark: z.union([ + z.string(), + z.null() + ]), + uploaded_background: z.union([ + z.string(), + z.null() + ]), + uploaded_background_dark: z.union([ + z.string(), + z.null() + ]) + }) +}); + +export const zUpdateCategoryResponse = z.object({ + success: z.string(), + category: z.object({ + id: z.number().int(), + name: z.string(), + color: z.string(), + text_color: z.string(), + slug: z.string(), + topic_count: z.number().int(), + post_count: z.number().int(), + position: z.number().int(), + description: z.union([ + z.string(), + z.null() + ]), + description_text: z.union([ + z.string(), + z.null() + ]), + description_excerpt: z.union([ + z.string(), + z.null() + ]), + topic_url: z.union([ + z.string(), + z.null() + ]), + read_restricted: z.boolean(), + permission: z.union([ + z.number().int(), + z.null() + ]), + notification_level: z.number().int(), + can_edit: z.boolean(), + topic_template: z.union([ + z.string(), + z.null() + ]), + form_template_ids: z.array(z.unknown()), + has_children: z.union([ + z.boolean(), + z.null() + ]), + subcategory_count: z.union([ + z.number().int(), + z.null() + ]), + sort_order: z.union([ + z.string(), + z.null() + ]), + sort_ascending: z.union([ + z.string(), + z.null() + ]), + show_subcategory_list: z.boolean(), + num_featured_topics: z.number().int(), + default_view: z.union([ + z.string(), + z.null() + ]), + subcategory_list_style: z.string(), + default_top_period: z.string(), + default_list_filter: z.string(), + minimum_required_tags: z.number().int(), + navigate_to_first_post_after_read: z.boolean(), + custom_fields: z.object({}), + allowed_tags: z.array(z.unknown()).optional(), + allowed_tag_groups: z.array(z.unknown()).optional(), + allow_global_tags: z.boolean().optional(), + required_tag_groups: z.array(z.object({ + name: z.string(), + min_count: z.number().int() + })), + category_setting: z.unknown().optional(), + read_only_banner: z.union([ + z.string(), + z.null() + ]), + available_groups: z.array(z.unknown()), + auto_close_hours: z.union([ + z.string(), + z.null() + ]), + auto_close_based_on_last_post: z.boolean(), + allow_unlimited_owner_edits_on_first_post: z.boolean(), + default_slow_mode_seconds: z.union([ + z.string(), + z.null() + ]), + group_permissions: z.array(z.object({ + permission_type: z.number().int(), + group_name: z.string() + })), + email_in: z.union([ + z.string(), + z.null() + ]), + email_in_allow_strangers: z.boolean(), + mailinglist_mirror: z.boolean(), + all_topics_wiki: z.boolean(), + can_delete: z.boolean(), + allow_badges: z.boolean(), + topic_featured_link_allowed: z.boolean(), + search_priority: z.number().int(), + uploaded_logo: z.union([ + z.string(), + z.null() + ]), + uploaded_logo_dark: z.union([ + z.string(), + z.null() + ]), + uploaded_background: z.union([ + z.string(), + z.null() + ]), + uploaded_background_dark: z.union([ + z.string(), + z.null() + ]) + }) +}); + +export const zListCategoryTopicsResponse = z.object({ + users: z.array(z.object({ + id: z.number().int(), + username: z.string(), + name: z.string(), + avatar_template: z.string() + })).optional(), + primary_groups: z.array(z.unknown()).optional(), + topic_list: z.object({ + can_create_topic: z.boolean(), + per_page: z.number().int(), + top_tags: z.array(z.unknown()).optional(), + topics: z.array(z.object({ + id: z.number().int(), + title: z.string(), + fancy_title: z.string(), + slug: z.string(), + posts_count: z.number().int(), + reply_count: z.number().int(), + highest_post_number: z.number().int(), + image_url: z.union([ + z.string(), + z.null() + ]), + created_at: z.string(), + last_posted_at: z.string(), + bumped: z.boolean(), + bumped_at: z.string(), + archetype: z.string(), + unseen: z.boolean(), + pinned: z.boolean(), + unpinned: z.union([ + z.string(), + z.null() + ]), + excerpt: z.string(), + visible: z.boolean(), + closed: z.boolean(), + archived: z.boolean(), + bookmarked: z.union([ + z.string(), + z.null() + ]), + liked: z.union([ + z.string(), + z.null() + ]), + views: z.number().int(), + like_count: z.number().int(), + has_summary: z.boolean(), + last_poster_username: z.string(), + category_id: z.number().int(), + pinned_globally: z.boolean(), + featured_link: z.union([ + z.string(), + z.null() + ]), + posters: z.array(z.object({ + extras: z.string(), + description: z.string(), + user_id: z.number().int(), + primary_group_id: z.union([ + z.number().int(), + z.null() + ]) + })) + })) + }) +}); + +export const zGetCategoryResponse = z.object({ + category: z.object({ + id: z.number().int(), + name: z.string(), + color: z.string(), + text_color: z.string(), + slug: z.string(), + topic_count: z.number().int(), + post_count: z.number().int(), + position: z.number().int(), + description: z.union([ + z.string(), + z.null() + ]), + description_text: z.union([ + z.string(), + z.null() + ]), + description_excerpt: z.union([ + z.string(), + z.null() + ]), + topic_url: z.union([ + z.string(), + z.null() + ]), + read_restricted: z.boolean(), + permission: z.union([ + z.number().int(), + z.null() + ]), + notification_level: z.number().int(), + can_edit: z.boolean(), + topic_template: z.union([ + z.string(), + z.null() + ]), + form_template_ids: z.array(z.unknown()).optional(), + has_children: z.union([ + z.boolean(), + z.null() + ]), + subcategory_count: z.union([ + z.number().int(), + z.null() + ]), + sort_order: z.union([ + z.string(), + z.null() + ]), + sort_ascending: z.union([ + z.string(), + z.null() + ]), + show_subcategory_list: z.boolean(), + num_featured_topics: z.number().int(), + default_view: z.union([ + z.string(), + z.null() + ]), + subcategory_list_style: z.string(), + default_top_period: z.string(), + default_list_filter: z.string(), + minimum_required_tags: z.number().int(), + navigate_to_first_post_after_read: z.boolean(), + custom_fields: z.object({}), + allowed_tags: z.array(z.unknown()).optional(), + allowed_tag_groups: z.array(z.unknown()).optional(), + allow_global_tags: z.boolean().optional(), + required_tag_groups: z.array(z.object({ + name: z.string(), + min_count: z.number().int() + })), + category_setting: z.unknown().optional(), + read_only_banner: z.union([ + z.string(), + z.null() + ]), + available_groups: z.array(z.unknown()), + auto_close_hours: z.union([ + z.string(), + z.null() + ]), + auto_close_based_on_last_post: z.boolean(), + allow_unlimited_owner_edits_on_first_post: z.boolean(), + default_slow_mode_seconds: z.union([ + z.string(), + z.null() + ]), + group_permissions: z.array(z.object({ + permission_type: z.number().int(), + group_name: z.string() + })), + email_in: z.union([ + z.string(), + z.null() + ]), + email_in_allow_strangers: z.boolean(), + mailinglist_mirror: z.boolean(), + all_topics_wiki: z.boolean(), + can_delete: z.boolean(), + allow_badges: z.boolean(), + topic_featured_link_allowed: z.boolean(), + search_priority: z.number().int(), + uploaded_logo: z.union([ + z.string(), + z.null() + ]), + uploaded_logo_dark: z.union([ + z.string(), + z.null() + ]), + uploaded_background: z.union([ + z.string(), + z.null() + ]), + uploaded_background_dark: z.union([ + z.string(), + z.null() + ]) + }) +}); + +export const zCreateGroupResponse = z.object({ + basic_group: z.object({ + id: z.number().int(), + automatic: z.boolean(), + name: z.string(), + user_count: z.number().int(), + mentionable_level: z.number().int(), + messageable_level: z.number().int(), + visibility_level: z.number().int(), + primary_group: z.boolean(), + title: z.union([ + z.string(), + z.null() + ]), + grant_trust_level: z.union([ + z.string(), + z.null() + ]), + incoming_email: z.union([ + z.string(), + z.null() + ]), + has_messages: z.boolean(), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]), + bio_raw: z.union([ + z.string(), + z.null() + ]), + bio_cooked: z.union([ + z.string(), + z.null() + ]), + bio_excerpt: z.union([ + z.string(), + z.null() + ]), + public_admission: z.boolean(), + public_exit: z.boolean(), + allow_membership_requests: z.boolean(), + full_name: z.union([ + z.string(), + z.null() + ]), + default_notification_level: z.number().int(), + membership_request_template: z.union([ + z.string(), + z.null() + ]), + members_visibility_level: z.number().int(), + can_see_members: z.boolean(), + can_admin_group: z.boolean(), + can_edit_group: z.boolean().optional(), + publish_read_state: z.boolean() + }) +}); + +export const zDeleteGroupResponse = z.object({ + success: z.string() +}); + +export const zGetGroupResponse = z.object({ + group: z.object({ + id: z.number().int(), + automatic: z.boolean(), + name: z.string(), + user_count: z.number().int(), + mentionable_level: z.number().int(), + messageable_level: z.number().int(), + visibility_level: z.number().int(), + primary_group: z.boolean(), + title: z.union([ + z.string(), + z.null() + ]), + grant_trust_level: z.union([ + z.string(), + z.null() + ]), + incoming_email: z.union([ + z.string(), + z.null() + ]), + has_messages: z.boolean(), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]), + bio_raw: z.union([ + z.string(), + z.null() + ]), + bio_cooked: z.union([ + z.string(), + z.null() + ]), + bio_excerpt: z.union([ + z.string(), + z.null() + ]), + public_admission: z.boolean(), + public_exit: z.boolean(), + allow_membership_requests: z.boolean(), + full_name: z.union([ + z.string(), + z.null() + ]), + default_notification_level: z.number().int(), + membership_request_template: z.union([ + z.string(), + z.null() + ]), + is_group_user: z.boolean(), + members_visibility_level: z.number().int(), + can_see_members: z.boolean(), + can_admin_group: z.boolean(), + can_edit_group: z.boolean().optional(), + publish_read_state: z.boolean(), + is_group_owner_display: z.boolean(), + mentionable: z.boolean(), + messageable: z.boolean(), + automatic_membership_email_domains: z.union([ + z.string(), + z.null() + ]), + smtp_updated_at: z.union([ + z.string(), + z.null() + ]).optional(), + smtp_updated_by: z.union([ + z.object({}), + z.null() + ]).optional(), + smtp_enabled: z.boolean().optional(), + smtp_server: z.union([ + z.string(), + z.null() + ]), + smtp_port: z.union([ + z.string(), + z.null() + ]), + smtp_ssl_mode: z.union([ + z.number().int(), + z.null() + ]), + imap_enabled: z.boolean().optional(), + imap_updated_at: z.union([ + z.string(), + z.null() + ]).optional(), + imap_updated_by: z.union([ + z.object({}), + z.null() + ]).optional(), + imap_server: z.union([ + z.string(), + z.null() + ]), + imap_port: z.union([ + z.string(), + z.null() + ]), + imap_ssl: z.union([ + z.string(), + z.null() + ]), + imap_mailbox_name: z.string(), + imap_mailboxes: z.array(z.unknown()), + email_username: z.union([ + z.string(), + z.null() + ]), + email_from_alias: z.union([ + z.string(), + z.null() + ]).optional(), + email_password: z.union([ + z.string(), + z.null() + ]), + imap_last_error: z.union([ + z.string(), + z.null() + ]), + imap_old_emails: z.union([ + z.string(), + z.null() + ]), + imap_new_emails: z.union([ + z.string(), + z.null() + ]), + message_count: z.number().int(), + allow_unknown_sender_topic_replies: z.boolean(), + associated_group_ids: z.array(z.unknown()).optional(), + watching_category_ids: z.array(z.unknown()), + tracking_category_ids: z.array(z.unknown()), + watching_first_post_category_ids: z.array(z.unknown()), + regular_category_ids: z.array(z.unknown()), + muted_category_ids: z.array(z.unknown()), + watching_tags: z.array(z.unknown()).optional(), + watching_first_post_tags: z.array(z.unknown()).optional(), + tracking_tags: z.array(z.unknown()).optional(), + regular_tags: z.array(z.unknown()).optional(), + muted_tags: z.array(z.unknown()).optional() + }), + extras: z.object({ + visible_group_names: z.array(z.unknown()) + }) +}); + +export const zUpdateGroupResponse = z.object({ + success: z.string().optional() +}); + +export const zRemoveGroupMembersResponse = z.object({ + success: z.string(), + usernames: z.array(z.unknown()), + skipped_usernames: z.array(z.unknown()) +}); + +export const zListGroupMembersResponse = z.object({ + members: z.array(z.object({ + id: z.number().int(), + username: z.string(), + name: z.union([ + z.string(), + z.null() + ]), + avatar_template: z.string(), + title: z.union([ + z.string(), + z.null() + ]), + last_posted_at: z.string(), + last_seen_at: z.string(), + added_at: z.string(), + timezone: z.string() + })), + owners: z.array(z.object({ + id: z.number().int(), + username: z.string(), + name: z.union([ + z.string(), + z.null() + ]), + avatar_template: z.string(), + title: z.union([ + z.string(), + z.null() + ]), + last_posted_at: z.string(), + last_seen_at: z.string(), + added_at: z.string(), + timezone: z.string() + })), + meta: z.object({ + total: z.number().int(), + limit: z.number().int(), + offset: z.number().int() + }) +}); + +export const zAddGroupMembersResponse = z.object({ + success: z.string(), + usernames: z.array(z.unknown()), + emails: z.array(z.unknown()) +}); + +export const zListGroupsResponse = z.object({ + groups: z.array(z.object({ + id: z.number().int(), + automatic: z.boolean(), + name: z.string(), + display_name: z.string(), + user_count: z.number().int(), + mentionable_level: z.number().int(), + messageable_level: z.number().int(), + visibility_level: z.number().int(), + primary_group: z.boolean(), + title: z.union([ + z.string(), + z.null() + ]), + grant_trust_level: z.union([ + z.string(), + z.null() + ]), + incoming_email: z.union([ + z.string(), + z.null() + ]), + has_messages: z.boolean(), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]), + bio_raw: z.union([ + z.string(), + z.null() + ]), + bio_cooked: z.union([ + z.string(), + z.null() + ]), + bio_excerpt: z.union([ + z.string(), + z.null() + ]), + public_admission: z.boolean(), + public_exit: z.boolean(), + allow_membership_requests: z.boolean(), + full_name: z.union([ + z.string(), + z.null() + ]), + default_notification_level: z.number().int(), + membership_request_template: z.union([ + z.string(), + z.null() + ]), + is_group_user: z.boolean().optional(), + is_group_owner: z.boolean().optional(), + members_visibility_level: z.number().int(), + can_see_members: z.boolean(), + can_admin_group: z.boolean(), + can_edit_group: z.boolean().optional(), + publish_read_state: z.boolean() + })), + extras: z.object({ + type_filters: z.array(z.unknown()) + }), + total_rows_groups: z.number().int(), + load_more_groups: z.string() +}); + +export const zCreateInviteResponse = z.object({ + id: z.number().int().optional(), + link: z.string().optional(), + email: z.string().optional(), + emailed: z.boolean().optional(), + custom_message: z.union([ + z.string(), + z.null() + ]).optional(), + topics: z.array(z.unknown()).optional(), + groups: z.array(z.unknown()).optional(), + created_at: z.string().optional(), + updated_at: z.string().optional(), + expires_at: z.string().optional(), + expired: z.boolean().optional() +}); + +export const zCreateMultipleInvitesResponse = z.object({ + num_successfully_created_invitations: z.number().int().optional(), + num_failed_invitations: z.number().int().optional(), + failed_invitations: z.array(z.unknown()).optional(), + successful_invitations: z.array(z.unknown()).optional() +}); + +export const zGetNotificationsResponse = z.object({ + notifications: z.array(z.object({ + id: z.number().int().optional(), + user_id: z.number().int().optional(), + notification_type: z.number().int().optional(), + read: z.boolean().optional(), + created_at: z.string().optional(), + post_number: z.union([ + z.number().int(), + z.null() + ]).optional(), + topic_id: z.union([ + z.number().int(), + z.null() + ]).optional(), + slug: z.union([ + z.string(), + z.null() + ]).optional(), + data: z.object({ + badge_id: z.number().int().optional(), + badge_name: z.string().optional(), + badge_slug: z.string().optional(), + badge_title: z.boolean().optional(), + username: z.string().optional() + }).optional() + })).optional(), + total_rows_notifications: z.number().int().optional(), + seen_notification_id: z.number().int().optional(), + load_more_notifications: z.string().optional() +}); + +export const zMarkNotificationsAsReadResponse = z.object({ + success: z.string().optional() +}); + +export const zListPostsResponse = z.object({ + latest_posts: z.array(z.object({ + id: z.number().int().optional(), + name: z.string().optional(), + username: z.string().optional(), + avatar_template: z.string().optional(), + created_at: z.string().optional(), + cooked: z.string().optional(), + post_number: z.number().int().optional(), + post_type: z.number().int().optional(), + updated_at: z.string().optional(), + reply_count: z.number().int().optional(), + reply_to_post_number: z.union([ + z.string(), + z.null() + ]).optional(), + quote_count: z.number().int().optional(), + incoming_link_count: z.number().int().optional(), + reads: z.number().int().optional(), + readers_count: z.number().int().optional(), + score: z.number().optional(), + yours: z.boolean().optional(), + topic_id: z.number().int().optional(), + topic_slug: z.string().optional(), + topic_title: z.string().optional(), + topic_html_title: z.string().optional(), + category_id: z.number().int().optional(), + display_username: z.string().optional(), + primary_group_name: z.union([ + z.string(), + z.null() + ]).optional(), + flair_name: z.union([ + z.string(), + z.null() + ]).optional(), + flair_url: z.union([ + z.string(), + z.null() + ]).optional(), + flair_bg_color: z.union([ + z.string(), + z.null() + ]).optional(), + flair_color: z.union([ + z.string(), + z.null() + ]).optional(), + flair_group_id: z.union([ + z.number().int(), + z.null() + ]).optional(), + version: z.number().int().optional(), + can_edit: z.boolean().optional(), + can_delete: z.boolean().optional(), + can_recover: z.boolean().optional(), + can_see_hidden_post: z.boolean().optional(), + can_wiki: z.boolean().optional(), + user_title: z.union([ + z.string(), + z.null() + ]).optional(), + raw: z.string().optional(), + actions_summary: z.array(z.object({ + id: z.number().int().optional(), + can_act: z.boolean().optional() + })).optional(), + moderator: z.boolean().optional(), + admin: z.boolean().optional(), + staff: z.boolean().optional(), + user_id: z.number().int().optional(), + hidden: z.boolean().optional(), + trust_level: z.number().int().optional(), + deleted_at: z.union([ + z.string(), + z.null() + ]).optional(), + user_deleted: z.boolean().optional(), + edit_reason: z.union([ + z.string(), + z.null() + ]).optional(), + can_view_edit_history: z.boolean().optional(), + wiki: z.boolean().optional(), + reviewable_id: z.union([ + z.number().int(), + z.null() + ]).optional(), + reviewable_score_count: z.number().int().optional(), + reviewable_score_pending_count: z.number().int().optional() + })).optional() +}); + +export const zCreateTopicPostPmResponse = z.object({ + id: z.number().int(), + name: z.union([ + z.string(), + z.null() + ]), + username: z.string(), + avatar_template: z.string(), + created_at: z.string(), + raw: z.string().optional(), + cooked: z.string(), + post_number: z.number().int(), + post_type: z.number().int(), + posts_count: z.number().int(), + updated_at: z.string(), + reply_count: z.number().int(), + reply_to_post_number: z.union([ + z.string(), + z.null() + ]), + quote_count: z.number().int(), + incoming_link_count: z.number().int(), + reads: z.number().int(), + readers_count: z.number().int(), + score: z.number(), + yours: z.boolean(), + topic_id: z.number().int(), + topic_slug: z.string(), + display_username: z.union([ + z.string(), + z.null() + ]), + primary_group_name: z.union([ + z.string(), + z.null() + ]), + flair_name: z.union([ + z.string(), + z.null() + ]), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]), + flair_group_id: z.union([ + z.number().int(), + z.null() + ]).optional(), + badges_granted: z.array(z.unknown()).optional(), + version: z.number().int(), + can_edit: z.boolean(), + can_delete: z.boolean(), + can_recover: z.boolean(), + can_see_hidden_post: z.boolean().optional(), + can_wiki: z.boolean(), + user_title: z.union([ + z.string(), + z.null() + ]), + bookmarked: z.boolean(), + actions_summary: z.array(z.object({ + id: z.number().int(), + can_act: z.boolean() + })), + moderator: z.boolean(), + admin: z.boolean(), + staff: z.boolean(), + user_id: z.number().int(), + draft_sequence: z.number().int(), + hidden: z.boolean(), + trust_level: z.number().int(), + deleted_at: z.union([ + z.string(), + z.null() + ]), + user_deleted: z.boolean(), + edit_reason: z.union([ + z.string(), + z.null() + ]), + can_view_edit_history: z.boolean(), + wiki: z.boolean(), + reviewable_id: z.union([ + z.number().int(), + z.null() + ]), + reviewable_score_count: z.number().int(), + reviewable_score_pending_count: z.number().int(), + post_url: z.string(), + mentioned_users: z.array(z.unknown()).optional() +}); + +export const zGetPostResponse = z.object({ + id: z.number().int(), + username: z.string(), + avatar_template: z.string(), + created_at: z.string(), + cooked: z.string(), + post_number: z.number().int(), + post_type: z.number().int(), + posts_count: z.number().int(), + updated_at: z.string(), + reply_count: z.number().int(), + reply_to_post_number: z.union([ + z.string(), + z.null() + ]), + quote_count: z.number().int(), + incoming_link_count: z.number().int(), + reads: z.number().int(), + readers_count: z.number().int(), + score: z.number(), + yours: z.boolean(), + topic_id: z.number().int(), + topic_slug: z.string(), + primary_group_name: z.union([ + z.string(), + z.null() + ]), + flair_name: z.union([ + z.string(), + z.null() + ]), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]), + flair_group_id: z.union([ + z.number().int(), + z.null() + ]).optional(), + version: z.number().int(), + can_edit: z.boolean(), + can_delete: z.boolean(), + can_recover: z.boolean(), + can_see_hidden_post: z.boolean().optional(), + can_wiki: z.boolean(), + user_title: z.union([ + z.string(), + z.null() + ]), + bookmarked: z.boolean(), + raw: z.string(), + actions_summary: z.array(z.object({ + id: z.number().int(), + count: z.number().int().optional(), + acted: z.boolean().optional(), + can_undo: z.boolean().optional(), + can_act: z.boolean().optional() + })), + moderator: z.boolean(), + admin: z.boolean(), + staff: z.boolean(), + user_id: z.number().int(), + hidden: z.boolean(), + trust_level: z.number().int(), + deleted_at: z.union([ + z.string(), + z.null() + ]), + user_deleted: z.boolean(), + edit_reason: z.union([ + z.string(), + z.null() + ]), + can_view_edit_history: z.boolean(), + wiki: z.boolean(), + reviewable_id: z.union([ + z.number().int(), + z.null() + ]), + reviewable_score_count: z.number().int(), + reviewable_score_pending_count: z.number().int(), + post_url: z.string(), + mentioned_users: z.array(z.unknown()).optional(), + name: z.union([ + z.string(), + z.null() + ]).optional(), + display_username: z.union([ + z.string(), + z.null() + ]).optional() +}); + +export const zUpdatePostResponse = z.object({ + post: z.object({ + id: z.number().int(), + username: z.string(), + avatar_template: z.string(), + created_at: z.string(), + cooked: z.string(), + post_number: z.number().int(), + post_type: z.number().int(), + posts_count: z.number().int(), + updated_at: z.string(), + reply_count: z.number().int(), + reply_to_post_number: z.union([ + z.string(), + z.null() + ]), + quote_count: z.number().int(), + incoming_link_count: z.number().int(), + reads: z.number().int(), + readers_count: z.number().int(), + score: z.number(), + yours: z.boolean(), + topic_id: z.number().int(), + topic_slug: z.string(), + primary_group_name: z.union([ + z.string(), + z.null() + ]), + flair_name: z.union([ + z.string(), + z.null() + ]), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]), + flair_group_id: z.union([ + z.number().int(), + z.null() + ]).optional(), + badges_granted: z.array(z.unknown()).optional(), + version: z.number().int(), + can_edit: z.boolean(), + can_delete: z.boolean(), + can_recover: z.boolean(), + can_see_hidden_post: z.boolean().optional(), + can_wiki: z.boolean(), + user_title: z.union([ + z.string(), + z.null() + ]), + bookmarked: z.boolean(), + raw: z.string(), + actions_summary: z.array(z.object({ + id: z.number().int(), + can_act: z.boolean() + })), + moderator: z.boolean(), + admin: z.boolean(), + staff: z.boolean(), + user_id: z.number().int(), + draft_sequence: z.number().int(), + hidden: z.boolean(), + trust_level: z.number().int(), + deleted_at: z.union([ + z.string(), + z.null() + ]), + user_deleted: z.boolean(), + edit_reason: z.union([ + z.string(), + z.null() + ]), + can_view_edit_history: z.boolean(), + wiki: z.boolean(), + reviewable_id: z.union([ + z.number().int(), + z.null() + ]), + reviewable_score_count: z.number().int(), + reviewable_score_pending_count: z.number().int(), + post_url: z.string(), + mentioned_users: z.array(z.unknown()).optional(), + name: z.union([ + z.string(), + z.null() + ]).optional(), + display_username: z.union([ + z.string(), + z.null() + ]).optional() + }) +}); + +export const zPostRepliesResponse = z.array(z.object({ + id: z.number().int(), + name: z.union([ + z.string(), + z.null() + ]), + username: z.string(), + avatar_template: z.string(), + created_at: z.string(), + cooked: z.string(), + post_number: z.number().int(), + post_type: z.number().int(), + posts_count: z.number().int(), + updated_at: z.string(), + reply_count: z.number().int(), + reply_to_post_number: z.number().int(), + quote_count: z.number().int(), + incoming_link_count: z.number().int(), + reads: z.number().int(), + readers_count: z.number().int(), + score: z.number(), + yours: z.boolean(), + topic_id: z.number().int(), + topic_slug: z.string(), + display_username: z.union([ + z.string(), + z.null() + ]), + primary_group_name: z.union([ + z.string(), + z.null() + ]), + flair_name: z.union([ + z.string(), + z.null() + ]), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]), + flair_group_id: z.union([ + z.number().int(), + z.null() + ]).optional(), + version: z.number().int(), + can_edit: z.boolean(), + can_delete: z.boolean(), + can_recover: z.boolean(), + can_see_hidden_post: z.boolean(), + can_wiki: z.boolean(), + user_title: z.union([ + z.string(), + z.null() + ]), + reply_to_user: z.object({ + username: z.string(), + name: z.string().optional(), + avatar_template: z.string() + }), + bookmarked: z.boolean(), + actions_summary: z.array(z.object({ + id: z.number().int(), + can_act: z.boolean() + })), + moderator: z.boolean(), + admin: z.boolean(), + staff: z.boolean(), + user_id: z.number().int(), + hidden: z.boolean(), + trust_level: z.number().int(), + deleted_at: z.union([ + z.string(), + z.null() + ]), + user_deleted: z.boolean(), + edit_reason: z.union([ + z.string(), + z.null() + ]), + can_view_edit_history: z.boolean(), + wiki: z.boolean(), + reviewable_id: z.union([ + z.number().int(), + z.null() + ]), + reviewable_score_count: z.number().int(), + reviewable_score_pending_count: z.number().int(), + post_url: z.string() +})).min(1); + +export const zLockPostResponse = z.object({ + locked: z.boolean().optional() +}); + +export const zPerformPostActionResponse = z.object({ + id: z.number().int().optional(), + name: z.string().optional(), + username: z.string().optional(), + avatar_template: z.string().optional(), + created_at: z.string().optional(), + cooked: z.string().optional(), + post_number: z.number().int().optional(), + post_type: z.number().int().optional(), + updated_at: z.string().optional(), + reply_count: z.number().int().optional(), + reply_to_post_number: z.union([ + z.string(), + z.null() + ]).optional(), + quote_count: z.number().int().optional(), + incoming_link_count: z.number().int().optional(), + reads: z.number().int().optional(), + readers_count: z.number().int().optional(), + score: z.number().optional(), + yours: z.boolean().optional(), + topic_id: z.number().int().optional(), + topic_slug: z.string().optional(), + display_username: z.string().optional(), + primary_group_name: z.union([ + z.string(), + z.null() + ]).optional(), + flair_name: z.union([ + z.string(), + z.null() + ]).optional(), + flair_url: z.union([ + z.string(), + z.null() + ]).optional(), + flair_bg_color: z.union([ + z.string(), + z.null() + ]).optional(), + flair_color: z.union([ + z.string(), + z.null() + ]).optional(), + version: z.number().int().optional(), + can_edit: z.boolean().optional(), + can_delete: z.boolean().optional(), + can_recover: z.boolean().optional(), + can_wiki: z.boolean().optional(), + user_title: z.union([ + z.string(), + z.null() + ]).optional(), + actions_summary: z.array(z.object({ + id: z.number().int().optional(), + count: z.number().int().optional(), + acted: z.boolean().optional(), + can_undo: z.boolean().optional() + })).optional(), + moderator: z.boolean().optional(), + admin: z.boolean().optional(), + staff: z.boolean().optional(), + user_id: z.number().int().optional(), + hidden: z.boolean().optional(), + trust_level: z.number().int().optional(), + deleted_at: z.union([ + z.string(), + z.null() + ]).optional(), + user_deleted: z.boolean().optional(), + edit_reason: z.union([ + z.string(), + z.null() + ]).optional(), + can_view_edit_history: z.boolean().optional(), + wiki: z.boolean().optional(), + notice: z.object({}).optional(), + notice_created_by_user: z.union([ + z.object({}), + z.null() + ]).optional(), + reviewable_id: z.union([ + z.number().int(), + z.null() + ]).optional(), + reviewable_score_count: z.number().int().optional(), + reviewable_score_pending_count: z.number().int().optional() +}); + +export const zListUserPrivateMessagesResponse = z.object({ + users: z.array(z.object({ + id: z.number().int().optional(), + username: z.string().optional(), + name: z.string().optional(), + avatar_template: z.string().optional() + })).optional(), + primary_groups: z.array(z.unknown()).optional(), + topic_list: z.object({ + can_create_topic: z.boolean().optional(), + draft: z.union([ + z.string(), + z.null() + ]).optional(), + draft_key: z.string().optional(), + draft_sequence: z.number().int().optional(), + per_page: z.number().int().optional(), + topics: z.array(z.object({ + id: z.number().int().optional(), + title: z.string().optional(), + fancy_title: z.string().optional(), + slug: z.string().optional(), + posts_count: z.number().int().optional(), + reply_count: z.number().int().optional(), + highest_post_number: z.number().int().optional(), + image_url: z.union([ + z.string(), + z.null() + ]).optional(), + created_at: z.string().optional(), + last_posted_at: z.string().optional(), + bumped: z.boolean().optional(), + bumped_at: z.string().optional(), + archetype: z.string().optional(), + unseen: z.boolean().optional(), + last_read_post_number: z.number().int().optional(), + unread_posts: z.number().int().optional(), + pinned: z.boolean().optional(), + unpinned: z.union([ + z.string(), + z.null() + ]).optional(), + visible: z.boolean().optional(), + closed: z.boolean().optional(), + archived: z.boolean().optional(), + notification_level: z.number().int().optional(), + bookmarked: z.boolean().optional(), + liked: z.boolean().optional(), + views: z.number().int().optional(), + like_count: z.number().int().optional(), + has_summary: z.boolean().optional(), + last_poster_username: z.string().optional(), + category_id: z.union([ + z.string(), + z.null() + ]).optional(), + pinned_globally: z.boolean().optional(), + featured_link: z.union([ + z.string(), + z.null() + ]).optional(), + allowed_user_count: z.number().int().optional(), + posters: z.array(z.object({ + extras: z.string().optional(), + description: z.string().optional(), + user_id: z.number().int().optional(), + primary_group_id: z.union([ + z.number().int(), + z.null() + ]).optional() + })).optional(), + participants: z.array(z.object({ + extras: z.string().optional(), + description: z.union([ + z.string(), + z.null() + ]).optional(), + user_id: z.number().int().optional(), + primary_group_id: z.union([ + z.number().int(), + z.null() + ]).optional() + })).optional() + })).optional() + }).optional() +}); + +export const zGetUserSentPrivateMessagesResponse = z.object({ + users: z.array(z.object({ + id: z.number().int().optional(), + username: z.string().optional(), + name: z.union([ + z.string(), + z.null() + ]).optional(), + avatar_template: z.string().optional() + })).optional(), + primary_groups: z.array(z.unknown()).optional(), + topic_list: z.object({ + can_create_topic: z.boolean().optional(), + draft: z.union([ + z.string(), + z.null() + ]).optional(), + draft_key: z.string().optional(), + draft_sequence: z.number().int().optional(), + per_page: z.number().int().optional(), + topics: z.array(z.object({ + id: z.number().int().optional(), + title: z.string().optional(), + fancy_title: z.string().optional(), + slug: z.string().optional(), + posts_count: z.number().int().optional(), + reply_count: z.number().int().optional(), + highest_post_number: z.number().int().optional(), + image_url: z.union([ + z.string(), + z.null() + ]).optional(), + created_at: z.string().optional(), + last_posted_at: z.string().optional(), + bumped: z.boolean().optional(), + bumped_at: z.string().optional(), + archetype: z.string().optional(), + unseen: z.boolean().optional(), + last_read_post_number: z.number().int().optional(), + unread_posts: z.number().int().optional(), + pinned: z.boolean().optional(), + unpinned: z.union([ + z.string(), + z.null() + ]).optional(), + visible: z.boolean().optional(), + closed: z.boolean().optional(), + archived: z.boolean().optional(), + notification_level: z.number().int().optional(), + bookmarked: z.boolean().optional(), + liked: z.boolean().optional(), + views: z.number().int().optional(), + like_count: z.number().int().optional(), + has_summary: z.boolean().optional(), + last_poster_username: z.string().optional(), + category_id: z.union([ + z.string(), + z.null() + ]).optional(), + pinned_globally: z.boolean().optional(), + featured_link: z.union([ + z.string(), + z.null() + ]).optional(), + allowed_user_count: z.number().int().optional(), + posters: z.array(z.object({ + extras: z.string().optional(), + description: z.string().optional(), + user_id: z.number().int().optional(), + primary_group_id: z.union([ + z.number().int(), + z.null() + ]).optional() + })).optional(), + participants: z.array(z.unknown()).optional() + })).optional() + }).optional() +}); + +export const zSearchResponse = z.object({ + posts: z.array(z.unknown()), + users: z.array(z.unknown()), + categories: z.array(z.unknown()), + tags: z.array(z.unknown()), + groups: z.array(z.unknown()), + grouped_search_result: z.object({ + more_posts: z.union([ + z.string(), + z.null() + ]), + more_users: z.union([ + z.string(), + z.null() + ]), + more_categories: z.union([ + z.string(), + z.null() + ]), + term: z.string(), + search_log_id: z.number().int(), + more_full_page_results: z.union([ + z.string(), + z.null() + ]), + can_create_topic: z.boolean(), + error: z.union([ + z.string(), + z.null() + ]), + extra: z.object({ + categories: z.union([ + z.array(z.unknown()), + z.null() + ]).optional() + }).optional(), + post_ids: z.array(z.unknown()), + user_ids: z.array(z.unknown()), + category_ids: z.array(z.unknown()), + tag_ids: z.array(z.unknown()), + group_ids: z.array(z.unknown()) + }) +}); + +export const zGetSiteResponse = z.object({ + default_archetype: z.string(), + notification_types: z.object({ + mentioned: z.number().int(), + replied: z.number().int(), + quoted: z.number().int(), + edited: z.number().int(), + liked: z.number().int(), + private_message: z.number().int(), + invited_to_private_message: z.number().int(), + invitee_accepted: z.number().int(), + posted: z.number().int(), + watching_category_or_tag: z.number().int(), + new_features: z.number().int().optional(), + admin_problems: z.number().int().optional(), + moved_post: z.number().int(), + linked: z.number().int(), + granted_badge: z.number().int(), + invited_to_topic: z.number().int(), + custom: z.number().int(), + group_mentioned: z.number().int(), + group_message_summary: z.number().int(), + watching_first_post: z.number().int(), + topic_reminder: z.number().int(), + liked_consolidated: z.number().int(), + linked_consolidated: z.number().int(), + post_approved: z.number().int(), + code_review_commit_approved: z.number().int(), + membership_request_accepted: z.number().int(), + membership_request_consolidated: z.number().int(), + bookmark_reminder: z.number().int(), + reaction: z.number().int(), + votes_released: z.number().int(), + event_reminder: z.number().int(), + event_invitation: z.number().int(), + chat_mention: z.number().int(), + chat_message: z.number().int(), + chat_invitation: z.number().int(), + chat_group_mention: z.number().int(), + chat_quoted: z.number().int().optional(), + chat_watched_thread: z.number().int().optional(), + assigned: z.number().int().optional(), + question_answer_user_commented: z.number().int().optional(), + following: z.number().int().optional(), + following_created_topic: z.number().int().optional(), + following_replied: z.number().int().optional(), + circles_activity: z.number().int().optional() + }), + post_types: z.object({ + regular: z.number().int(), + moderator_action: z.number().int(), + small_action: z.number().int(), + whisper: z.number().int() + }), + trust_levels: z.object({ + newuser: z.number().int(), + basic: z.number().int(), + member: z.number().int(), + regular: z.number().int(), + leader: z.number().int() + }), + user_tips: z.object({ + first_notification: z.number().int(), + topic_timeline: z.number().int(), + post_menu: z.number().int(), + topic_notification_levels: z.number().int(), + suggested_topics: z.number().int() + }).optional(), + groups: z.array(z.object({ + id: z.number().int(), + name: z.string(), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]) + })), + filters: z.array(z.unknown()), + periods: z.array(z.unknown()), + top_menu_items: z.array(z.unknown()), + anonymous_top_menu_items: z.array(z.unknown()), + uncategorized_category_id: z.number().int(), + user_field_max_length: z.number().int(), + post_action_types: z.array(z.object({ + id: z.union([ + z.number().int(), + z.null() + ]), + name_key: z.union([ + z.string(), + z.null() + ]), + name: z.string(), + description: z.string(), + short_description: z.string(), + is_flag: z.boolean(), + require_message: z.boolean(), + enabled: z.boolean(), + applies_to: z.array(z.unknown()), + is_used: z.boolean(), + position: z.number().int().optional(), + auto_action_type: z.boolean() + })), + topic_flag_types: z.array(z.object({ + id: z.union([ + z.number().int(), + z.null() + ]), + name_key: z.union([ + z.string(), + z.null() + ]), + name: z.string(), + description: z.string(), + short_description: z.string(), + is_flag: z.boolean(), + require_message: z.boolean(), + enabled: z.boolean(), + applies_to: z.array(z.unknown()), + is_used: z.boolean(), + position: z.number().int().optional(), + auto_action_type: z.boolean() + })), + can_create_tag: z.boolean(), + can_tag_topics: z.boolean(), + can_tag_pms: z.boolean(), + tags_filter_regexp: z.string(), + top_tags: z.array(z.unknown()), + wizard_required: z.boolean().optional(), + can_associate_groups: z.boolean().optional(), + topic_featured_link_allowed_category_ids: z.array(z.unknown()), + user_themes: z.array(z.object({ + theme_id: z.number().int(), + name: z.string(), + default: z.boolean(), + color_scheme_id: z.union([ + z.number().int(), + z.null() + ]) + })), + user_color_schemes: z.array(z.object({ + id: z.number().int(), + name: z.string(), + is_dark: z.boolean() + })), + default_dark_color_scheme: z.union([ + z.object({}), + z.null() + ]), + censored_regexp: z.array(z.object({})), + custom_emoji_translation: z.object({}), + watched_words_replace: z.union([ + z.string(), + z.null() + ]), + watched_words_link: z.union([ + z.string(), + z.null() + ]), + markdown_additional_options: z.object({}).optional(), + hashtag_configurations: z.object({}).optional(), + hashtag_icons: z.object({}).optional(), + displayed_about_plugin_stat_groups: z.array(z.unknown()).optional(), + categories: z.array(z.object({ + id: z.number().int(), + name: z.string(), + color: z.string(), + text_color: z.string(), + slug: z.string(), + topic_count: z.number().int(), + post_count: z.number().int(), + position: z.number().int(), + description: z.union([ + z.string(), + z.null() + ]).optional(), + description_text: z.union([ + z.string(), + z.null() + ]).optional(), + description_excerpt: z.union([ + z.string(), + z.null() + ]).optional(), + topic_url: z.string(), + read_restricted: z.boolean(), + permission: z.number().int(), + notification_level: z.number().int(), + topic_template: z.union([ + z.string(), + z.null() + ]), + has_children: z.boolean(), + subcategory_count: z.union([ + z.number().int(), + z.null() + ]), + sort_order: z.union([ + z.string(), + z.null() + ]), + sort_ascending: z.union([ + z.string(), + z.null() + ]), + show_subcategory_list: z.boolean(), + num_featured_topics: z.number().int(), + default_view: z.union([ + z.string(), + z.null() + ]), + subcategory_list_style: z.string(), + default_top_period: z.string(), + default_list_filter: z.string(), + minimum_required_tags: z.number().int(), + navigate_to_first_post_after_read: z.boolean(), + allowed_tags: z.array(z.unknown()), + allowed_tag_groups: z.array(z.unknown()), + allow_global_tags: z.boolean(), + required_tag_groups: z.array(z.object({ + name: z.string(), + min_count: z.number().int() + })), + read_only_banner: z.union([ + z.string(), + z.null() + ]), + uploaded_logo: z.union([ + z.string(), + z.null() + ]), + uploaded_logo_dark: z.union([ + z.string(), + z.null() + ]), + uploaded_background: z.union([ + z.string(), + z.null() + ]), + uploaded_background_dark: z.union([ + z.string(), + z.null() + ]), + can_edit: z.boolean(), + custom_fields: z.union([ + z.object({}), + z.null() + ]).optional(), + parent_category_id: z.number().int().optional(), + form_template_ids: z.array(z.unknown()).optional() + })), + archetypes: z.array(z.object({ + id: z.string(), + name: z.string(), + options: z.array(z.unknown()) + })), + user_fields: z.array(z.unknown()), + auth_providers: z.array(z.unknown()), + whispers_allowed_groups_names: z.array(z.unknown()).optional(), + denied_emojis: z.array(z.unknown()).optional(), + valid_flag_applies_to_types: z.array(z.unknown()).optional(), + navigation_menu_site_top_tags: z.array(z.unknown()).optional(), + full_name_required_for_signup: z.boolean(), + full_name_visible_in_signup: z.boolean() +}); + +export const zGetSiteBasicInfoResponse = z.object({ + logo_url: z.string(), + logo_small_url: z.string(), + apple_touch_icon_url: z.string(), + favicon_url: z.string(), + title: z.string(), + description: z.string(), + header_primary_color: z.string(), + header_background_color: z.string(), + login_required: z.boolean(), + locale: z.string(), + include_in_discourse_discover: z.boolean(), + mobile_logo_url: z.string() +}); + +export const zListTagGroupsResponse = z.object({ + tag_groups: z.array(z.object({ + id: z.number().int().optional(), + name: z.string().optional(), + tag_names: z.array(z.unknown()).optional(), + parent_tag_name: z.array(z.unknown()).optional(), + one_per_topic: z.boolean().optional(), + permissions: z.object({ + staff: z.number().int().optional() + }).optional() + })).optional() +}); + +export const zCreateTagGroupResponse = z.object({ + tag_group: z.object({ + id: z.number().int(), + name: z.string(), + tag_names: z.array(z.unknown()), + parent_tag_name: z.array(z.unknown()), + one_per_topic: z.boolean(), + permissions: z.object({}) + }) +}); + +export const zGetTagGroupResponse = z.object({ + tag_group: z.object({ + id: z.number().int().optional(), + name: z.string().optional(), + tag_names: z.array(z.unknown()).optional(), + parent_tag_name: z.array(z.unknown()).optional(), + one_per_topic: z.boolean().optional(), + permissions: z.object({ + everyone: z.number().int().optional() + }).optional() + }).optional() +}); + +export const zUpdateTagGroupResponse = z.object({ + success: z.string().optional(), + tag_group: z.object({ + id: z.number().int().optional(), + name: z.string().optional(), + tag_names: z.array(z.unknown()).optional(), + parent_tag_name: z.array(z.unknown()).optional(), + one_per_topic: z.boolean().optional(), + permissions: z.object({ + everyone: z.number().int().optional() + }).optional() + }).optional() +}); + +export const zListTagsResponse = z.object({ + tags: z.array(z.object({ + id: z.string().optional(), + text: z.string().optional(), + count: z.number().int().optional(), + pm_count: z.number().int().optional(), + target_tag: z.union([ + z.string(), + z.null() + ]).optional() + })).optional(), + extras: z.object({ + categories: z.array(z.unknown()).optional() + }).optional() +}); + +export const zGetTagResponse = z.object({ + users: z.array(z.object({ + id: z.number().int().optional(), + username: z.string().optional(), + name: z.union([ + z.string(), + z.null() + ]).optional(), + avatar_template: z.string().optional() + })).optional(), + primary_groups: z.array(z.unknown()).optional(), + topic_list: z.object({ + can_create_topic: z.boolean().optional(), + draft: z.union([ + z.string(), + z.null() + ]).optional(), + draft_key: z.string().optional(), + draft_sequence: z.number().int().optional(), + per_page: z.number().int().optional(), + tags: z.array(z.object({ + id: z.number().int().optional(), + name: z.string().optional(), + topic_count: z.number().int().optional(), + staff: z.boolean().optional() + })).optional(), + topics: z.array(z.object({ + id: z.number().int().optional(), + title: z.string().optional(), + fancy_title: z.string().optional(), + slug: z.string().optional(), + posts_count: z.number().int().optional(), + reply_count: z.number().int().optional(), + highest_post_number: z.number().int().optional(), + image_url: z.union([ + z.string(), + z.null() + ]).optional(), + created_at: z.string().optional(), + last_posted_at: z.string().optional(), + bumped: z.boolean().optional(), + bumped_at: z.string().optional(), + archetype: z.string().optional(), + unseen: z.boolean().optional(), + last_read_post_number: z.number().int().optional(), + unread_posts: z.number().int().optional(), + pinned: z.boolean().optional(), + unpinned: z.union([ + z.string(), + z.null() + ]).optional(), + visible: z.boolean().optional(), + closed: z.boolean().optional(), + archived: z.boolean().optional(), + notification_level: z.number().int().optional(), + bookmarked: z.boolean().optional(), + liked: z.boolean().optional(), + tags: z.array(z.unknown()).optional(), + views: z.number().int().optional(), + like_count: z.number().int().optional(), + has_summary: z.boolean().optional(), + last_poster_username: z.string().optional(), + category_id: z.number().int().optional(), + pinned_globally: z.boolean().optional(), + featured_link: z.union([ + z.string(), + z.null() + ]).optional(), + posters: z.array(z.object({ + extras: z.string().optional(), + description: z.string().optional(), + user_id: z.number().int().optional(), + primary_group_id: z.union([ + z.number().int(), + z.null() + ]).optional() + })).optional() + })).optional() + }).optional() +}); + +export const zGetSpecificPostsFromTopicResponse = z.object({ + post_stream: z.object({ + posts: z.array(z.object({ + id: z.number().int().optional(), + name: z.union([ + z.string(), + z.null() + ]).optional(), + username: z.string().optional(), + avatar_template: z.string().optional(), + created_at: z.string().optional(), + cooked: z.string().optional(), + post_number: z.number().int().optional(), + post_type: z.number().int().optional(), + updated_at: z.string().optional(), + reply_count: z.number().int().optional(), + reply_to_post_number: z.union([ + z.string(), + z.null() + ]).optional(), + quote_count: z.number().int().optional(), + incoming_link_count: z.number().int().optional(), + reads: z.number().int().optional(), + readers_count: z.number().int().optional(), + score: z.number().optional(), + yours: z.boolean().optional(), + topic_id: z.number().int().optional(), + topic_slug: z.string().optional(), + display_username: z.union([ + z.string(), + z.null() + ]).optional(), + primary_group_name: z.union([ + z.string(), + z.null() + ]).optional(), + flair_name: z.union([ + z.string(), + z.null() + ]).optional(), + flair_url: z.union([ + z.string(), + z.null() + ]).optional(), + flair_bg_color: z.union([ + z.string(), + z.null() + ]).optional(), + flair_color: z.union([ + z.string(), + z.null() + ]).optional(), + version: z.number().int().optional(), + can_edit: z.boolean().optional(), + can_delete: z.boolean().optional(), + can_recover: z.boolean().optional(), + can_wiki: z.boolean().optional(), + read: z.boolean().optional(), + user_title: z.union([ + z.string(), + z.null() + ]).optional(), + actions_summary: z.array(z.object({ + id: z.number().int().optional(), + can_act: z.boolean().optional() + })).optional(), + moderator: z.boolean().optional(), + admin: z.boolean().optional(), + staff: z.boolean().optional(), + user_id: z.number().int().optional(), + hidden: z.boolean().optional(), + trust_level: z.number().int().optional(), + deleted_at: z.union([ + z.string(), + z.null() + ]).optional(), + user_deleted: z.boolean().optional(), + edit_reason: z.union([ + z.string(), + z.null() + ]).optional(), + can_view_edit_history: z.boolean().optional(), + wiki: z.boolean().optional(), + reviewable_id: z.number().int().optional(), + reviewable_score_count: z.number().int().optional(), + reviewable_score_pending_count: z.number().int().optional() + })).optional() + }).optional(), + id: z.number().int().optional() +}); + +export const zGetTopicResponse = z.object({ + post_stream: z.object({ + posts: z.array(z.object({ + id: z.number().int(), + name: z.string(), + username: z.string(), + avatar_template: z.string(), + created_at: z.string(), + cooked: z.string(), + post_number: z.number().int(), + post_type: z.number().int(), + updated_at: z.string(), + reply_count: z.number().int(), + reply_to_post_number: z.union([ + z.string(), + z.null() + ]), + quote_count: z.number().int(), + incoming_link_count: z.number().int(), + reads: z.number().int(), + readers_count: z.number().int(), + score: z.number(), + yours: z.boolean(), + topic_id: z.number().int(), + topic_slug: z.string(), + display_username: z.string(), + primary_group_name: z.union([ + z.string(), + z.null() + ]), + flair_name: z.union([ + z.string(), + z.null() + ]), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]), + version: z.number().int(), + can_edit: z.boolean(), + can_delete: z.boolean(), + can_recover: z.boolean(), + can_see_hidden_post: z.boolean().optional(), + can_wiki: z.boolean(), + link_counts: z.array(z.object({ + url: z.string(), + internal: z.boolean(), + reflection: z.boolean(), + title: z.string(), + clicks: z.number().int() + })), + read: z.boolean(), + user_title: z.union([ + z.string(), + z.null() + ]), + bookmarked: z.boolean(), + actions_summary: z.array(z.object({ + id: z.number().int(), + can_act: z.boolean() + })), + moderator: z.boolean(), + admin: z.boolean(), + staff: z.boolean(), + user_id: z.number().int(), + hidden: z.boolean(), + trust_level: z.number().int(), + deleted_at: z.union([ + z.string(), + z.null() + ]), + user_deleted: z.boolean(), + edit_reason: z.union([ + z.string(), + z.null() + ]), + can_view_edit_history: z.boolean(), + wiki: z.boolean(), + reviewable_id: z.number().int(), + reviewable_score_count: z.number().int(), + reviewable_score_pending_count: z.number().int() + })), + stream: z.array(z.unknown()) + }), + timeline_lookup: z.array(z.unknown()), + suggested_topics: z.array(z.object({ + id: z.number().int(), + title: z.string(), + fancy_title: z.string(), + slug: z.string(), + posts_count: z.number().int(), + reply_count: z.number().int(), + highest_post_number: z.number().int(), + image_url: z.union([ + z.string(), + z.null() + ]), + created_at: z.string(), + last_posted_at: z.union([ + z.string(), + z.null() + ]), + bumped: z.boolean(), + bumped_at: z.string(), + archetype: z.string(), + unseen: z.boolean(), + pinned: z.boolean(), + unpinned: z.union([ + z.string(), + z.null() + ]), + excerpt: z.string(), + visible: z.boolean(), + closed: z.boolean(), + archived: z.boolean(), + bookmarked: z.union([ + z.string(), + z.null() + ]), + liked: z.union([ + z.string(), + z.null() + ]), + tags: z.array(z.unknown()), + tags_descriptions: z.object({}), + like_count: z.number().int(), + views: z.number().int(), + category_id: z.number().int(), + featured_link: z.union([ + z.string(), + z.null() + ]), + posters: z.array(z.object({ + extras: z.string(), + description: z.string(), + user: z.object({ + id: z.number().int(), + username: z.string(), + name: z.string(), + avatar_template: z.string() + }) + })) + })), + tags: z.array(z.unknown()), + tags_descriptions: z.object({}), + id: z.number().int(), + title: z.string(), + fancy_title: z.string(), + posts_count: z.number().int(), + created_at: z.string(), + views: z.number().int(), + reply_count: z.number().int(), + like_count: z.number().int(), + last_posted_at: z.union([ + z.string(), + z.null() + ]), + visible: z.boolean(), + closed: z.boolean(), + archived: z.boolean(), + has_summary: z.boolean(), + archetype: z.string(), + slug: z.string(), + category_id: z.number().int(), + word_count: z.union([ + z.number().int(), + z.null() + ]), + deleted_at: z.union([ + z.string(), + z.null() + ]), + user_id: z.number().int(), + featured_link: z.union([ + z.string(), + z.null() + ]), + pinned_globally: z.boolean(), + pinned_at: z.union([ + z.string(), + z.null() + ]), + pinned_until: z.union([ + z.string(), + z.null() + ]), + image_url: z.union([ + z.string(), + z.null() + ]), + slow_mode_seconds: z.number().int(), + draft: z.union([ + z.string(), + z.null() + ]), + draft_key: z.string(), + draft_sequence: z.number().int(), + unpinned: z.union([ + z.string(), + z.null() + ]), + pinned: z.boolean(), + current_post_number: z.number().int().optional(), + highest_post_number: z.union([ + z.number().int(), + z.null() + ]), + deleted_by: z.union([ + z.string(), + z.null() + ]), + has_deleted: z.boolean(), + actions_summary: z.array(z.object({ + id: z.number().int(), + count: z.number().int(), + hidden: z.boolean(), + can_act: z.boolean() + })), + chunk_size: z.number().int(), + bookmarked: z.boolean(), + bookmarks: z.array(z.unknown()), + topic_timer: z.union([ + z.string(), + z.null() + ]), + message_bus_last_id: z.number().int(), + participant_count: z.number().int(), + show_read_indicator: z.boolean(), + thumbnails: z.union([ + z.string(), + z.null() + ]), + slow_mode_enabled_until: z.union([ + z.string(), + z.null() + ]), + details: z.object({ + can_edit: z.boolean(), + notification_level: z.number().int(), + can_move_posts: z.boolean(), + can_delete: z.boolean(), + can_remove_allowed_users: z.boolean(), + can_create_post: z.boolean(), + can_reply_as_new_topic: z.boolean(), + can_invite_to: z.boolean().optional(), + can_invite_via_email: z.boolean().optional(), + can_flag_topic: z.boolean().optional(), + can_convert_topic: z.boolean(), + can_review_topic: z.boolean(), + can_close_topic: z.boolean(), + can_archive_topic: z.boolean(), + can_split_merge_topic: z.boolean(), + can_edit_staff_notes: z.boolean(), + can_toggle_topic_visibility: z.boolean(), + can_pin_unpin_topic: z.boolean(), + can_moderate_category: z.boolean(), + can_remove_self_id: z.number().int(), + participants: z.array(z.object({ + id: z.number().int(), + username: z.string(), + name: z.string(), + avatar_template: z.string(), + post_count: z.number().int(), + primary_group_name: z.union([ + z.string(), + z.null() + ]), + flair_name: z.union([ + z.string(), + z.null() + ]), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_group_id: z.union([ + z.number().int(), + z.null() + ]).optional(), + admin: z.boolean(), + moderator: z.boolean(), + trust_level: z.number().int() + })).optional(), + created_by: z.object({ + id: z.number().int(), + username: z.string(), + name: z.string(), + avatar_template: z.string() + }), + last_poster: z.object({ + id: z.number().int(), + username: z.string(), + name: z.string(), + avatar_template: z.string() + }) + }) +}); + +export const zUpdateTopicResponse = z.object({ + basic_topic: z.object({ + id: z.number().int().optional(), + title: z.string().optional(), + fancy_title: z.string().optional(), + slug: z.string().optional(), + posts_count: z.number().int().optional() + }).optional() +}); + +export const zInviteToTopicResponse = z.object({ + user: z.object({ + id: z.number().int().optional(), + username: z.string().optional(), + name: z.string().optional(), + avatar_template: z.string().optional() + }).optional() +}); + +export const zInviteGroupToTopicResponse = z.object({ + group: z.object({ + id: z.number().int().optional(), + name: z.string().optional() + }).optional() +}); + +export const zUpdateTopicStatusResponse = z.object({ + success: z.string().optional(), + topic_status_update: z.union([ + z.string(), + z.null() + ]).optional() +}); + +export const zListLatestTopicsResponse = z.object({ + users: z.array(z.object({ + id: z.number().int().optional(), + username: z.string().optional(), + name: z.union([ + z.string(), + z.null() + ]).optional(), + avatar_template: z.string().optional() + })).optional(), + primary_groups: z.array(z.unknown()).optional(), + topic_list: z.object({ + can_create_topic: z.boolean().optional(), + draft: z.union([ + z.string(), + z.null() + ]).optional(), + draft_key: z.string().optional(), + draft_sequence: z.number().int().optional(), + per_page: z.number().int().optional(), + topics: z.array(z.object({ + id: z.number().int().optional(), + title: z.string().optional(), + fancy_title: z.string().optional(), + slug: z.string().optional(), + posts_count: z.number().int().optional(), + reply_count: z.number().int().optional(), + highest_post_number: z.number().int().optional(), + image_url: z.string().optional(), + created_at: z.string().optional(), + last_posted_at: z.string().optional(), + bumped: z.boolean().optional(), + bumped_at: z.string().optional(), + archetype: z.string().optional(), + unseen: z.boolean().optional(), + last_read_post_number: z.number().int().optional(), + unread_posts: z.number().int().optional(), + pinned: z.boolean().optional(), + unpinned: z.union([ + z.string(), + z.null() + ]).optional(), + visible: z.boolean().optional(), + closed: z.boolean().optional(), + archived: z.boolean().optional(), + notification_level: z.number().int().optional(), + bookmarked: z.boolean().optional(), + liked: z.boolean().optional(), + views: z.number().int().optional(), + like_count: z.number().int().optional(), + has_summary: z.boolean().optional(), + last_poster_username: z.string().optional(), + category_id: z.number().int().optional(), + op_like_count: z.number().int().optional(), + pinned_globally: z.boolean().optional(), + featured_link: z.union([ + z.string(), + z.null() + ]).optional(), + posters: z.array(z.object({ + extras: z.string().optional(), + description: z.string().optional(), + user_id: z.number().int().optional(), + primary_group_id: z.union([ + z.number().int(), + z.null() + ]).optional() + })).optional() + })).optional() + }).optional() +}); + +export const zListTopTopicsResponse = z.object({ + users: z.array(z.object({ + id: z.number().int().optional(), + username: z.string().optional(), + name: z.string().optional(), + avatar_template: z.string().optional() + })).optional(), + primary_groups: z.array(z.unknown()).optional(), + topic_list: z.object({ + can_create_topic: z.boolean().optional(), + draft: z.union([ + z.string(), + z.null() + ]).optional(), + draft_key: z.string().optional(), + draft_sequence: z.number().int().optional(), + for_period: z.string().optional(), + per_page: z.number().int().optional(), + topics: z.array(z.object({ + id: z.number().int().optional(), + title: z.string().optional(), + fancy_title: z.string().optional(), + slug: z.string().optional(), + posts_count: z.number().int().optional(), + reply_count: z.number().int().optional(), + highest_post_number: z.number().int().optional(), + image_url: z.union([ + z.string(), + z.null() + ]).optional(), + created_at: z.string().optional(), + last_posted_at: z.string().optional(), + bumped: z.boolean().optional(), + bumped_at: z.string().optional(), + archetype: z.string().optional(), + unseen: z.boolean().optional(), + last_read_post_number: z.number().int().optional(), + unread_posts: z.number().int().optional(), + pinned: z.boolean().optional(), + unpinned: z.boolean().optional(), + visible: z.boolean().optional(), + closed: z.boolean().optional(), + archived: z.boolean().optional(), + notification_level: z.number().int().optional(), + bookmarked: z.boolean().optional(), + liked: z.boolean().optional(), + views: z.number().int().optional(), + like_count: z.number().int().optional(), + has_summary: z.boolean().optional(), + last_poster_username: z.string().optional(), + category_id: z.number().int().optional(), + op_like_count: z.number().int().optional(), + pinned_globally: z.boolean().optional(), + featured_link: z.union([ + z.string(), + z.null() + ]).optional(), + posters: z.array(z.object({ + extras: z.union([ + z.string(), + z.null() + ]).optional(), + description: z.string().optional(), + user_id: z.number().int().optional(), + primary_group_id: z.union([ + z.number().int(), + z.null() + ]).optional() + })).optional() + })).optional() + }).optional() +}); + +export const zSetNotificationLevelResponse = z.object({ + success: z.string().optional() +}); + +export const zUpdateTopicTimestampResponse = z.object({ + success: z.string().optional() +}); + +export const zCreateTopicTimerResponse = z.object({ + success: z.string().optional(), + execute_at: z.string().optional(), + duration: z.union([ + z.string(), + z.null() + ]).optional(), + based_on_last_post: z.boolean().optional(), + closed: z.boolean().optional(), + category_id: z.union([ + z.number().int(), + z.null() + ]).optional() +}); + +export const zCreateUploadResponse = z.object({ + id: z.number().int(), + url: z.string(), + original_filename: z.string(), + filesize: z.number().int(), + width: z.number().int(), + height: z.number().int(), + thumbnail_width: z.number().int(), + thumbnail_height: z.number().int(), + extension: z.string(), + short_url: z.string(), + short_path: z.string(), + retain_hours: z.union([ + z.string(), + z.null() + ]), + human_filesize: z.string(), + dominant_color: z.union([ + z.string(), + z.null() + ]).optional(), + thumbnail: z.union([ + z.object({ + id: z.number().int().optional(), + upload_id: z.number().int().optional(), + url: z.string().optional(), + extension: z.string().optional(), + width: z.number().int().optional(), + height: z.number().int().optional(), + filesize: z.number().int().optional() + }), + z.null() + ]).optional() +}); + +export const zGeneratePresignedPutResponse = z.object({ + key: z.string().optional(), + url: z.string().optional(), + signed_headers: z.object({}).optional(), + unique_identifier: z.string().optional() +}); + +export const zCompleteExternalUploadResponse = z.object({ + id: z.number().int(), + url: z.string(), + original_filename: z.string(), + filesize: z.number().int(), + width: z.number().int(), + height: z.number().int(), + thumbnail_width: z.number().int(), + thumbnail_height: z.number().int(), + extension: z.string(), + short_url: z.string(), + short_path: z.string(), + retain_hours: z.union([ + z.string(), + z.null() + ]), + human_filesize: z.string(), + dominant_color: z.union([ + z.string(), + z.null() + ]).optional(), + thumbnail: z.union([ + z.object({ + id: z.number().int().optional(), + upload_id: z.number().int().optional(), + url: z.string().optional(), + extension: z.string().optional(), + width: z.number().int().optional(), + height: z.number().int().optional(), + filesize: z.number().int().optional() + }), + z.null() + ]).optional() +}); + +export const zCreateMultipartUploadResponse = z.object({ + key: z.string(), + external_upload_identifier: z.string(), + unique_identifier: z.string() +}); + +export const zBatchPresignMultipartPartsResponse = z.object({ + presigned_urls: z.object({}) +}); + +export const zAbortMultipartResponse = z.object({ + success: z.string() +}); + +export const zCompleteMultipartResponse = z.object({ + id: z.number().int(), + url: z.string(), + original_filename: z.string(), + filesize: z.number().int(), + width: z.number().int(), + height: z.number().int(), + thumbnail_width: z.number().int(), + thumbnail_height: z.number().int(), + extension: z.string(), + short_url: z.string(), + short_path: z.string(), + retain_hours: z.union([ + z.string(), + z.null() + ]), + human_filesize: z.string(), + dominant_color: z.union([ + z.string(), + z.null() + ]).optional(), + thumbnail: z.union([ + z.object({ + id: z.number().int().optional(), + upload_id: z.number().int().optional(), + url: z.string().optional(), + extension: z.string().optional(), + width: z.number().int().optional(), + height: z.number().int().optional(), + filesize: z.number().int().optional() + }), + z.null() + ]).optional() +}); + +export const zListUserBadgesResponse = z.object({ + badges: z.array(z.object({ + id: z.number().int(), + name: z.string(), + description: z.string(), + grant_count: z.number().int(), + allow_title: z.boolean(), + multiple_grant: z.boolean(), + icon: z.string(), + image_url: z.union([ + z.string(), + z.null() + ]), + listable: z.boolean(), + enabled: z.boolean(), + badge_grouping_id: z.number().int(), + system: z.boolean(), + slug: z.string(), + manually_grantable: z.boolean(), + badge_type_id: z.number().int() + })).optional(), + badge_types: z.array(z.object({ + id: z.number().int(), + name: z.string(), + sort_order: z.number().int() + })).optional(), + granted_bies: z.array(z.object({ + id: z.number().int(), + username: z.string(), + name: z.string(), + avatar_template: z.string(), + flair_name: z.union([ + z.string(), + z.null() + ]), + admin: z.boolean(), + moderator: z.boolean(), + trust_level: z.number().int() + })).optional(), + user_badges: z.array(z.object({ + id: z.number().int(), + granted_at: z.string(), + grouping_position: z.number().int(), + is_favorite: z.union([ + z.string(), + z.null() + ]), + can_favorite: z.boolean(), + badge_id: z.number().int(), + granted_by_id: z.number().int() + })) +}); + +export const zCreateUserResponse = z.object({ + success: z.boolean(), + active: z.boolean(), + message: z.string(), + user_id: z.number().int().optional() +}); + +export const zGetUserResponse = z.object({ + user_badges: z.array(z.unknown()), + user: z.object({ + id: z.number().int(), + username: z.string(), + name: z.string(), + avatar_template: z.string(), + last_posted_at: z.union([ + z.string(), + z.null() + ]), + last_seen_at: z.union([ + z.string(), + z.null() + ]), + created_at: z.string(), + ignored: z.boolean(), + muted: z.boolean(), + can_ignore_user: z.boolean(), + can_ignore_users: z.boolean().optional(), + can_mute_user: z.boolean(), + can_mute_users: z.boolean().optional(), + can_send_private_messages: z.boolean(), + can_send_private_message_to_user: z.boolean(), + trust_level: z.number().int(), + moderator: z.boolean(), + admin: z.boolean(), + title: z.union([ + z.string(), + z.null() + ]), + badge_count: z.number().int(), + second_factor_backup_enabled: z.boolean().optional(), + user_fields: z.object({ + 1: z.union([ + z.string(), + z.null() + ]), + 2: z.union([ + z.string(), + z.null() + ]) + }).optional(), + custom_fields: z.object({ + first_name: z.union([ + z.string(), + z.null() + ]).optional() + }), + time_read: z.number().int(), + recent_time_read: z.number().int(), + primary_group_id: z.union([ + z.number().int(), + z.null() + ]), + primary_group_name: z.union([ + z.string(), + z.null() + ]), + flair_group_id: z.union([ + z.number().int(), + z.null() + ]), + flair_name: z.union([ + z.string(), + z.null() + ]), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]), + featured_topic: z.union([ + z.string(), + z.null() + ]), + staged: z.boolean(), + can_edit: z.boolean(), + can_edit_username: z.boolean(), + can_edit_email: z.boolean(), + can_edit_name: z.boolean(), + uploaded_avatar_id: z.union([ + z.number().int(), + z.null() + ]), + has_title_badges: z.boolean(), + pending_count: z.number().int(), + pending_posts_count: z.number().int().optional(), + profile_view_count: z.number().int(), + second_factor_enabled: z.boolean(), + can_upload_profile_header: z.boolean(), + can_upload_user_card_background: z.boolean(), + post_count: z.number().int(), + can_be_deleted: z.boolean(), + can_delete_all_posts: z.boolean(), + locale: z.union([ + z.string(), + z.null() + ]), + muted_category_ids: z.array(z.unknown()), + regular_category_ids: z.array(z.unknown()), + watched_tags: z.array(z.unknown()), + watching_first_post_tags: z.array(z.unknown()), + tracked_tags: z.array(z.unknown()), + muted_tags: z.array(z.unknown()), + tracked_category_ids: z.array(z.unknown()), + watched_category_ids: z.array(z.unknown()), + watched_first_post_category_ids: z.array(z.unknown()), + system_avatar_upload_id: z.union([ + z.string(), + z.null() + ]), + system_avatar_template: z.string(), + muted_usernames: z.array(z.unknown()), + ignored_usernames: z.array(z.unknown()), + allowed_pm_usernames: z.array(z.unknown()), + mailing_list_posts_per_day: z.number().int(), + can_change_bio: z.boolean(), + can_change_location: z.boolean(), + can_change_website: z.boolean(), + can_change_tracking_preferences: z.boolean(), + user_api_keys: z.union([ + z.string(), + z.null() + ]), + user_passkeys: z.array(z.unknown()).optional(), + sidebar_tags: z.array(z.unknown()).optional(), + sidebar_category_ids: z.array(z.unknown()).optional(), + display_sidebar_tags: z.boolean().optional(), + can_pick_theme_with_custom_homepage: z.boolean().optional(), + user_auth_tokens: z.array(z.object({ + id: z.number().int(), + client_ip: z.string(), + location: z.string(), + browser: z.string(), + device: z.string(), + os: z.string(), + icon: z.string(), + created_at: z.string(), + seen_at: z.string(), + is_active: z.boolean() + })), + user_notification_schedule: z.object({ + enabled: z.boolean(), + day_0_start_time: z.number().int(), + day_0_end_time: z.number().int(), + day_1_start_time: z.number().int(), + day_1_end_time: z.number().int(), + day_2_start_time: z.number().int(), + day_2_end_time: z.number().int(), + day_3_start_time: z.number().int(), + day_3_end_time: z.number().int(), + day_4_start_time: z.number().int(), + day_4_end_time: z.number().int(), + day_5_start_time: z.number().int(), + day_5_end_time: z.number().int(), + day_6_start_time: z.number().int(), + day_6_end_time: z.number().int() + }), + use_logo_small_as_avatar: z.boolean(), + featured_user_badge_ids: z.array(z.unknown()), + invited_by: z.union([ + z.string(), + z.null() + ]), + groups: z.array(z.object({ + id: z.number().int(), + automatic: z.boolean(), + name: z.string(), + display_name: z.string(), + user_count: z.number().int(), + mentionable_level: z.number().int(), + messageable_level: z.number().int(), + visibility_level: z.number().int(), + primary_group: z.boolean(), + title: z.union([ + z.string(), + z.null() + ]), + grant_trust_level: z.union([ + z.string(), + z.null() + ]), + incoming_email: z.union([ + z.string(), + z.null() + ]), + has_messages: z.boolean(), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]), + bio_raw: z.union([ + z.string(), + z.null() + ]), + bio_cooked: z.union([ + z.string(), + z.null() + ]), + bio_excerpt: z.union([ + z.string(), + z.null() + ]), + public_admission: z.boolean(), + public_exit: z.boolean(), + allow_membership_requests: z.boolean(), + full_name: z.union([ + z.string(), + z.null() + ]), + default_notification_level: z.number().int(), + membership_request_template: z.union([ + z.string(), + z.null() + ]), + members_visibility_level: z.number().int(), + can_see_members: z.boolean(), + can_admin_group: z.boolean(), + publish_read_state: z.boolean() + })), + group_users: z.array(z.object({ + group_id: z.number().int(), + user_id: z.number().int(), + notification_level: z.number().int(), + owner: z.boolean().optional() + })), + user_option: z.object({ + user_id: z.number().int(), + mailing_list_mode: z.boolean(), + mailing_list_mode_frequency: z.number().int(), + email_digests: z.boolean(), + email_level: z.number().int(), + email_messages_level: z.number().int(), + external_links_in_new_tab: z.boolean(), + bookmark_auto_delete_preference: z.number().int().optional(), + color_scheme_id: z.union([ + z.string(), + z.null() + ]), + dark_scheme_id: z.union([ + z.string(), + z.null() + ]), + dynamic_favicon: z.boolean(), + enable_quoting: z.boolean(), + enable_smart_lists: z.boolean(), + enable_defer: z.boolean(), + digest_after_minutes: z.number().int(), + automatically_unpin_topics: z.boolean(), + auto_track_topics_after_msecs: z.number().int(), + notification_level_when_replying: z.number().int(), + new_topic_duration_minutes: z.number().int(), + email_previous_replies: z.number().int(), + email_in_reply_to: z.boolean(), + like_notification_frequency: z.number().int(), + include_tl0_in_digests: z.boolean(), + theme_ids: z.array(z.unknown()), + theme_key_seq: z.number().int(), + allow_private_messages: z.boolean(), + enable_allowed_pm_users: z.boolean(), + homepage_id: z.union([ + z.string(), + z.null() + ]), + hide_profile_and_presence: z.boolean(), + hide_profile: z.boolean(), + hide_presence: z.boolean(), + text_size: z.string(), + text_size_seq: z.number().int(), + title_count_mode: z.string(), + timezone: z.union([ + z.string(), + z.null() + ]), + skip_new_user_tips: z.boolean(), + default_calendar: z.string().optional(), + oldest_search_log_date: z.union([ + z.string(), + z.null() + ]).optional(), + sidebar_link_to_filtered_list: z.boolean().optional(), + sidebar_show_count_of_new_items: z.boolean().optional(), + watched_precedence_over_muted: z.union([ + z.boolean(), + z.null() + ]).optional(), + seen_popups: z.union([ + z.array(z.unknown()), + z.null() + ]).optional(), + topics_unread_when_closed: z.boolean() + }) + }) +}); + +export const zUpdateUserResponse = z.object({ + success: z.string(), + user: z.object({}) +}); + +export const zGetUserExternalIdResponse = z.object({ + user_badges: z.array(z.unknown()), + user: z.object({ + id: z.number().int(), + username: z.string(), + name: z.string(), + avatar_template: z.string(), + last_posted_at: z.union([ + z.string(), + z.null() + ]), + last_seen_at: z.union([ + z.string(), + z.null() + ]), + created_at: z.string(), + ignored: z.boolean(), + muted: z.boolean(), + can_ignore_user: z.boolean(), + can_ignore_users: z.boolean().optional(), + can_mute_user: z.boolean(), + can_mute_users: z.boolean().optional(), + can_send_private_messages: z.boolean(), + can_send_private_message_to_user: z.boolean(), + trust_level: z.number().int(), + moderator: z.boolean(), + admin: z.boolean(), + title: z.union([ + z.string(), + z.null() + ]), + badge_count: z.number().int(), + second_factor_backup_enabled: z.boolean().optional(), + user_fields: z.object({ + 1: z.union([ + z.string(), + z.null() + ]), + 2: z.union([ + z.string(), + z.null() + ]) + }).optional(), + custom_fields: z.object({ + first_name: z.union([ + z.string(), + z.null() + ]).optional() + }), + time_read: z.number().int(), + recent_time_read: z.number().int(), + primary_group_id: z.union([ + z.number().int(), + z.null() + ]), + primary_group_name: z.union([ + z.string(), + z.null() + ]), + flair_group_id: z.union([ + z.number().int(), + z.null() + ]), + flair_name: z.union([ + z.string(), + z.null() + ]), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]), + featured_topic: z.union([ + z.string(), + z.null() + ]), + staged: z.boolean(), + can_edit: z.boolean(), + can_edit_username: z.boolean(), + can_edit_email: z.boolean(), + can_edit_name: z.boolean(), + uploaded_avatar_id: z.union([ + z.number().int(), + z.null() + ]), + has_title_badges: z.boolean(), + pending_count: z.number().int(), + pending_posts_count: z.number().int().optional(), + profile_view_count: z.number().int(), + second_factor_enabled: z.boolean(), + can_upload_profile_header: z.boolean(), + can_upload_user_card_background: z.boolean(), + post_count: z.number().int(), + can_be_deleted: z.boolean(), + can_delete_all_posts: z.boolean(), + locale: z.union([ + z.string(), + z.null() + ]), + muted_category_ids: z.array(z.unknown()), + regular_category_ids: z.array(z.unknown()), + watched_tags: z.array(z.unknown()), + watching_first_post_tags: z.array(z.unknown()), + tracked_tags: z.array(z.unknown()), + muted_tags: z.array(z.unknown()), + tracked_category_ids: z.array(z.unknown()), + watched_category_ids: z.array(z.unknown()), + watched_first_post_category_ids: z.array(z.unknown()), + system_avatar_upload_id: z.union([ + z.string(), + z.null() + ]), + system_avatar_template: z.string(), + muted_usernames: z.array(z.unknown()), + ignored_usernames: z.array(z.unknown()), + allowed_pm_usernames: z.array(z.unknown()), + mailing_list_posts_per_day: z.number().int(), + can_change_bio: z.boolean(), + can_change_location: z.boolean(), + can_change_website: z.boolean(), + can_change_tracking_preferences: z.boolean(), + user_api_keys: z.union([ + z.string(), + z.null() + ]), + user_passkeys: z.array(z.unknown()).optional(), + sidebar_tags: z.array(z.unknown()).optional(), + sidebar_category_ids: z.array(z.unknown()).optional(), + display_sidebar_tags: z.boolean().optional(), + can_pick_theme_with_custom_homepage: z.boolean().optional(), + user_auth_tokens: z.array(z.object({ + id: z.number().int(), + client_ip: z.string(), + location: z.string(), + browser: z.string(), + device: z.string(), + os: z.string(), + icon: z.string(), + created_at: z.string(), + seen_at: z.string(), + is_active: z.boolean() + })), + user_notification_schedule: z.object({ + enabled: z.boolean(), + day_0_start_time: z.number().int(), + day_0_end_time: z.number().int(), + day_1_start_time: z.number().int(), + day_1_end_time: z.number().int(), + day_2_start_time: z.number().int(), + day_2_end_time: z.number().int(), + day_3_start_time: z.number().int(), + day_3_end_time: z.number().int(), + day_4_start_time: z.number().int(), + day_4_end_time: z.number().int(), + day_5_start_time: z.number().int(), + day_5_end_time: z.number().int(), + day_6_start_time: z.number().int(), + day_6_end_time: z.number().int() + }), + use_logo_small_as_avatar: z.boolean(), + featured_user_badge_ids: z.array(z.unknown()), + invited_by: z.union([ + z.string(), + z.null() + ]), + groups: z.array(z.object({ + id: z.number().int(), + automatic: z.boolean(), + name: z.string(), + display_name: z.string(), + user_count: z.number().int(), + mentionable_level: z.number().int(), + messageable_level: z.number().int(), + visibility_level: z.number().int(), + primary_group: z.boolean(), + title: z.union([ + z.string(), + z.null() + ]), + grant_trust_level: z.union([ + z.string(), + z.null() + ]), + incoming_email: z.union([ + z.string(), + z.null() + ]), + has_messages: z.boolean(), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]), + bio_raw: z.union([ + z.string(), + z.null() + ]), + bio_cooked: z.union([ + z.string(), + z.null() + ]), + bio_excerpt: z.union([ + z.string(), + z.null() + ]), + public_admission: z.boolean(), + public_exit: z.boolean(), + allow_membership_requests: z.boolean(), + full_name: z.union([ + z.string(), + z.null() + ]), + default_notification_level: z.number().int(), + membership_request_template: z.union([ + z.string(), + z.null() + ]), + members_visibility_level: z.number().int(), + can_see_members: z.boolean(), + can_admin_group: z.boolean(), + publish_read_state: z.boolean() + })), + group_users: z.array(z.object({ + group_id: z.number().int(), + user_id: z.number().int(), + notification_level: z.number().int(), + owner: z.boolean().optional() + })), + user_option: z.object({ + user_id: z.number().int(), + mailing_list_mode: z.boolean(), + mailing_list_mode_frequency: z.number().int(), + email_digests: z.boolean(), + email_level: z.number().int(), + email_messages_level: z.number().int(), + external_links_in_new_tab: z.boolean(), + bookmark_auto_delete_preference: z.number().int().optional(), + color_scheme_id: z.union([ + z.string(), + z.null() + ]), + dark_scheme_id: z.union([ + z.string(), + z.null() + ]), + dynamic_favicon: z.boolean(), + enable_quoting: z.boolean(), + enable_smart_lists: z.boolean(), + enable_defer: z.boolean(), + digest_after_minutes: z.number().int(), + automatically_unpin_topics: z.boolean(), + auto_track_topics_after_msecs: z.number().int(), + notification_level_when_replying: z.number().int(), + new_topic_duration_minutes: z.number().int(), + email_previous_replies: z.number().int(), + email_in_reply_to: z.boolean(), + like_notification_frequency: z.number().int(), + include_tl0_in_digests: z.boolean(), + theme_ids: z.array(z.unknown()), + theme_key_seq: z.number().int(), + allow_private_messages: z.boolean(), + enable_allowed_pm_users: z.boolean(), + homepage_id: z.union([ + z.string(), + z.null() + ]), + hide_profile_and_presence: z.boolean(), + hide_profile: z.boolean(), + hide_presence: z.boolean(), + text_size: z.string(), + text_size_seq: z.number().int(), + title_count_mode: z.string(), + timezone: z.union([ + z.string(), + z.null() + ]), + skip_new_user_tips: z.boolean(), + default_calendar: z.string().optional(), + oldest_search_log_date: z.union([ + z.string(), + z.null() + ]).optional(), + sidebar_link_to_filtered_list: z.boolean().optional(), + sidebar_show_count_of_new_items: z.boolean().optional(), + watched_precedence_over_muted: z.union([ + z.boolean(), + z.null() + ]).optional(), + seen_popups: z.union([ + z.array(z.unknown()), + z.null() + ]).optional(), + topics_unread_when_closed: z.boolean() + }) + }) +}); + +export const zGetUserIdentiyProviderExternalIdResponse = z.object({ + user_badges: z.array(z.unknown()), + user: z.object({ + id: z.number().int(), + username: z.string(), + name: z.string(), + avatar_template: z.string(), + last_posted_at: z.union([ + z.string(), + z.null() + ]), + last_seen_at: z.union([ + z.string(), + z.null() + ]), + created_at: z.string(), + ignored: z.boolean(), + muted: z.boolean(), + can_ignore_user: z.boolean(), + can_ignore_users: z.boolean().optional(), + can_mute_user: z.boolean(), + can_mute_users: z.boolean().optional(), + can_send_private_messages: z.boolean(), + can_send_private_message_to_user: z.boolean(), + trust_level: z.number().int(), + moderator: z.boolean(), + admin: z.boolean(), + title: z.union([ + z.string(), + z.null() + ]), + badge_count: z.number().int(), + second_factor_backup_enabled: z.boolean().optional(), + user_fields: z.object({ + 1: z.union([ + z.string(), + z.null() + ]), + 2: z.union([ + z.string(), + z.null() + ]) + }).optional(), + custom_fields: z.object({ + first_name: z.union([ + z.string(), + z.null() + ]).optional() + }), + time_read: z.number().int(), + recent_time_read: z.number().int(), + primary_group_id: z.union([ + z.number().int(), + z.null() + ]), + primary_group_name: z.union([ + z.string(), + z.null() + ]), + flair_group_id: z.union([ + z.number().int(), + z.null() + ]), + flair_name: z.union([ + z.string(), + z.null() + ]), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]), + featured_topic: z.union([ + z.string(), + z.null() + ]), + staged: z.boolean(), + can_edit: z.boolean(), + can_edit_username: z.boolean(), + can_edit_email: z.boolean(), + can_edit_name: z.boolean(), + uploaded_avatar_id: z.union([ + z.number().int(), + z.null() + ]), + has_title_badges: z.boolean(), + pending_count: z.number().int(), + pending_posts_count: z.number().int().optional(), + profile_view_count: z.number().int(), + second_factor_enabled: z.boolean(), + can_upload_profile_header: z.boolean(), + can_upload_user_card_background: z.boolean(), + post_count: z.number().int(), + can_be_deleted: z.boolean(), + can_delete_all_posts: z.boolean(), + locale: z.union([ + z.string(), + z.null() + ]), + muted_category_ids: z.array(z.unknown()), + regular_category_ids: z.array(z.unknown()), + watched_tags: z.array(z.unknown()), + watching_first_post_tags: z.array(z.unknown()), + tracked_tags: z.array(z.unknown()), + muted_tags: z.array(z.unknown()), + tracked_category_ids: z.array(z.unknown()), + watched_category_ids: z.array(z.unknown()), + watched_first_post_category_ids: z.array(z.unknown()), + system_avatar_upload_id: z.union([ + z.string(), + z.null() + ]), + system_avatar_template: z.string(), + muted_usernames: z.array(z.unknown()), + ignored_usernames: z.array(z.unknown()), + allowed_pm_usernames: z.array(z.unknown()), + mailing_list_posts_per_day: z.number().int(), + can_change_bio: z.boolean(), + can_change_location: z.boolean(), + can_change_website: z.boolean(), + can_change_tracking_preferences: z.boolean(), + user_api_keys: z.union([ + z.string(), + z.null() + ]), + user_passkeys: z.array(z.unknown()).optional(), + sidebar_tags: z.array(z.unknown()).optional(), + sidebar_category_ids: z.array(z.unknown()).optional(), + display_sidebar_tags: z.boolean().optional(), + can_pick_theme_with_custom_homepage: z.boolean().optional(), + user_auth_tokens: z.array(z.object({ + id: z.number().int(), + client_ip: z.string(), + location: z.string(), + browser: z.string(), + device: z.string(), + os: z.string(), + icon: z.string(), + created_at: z.string(), + seen_at: z.string(), + is_active: z.boolean() + })), + user_notification_schedule: z.object({ + enabled: z.boolean(), + day_0_start_time: z.number().int(), + day_0_end_time: z.number().int(), + day_1_start_time: z.number().int(), + day_1_end_time: z.number().int(), + day_2_start_time: z.number().int(), + day_2_end_time: z.number().int(), + day_3_start_time: z.number().int(), + day_3_end_time: z.number().int(), + day_4_start_time: z.number().int(), + day_4_end_time: z.number().int(), + day_5_start_time: z.number().int(), + day_5_end_time: z.number().int(), + day_6_start_time: z.number().int(), + day_6_end_time: z.number().int() + }), + use_logo_small_as_avatar: z.boolean(), + featured_user_badge_ids: z.array(z.unknown()), + invited_by: z.union([ + z.string(), + z.null() + ]), + groups: z.array(z.object({ + id: z.number().int(), + automatic: z.boolean(), + name: z.string(), + display_name: z.string(), + user_count: z.number().int(), + mentionable_level: z.number().int(), + messageable_level: z.number().int(), + visibility_level: z.number().int(), + primary_group: z.boolean(), + title: z.union([ + z.string(), + z.null() + ]), + grant_trust_level: z.union([ + z.string(), + z.null() + ]), + incoming_email: z.union([ + z.string(), + z.null() + ]), + has_messages: z.boolean(), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]), + bio_raw: z.union([ + z.string(), + z.null() + ]), + bio_cooked: z.union([ + z.string(), + z.null() + ]), + bio_excerpt: z.union([ + z.string(), + z.null() + ]), + public_admission: z.boolean(), + public_exit: z.boolean(), + allow_membership_requests: z.boolean(), + full_name: z.union([ + z.string(), + z.null() + ]), + default_notification_level: z.number().int(), + membership_request_template: z.union([ + z.string(), + z.null() + ]), + members_visibility_level: z.number().int(), + can_see_members: z.boolean(), + can_admin_group: z.boolean(), + publish_read_state: z.boolean() + })), + group_users: z.array(z.object({ + group_id: z.number().int(), + user_id: z.number().int(), + notification_level: z.number().int(), + owner: z.boolean().optional() + })), + user_option: z.object({ + user_id: z.number().int(), + mailing_list_mode: z.boolean(), + mailing_list_mode_frequency: z.number().int(), + email_digests: z.boolean(), + email_level: z.number().int(), + email_messages_level: z.number().int(), + external_links_in_new_tab: z.boolean(), + bookmark_auto_delete_preference: z.number().int().optional(), + color_scheme_id: z.union([ + z.string(), + z.null() + ]), + dark_scheme_id: z.union([ + z.string(), + z.null() + ]), + dynamic_favicon: z.boolean(), + enable_quoting: z.boolean(), + enable_smart_lists: z.boolean(), + enable_defer: z.boolean(), + digest_after_minutes: z.number().int(), + automatically_unpin_topics: z.boolean(), + auto_track_topics_after_msecs: z.number().int(), + notification_level_when_replying: z.number().int(), + new_topic_duration_minutes: z.number().int(), + email_previous_replies: z.number().int(), + email_in_reply_to: z.boolean(), + like_notification_frequency: z.number().int(), + include_tl0_in_digests: z.boolean(), + theme_ids: z.array(z.unknown()), + theme_key_seq: z.number().int(), + allow_private_messages: z.boolean(), + enable_allowed_pm_users: z.boolean(), + homepage_id: z.union([ + z.string(), + z.null() + ]), + hide_profile_and_presence: z.boolean(), + hide_profile: z.boolean(), + hide_presence: z.boolean(), + text_size: z.string(), + text_size_seq: z.number().int(), + title_count_mode: z.string(), + timezone: z.union([ + z.string(), + z.null() + ]), + skip_new_user_tips: z.boolean(), + default_calendar: z.string().optional(), + oldest_search_log_date: z.union([ + z.string(), + z.null() + ]).optional(), + sidebar_link_to_filtered_list: z.boolean().optional(), + sidebar_show_count_of_new_items: z.boolean().optional(), + watched_precedence_over_muted: z.union([ + z.boolean(), + z.null() + ]).optional(), + seen_popups: z.union([ + z.array(z.unknown()), + z.null() + ]).optional(), + topics_unread_when_closed: z.boolean() + }) + }) +}); + +export const zUpdateAvatarResponse = z.object({ + success: z.string() +}); + +export const zListUsersPublicResponse = z.object({ + directory_items: z.array(z.object({ + id: z.number().int(), + likes_received: z.number().int(), + likes_given: z.number().int(), + topics_entered: z.number().int(), + topic_count: z.number().int(), + post_count: z.number().int(), + posts_read: z.number().int(), + days_visited: z.number().int(), + user: z.object({ + id: z.number().int(), + username: z.string(), + name: z.union([ + z.string(), + z.null() + ]), + avatar_template: z.string(), + title: z.union([ + z.string(), + z.null() + ]) + }) + })), + meta: z.object({ + last_updated_at: z.union([ + z.string(), + z.null() + ]), + total_rows_directory_items: z.number().int(), + load_more_directory_items: z.string() + }) +}); + +export const zDeleteUserResponse = z.object({ + deleted: z.boolean() +}); + +export const zAdminGetUserResponse = z.object({ + id: z.number().int(), + username: z.string(), + name: z.union([ + z.string(), + z.null() + ]), + avatar_template: z.string(), + active: z.boolean(), + admin: z.boolean(), + moderator: z.boolean(), + last_seen_at: z.union([ + z.string(), + z.null() + ]), + last_emailed_at: z.union([ + z.string(), + z.null() + ]), + created_at: z.string(), + last_seen_age: z.union([ + z.number(), + z.null() + ]), + last_emailed_age: z.union([ + z.number(), + z.null() + ]), + created_at_age: z.union([ + z.number(), + z.null() + ]), + trust_level: z.number().int(), + manual_locked_trust_level: z.union([ + z.string(), + z.null() + ]), + title: z.union([ + z.string(), + z.null() + ]), + time_read: z.number().int(), + staged: z.boolean(), + days_visited: z.number().int(), + posts_read_count: z.number().int(), + topics_entered: z.number().int(), + post_count: z.number().int(), + associated_accounts: z.array(z.unknown()).optional(), + can_send_activation_email: z.boolean(), + can_activate: z.boolean(), + can_deactivate: z.boolean(), + ip_address: z.string(), + registration_ip_address: z.union([ + z.string(), + z.null() + ]), + can_grant_admin: z.boolean(), + can_revoke_admin: z.boolean(), + can_grant_moderation: z.boolean(), + can_revoke_moderation: z.boolean(), + can_impersonate: z.boolean(), + like_count: z.number().int(), + like_given_count: z.number().int(), + topic_count: z.number().int(), + flags_given_count: z.number().int(), + flags_received_count: z.number().int(), + private_topics_count: z.number().int(), + can_delete_all_posts: z.boolean(), + can_be_deleted: z.boolean().optional(), + can_be_anonymized: z.boolean(), + can_be_merged: z.boolean(), + full_suspend_reason: z.union([ + z.string(), + z.null() + ]), + latest_export: z.union([ + z.object({}), + z.null() + ]).optional(), + silence_reason: z.union([ + z.string(), + z.null() + ]).optional(), + post_edits_count: z.union([ + z.number().int(), + z.null() + ]).optional(), + primary_group_id: z.union([ + z.number().int(), + z.null() + ]), + badge_count: z.number().int(), + warnings_received_count: z.number().int(), + bounce_score: z.union([ + z.number().int(), + z.null() + ]), + reset_bounce_score_after: z.union([ + z.string(), + z.null() + ]), + can_view_action_logs: z.boolean(), + can_disable_second_factor: z.boolean(), + can_delete_sso_record: z.boolean(), + api_key_count: z.number().int(), + similar_users_count: z.number().int().optional(), + single_sign_on_record: z.union([ + z.string(), + z.null() + ]), + approved_by: z.union([ + z.object({ + id: z.number().int(), + username: z.string(), + name: z.string(), + avatar_template: z.string() + }), + z.null() + ]), + suspended_by: z.union([ + z.string(), + z.null() + ]), + silenced_by: z.union([ + z.string(), + z.null() + ]), + penalty_counts: z.object({ + silenced: z.number().int(), + suspended: z.number().int() + }).optional(), + next_penalty: z.string().optional(), + tl3_requirements: z.object({ + time_period: z.number().int(), + requirements_met: z.boolean(), + requirements_lost: z.boolean(), + trust_level_locked: z.boolean(), + on_grace_period: z.boolean(), + days_visited: z.number().int(), + min_days_visited: z.number().int(), + num_topics_replied_to: z.number().int(), + min_topics_replied_to: z.number().int(), + topics_viewed: z.number().int(), + min_topics_viewed: z.number().int(), + posts_read: z.number().int(), + min_posts_read: z.number().int(), + topics_viewed_all_time: z.number().int(), + min_topics_viewed_all_time: z.number().int(), + posts_read_all_time: z.number().int(), + min_posts_read_all_time: z.number().int(), + num_flagged_posts: z.number().int(), + max_flagged_posts: z.number().int(), + num_flagged_by_users: z.number().int(), + max_flagged_by_users: z.number().int(), + num_likes_given: z.number().int(), + min_likes_given: z.number().int(), + num_likes_received: z.number().int(), + min_likes_received: z.number().int(), + num_likes_received_days: z.number().int(), + min_likes_received_days: z.number().int(), + num_likes_received_users: z.number().int(), + min_likes_received_users: z.number().int(), + penalty_counts: z.object({ + silenced: z.number().int(), + suspended: z.number().int(), + total: z.number().int() + }) + }).optional(), + groups: z.array(z.object({ + id: z.number().int(), + automatic: z.boolean(), + name: z.string(), + display_name: z.string(), + user_count: z.number().int(), + mentionable_level: z.number().int(), + messageable_level: z.number().int(), + visibility_level: z.number().int(), + primary_group: z.boolean(), + title: z.union([ + z.string(), + z.null() + ]), + grant_trust_level: z.union([ + z.string(), + z.null() + ]), + incoming_email: z.union([ + z.string(), + z.null() + ]), + has_messages: z.boolean(), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]), + flair_group_id: z.union([ + z.number().int(), + z.null() + ]).optional(), + bio_raw: z.union([ + z.string(), + z.null() + ]), + bio_cooked: z.union([ + z.string(), + z.null() + ]), + bio_excerpt: z.union([ + z.string(), + z.null() + ]), + public_admission: z.boolean(), + public_exit: z.boolean(), + allow_membership_requests: z.boolean(), + full_name: z.union([ + z.string(), + z.null() + ]), + default_notification_level: z.number().int(), + membership_request_template: z.union([ + z.string(), + z.null() + ]), + members_visibility_level: z.number().int(), + can_see_members: z.boolean(), + can_admin_group: z.boolean(), + publish_read_state: z.boolean() + })), + external_ids: z.object({}) +}); + +export const zActivateUserResponse = z.object({ + success: z.string() +}); + +export const zDeactivateUserResponse = z.object({ + success: z.string() +}); + +export const zSuspendUserResponse = z.object({ + suspension: z.object({ + suspend_reason: z.string(), + full_suspend_reason: z.string(), + suspended_till: z.string(), + suspended_at: z.string(), + suspended_by: z.object({ + id: z.number().int(), + username: z.string(), + name: z.string(), + avatar_template: z.string() + }) + }) +}); + +export const zSilenceUserResponse = z.object({ + silence: z.object({ + silenced: z.boolean(), + silence_reason: z.string(), + silenced_till: z.string(), + silenced_at: z.string(), + silenced_by: z.object({ + id: z.number().int(), + username: z.string(), + name: z.string(), + avatar_template: z.string() + }) + }) +}); + +export const zAnonymizeUserResponse = z.object({ + success: z.string(), + username: z.string() +}); + +export const zLogOutUserResponse = z.object({ + success: z.string() +}); + +export const zRefreshGravatarResponse = z.object({ + gravatar_upload_id: z.union([ + z.number().int(), + z.null() + ]), + gravatar_avatar_template: z.union([ + z.string(), + z.null() + ]) +}); + +export const zAdminListUsersResponse = z.array(z.object({ + id: z.number().int(), + username: z.string(), + name: z.union([ + z.string(), + z.null() + ]), + avatar_template: z.string(), + email: z.string().optional(), + secondary_emails: z.array(z.unknown()).optional(), + active: z.boolean(), + admin: z.boolean(), + moderator: z.boolean(), + last_seen_at: z.union([ + z.string(), + z.null() + ]), + last_emailed_at: z.union([ + z.string(), + z.null() + ]), + created_at: z.string(), + last_seen_age: z.union([ + z.number(), + z.null() + ]), + last_emailed_age: z.union([ + z.number(), + z.null() + ]), + created_at_age: z.union([ + z.number(), + z.null() + ]), + trust_level: z.number().int(), + manual_locked_trust_level: z.union([ + z.string(), + z.null() + ]), + title: z.union([ + z.string(), + z.null() + ]), + time_read: z.number().int(), + staged: z.boolean(), + days_visited: z.number().int(), + posts_read_count: z.number().int(), + topics_entered: z.number().int(), + post_count: z.number().int() +})).min(1); + +export const zListUserActionsResponse = z.object({ + user_actions: z.array(z.object({ + excerpt: z.string(), + action_type: z.number().int(), + created_at: z.string(), + avatar_template: z.string(), + acting_avatar_template: z.string(), + slug: z.string(), + topic_id: z.number().int(), + target_user_id: z.number().int(), + target_name: z.union([ + z.string(), + z.null() + ]), + target_username: z.string(), + post_number: z.number().int(), + post_id: z.union([ + z.string(), + z.null() + ]), + username: z.string(), + name: z.union([ + z.string(), + z.null() + ]), + user_id: z.number().int(), + acting_username: z.string(), + acting_name: z.union([ + z.string(), + z.null() + ]), + acting_user_id: z.number().int(), + title: z.string(), + deleted: z.boolean(), + hidden: z.union([ + z.string(), + z.null() + ]), + post_type: z.union([ + z.string(), + z.null() + ]), + action_code: z.union([ + z.string(), + z.null() + ]), + category_id: z.number().int(), + closed: z.boolean(), + archived: z.boolean() + })) +}); + +export const zSendPasswordResetEmailResponse = z.object({ + success: z.string(), + user_found: z.boolean() +}); + +export const zGetUserEmailsResponse = z.object({ + email: z.string(), + secondary_emails: z.array(z.unknown()), + unconfirmed_emails: z.array(z.unknown()), + associated_accounts: z.array(z.unknown()) +}); + +export const zPostMessageResponse = z.object({ + id: z.number().int().optional(), + cooked: z.string().optional(), + raw: z.string().optional(), + errors: z.array(z.string()).optional() +}); + +export const zReactToMessageResponse = z.object({ + success: z.enum([ + 'OK' + ]).optional() +}); + +export const zGetMessagesResponse = z.object({ + messages: z.array(z.object({ + id: z.number().int().optional(), + message: z.string().optional(), + created_at: z.string().datetime().optional(), + user: z.object({ + username: z.string().optional() + }).optional() + })).optional() +}); + +export const zGetChatChannelResponse = z.object({ + channel: z.object({ + id: z.number().int().optional(), + chatable: z.object({ + users: z.array(z.object({ + id: z.number().int().optional(), + username: z.string().optional(), + name: z.string().optional(), + avatar_template: z.string().optional(), + admin: z.boolean().optional(), + moderator: z.boolean().optional() + })).optional() + }).optional() + }).optional() +}); + +export const zGetUserInfoResponse = z.object({ + user: z.object({ + id: z.number().int().optional(), + username: z.string().optional(), + name: z.string().optional(), + avatar_template: z.string().optional(), + admin: z.boolean().optional(), + moderator: z.boolean().optional() + }).optional() +}); + +export const zGetSessionResponse = z.object({ + current_user: z.object({ + id: z.number().int(), + username: z.string(), + name: z.string().optional(), + avatar_template: z.string(), + admin: z.boolean(), + moderator: z.boolean() + }) +}); \ No newline at end of file diff --git a/env.ts b/env.ts index 27fd941..a4ed7f5 100644 --- a/env.ts +++ b/env.ts @@ -1,46 +1,46 @@ -import { createEnv } from "@t3-oss/env-core"; -import { z } from "zod"; +// import { createEnv } from "@t3-oss/env-core"; +// import { z } from "zod"; -export const env = createEnv({ - server: { - // Discord - DISCORD_TOKEN: z.string().min(1), - DISCORD_CLIENT_ID: z.string().min(1), - // AI - OPENAI_API_KEY: z.string().optional(), - HACKCLUB_API_KEY: z.string().optional(), - OPENROUTER_API_KEY: z.string().optional(), - // Logging - LOG_DIRECTORY: z.string().optional().default("logs"), - LOG_LEVEL: z - .enum(["debug", "info", "warn", "error"]) - .optional() - .default("info"), - // Redis - UPSTASH_REDIS_REST_URL: z.string().min(1).url(), - UPSTASH_REDIS_REST_TOKEN: z.string().min(1), - // Mem0 - MEM0_API_KEY: z.string().min(1).startsWith("m0-"), - }, +// export const env = createEnv({ +// server: { +// // Discord +// DISCORD_TOKEN: z.string().min(1), +// DISCORD_CLIENT_ID: z.string().min(1), +// // AI +// OPENAI_API_KEY: z.string().optional(), +// HACKCLUB_API_KEY: z.string().optional(), +// OPENROUTER_API_KEY: z.string().optional(), +// // Logging +// LOG_DIRECTORY: z.string().optional().default("logs"), +// LOG_LEVEL: z +// .enum(["debug", "info", "warn", "error"]) +// .optional() +// .default("info"), +// // Redis +// UPSTASH_REDIS_REST_URL: z.string().min(1).url(), +// UPSTASH_REDIS_REST_TOKEN: z.string().min(1), +// // Mem0 +// MEM0_API_KEY: z.string().min(1).startsWith("m0-"), +// }, - /** - * What object holds the environment variables at runtime. This is usually - * `process.env` or `import.meta.env`. - */ - runtimeEnv: process.env, +// /** +// * What object holds the environment variables at runtime. This is usually +// * `process.env` or `import.meta.env`. +// */ +// runtimeEnv: process.env, - /** - * By default, this library will feed the environment variables directly to - * the Zod validator. - * - * This means that if you have an empty string for a value that is supposed - * to be a number (e.g. `PORT=` in a ".env" file), Zod will incorrectly flag - * it as a type mismatch violation. Additionally, if you have an empty string - * for a value that is supposed to be a string with a default value (e.g. - * `DOMAIN=` in an ".env" file), the default value will never be applied. - * - * In order to solve these issues, we recommend that all new projects - * explicitly specify this option as true. - */ - emptyStringAsUndefined: true, -}); +// /** +// * By default, this library will feed the environment variables directly to +// * the Zod validator. +// * +// * This means that if you have an empty string for a value that is supposed +// * to be a number (e.g. `PORT=` in a ".env" file), Zod will incorrectly flag +// * it as a type mismatch violation. Additionally, if you have an empty string +// * for a value that is supposed to be a string with a default value (e.g. +// * `DOMAIN=` in an ".env" file), the default value will never be applied. +// * +// * In order to solve these issues, we recommend that all new projects +// * explicitly specify this option as true. +// */ +// emptyStringAsUndefined: true, +// }); diff --git a/lib/ai/providers.ts b/lib/ai/providers.ts index abc01f3..c436d29 100644 --- a/lib/ai/providers.ts +++ b/lib/ai/providers.ts @@ -1,30 +1,30 @@ -import { - customProvider, - extractReasoningMiddleware, - wrapLanguageModel, -} from "ai"; +// import { +// customProvider, +// extractReasoningMiddleware, +// wrapLanguageModel, +// } from "ai"; -import { createOpenRouter } from "@openrouter/ai-sdk-provider"; -import { createOpenAICompatible } from "@ai-sdk/openai-compatible"; -import { env } from "@/env"; -import { createMem0 } from "@mem0/vercel-ai-provider"; +// import { createOpenRouter } from "@openrouter/ai-sdk-provider"; +// import { createOpenAICompatible } from "@ai-sdk/openai-compatible"; +// import { env } from "../env"; +// import { createMem0 } from "@mem0/vercel-ai-provider"; -const hackclub = createOpenAICompatible({ - name: "hackclub", - apiKey: env.HACKCLUB_API_KEY, - baseURL: "https://ai.hackclub.com", -}); +// const hackclub = createOpenAICompatible({ +// name: "hackclub", +// apiKey: env.HACKCLUB_API_KEY, +// baseURL: "https://ai.hackclub.com", +// }); -const openrouter = createOpenRouter({ - apiKey: env.OPENROUTER_API_KEY!, -}); +// const openrouter = createOpenRouter({ +// apiKey: env.OPENROUTER_API_KEY!, +// }); -export const myProvider = customProvider({ - languageModels: { - "chat-model": hackclub("llama-3.3-70b-versatile"), - "artifact-model": hackclub("llama-3.3-70b-versatile"), - }, - imageModels: { - // 'small-model': openai.image('dall-e-2'), - }, -}); +// export const myProvider = customProvider({ +// languageModels: { +// "chat-model": hackclub("llama-3.3-70b-versatile"), +// "artifact-model": hackclub("llama-3.3-70b-versatile"), +// }, +// imageModels: { +// // 'small-model': openai.image('dall-e-2'), +// }, +// }); diff --git a/lib/generate-response.ts b/lib/generate-response.ts index 23dd986..2db8e95 100644 --- a/lib/generate-response.ts +++ b/lib/generate-response.ts @@ -1,5 +1,5 @@ import { openai } from "@ai-sdk/openai"; -import { CoreMessage, generateText, tool } from "ai"; +import { type CoreMessage, generateText, tool } from "ai"; import { z } from "zod"; import { exa } from "./utils"; import { createOpenAICompatible } from "@ai-sdk/openai-compatible"; @@ -37,7 +37,7 @@ export const generateResponse = async ( `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}¤t=temperature_2m,weathercode,relativehumidity_2m&timezone=auto`, ); - const weatherData = await response.json(); + const weatherData = await response.json() as any; return { temperature: weatherData.current.temperature_2m, weatherCode: weatherData.current.weathercode, diff --git a/lib/handle-app-mention.ts b/lib/handle-app-mention.ts index de7bdb1..24ea734 100644 --- a/lib/handle-app-mention.ts +++ b/lib/handle-app-mention.ts @@ -1,25 +1,37 @@ -import { client, getThread } from "./slack-utils"; +import { getThread } from "./slack-utils"; import { generateResponse } from "./generate-response"; -import { WebhookNotification } from "@/types"; +import type { WebhookNotification } from "../types"; +import { editMessage, postMessage } from "../client/sdk.gen"; const updateStatusUtil = async ( initialStatus: string, event: WebhookNotification, ) => { - const initialMessage = await client.postMessage({ - channel_id: event.data?.chat_channel_id as number, + const res = await postMessage({ + path: { + channel_id: event.data?.chat_channel_id as number, + }, // thread_ts: event.thread_ts ?? event.ts, - message: initialStatus, + body: { + message: initialStatus, + }, }); - if (!initialMessage || !initialMessage.message_id) + // @ts-expect-error the types for this are broken + if (!res?.data || !res.data?.message_id) throw new Error("Failed to post initial message"); + const initialMessage = res.data; const updateMessage = async (status: string) => { - await client.editMessage({ - channel_id: event.data?.chat_channel_id as number, - message_id: initialMessage.message_id!, - message: status, + await editMessage({ + path: { + channel_id: event.data?.chat_channel_id as number, + // @ts-expect-error the types for this are broken + message_id: initialMessage.message_id!, + }, + body: { + message: status, + }, }); }; return updateMessage; @@ -39,9 +51,9 @@ export async function handleNewAppMention( const updateMessage = await updateStatusUtil("is thinking...", event); // if (thread_ts) { - const messages = await getThread(channel_id as any, botUserId); - const result = await generateResponse(messages, updateMessage); - await updateMessage(result); + const messages = await getThread(channel_id as any, botUserId); + const result = await generateResponse(messages, updateMessage); + await updateMessage(result); // } else { // const result = await generateResponse( // [{ role: "user", content: event.text }], diff --git a/lib/handle-messages.ts b/lib/handle-messages.ts index cf0e406..e987674 100644 --- a/lib/handle-messages.ts +++ b/lib/handle-messages.ts @@ -2,9 +2,10 @@ import type { AssistantThreadStartedEvent, GenericMessageEvent, } from "@slack/web-api"; -import { client, getThread, updateStatusUtil } from "./slack-utils"; +import { getThread, updateStatusUtil } from "./slack-utils"; import { generateResponse } from "./generate-response"; -import { WebhookChatMessage } from "@/types"; +import type { WebhookChatMessage } from "../types"; +import { postMessage } from "../client/sdk.gen"; export async function assistantThreadMessage( event: AssistantThreadStartedEvent, @@ -13,10 +14,14 @@ export async function assistantThreadMessage( console.log(`Thread started: ${channel_id} ${thread_ts}`); console.log(JSON.stringify(event)); - await client.postMessage({ - channel_id: channel_id as any, + await postMessage({ + path: { + channel_id: channel_id as any, + }, // thread_ts: thread_ts, - message: "Hello, I'm an AI assistant built with the AI SDK by Vercel!", + body: { + message: "Hello, I'm an AI assistant built with the AI SDK by Vercel!", + }, }); // await client.assistant.threads.setSuggestedPrompts({ diff --git a/lib/slack-utils.ts b/lib/slack-utils.ts index 968cd03..2d3405a 100644 --- a/lib/slack-utils.ts +++ b/lib/slack-utils.ts @@ -1,14 +1,18 @@ -import { WebhookChatMessage, WebhookNotification } from '@/types'; -import { CoreMessage } from 'ai' -import crypto from 'crypto' -import DiscourseAPI from 'discourse2-chat'; +import type { WebhookChatMessage, WebhookNotification } from '../types'; +import type { CoreMessage } from 'ai' +import * as crypto from 'node:crypto' +import { client } from '../client/client.gen'; +import { postMessage, editMessage, getMessages, getSession } from '../client/sdk.gen'; const signingSecret = process.env.DISCOURSE_SIGNING_SECRET! const url = process.env.DISCOURSE_URL!; -export const client = new DiscourseAPI(url, { - 'Api-Key': process.env.DISCOURSE_BOT_TOKEN! -}) +client.setConfig({ + baseUrl: url, + headers: { + 'Api-Key': process.env.DISCOURSE_BOT_TOKEN!, + } +}); // See https://api.slack.com/authentication/verifying-requests-from-slack export function isValidDiscourseRequest({ @@ -59,20 +63,33 @@ export const updateStatusUtil = async ( initialStatus: string, event: WebhookChatMessage, ) => { - const initialMessage = await client.postMessage({ - channel_id: event.channel?.id, + const res = await postMessage({ + path: { + channel_id: event.channel?.id, + }, // thread_ts: event.thread_ts ?? event.ts, - message: initialStatus, + body: { + message: initialStatus, + } }); + if (!res?.data) throw new Error("Failed to post initial message"); + const initialMessage = res.data; + + // @ts-expect-error the types for this are broken if (!initialMessage || !initialMessage.message_id) throw new Error("Failed to post initial message"); const updateMessage = async (status: string) => { - await client.editMessage({ - channel_id: event.channel?.id, - message_id: initialMessage.message_id!, - message: status, + await editMessage({ + path: { + channel_id: event.channel?.id, + // @ts-expect-error the types for this are broken + message_id: initialMessage.message_id!, + }, + body: { + message: status, + }, }); }; return updateMessage; @@ -83,14 +100,17 @@ export async function getThread( // thread_ts: string, botUserId: number, ): Promise { - const { messages } = await client.getMessages({ - channel_id, - page_size: 50, + const res = await getMessages({ + path: { + channel_id, + }, + query: { + page_size: 50, + } }); - // Ensure we have messages - - if (!messages) throw new Error("No messages found in thread"); + if (!res?.data?.messages) throw new Error("No messages found in thread"); + const { messages } = res.data; const result = messages .map((message) => { @@ -117,12 +137,18 @@ export async function getThread( export const getBotId = async (): Promise => { // const { user_id: botUserId } = await client.auth.test(); - const session = await client.getSession(); - const id = session?.current_user?.id; + const res = await getSession(); + + if (!res?.data?.current_user) { + throw new Error("Session is undefined"); + } + + const { current_user: user } = res.data; + const id = user?.id; if (!id) { throw new Error("botUserId is undefined"); } - + return id; }; diff --git a/openapi-ts.config.ts b/openapi-ts.config.ts new file mode 100644 index 0000000..3c90420 --- /dev/null +++ b/openapi-ts.config.ts @@ -0,0 +1,28 @@ +import { defineConfig } from '@hey-api/openapi-ts'; + +export default defineConfig({ + input: './openapi.json', + output: { + // format: 'prettier', + // lint: 'eslint', + path: './client', + }, + plugins: [ + '@hey-api/client-fetch', + '@hey-api/schemas', + 'zod', + { + dates: true, + name: '@hey-api/transformers', + }, + { + enums: 'javascript', + name: '@hey-api/typescript', + }, + { + name: '@hey-api/sdk', + transformer: true, + validator: true, + }, + ], +}); diff --git a/openapi.json b/openapi.json new file mode 100644 index 0000000..1d0623a --- /dev/null +++ b/openapi.json @@ -0,0 +1,17757 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Discourse API Documentation", + "x-logo": { + "url": "https://docs.discourse.org/logo.svg" + }, + "version": "latest", + "description": "This page contains the documentation on how to use Discourse through API calls.\n\n> Note: For any endpoints not listed you can follow the\n[reverse engineer the Discourse API](https://meta.discourse.org/t/-/20576)\nguide to figure out how to use an API endpoint.\n\n### Request Content-Type\n\nThe Content-Type for POST and PUT requests can be set to `application/x-www-form-urlencoded`,\n`multipart/form-data`, or `application/json`.\n\n### Endpoint Names and Response Content-Type\n\nMost API endpoints provide the same content as their HTML counterparts. For example\nthe URL `/categories` serves a list of categories, the `/categories.json` API provides the\nsame information in JSON format.\n\nInstead of sending API requests to `/categories.json` you may also send them to `/categories`\nand add an `Accept: application/json` header to the request to get the JSON response.\nSending requests with the `Accept` header is necessary if you want to use URLs\nfor related endpoints returned by the API, such as pagination URLs.\nThese URLs are returned without the `.json` prefix so you need to add the header in\norder to get the correct response format.\n\n### Authentication\n\nSome endpoints do not require any authentication, pretty much anything else will\nrequire you to be authenticated.\n\nTo become authenticated you will need to create an API Key from the admin panel.\n\nOnce you have your API Key you can pass it in along with your API Username\nas an HTTP header like this:\n\n```\ncurl -X GET \"http://127.0.0.1:3000/admin/users/list/active.json\" \\\n-H \"Api-Key: 714552c6148e1617aeab526d0606184b94a80ec048fc09894ff1a72b740c5f19\" \\\n-H \"Api-Username: system\"\n```\n\nand this is how POST requests will look:\n\n```\ncurl -X POST \"http://127.0.0.1:3000/categories\" \\\n-H \"Content-Type: multipart/form-data;\" \\\n-H \"Api-Key: 714552c6148e1617aeab526d0606184b94a80ec048fc09894ff1a72b740c5f19\" \\\n-H \"Api-Username: system\" \\\n-F \"name=89853c20-4409-e91a-a8ea-f6cdff96aaaa\" \\\n-F \"color=49d9e9\" \\\n-F \"text_color=f0fcfd\"\n```\n\n### Boolean values\n\nIf an endpoint accepts a boolean be sure to specify it as a lowercase\n`true` or `false` value unless noted otherwise.\n", + "license": { + "name": "MIT", + "url": "https://docs.discourse.org/LICENSE.txt" + } + }, + "paths": { + "/admin/backups.json": { + "get": { + "summary": "List backups", + "tags": [ + "Backups" + ], + "operationId": "getBackups", + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "filename": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "last_modified": { + "type": "string" + } + }, + "required": [ + "filename", + "size", + "last_modified" + ] + } + } + } + } + } + } + }, + "post": { + "summary": "Create backup", + "tags": [ + "Backups" + ], + "operationId": "createBackup", + "parameters": [], + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "success": { + "type": "string", + "example": "OK" + } + }, + "required": [ + "success" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "with_uploads": { + "type": "boolean" + } + }, + "required": [ + "with_uploads" + ] + } + } + } + } + } + }, + "/admin/backups/{filename}": { + "put": { + "summary": "Send download backup email", + "tags": [ + "Backups" + ], + "operationId": "sendDownloadBackupEmail", + "parameters": [ + { + "name": "filename", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "success response" + } + } + }, + "get": { + "summary": "Download backup", + "tags": [ + "Backups" + ], + "operationId": "downloadBackup", + "parameters": [ + { + "name": "filename", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "token", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "success response" + } + } + } + }, + "/admin/badges.json": { + "get": { + "summary": "List badges", + "tags": [ + "Badges" + ], + "operationId": "adminListBadges", + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "badges": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "grant_count": { + "type": "integer" + }, + "allow_title": { + "type": "boolean" + }, + "multiple_grant": { + "type": "boolean" + }, + "icon": { + "type": "string" + }, + "image_url": { + "type": [ + "string", + "null" + ] + }, + "listable": { + "type": "boolean" + }, + "enabled": { + "type": "boolean" + }, + "badge_grouping_id": { + "type": "integer" + }, + "system": { + "type": "boolean" + }, + "long_description": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "manually_grantable": { + "type": "boolean" + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "trigger": { + "type": [ + "integer", + "null" + ] + }, + "target_posts": { + "type": "boolean" + }, + "auto_revoke": { + "type": "boolean" + }, + "show_posts": { + "type": "boolean" + }, + "i18n_name": { + "type": [ + "string", + "null" + ] + }, + "image_upload_id": { + "type": [ + "integer", + "null" + ] + }, + "badge_type_id": { + "type": "integer" + }, + "show_in_post_header": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "description", + "grant_count", + "allow_title", + "multiple_grant", + "icon", + "image_url", + "listable", + "enabled", + "badge_grouping_id", + "system", + "long_description", + "slug", + "manually_grantable", + "query", + "trigger", + "target_posts", + "auto_revoke", + "show_posts", + "badge_type_id", + "image_upload_id", + "show_in_post_header" + ] + } + }, + "badge_types": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "sort_order": { + "type": "integer" + } + }, + "required": [ + "id", + "name", + "sort_order" + ] + } + }, + "badge_groupings": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "position": { + "type": "integer" + }, + "system": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "description", + "position", + "system" + ] + } + }, + "admin_badges": { + "type": "object", + "additionalProperties": false, + "properties": { + "protected_system_fields": { + "type": "array", + "items": {} + }, + "triggers": { + "type": "object", + "additionalProperties": false, + "properties": { + "user_change": { + "type": "integer" + }, + "none": { + "type": "integer" + }, + "post_revision": { + "type": "integer" + }, + "trust_level_change": { + "type": "integer" + }, + "post_action": { + "type": "integer" + } + }, + "required": [ + "user_change", + "none", + "post_revision", + "trust_level_change", + "post_action" + ] + }, + "badge_ids": { + "type": "array", + "items": {} + }, + "badge_grouping_ids": { + "type": "array", + "items": {} + }, + "badge_type_ids": { + "type": "array", + "items": {} + } + }, + "required": [ + "protected_system_fields", + "triggers", + "badge_ids", + "badge_grouping_ids", + "badge_type_ids" + ] + } + }, + "required": [ + "badges", + "badge_types", + "badge_groupings", + "admin_badges" + ] + } + } + } + } + } + }, + "post": { + "summary": "Create badge", + "tags": [ + "Badges" + ], + "operationId": "createBadge", + "parameters": [], + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "badge_types": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "sort_order": { + "type": "integer" + } + }, + "required": [ + "id", + "name", + "sort_order" + ] + } + }, + "badge": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "grant_count": { + "type": "integer" + }, + "allow_title": { + "type": "boolean" + }, + "multiple_grant": { + "type": "boolean" + }, + "icon": { + "type": "string" + }, + "image_url": { + "type": [ + "string", + "null" + ] + }, + "image_upload_id": { + "type": [ + "integer", + "null" + ] + }, + "listable": { + "type": "boolean" + }, + "enabled": { + "type": "boolean" + }, + "badge_grouping_id": { + "type": "integer" + }, + "system": { + "type": "boolean" + }, + "long_description": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "manually_grantable": { + "type": "boolean" + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "trigger": { + "type": [ + "string", + "null" + ] + }, + "target_posts": { + "type": "boolean" + }, + "auto_revoke": { + "type": "boolean" + }, + "show_posts": { + "type": "boolean" + }, + "badge_type_id": { + "type": "integer" + }, + "show_in_post_header": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "description", + "grant_count", + "allow_title", + "multiple_grant", + "icon", + "image_url", + "listable", + "enabled", + "badge_grouping_id", + "system", + "long_description", + "slug", + "manually_grantable", + "query", + "trigger", + "target_posts", + "auto_revoke", + "show_posts", + "badge_type_id", + "image_upload_id", + "show_in_post_header" + ] + } + }, + "required": [ + "badge_types", + "badge" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "The name for the new badge." + }, + "badge_type_id": { + "type": "integer", + "description": "The ID for the badge type. 1 for Gold, 2 for Silver,\n3 for Bronze." + } + }, + "required": [ + "name", + "badge_type_id" + ] + } + } + } + } + } + }, + "/admin/badges/{id}.json": { + "put": { + "summary": "Update badge", + "tags": [ + "Badges" + ], + "operationId": "updateBadge", + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "integer" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "badge_types": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "sort_order": { + "type": "integer" + } + }, + "required": [ + "id", + "name", + "sort_order" + ] + } + }, + "badge": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "grant_count": { + "type": "integer" + }, + "allow_title": { + "type": "boolean" + }, + "multiple_grant": { + "type": "boolean" + }, + "icon": { + "type": "string" + }, + "image_url": { + "type": [ + "string", + "null" + ] + }, + "image_upload_id": { + "type": [ + "integer", + "null" + ] + }, + "listable": { + "type": "boolean" + }, + "enabled": { + "type": "boolean" + }, + "badge_grouping_id": { + "type": "integer" + }, + "system": { + "type": "boolean" + }, + "long_description": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "manually_grantable": { + "type": "boolean" + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "trigger": { + "type": [ + "string", + "null" + ] + }, + "target_posts": { + "type": "boolean" + }, + "auto_revoke": { + "type": "boolean" + }, + "show_posts": { + "type": "boolean" + }, + "badge_type_id": { + "type": "integer" + }, + "show_in_post_header": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "description", + "grant_count", + "allow_title", + "multiple_grant", + "icon", + "image_url", + "listable", + "enabled", + "badge_grouping_id", + "system", + "long_description", + "slug", + "manually_grantable", + "query", + "trigger", + "target_posts", + "auto_revoke", + "show_posts", + "badge_type_id", + "image_upload_id", + "show_in_post_header" + ] + } + }, + "required": [ + "badge_types", + "badge" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "The name for the new badge." + }, + "badge_type_id": { + "type": "integer", + "description": "The ID for the badge type. 1 for Gold, 2 for Silver,\n3 for Bronze." + } + }, + "required": [ + "name", + "badge_type_id" + ] + } + } + } + } + }, + "delete": { + "summary": "Delete badge", + "tags": [ + "Badges" + ], + "operationId": "deleteBadge", + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "integer" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "success response" + } + } + } + }, + "/categories.json": { + "post": { + "summary": "Creates a category", + "tags": [ + "Categories" + ], + "operationId": "createCategory", + "parameters": [], + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "category": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "color": { + "type": "string" + }, + "text_color": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "topic_count": { + "type": "integer" + }, + "post_count": { + "type": "integer" + }, + "position": { + "type": "integer" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "description_text": { + "type": [ + "string", + "null" + ] + }, + "description_excerpt": { + "type": [ + "string", + "null" + ] + }, + "topic_url": { + "type": [ + "string", + "null" + ] + }, + "read_restricted": { + "type": "boolean" + }, + "permission": { + "type": [ + "integer", + "null" + ] + }, + "notification_level": { + "type": "integer" + }, + "can_edit": { + "type": "boolean" + }, + "topic_template": { + "type": [ + "string", + "null" + ] + }, + "form_template_ids": { + "type": "array", + "items": {} + }, + "has_children": { + "type": [ + "boolean", + "null" + ] + }, + "subcategory_count": { + "type": [ + "integer", + "null" + ] + }, + "sort_order": { + "type": [ + "string", + "null" + ] + }, + "sort_ascending": { + "type": [ + "string", + "null" + ] + }, + "show_subcategory_list": { + "type": "boolean" + }, + "num_featured_topics": { + "type": "integer" + }, + "default_view": { + "type": [ + "string", + "null" + ] + }, + "subcategory_list_style": { + "type": "string" + }, + "default_top_period": { + "type": "string" + }, + "default_list_filter": { + "type": "string" + }, + "minimum_required_tags": { + "type": "integer" + }, + "navigate_to_first_post_after_read": { + "type": "boolean" + }, + "custom_fields": { + "type": "object", + "additionalProperties": false, + "properties": {} + }, + "allowed_tags": { + "type": "array", + "items": {} + }, + "allowed_tag_groups": { + "type": "array", + "items": {} + }, + "allow_global_tags": { + "type": "boolean" + }, + "required_tag_groups": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "min_count": { + "type": "integer" + } + }, + "required": [ + "name", + "min_count" + ] + } + }, + "category_setting": { + "auto_bump_cooldown_days": 1, + "num_auto_bump_daily": null, + "require_reply_approval": null, + "require_topic_approval": null + }, + "read_only_banner": { + "type": [ + "string", + "null" + ] + }, + "available_groups": { + "type": "array", + "items": {} + }, + "auto_close_hours": { + "type": [ + "string", + "null" + ] + }, + "auto_close_based_on_last_post": { + "type": "boolean" + }, + "allow_unlimited_owner_edits_on_first_post": { + "type": "boolean" + }, + "default_slow_mode_seconds": { + "type": [ + "string", + "null" + ] + }, + "group_permissions": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "permission_type": { + "type": "integer" + }, + "group_name": { + "type": "string" + } + }, + "required": [ + "permission_type", + "group_name" + ] + } + }, + "email_in": { + "type": [ + "string", + "null" + ] + }, + "email_in_allow_strangers": { + "type": "boolean" + }, + "mailinglist_mirror": { + "type": "boolean" + }, + "all_topics_wiki": { + "type": "boolean" + }, + "can_delete": { + "type": "boolean" + }, + "allow_badges": { + "type": "boolean" + }, + "topic_featured_link_allowed": { + "type": "boolean" + }, + "search_priority": { + "type": "integer" + }, + "uploaded_logo": { + "type": [ + "string", + "null" + ] + }, + "uploaded_logo_dark": { + "type": [ + "string", + "null" + ] + }, + "uploaded_background": { + "type": [ + "string", + "null" + ] + }, + "uploaded_background_dark": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "color", + "text_color", + "slug", + "topic_count", + "post_count", + "position", + "description", + "description_text", + "description_excerpt", + "topic_url", + "read_restricted", + "permission", + "notification_level", + "can_edit", + "topic_template", + "has_children", + "subcategory_count", + "sort_order", + "sort_ascending", + "show_subcategory_list", + "num_featured_topics", + "default_view", + "subcategory_list_style", + "default_top_period", + "default_list_filter", + "minimum_required_tags", + "navigate_to_first_post_after_read", + "custom_fields", + "required_tag_groups", + "read_only_banner", + "available_groups", + "auto_close_hours", + "auto_close_based_on_last_post", + "allow_unlimited_owner_edits_on_first_post", + "default_slow_mode_seconds", + "group_permissions", + "email_in", + "email_in_allow_strangers", + "mailinglist_mirror", + "all_topics_wiki", + "can_delete", + "allow_badges", + "topic_featured_link_allowed", + "search_priority", + "uploaded_logo", + "uploaded_logo_dark", + "uploaded_background", + "uploaded_background_dark" + ] + } + }, + "required": [ + "category" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "color": { + "type": "string", + "example": "49d9e9" + }, + "text_color": { + "type": "string", + "example": "f0fcfd" + }, + "parent_category_id": { + "type": "integer" + }, + "allow_badges": { + "type": "boolean" + }, + "slug": { + "type": "string" + }, + "topic_featured_links_allowed": { + "type": "boolean" + }, + "permissions": { + "type": "object", + "additionalProperties": true, + "properties": { + "everyone": { + "type": "integer", + "example": 1 + }, + "staff": { + "type": "integer" + } + } + }, + "search_priority": { + "type": "integer" + }, + "form_template_ids": { + "type": "array", + "items": {} + } + }, + "required": [ + "name" + ] + } + } + } + } + }, + "get": { + "summary": "Retrieves a list of categories", + "tags": [ + "Categories" + ], + "operationId": "listCategories", + "parameters": [ + { + "name": "include_subcategories", + "in": "query", + "schema": { + "type": "boolean", + "enum": [ + true + ] + } + } + ], + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "category_list": { + "type": "object", + "additionalProperties": false, + "properties": { + "can_create_category": { + "type": "boolean" + }, + "can_create_topic": { + "type": "boolean" + }, + "categories": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "color": { + "type": "string" + }, + "text_color": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "topic_count": { + "type": "integer" + }, + "post_count": { + "type": "integer" + }, + "position": { + "type": "integer" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "description_text": { + "type": [ + "string", + "null" + ] + }, + "description_excerpt": { + "type": [ + "string", + "null" + ] + }, + "topic_url": { + "type": [ + "string", + "null" + ] + }, + "read_restricted": { + "type": "boolean" + }, + "permission": { + "type": "integer" + }, + "notification_level": { + "type": "integer" + }, + "can_edit": { + "type": "boolean" + }, + "topic_template": { + "type": [ + "string", + "null" + ] + }, + "has_children": { + "type": "boolean" + }, + "subcategory_count": { + "type": [ + "integer", + "null" + ] + }, + "sort_order": { + "type": [ + "string", + "null" + ] + }, + "sort_ascending": { + "type": [ + "string", + "null" + ] + }, + "show_subcategory_list": { + "type": "boolean" + }, + "num_featured_topics": { + "type": "integer" + }, + "default_view": { + "type": [ + "string", + "null" + ] + }, + "subcategory_list_style": { + "type": "string" + }, + "default_top_period": { + "type": "string" + }, + "default_list_filter": { + "type": "string" + }, + "minimum_required_tags": { + "type": "integer" + }, + "navigate_to_first_post_after_read": { + "type": "boolean" + }, + "topics_day": { + "type": "integer" + }, + "topics_week": { + "type": "integer" + }, + "topics_month": { + "type": "integer" + }, + "topics_year": { + "type": "integer" + }, + "topics_all_time": { + "type": "integer" + }, + "is_uncategorized": { + "type": "boolean" + }, + "subcategory_ids": { + "type": "array", + "items": {} + }, + "subcategory_list": { + "type": [ + "array", + "null" + ], + "items": {} + }, + "uploaded_logo": { + "type": [ + "string", + "null" + ] + }, + "uploaded_logo_dark": { + "type": [ + "string", + "null" + ] + }, + "uploaded_background": { + "type": [ + "string", + "null" + ] + }, + "uploaded_background_dark": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "color", + "text_color", + "slug", + "topic_count", + "post_count", + "position", + "description", + "description_text", + "description_excerpt", + "topic_url", + "read_restricted", + "permission", + "notification_level", + "can_edit", + "topic_template", + "has_children", + "subcategory_count", + "sort_order", + "sort_ascending", + "show_subcategory_list", + "num_featured_topics", + "default_view", + "subcategory_list_style", + "default_top_period", + "default_list_filter", + "minimum_required_tags", + "navigate_to_first_post_after_read", + "topics_day", + "topics_week", + "topics_month", + "topics_year", + "topics_all_time", + "subcategory_ids", + "uploaded_logo", + "uploaded_logo_dark", + "uploaded_background", + "uploaded_background_dark" + ] + } + } + }, + "required": [ + "can_create_category", + "can_create_topic", + "categories" + ] + } + }, + "required": [ + "category_list" + ] + } + } + } + } + } + } + }, + "/categories/{id}.json": { + "put": { + "summary": "Updates a category", + "tags": [ + "Categories" + ], + "operationId": "updateCategory", + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "integer" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "success": { + "type": "string" + }, + "category": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "color": { + "type": "string" + }, + "text_color": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "topic_count": { + "type": "integer" + }, + "post_count": { + "type": "integer" + }, + "position": { + "type": "integer" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "description_text": { + "type": [ + "string", + "null" + ] + }, + "description_excerpt": { + "type": [ + "string", + "null" + ] + }, + "topic_url": { + "type": [ + "string", + "null" + ] + }, + "read_restricted": { + "type": "boolean" + }, + "permission": { + "type": [ + "integer", + "null" + ] + }, + "notification_level": { + "type": "integer" + }, + "can_edit": { + "type": "boolean" + }, + "topic_template": { + "type": [ + "string", + "null" + ] + }, + "form_template_ids": { + "type": "array", + "items": {} + }, + "has_children": { + "type": [ + "boolean", + "null" + ] + }, + "subcategory_count": { + "type": [ + "integer", + "null" + ] + }, + "sort_order": { + "type": [ + "string", + "null" + ] + }, + "sort_ascending": { + "type": [ + "string", + "null" + ] + }, + "show_subcategory_list": { + "type": "boolean" + }, + "num_featured_topics": { + "type": "integer" + }, + "default_view": { + "type": [ + "string", + "null" + ] + }, + "subcategory_list_style": { + "type": "string" + }, + "default_top_period": { + "type": "string" + }, + "default_list_filter": { + "type": "string" + }, + "minimum_required_tags": { + "type": "integer" + }, + "navigate_to_first_post_after_read": { + "type": "boolean" + }, + "custom_fields": { + "type": "object", + "additionalProperties": false, + "properties": {} + }, + "allowed_tags": { + "type": "array", + "items": {} + }, + "allowed_tag_groups": { + "type": "array", + "items": {} + }, + "allow_global_tags": { + "type": "boolean" + }, + "required_tag_groups": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "min_count": { + "type": "integer" + } + }, + "required": [ + "name", + "min_count" + ] + } + }, + "category_setting": { + "auto_bump_cooldown_days": 1, + "num_auto_bump_daily": null, + "require_reply_approval": null, + "require_topic_approval": null + }, + "read_only_banner": { + "type": [ + "string", + "null" + ] + }, + "available_groups": { + "type": "array", + "items": {} + }, + "auto_close_hours": { + "type": [ + "string", + "null" + ] + }, + "auto_close_based_on_last_post": { + "type": "boolean" + }, + "allow_unlimited_owner_edits_on_first_post": { + "type": "boolean" + }, + "default_slow_mode_seconds": { + "type": [ + "string", + "null" + ] + }, + "group_permissions": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "permission_type": { + "type": "integer" + }, + "group_name": { + "type": "string" + } + }, + "required": [ + "permission_type", + "group_name" + ] + } + }, + "email_in": { + "type": [ + "string", + "null" + ] + }, + "email_in_allow_strangers": { + "type": "boolean" + }, + "mailinglist_mirror": { + "type": "boolean" + }, + "all_topics_wiki": { + "type": "boolean" + }, + "can_delete": { + "type": "boolean" + }, + "allow_badges": { + "type": "boolean" + }, + "topic_featured_link_allowed": { + "type": "boolean" + }, + "search_priority": { + "type": "integer" + }, + "uploaded_logo": { + "type": [ + "string", + "null" + ] + }, + "uploaded_logo_dark": { + "type": [ + "string", + "null" + ] + }, + "uploaded_background": { + "type": [ + "string", + "null" + ] + }, + "uploaded_background_dark": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "color", + "text_color", + "slug", + "topic_count", + "post_count", + "position", + "description", + "description_text", + "description_excerpt", + "topic_url", + "read_restricted", + "permission", + "notification_level", + "can_edit", + "topic_template", + "form_template_ids", + "has_children", + "subcategory_count", + "sort_order", + "sort_ascending", + "show_subcategory_list", + "num_featured_topics", + "default_view", + "subcategory_list_style", + "default_top_period", + "default_list_filter", + "minimum_required_tags", + "navigate_to_first_post_after_read", + "custom_fields", + "required_tag_groups", + "read_only_banner", + "available_groups", + "auto_close_hours", + "auto_close_based_on_last_post", + "allow_unlimited_owner_edits_on_first_post", + "default_slow_mode_seconds", + "group_permissions", + "email_in", + "email_in_allow_strangers", + "mailinglist_mirror", + "all_topics_wiki", + "can_delete", + "allow_badges", + "topic_featured_link_allowed", + "search_priority", + "uploaded_logo", + "uploaded_logo_dark", + "uploaded_background", + "uploaded_background_dark" + ] + } + }, + "required": [ + "success", + "category" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "color": { + "type": "string", + "example": "49d9e9" + }, + "text_color": { + "type": "string", + "example": "f0fcfd" + }, + "parent_category_id": { + "type": "integer" + }, + "allow_badges": { + "type": "boolean" + }, + "slug": { + "type": "string" + }, + "topic_featured_links_allowed": { + "type": "boolean" + }, + "permissions": { + "type": "object", + "additionalProperties": true, + "properties": { + "everyone": { + "type": "integer", + "example": 1 + }, + "staff": { + "type": "integer" + } + } + }, + "search_priority": { + "type": "integer" + }, + "form_template_ids": { + "type": "array", + "items": {} + } + }, + "required": [ + "name" + ] + } + } + } + } + } + }, + "/c/{slug}/{id}.json": { + "get": { + "summary": "List topics", + "tags": [ + "Categories" + ], + "operationId": "listCategoryTopics", + "parameters": [ + { + "name": "slug", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "integer" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "users": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": "string" + }, + "avatar_template": { + "type": "string" + } + }, + "required": [ + "id", + "username", + "name", + "avatar_template" + ] + } + }, + "primary_groups": { + "type": "array", + "items": {} + }, + "topic_list": { + "type": "object", + "additionalProperties": false, + "properties": { + "can_create_topic": { + "type": "boolean" + }, + "per_page": { + "type": "integer" + }, + "top_tags": { + "type": "array", + "items": {} + }, + "topics": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "fancy_title": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "posts_count": { + "type": "integer" + }, + "reply_count": { + "type": "integer" + }, + "highest_post_number": { + "type": "integer" + }, + "image_url": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string" + }, + "last_posted_at": { + "type": "string" + }, + "bumped": { + "type": "boolean" + }, + "bumped_at": { + "type": "string" + }, + "archetype": { + "type": "string" + }, + "unseen": { + "type": "boolean" + }, + "pinned": { + "type": "boolean" + }, + "unpinned": { + "type": [ + "string", + "null" + ] + }, + "excerpt": { + "type": "string" + }, + "visible": { + "type": "boolean" + }, + "closed": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "bookmarked": { + "type": [ + "string", + "null" + ] + }, + "liked": { + "type": [ + "string", + "null" + ] + }, + "views": { + "type": "integer" + }, + "like_count": { + "type": "integer" + }, + "has_summary": { + "type": "boolean" + }, + "last_poster_username": { + "type": "string" + }, + "category_id": { + "type": "integer" + }, + "pinned_globally": { + "type": "boolean" + }, + "featured_link": { + "type": [ + "string", + "null" + ] + }, + "posters": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "extras": { + "type": "string" + }, + "description": { + "type": "string" + }, + "user_id": { + "type": "integer" + }, + "primary_group_id": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "extras", + "description", + "user_id", + "primary_group_id" + ] + } + } + }, + "required": [ + "id", + "title", + "fancy_title", + "slug", + "posts_count", + "reply_count", + "highest_post_number", + "image_url", + "created_at", + "last_posted_at", + "bumped", + "bumped_at", + "archetype", + "unseen", + "pinned", + "unpinned", + "excerpt", + "visible", + "closed", + "archived", + "bookmarked", + "liked", + "views", + "like_count", + "has_summary", + "last_poster_username", + "category_id", + "pinned_globally", + "featured_link", + "posters" + ] + } + } + }, + "required": [ + "can_create_topic", + "per_page", + "topics" + ] + } + }, + "required": [ + "topic_list" + ] + } + } + } + } + } + } + }, + "/c/{id}/show.json": { + "get": { + "summary": "Show category", + "tags": [ + "Categories" + ], + "operationId": "getCategory", + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "integer" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "category": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "color": { + "type": "string" + }, + "text_color": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "topic_count": { + "type": "integer" + }, + "post_count": { + "type": "integer" + }, + "position": { + "type": "integer" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "description_text": { + "type": [ + "string", + "null" + ] + }, + "description_excerpt": { + "type": [ + "string", + "null" + ] + }, + "topic_url": { + "type": [ + "string", + "null" + ] + }, + "read_restricted": { + "type": "boolean" + }, + "permission": { + "type": [ + "integer", + "null" + ] + }, + "notification_level": { + "type": "integer" + }, + "can_edit": { + "type": "boolean" + }, + "topic_template": { + "type": [ + "string", + "null" + ] + }, + "form_template_ids": { + "type": "array", + "items": {} + }, + "has_children": { + "type": [ + "boolean", + "null" + ] + }, + "subcategory_count": { + "type": [ + "integer", + "null" + ] + }, + "sort_order": { + "type": [ + "string", + "null" + ] + }, + "sort_ascending": { + "type": [ + "string", + "null" + ] + }, + "show_subcategory_list": { + "type": "boolean" + }, + "num_featured_topics": { + "type": "integer" + }, + "default_view": { + "type": [ + "string", + "null" + ] + }, + "subcategory_list_style": { + "type": "string" + }, + "default_top_period": { + "type": "string" + }, + "default_list_filter": { + "type": "string" + }, + "minimum_required_tags": { + "type": "integer" + }, + "navigate_to_first_post_after_read": { + "type": "boolean" + }, + "custom_fields": { + "type": "object", + "additionalProperties": false, + "properties": {} + }, + "allowed_tags": { + "type": "array", + "items": {} + }, + "allowed_tag_groups": { + "type": "array", + "items": {} + }, + "allow_global_tags": { + "type": "boolean" + }, + "required_tag_groups": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "min_count": { + "type": "integer" + } + }, + "required": [ + "name", + "min_count" + ] + } + }, + "category_setting": { + "auto_bump_cooldown_days": 1, + "num_auto_bump_daily": null, + "require_reply_approval": null, + "require_topic_approval": null + }, + "read_only_banner": { + "type": [ + "string", + "null" + ] + }, + "available_groups": { + "type": "array", + "items": {} + }, + "auto_close_hours": { + "type": [ + "string", + "null" + ] + }, + "auto_close_based_on_last_post": { + "type": "boolean" + }, + "allow_unlimited_owner_edits_on_first_post": { + "type": "boolean" + }, + "default_slow_mode_seconds": { + "type": [ + "string", + "null" + ] + }, + "group_permissions": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "permission_type": { + "type": "integer" + }, + "group_name": { + "type": "string" + } + }, + "required": [ + "permission_type", + "group_name" + ] + } + }, + "email_in": { + "type": [ + "string", + "null" + ] + }, + "email_in_allow_strangers": { + "type": "boolean" + }, + "mailinglist_mirror": { + "type": "boolean" + }, + "all_topics_wiki": { + "type": "boolean" + }, + "can_delete": { + "type": "boolean" + }, + "allow_badges": { + "type": "boolean" + }, + "topic_featured_link_allowed": { + "type": "boolean" + }, + "search_priority": { + "type": "integer" + }, + "uploaded_logo": { + "type": [ + "string", + "null" + ] + }, + "uploaded_logo_dark": { + "type": [ + "string", + "null" + ] + }, + "uploaded_background": { + "type": [ + "string", + "null" + ] + }, + "uploaded_background_dark": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "color", + "text_color", + "slug", + "topic_count", + "post_count", + "position", + "description", + "description_text", + "description_excerpt", + "topic_url", + "read_restricted", + "permission", + "notification_level", + "can_edit", + "topic_template", + "has_children", + "subcategory_count", + "sort_order", + "sort_ascending", + "show_subcategory_list", + "num_featured_topics", + "default_view", + "subcategory_list_style", + "default_top_period", + "default_list_filter", + "minimum_required_tags", + "navigate_to_first_post_after_read", + "custom_fields", + "required_tag_groups", + "read_only_banner", + "available_groups", + "auto_close_hours", + "auto_close_based_on_last_post", + "allow_unlimited_owner_edits_on_first_post", + "default_slow_mode_seconds", + "group_permissions", + "email_in", + "email_in_allow_strangers", + "mailinglist_mirror", + "all_topics_wiki", + "can_delete", + "allow_badges", + "topic_featured_link_allowed", + "search_priority", + "uploaded_logo", + "uploaded_logo_dark", + "uploaded_background", + "uploaded_background_dark" + ] + } + }, + "required": [ + "category" + ] + } + } + } + } + } + } + }, + "/admin/groups.json": { + "post": { + "summary": "Create a group", + "tags": [ + "Groups" + ], + "operationId": "createGroup", + "parameters": [], + "responses": { + "200": { + "description": "group created", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "basic_group": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "automatic": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "user_count": { + "type": "integer" + }, + "mentionable_level": { + "type": "integer" + }, + "messageable_level": { + "type": "integer" + }, + "visibility_level": { + "type": "integer" + }, + "primary_group": { + "type": "boolean" + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "grant_trust_level": { + "type": [ + "string", + "null" + ] + }, + "incoming_email": { + "type": [ + "string", + "null" + ] + }, + "has_messages": { + "type": "boolean" + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "bio_raw": { + "type": [ + "string", + "null" + ] + }, + "bio_cooked": { + "type": [ + "string", + "null" + ] + }, + "bio_excerpt": { + "type": [ + "string", + "null" + ] + }, + "public_admission": { + "type": "boolean" + }, + "public_exit": { + "type": "boolean" + }, + "allow_membership_requests": { + "type": "boolean" + }, + "full_name": { + "type": [ + "string", + "null" + ] + }, + "default_notification_level": { + "type": "integer" + }, + "membership_request_template": { + "type": [ + "string", + "null" + ] + }, + "members_visibility_level": { + "type": "integer" + }, + "can_see_members": { + "type": "boolean" + }, + "can_admin_group": { + "type": "boolean" + }, + "can_edit_group": { + "type": "boolean" + }, + "publish_read_state": { + "type": "boolean" + } + }, + "required": [ + "id", + "automatic", + "name", + "user_count", + "mentionable_level", + "messageable_level", + "visibility_level", + "primary_group", + "title", + "grant_trust_level", + "incoming_email", + "has_messages", + "flair_url", + "flair_bg_color", + "flair_color", + "bio_raw", + "bio_cooked", + "bio_excerpt", + "public_admission", + "public_exit", + "allow_membership_requests", + "full_name", + "default_notification_level", + "membership_request_template", + "members_visibility_level", + "can_see_members", + "can_admin_group", + "publish_read_state" + ] + } + }, + "required": [ + "basic_group" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "group": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "full_name": { + "type": "string" + }, + "bio_raw": { + "type": "string", + "description": "About Group" + }, + "usernames": { + "type": "string", + "description": "comma,separated" + }, + "owner_usernames": { + "type": "string", + "description": "comma,separated" + }, + "automatic_membership_email_domains": { + "type": "string", + "description": "pipe|separated" + }, + "visibility_level": { + "type": "integer" + }, + "primary_group": { + "type": "boolean" + }, + "flair_icon": { + "type": "string" + }, + "flair_upload_id": { + "type": "integer" + }, + "flair_bg_color": { + "type": "string" + }, + "public_admission": { + "type": "boolean" + }, + "public_exit": { + "type": "boolean" + }, + "default_notification_level": { + "type": "integer" + }, + "muted_category_ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "regular_category_ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "watching_category_ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "tracking_category_ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "watching_first_post_category_ids": { + "type": "array", + "items": { + "type": "integer" + } + } + }, + "required": [ + "name" + ] + } + }, + "required": [ + "group" + ] + } + } + } + } + } + }, + "/admin/groups/{id}.json": { + "delete": { + "summary": "Delete a group", + "tags": [ + "Groups" + ], + "operationId": "deleteGroup", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "success": { + "type": "string", + "example": "OK" + } + }, + "required": [ + "success" + ] + } + } + } + } + } + } + }, + "/groups/{id}.json": { + "put": { + "summary": "Update a group", + "tags": [ + "Groups" + ], + "operationId": "updateGroup", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "string", + "example": "OK" + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "group": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "full_name": { + "type": "string" + }, + "bio_raw": { + "type": "string", + "description": "About Group" + }, + "usernames": { + "type": "string", + "description": "comma,separated" + }, + "owner_usernames": { + "type": "string", + "description": "comma,separated" + }, + "automatic_membership_email_domains": { + "type": "string", + "description": "pipe|separated" + }, + "visibility_level": { + "type": "integer" + }, + "primary_group": { + "type": "boolean" + }, + "flair_icon": { + "type": "string" + }, + "flair_upload_id": { + "type": "integer" + }, + "flair_bg_color": { + "type": "string" + }, + "public_admission": { + "type": "boolean" + }, + "public_exit": { + "type": "boolean" + }, + "default_notification_level": { + "type": "integer" + }, + "muted_category_ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "regular_category_ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "watching_category_ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "tracking_category_ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "watching_first_post_category_ids": { + "type": "array", + "items": { + "type": "integer" + } + } + }, + "required": [ + "name" + ] + } + }, + "required": [ + "group" + ] + } + } + } + } + }, + "get": { + "summary": "Get a group", + "tags": [ + "Groups" + ], + "operationId": "getGroup", + "parameters": [ + { + "name": "id", + "in": "path", + "example": "name", + "description": "Use group name instead of id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "group": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "automatic": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "user_count": { + "type": "integer" + }, + "mentionable_level": { + "type": "integer" + }, + "messageable_level": { + "type": "integer" + }, + "visibility_level": { + "type": "integer" + }, + "primary_group": { + "type": "boolean" + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "grant_trust_level": { + "type": [ + "string", + "null" + ] + }, + "incoming_email": { + "type": [ + "string", + "null" + ] + }, + "has_messages": { + "type": "boolean" + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "bio_raw": { + "type": [ + "string", + "null" + ] + }, + "bio_cooked": { + "type": [ + "string", + "null" + ] + }, + "bio_excerpt": { + "type": [ + "string", + "null" + ] + }, + "public_admission": { + "type": "boolean" + }, + "public_exit": { + "type": "boolean" + }, + "allow_membership_requests": { + "type": "boolean" + }, + "full_name": { + "type": [ + "string", + "null" + ] + }, + "default_notification_level": { + "type": "integer" + }, + "membership_request_template": { + "type": [ + "string", + "null" + ] + }, + "is_group_user": { + "type": "boolean" + }, + "members_visibility_level": { + "type": "integer" + }, + "can_see_members": { + "type": "boolean" + }, + "can_admin_group": { + "type": "boolean" + }, + "can_edit_group": { + "type": "boolean" + }, + "publish_read_state": { + "type": "boolean" + }, + "is_group_owner_display": { + "type": "boolean" + }, + "mentionable": { + "type": "boolean" + }, + "messageable": { + "type": "boolean" + }, + "automatic_membership_email_domains": { + "type": [ + "string", + "null" + ] + }, + "smtp_updated_at": { + "type": [ + "string", + "null" + ] + }, + "smtp_updated_by": { + "type": [ + "object", + "null" + ] + }, + "smtp_enabled": { + "type": "boolean" + }, + "smtp_server": { + "type": [ + "string", + "null" + ] + }, + "smtp_port": { + "type": [ + "string", + "null" + ] + }, + "smtp_ssl_mode": { + "type": [ + "integer", + "null" + ] + }, + "imap_enabled": { + "type": "boolean" + }, + "imap_updated_at": { + "type": [ + "string", + "null" + ] + }, + "imap_updated_by": { + "type": [ + "object", + "null" + ] + }, + "imap_server": { + "type": [ + "string", + "null" + ] + }, + "imap_port": { + "type": [ + "string", + "null" + ] + }, + "imap_ssl": { + "type": [ + "string", + "null" + ] + }, + "imap_mailbox_name": { + "type": "string" + }, + "imap_mailboxes": { + "type": "array", + "items": {} + }, + "email_username": { + "type": [ + "string", + "null" + ] + }, + "email_from_alias": { + "type": [ + "string", + "null" + ] + }, + "email_password": { + "type": [ + "string", + "null" + ] + }, + "imap_last_error": { + "type": [ + "string", + "null" + ] + }, + "imap_old_emails": { + "type": [ + "string", + "null" + ] + }, + "imap_new_emails": { + "type": [ + "string", + "null" + ] + }, + "message_count": { + "type": "integer" + }, + "allow_unknown_sender_topic_replies": { + "type": "boolean" + }, + "associated_group_ids": { + "type": "array", + "items": {} + }, + "watching_category_ids": { + "type": "array", + "items": {} + }, + "tracking_category_ids": { + "type": "array", + "items": {} + }, + "watching_first_post_category_ids": { + "type": "array", + "items": {} + }, + "regular_category_ids": { + "type": "array", + "items": {} + }, + "muted_category_ids": { + "type": "array", + "items": {} + }, + "watching_tags": { + "type": "array", + "items": {} + }, + "watching_first_post_tags": { + "type": "array", + "items": {} + }, + "tracking_tags": { + "type": "array", + "items": {} + }, + "regular_tags": { + "type": "array", + "items": {} + }, + "muted_tags": { + "type": "array", + "items": {} + } + }, + "required": [ + "id", + "automatic", + "name", + "user_count", + "mentionable_level", + "messageable_level", + "visibility_level", + "primary_group", + "title", + "grant_trust_level", + "incoming_email", + "has_messages", + "flair_url", + "flair_bg_color", + "flair_color", + "bio_raw", + "bio_cooked", + "bio_excerpt", + "public_admission", + "public_exit", + "allow_membership_requests", + "full_name", + "default_notification_level", + "membership_request_template", + "is_group_user", + "members_visibility_level", + "can_see_members", + "can_admin_group", + "publish_read_state", + "is_group_owner_display", + "mentionable", + "messageable", + "automatic_membership_email_domains", + "smtp_server", + "smtp_port", + "smtp_ssl_mode", + "imap_server", + "imap_port", + "imap_ssl", + "imap_mailbox_name", + "imap_mailboxes", + "email_username", + "email_password", + "imap_last_error", + "imap_old_emails", + "imap_new_emails", + "message_count", + "allow_unknown_sender_topic_replies", + "watching_category_ids", + "tracking_category_ids", + "watching_first_post_category_ids", + "regular_category_ids", + "muted_category_ids" + ] + }, + "extras": { + "type": "object", + "additionalProperties": false, + "properties": { + "visible_group_names": { + "type": "array", + "items": {} + } + }, + "required": [ + "visible_group_names" + ] + } + }, + "required": [ + "group", + "extras" + ] + } + } + } + } + } + } + }, + "/groups/{id}/members.json": { + "get": { + "summary": "List group members", + "tags": [ + "Groups" + ], + "operationId": "listGroupMembers", + "parameters": [ + { + "name": "id", + "in": "path", + "example": "name", + "description": "Use group name instead of id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "members": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "avatar_template": { + "type": "string" + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "last_posted_at": { + "type": "string" + }, + "last_seen_at": { + "type": "string" + }, + "added_at": { + "type": "string" + }, + "timezone": { + "type": "string" + } + }, + "required": [ + "id", + "username", + "name", + "avatar_template", + "title", + "last_posted_at", + "last_seen_at", + "added_at", + "timezone" + ] + } + }, + "owners": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "avatar_template": { + "type": "string" + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "last_posted_at": { + "type": "string" + }, + "last_seen_at": { + "type": "string" + }, + "added_at": { + "type": "string" + }, + "timezone": { + "type": "string" + } + }, + "required": [ + "id", + "username", + "name", + "avatar_template", + "title", + "last_posted_at", + "last_seen_at", + "added_at", + "timezone" + ] + } + }, + "meta": { + "type": "object", + "additionalProperties": false, + "properties": { + "total": { + "type": "integer" + }, + "limit": { + "type": "integer" + }, + "offset": { + "type": "integer" + } + }, + "required": [ + "total", + "limit", + "offset" + ] + } + }, + "required": [ + "members", + "owners", + "meta" + ] + } + } + } + } + } + }, + "put": { + "summary": "Add group members", + "tags": [ + "Groups" + ], + "operationId": "addGroupMembers", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "success": { + "type": "string" + }, + "usernames": { + "type": "array", + "items": {} + }, + "emails": { + "type": "array", + "items": {} + } + }, + "required": [ + "success", + "usernames", + "emails" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "usernames": { + "type": "string", + "description": "comma separated list", + "example": "username1,username2" + } + } + } + } + } + } + }, + "delete": { + "summary": "Remove group members", + "tags": [ + "Groups" + ], + "operationId": "removeGroupMembers", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "success": { + "type": "string" + }, + "usernames": { + "type": "array", + "items": {} + }, + "skipped_usernames": { + "type": "array", + "items": {} + } + }, + "required": [ + "success", + "usernames", + "skipped_usernames" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "usernames": { + "type": "string", + "description": "comma separated list", + "example": "username1,username2" + } + } + } + } + } + } + } + }, + "/groups.json": { + "get": { + "summary": "List groups", + "tags": [ + "Groups" + ], + "operationId": "listGroups", + "responses": { + "200": { + "description": "response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "groups": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "automatic": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "display_name": { + "type": "string" + }, + "user_count": { + "type": "integer" + }, + "mentionable_level": { + "type": "integer" + }, + "messageable_level": { + "type": "integer" + }, + "visibility_level": { + "type": "integer" + }, + "primary_group": { + "type": "boolean" + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "grant_trust_level": { + "type": [ + "string", + "null" + ] + }, + "incoming_email": { + "type": [ + "string", + "null" + ] + }, + "has_messages": { + "type": "boolean" + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "bio_raw": { + "type": [ + "string", + "null" + ] + }, + "bio_cooked": { + "type": [ + "string", + "null" + ] + }, + "bio_excerpt": { + "type": [ + "string", + "null" + ] + }, + "public_admission": { + "type": "boolean" + }, + "public_exit": { + "type": "boolean" + }, + "allow_membership_requests": { + "type": "boolean" + }, + "full_name": { + "type": [ + "string", + "null" + ] + }, + "default_notification_level": { + "type": "integer" + }, + "membership_request_template": { + "type": [ + "string", + "null" + ] + }, + "is_group_user": { + "type": "boolean" + }, + "is_group_owner": { + "type": "boolean" + }, + "members_visibility_level": { + "type": "integer" + }, + "can_see_members": { + "type": "boolean" + }, + "can_admin_group": { + "type": "boolean" + }, + "can_edit_group": { + "type": "boolean" + }, + "publish_read_state": { + "type": "boolean" + } + }, + "required": [ + "id", + "automatic", + "name", + "display_name", + "user_count", + "mentionable_level", + "messageable_level", + "visibility_level", + "primary_group", + "title", + "grant_trust_level", + "incoming_email", + "has_messages", + "flair_url", + "flair_bg_color", + "flair_color", + "bio_raw", + "bio_cooked", + "bio_excerpt", + "public_admission", + "public_exit", + "allow_membership_requests", + "full_name", + "default_notification_level", + "membership_request_template", + "members_visibility_level", + "can_see_members", + "can_admin_group", + "publish_read_state" + ] + } + }, + "extras": { + "type": "object", + "additionalProperties": false, + "properties": { + "type_filters": { + "type": "array", + "items": {} + } + }, + "required": [ + "type_filters" + ] + }, + "total_rows_groups": { + "type": "integer" + }, + "load_more_groups": { + "type": "string" + } + }, + "required": [ + "groups", + "extras", + "total_rows_groups", + "load_more_groups" + ] + } + } + } + } + } + } + }, + "/invites.json": { + "post": { + "summary": "Create an invite", + "tags": [ + "Invites" + ], + "operationId": "createInvite", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "example": 42 + }, + "link": { + "type": "string", + "example": "http://example.com/invites/9045fd767efe201ca60c6658bcf14158" + }, + "email": { + "type": "string", + "example": "not-a-user-yet@example.com" + }, + "emailed": { + "type": "boolean", + "example": false + }, + "custom_message": { + "type": [ + "string", + "null" + ], + "example": "Hello world!" + }, + "topics": { + "type": "array", + "items": {}, + "example": [] + }, + "groups": { + "type": "array", + "items": {}, + "example": [] + }, + "created_at": { + "type": "string", + "example": "2021-01-01T12:00:00.000Z" + }, + "updated_at": { + "type": "string", + "example": "2021-01-01T12:00:00.000Z" + }, + "expires_at": { + "type": "string", + "example": "2021-02-01T12:00:00.000Z" + }, + "expired": { + "type": "boolean", + "example": false + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "email": { + "type": "string", + "example": "not-a-user-yet@example.com", + "description": "required for email invites only" + }, + "skip_email": { + "type": "boolean", + "default": false + }, + "custom_message": { + "type": "string", + "description": "optional, for email invites" + }, + "max_redemptions_allowed": { + "type": "integer", + "example": 5, + "default": 1, + "description": "optional, for link invites" + }, + "topic_id": { + "type": "integer" + }, + "group_ids": { + "type": "string", + "description": "Optional, either this or `group_names`. Comma separated\nlist for multiple ids.", + "example": "42,43" + }, + "group_names": { + "type": "string", + "description": "Optional, either this or `group_ids`. Comma separated\nlist for multiple names.", + "example": "foo,bar" + }, + "expires_at": { + "type": "string", + "description": "optional, if not supplied, the invite_expiry_days site\nsetting is used" + } + } + } + } + } + } + } + }, + "/invites/create-multiple.json": { + "post": { + "summary": "Create multiple invites", + "tags": [ + "Invites" + ], + "operationId": "createMultipleInvites", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "num_successfully_created_invitations": { + "type": "integer", + "example": 42 + }, + "num_failed_invitations": { + "type": "integer", + "example": 42 + }, + "failed_invitations": { + "type": "array", + "items": {}, + "example": [] + }, + "successful_invitations": { + "type": "array", + "example": [ + { + "id": 42, + "link": "http://example.com/invites/9045fd767efe201ca60c6658bcf14158", + "email": "not-a-user-yet-1@example.com", + "emailed": true, + "custom_message": "Hello world!", + "topics": [], + "groups": [], + "created_at": "2021-01-01T12:00:00.000Z", + "updated_at": "2021-01-01T12:00:00.000Z", + "expires_at": "2021-02-01T12:00:00.000Z", + "expired": false + }, + { + "id": 42, + "link": "http://example.com/invites/c6658bcf141589045fd767efe201ca60", + "email": "not-a-user-yet-2@example.com", + "emailed": true, + "custom_message": "Hello world!", + "topics": [], + "groups": [], + "created_at": "2021-01-01T12:00:00.000Z", + "updated_at": "2021-01-01T12:00:00.000Z", + "expires_at": "2021-02-01T12:00:00.000Z", + "expired": false + } + ] + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "email": { + "type": "string", + "example": [ + "not-a-user-yet-1@example.com", + "not-a-user-yet-2@example.com" + ], + "description": "pass 1 email per invite to be generated. other properties\nwill be shared by each invite." + }, + "skip_email": { + "type": "boolean", + "default": false + }, + "custom_message": { + "type": "string", + "description": "optional, for email invites" + }, + "max_redemptions_allowed": { + "type": "integer", + "example": 5, + "default": 1, + "description": "optional, for link invites" + }, + "topic_id": { + "type": "integer" + }, + "group_ids": { + "type": "string", + "description": "Optional, either this or `group_names`. Comma separated\nlist for multiple ids.", + "example": "42,43" + }, + "group_names": { + "type": "string", + "description": "Optional, either this or `group_ids`. Comma separated\nlist for multiple names.", + "example": "foo,bar" + }, + "expires_at": { + "type": "string", + "description": "optional, if not supplied, the invite_expiry_days site\nsetting is used" + } + } + } + } + } + } + } + }, + "/notifications.json": { + "get": { + "summary": "Get the notifications that belong to the current user", + "tags": [ + "Notifications" + ], + "operationId": "getNotifications", + "responses": { + "200": { + "description": "notifications", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "notifications": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "user_id": { + "type": "integer" + }, + "notification_type": { + "type": "integer" + }, + "read": { + "type": "boolean" + }, + "created_at": { + "type": "string" + }, + "post_number": { + "type": [ + "integer", + "null" + ] + }, + "topic_id": { + "type": [ + "integer", + "null" + ] + }, + "slug": { + "type": [ + "string", + "null" + ] + }, + "data": { + "type": "object", + "properties": { + "badge_id": { + "type": "integer" + }, + "badge_name": { + "type": "string" + }, + "badge_slug": { + "type": "string" + }, + "badge_title": { + "type": "boolean" + }, + "username": { + "type": "string" + } + } + } + } + } + }, + "total_rows_notifications": { + "type": "integer" + }, + "seen_notification_id": { + "type": "integer" + }, + "load_more_notifications": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "/notifications/mark-read.json": { + "put": { + "summary": "Mark notifications as read", + "tags": [ + "Notifications" + ], + "operationId": "markNotificationsAsRead", + "parameters": [], + "responses": { + "200": { + "description": "notifications marked read", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "string" + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "(optional) Leave off to mark all notifications as\nread" + } + } + } + } + } + } + } + }, + "/posts.json": { + "get": { + "summary": "List latest posts across topics", + "tags": [ + "Posts" + ], + "operationId": "listPosts", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "before", + "in": "query", + "description": "Load posts with an id lower than this value. Useful for pagination.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "latest posts", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "latest_posts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "username": { + "type": "string" + }, + "avatar_template": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "cooked": { + "type": "string" + }, + "post_number": { + "type": "integer" + }, + "post_type": { + "type": "integer" + }, + "updated_at": { + "type": "string" + }, + "reply_count": { + "type": "integer" + }, + "reply_to_post_number": { + "type": [ + "string", + "null" + ] + }, + "quote_count": { + "type": "integer" + }, + "incoming_link_count": { + "type": "integer" + }, + "reads": { + "type": "integer" + }, + "readers_count": { + "type": "integer" + }, + "score": { + "type": "number" + }, + "yours": { + "type": "boolean" + }, + "topic_id": { + "type": "integer" + }, + "topic_slug": { + "type": "string" + }, + "topic_title": { + "type": "string" + }, + "topic_html_title": { + "type": "string" + }, + "category_id": { + "type": "integer" + }, + "display_username": { + "type": "string" + }, + "primary_group_name": { + "type": [ + "string", + "null" + ] + }, + "flair_name": { + "type": [ + "string", + "null" + ] + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "flair_group_id": { + "type": [ + "integer", + "null" + ] + }, + "version": { + "type": "integer" + }, + "can_edit": { + "type": "boolean" + }, + "can_delete": { + "type": "boolean" + }, + "can_recover": { + "type": "boolean" + }, + "can_see_hidden_post": { + "type": "boolean" + }, + "can_wiki": { + "type": "boolean" + }, + "user_title": { + "type": [ + "string", + "null" + ] + }, + "raw": { + "type": "string" + }, + "actions_summary": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "can_act": { + "type": "boolean" + } + } + } + }, + "moderator": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "staff": { + "type": "boolean" + }, + "user_id": { + "type": "integer" + }, + "hidden": { + "type": "boolean" + }, + "trust_level": { + "type": "integer" + }, + "deleted_at": { + "type": [ + "string", + "null" + ] + }, + "user_deleted": { + "type": "boolean" + }, + "edit_reason": { + "type": [ + "string", + "null" + ] + }, + "can_view_edit_history": { + "type": "boolean" + }, + "wiki": { + "type": "boolean" + }, + "reviewable_id": { + "type": [ + "integer", + "null" + ] + }, + "reviewable_score_count": { + "type": "integer" + }, + "reviewable_score_pending_count": { + "type": "integer" + } + } + } + } + } + } + } + } + } + } + }, + "post": { + "summary": "Creates a new topic, a new post, or a private message", + "tags": [ + "Posts", + "Topics", + "Private Messages" + ], + "operationId": "createTopicPostPM", + "parameters": [], + "responses": { + "200": { + "description": "post created", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "username": { + "type": "string" + }, + "avatar_template": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "raw": { + "type": "string" + }, + "cooked": { + "type": "string" + }, + "post_number": { + "type": "integer" + }, + "post_type": { + "type": "integer" + }, + "posts_count": { + "type": "integer" + }, + "updated_at": { + "type": "string" + }, + "reply_count": { + "type": "integer" + }, + "reply_to_post_number": { + "type": [ + "string", + "null" + ] + }, + "quote_count": { + "type": "integer" + }, + "incoming_link_count": { + "type": "integer" + }, + "reads": { + "type": "integer" + }, + "readers_count": { + "type": "integer" + }, + "score": { + "type": "number" + }, + "yours": { + "type": "boolean" + }, + "topic_id": { + "type": "integer" + }, + "topic_slug": { + "type": "string" + }, + "display_username": { + "type": [ + "string", + "null" + ] + }, + "primary_group_name": { + "type": [ + "string", + "null" + ] + }, + "flair_name": { + "type": [ + "string", + "null" + ] + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "flair_group_id": { + "type": [ + "integer", + "null" + ] + }, + "badges_granted": { + "type": "array", + "items": {} + }, + "version": { + "type": "integer" + }, + "can_edit": { + "type": "boolean" + }, + "can_delete": { + "type": "boolean" + }, + "can_recover": { + "type": "boolean" + }, + "can_see_hidden_post": { + "type": "boolean" + }, + "can_wiki": { + "type": "boolean" + }, + "user_title": { + "type": [ + "string", + "null" + ] + }, + "bookmarked": { + "type": "boolean" + }, + "actions_summary": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "can_act": { + "type": "boolean" + } + }, + "required": [ + "id", + "can_act" + ] + } + }, + "moderator": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "staff": { + "type": "boolean" + }, + "user_id": { + "type": "integer" + }, + "draft_sequence": { + "type": "integer" + }, + "hidden": { + "type": "boolean" + }, + "trust_level": { + "type": "integer" + }, + "deleted_at": { + "type": [ + "string", + "null" + ] + }, + "user_deleted": { + "type": "boolean" + }, + "edit_reason": { + "type": [ + "string", + "null" + ] + }, + "can_view_edit_history": { + "type": "boolean" + }, + "wiki": { + "type": "boolean" + }, + "reviewable_id": { + "type": [ + "integer", + "null" + ] + }, + "reviewable_score_count": { + "type": "integer" + }, + "reviewable_score_pending_count": { + "type": "integer" + }, + "post_url": { + "type": "string" + }, + "mentioned_users": { + "type": "array", + "items": {} + } + }, + "required": [ + "id", + "name", + "username", + "avatar_template", + "created_at", + "cooked", + "post_number", + "post_type", + "posts_count", + "updated_at", + "reply_count", + "reply_to_post_number", + "quote_count", + "incoming_link_count", + "reads", + "readers_count", + "score", + "yours", + "topic_id", + "topic_slug", + "display_username", + "primary_group_name", + "flair_name", + "flair_url", + "flair_bg_color", + "flair_color", + "version", + "can_edit", + "can_delete", + "can_recover", + "can_wiki", + "user_title", + "bookmarked", + "actions_summary", + "moderator", + "admin", + "staff", + "user_id", + "draft_sequence", + "hidden", + "trust_level", + "deleted_at", + "user_deleted", + "edit_reason", + "can_view_edit_history", + "wiki", + "reviewable_id", + "reviewable_score_count", + "reviewable_score_pending_count", + "post_url" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "title": { + "type": "string", + "description": "Required if creating a new topic or new private message." + }, + "raw": { + "type": "string" + }, + "topic_id": { + "type": "integer", + "description": "Required if creating a new post." + }, + "category": { + "type": "integer", + "description": "Optional if creating a new topic, and ignored if creating\na new post." + }, + "target_recipients": { + "type": "string", + "description": "Required for private message, comma separated.", + "example": "blake,sam" + }, + "target_usernames": { + "type": "string", + "description": "Deprecated. Use target_recipients instead.", + "deprecated": true + }, + "archetype": { + "type": "string", + "description": "Required for new private message.", + "example": "private_message" + }, + "created_at": { + "type": "string" + }, + "reply_to_post_number": { + "type": "integer", + "description": "Optional, the post number to reply to inside a topic." + }, + "embed_url": { + "type": "string", + "description": "Provide a URL from a remote system to associate a forum\ntopic with that URL, typically for using Discourse as a comments\nsystem for an external blog." + }, + "external_id": { + "type": "string", + "description": "Provide an external_id from a remote system to associate\na forum topic with that id." + } + }, + "required": [ + "raw" + ] + } + } + } + } + } + }, + "/posts/{id}.json": { + "get": { + "summary": "Retrieve a single post", + "tags": [ + "Posts" + ], + "operationId": "getPost", + "description": "This endpoint can be used to get the number of likes on a post using the\n`actions_summary` property in the response. `actions_summary` responses\nwith the id of `2` signify a `like`. If there are no `actions_summary`\nitems with the id of `2`, that means there are 0 likes. Other ids likely\nrefer to various different flag types.\n", + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "single reviewable post", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "avatar_template": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "cooked": { + "type": "string" + }, + "post_number": { + "type": "integer" + }, + "post_type": { + "type": "integer" + }, + "posts_count": { + "type": "integer" + }, + "updated_at": { + "type": "string" + }, + "reply_count": { + "type": "integer" + }, + "reply_to_post_number": { + "type": [ + "string", + "null" + ] + }, + "quote_count": { + "type": "integer" + }, + "incoming_link_count": { + "type": "integer" + }, + "reads": { + "type": "integer" + }, + "readers_count": { + "type": "integer" + }, + "score": { + "type": "number" + }, + "yours": { + "type": "boolean" + }, + "topic_id": { + "type": "integer" + }, + "topic_slug": { + "type": "string" + }, + "primary_group_name": { + "type": [ + "string", + "null" + ] + }, + "flair_name": { + "type": [ + "string", + "null" + ] + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "flair_group_id": { + "type": [ + "integer", + "null" + ] + }, + "version": { + "type": "integer" + }, + "can_edit": { + "type": "boolean" + }, + "can_delete": { + "type": "boolean" + }, + "can_recover": { + "type": "boolean" + }, + "can_see_hidden_post": { + "type": "boolean" + }, + "can_wiki": { + "type": "boolean" + }, + "user_title": { + "type": [ + "string", + "null" + ] + }, + "bookmarked": { + "type": "boolean" + }, + "raw": { + "type": "string" + }, + "actions_summary": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer", + "description": "`2`: like, `3`, `4`, `6`, `7`, `8`: flag" + }, + "count": { + "type": "integer" + }, + "acted": { + "type": "boolean" + }, + "can_undo": { + "type": "boolean" + }, + "can_act": { + "type": "boolean" + } + }, + "required": [ + "id" + ] + } + }, + "moderator": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "staff": { + "type": "boolean" + }, + "user_id": { + "type": "integer" + }, + "hidden": { + "type": "boolean" + }, + "trust_level": { + "type": "integer" + }, + "deleted_at": { + "type": [ + "string", + "null" + ] + }, + "user_deleted": { + "type": "boolean" + }, + "edit_reason": { + "type": [ + "string", + "null" + ] + }, + "can_view_edit_history": { + "type": "boolean" + }, + "wiki": { + "type": "boolean" + }, + "reviewable_id": { + "type": [ + "integer", + "null" + ] + }, + "reviewable_score_count": { + "type": "integer" + }, + "reviewable_score_pending_count": { + "type": "integer" + }, + "post_url": { + "type": "string" + }, + "mentioned_users": { + "type": "array", + "items": {} + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "display_username": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "username", + "avatar_template", + "created_at", + "cooked", + "post_number", + "post_type", + "posts_count", + "updated_at", + "reply_count", + "reply_to_post_number", + "quote_count", + "incoming_link_count", + "reads", + "readers_count", + "score", + "yours", + "topic_id", + "topic_slug", + "primary_group_name", + "flair_name", + "flair_url", + "flair_bg_color", + "flair_color", + "version", + "can_edit", + "can_delete", + "can_recover", + "can_wiki", + "user_title", + "bookmarked", + "raw", + "actions_summary", + "moderator", + "admin", + "staff", + "user_id", + "hidden", + "trust_level", + "deleted_at", + "user_deleted", + "edit_reason", + "can_view_edit_history", + "wiki", + "reviewable_id", + "reviewable_score_count", + "reviewable_score_pending_count", + "post_url" + ] + } + } + } + } + } + }, + "put": { + "summary": "Update a single post", + "tags": [ + "Posts" + ], + "operationId": "updatePost", + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "post updated", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "post": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "avatar_template": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "cooked": { + "type": "string" + }, + "post_number": { + "type": "integer" + }, + "post_type": { + "type": "integer" + }, + "posts_count": { + "type": "integer" + }, + "updated_at": { + "type": "string" + }, + "reply_count": { + "type": "integer" + }, + "reply_to_post_number": { + "type": [ + "string", + "null" + ] + }, + "quote_count": { + "type": "integer" + }, + "incoming_link_count": { + "type": "integer" + }, + "reads": { + "type": "integer" + }, + "readers_count": { + "type": "integer" + }, + "score": { + "type": "number" + }, + "yours": { + "type": "boolean" + }, + "topic_id": { + "type": "integer" + }, + "topic_slug": { + "type": "string" + }, + "primary_group_name": { + "type": [ + "string", + "null" + ] + }, + "flair_name": { + "type": [ + "string", + "null" + ] + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "flair_group_id": { + "type": [ + "integer", + "null" + ] + }, + "badges_granted": { + "type": "array", + "items": {} + }, + "version": { + "type": "integer" + }, + "can_edit": { + "type": "boolean" + }, + "can_delete": { + "type": "boolean" + }, + "can_recover": { + "type": "boolean" + }, + "can_see_hidden_post": { + "type": "boolean" + }, + "can_wiki": { + "type": "boolean" + }, + "user_title": { + "type": [ + "string", + "null" + ] + }, + "bookmarked": { + "type": "boolean" + }, + "raw": { + "type": "string" + }, + "actions_summary": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "can_act": { + "type": "boolean" + } + }, + "required": [ + "id", + "can_act" + ] + } + }, + "moderator": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "staff": { + "type": "boolean" + }, + "user_id": { + "type": "integer" + }, + "draft_sequence": { + "type": "integer" + }, + "hidden": { + "type": "boolean" + }, + "trust_level": { + "type": "integer" + }, + "deleted_at": { + "type": [ + "string", + "null" + ] + }, + "user_deleted": { + "type": "boolean" + }, + "edit_reason": { + "type": [ + "string", + "null" + ] + }, + "can_view_edit_history": { + "type": "boolean" + }, + "wiki": { + "type": "boolean" + }, + "reviewable_id": { + "type": [ + "integer", + "null" + ] + }, + "reviewable_score_count": { + "type": "integer" + }, + "reviewable_score_pending_count": { + "type": "integer" + }, + "post_url": { + "type": "string" + }, + "mentioned_users": { + "type": "array", + "items": {} + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "display_username": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "username", + "avatar_template", + "created_at", + "cooked", + "post_number", + "post_type", + "posts_count", + "updated_at", + "reply_count", + "reply_to_post_number", + "quote_count", + "incoming_link_count", + "reads", + "readers_count", + "score", + "yours", + "topic_id", + "topic_slug", + "primary_group_name", + "flair_name", + "flair_url", + "flair_bg_color", + "flair_color", + "version", + "can_edit", + "can_delete", + "can_recover", + "can_wiki", + "user_title", + "bookmarked", + "raw", + "actions_summary", + "moderator", + "admin", + "staff", + "user_id", + "draft_sequence", + "hidden", + "trust_level", + "deleted_at", + "user_deleted", + "edit_reason", + "can_view_edit_history", + "wiki", + "reviewable_id", + "reviewable_score_count", + "reviewable_score_pending_count", + "post_url" + ] + } + }, + "required": [ + "post" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "post": { + "type": "object", + "additionalProperties": false, + "properties": { + "raw": { + "type": "string" + }, + "edit_reason": { + "type": "string" + } + }, + "required": [ + "raw" + ] + } + } + } + } + } + } + }, + "delete": { + "summary": "delete a single post", + "tags": [ + "Posts" + ], + "operationId": "deletePost", + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "integer" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "success response" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "force_destroy": { + "type": "boolean", + "example": true, + "description": "The `SiteSetting.can_permanently_delete` needs to be\nenabled first before this param can be used. Also this endpoint\nneeds to be called first without `force_destroy` and then followed\nup with a second call 5 minutes later with `force_destroy` to\npermanently delete." + } + } + } + } + } + } + } + }, + "/posts/{id}/replies.json": { + "get": { + "summary": "List replies to a post", + "tags": [ + "Posts" + ], + "operationId": "postReplies", + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "post replies", + "content": { + "application/json": { + "schema": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "username": { + "type": "string" + }, + "avatar_template": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "cooked": { + "type": "string" + }, + "post_number": { + "type": "integer" + }, + "post_type": { + "type": "integer" + }, + "posts_count": { + "type": "integer" + }, + "updated_at": { + "type": "string" + }, + "reply_count": { + "type": "integer" + }, + "reply_to_post_number": { + "type": "integer" + }, + "quote_count": { + "type": "integer" + }, + "incoming_link_count": { + "type": "integer" + }, + "reads": { + "type": "integer" + }, + "readers_count": { + "type": "integer" + }, + "score": { + "type": "number" + }, + "yours": { + "type": "boolean" + }, + "topic_id": { + "type": "integer" + }, + "topic_slug": { + "type": "string" + }, + "display_username": { + "type": [ + "string", + "null" + ] + }, + "primary_group_name": { + "type": [ + "string", + "null" + ] + }, + "flair_name": { + "type": [ + "string", + "null" + ] + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "flair_group_id": { + "type": [ + "integer", + "null" + ] + }, + "version": { + "type": "integer" + }, + "can_edit": { + "type": "boolean" + }, + "can_delete": { + "type": "boolean" + }, + "can_recover": { + "type": "boolean" + }, + "can_see_hidden_post": { + "type": "boolean" + }, + "can_wiki": { + "type": "boolean" + }, + "user_title": { + "type": [ + "string", + "null" + ] + }, + "reply_to_user": { + "type": "object", + "additionalProperties": false, + "properties": { + "username": { + "type": "string" + }, + "name": { + "type": "string" + }, + "avatar_template": { + "type": "string" + } + }, + "required": [ + "username", + "avatar_template" + ] + }, + "bookmarked": { + "type": "boolean" + }, + "actions_summary": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "can_act": { + "type": "boolean" + } + }, + "required": [ + "id", + "can_act" + ] + } + }, + "moderator": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "staff": { + "type": "boolean" + }, + "user_id": { + "type": "integer" + }, + "hidden": { + "type": "boolean" + }, + "trust_level": { + "type": "integer" + }, + "deleted_at": { + "type": [ + "string", + "null" + ] + }, + "user_deleted": { + "type": "boolean" + }, + "edit_reason": { + "type": [ + "string", + "null" + ] + }, + "can_view_edit_history": { + "type": "boolean" + }, + "wiki": { + "type": "boolean" + }, + "reviewable_id": { + "type": [ + "integer", + "null" + ] + }, + "reviewable_score_count": { + "type": "integer" + }, + "reviewable_score_pending_count": { + "type": "integer" + }, + "post_url": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "username", + "avatar_template", + "created_at", + "cooked", + "post_number", + "post_type", + "posts_count", + "updated_at", + "reply_count", + "reply_to_post_number", + "quote_count", + "incoming_link_count", + "reads", + "readers_count", + "score", + "yours", + "topic_id", + "topic_slug", + "display_username", + "primary_group_name", + "flair_name", + "flair_url", + "flair_bg_color", + "flair_color", + "version", + "can_edit", + "can_delete", + "can_recover", + "can_see_hidden_post", + "can_wiki", + "user_title", + "reply_to_user", + "bookmarked", + "actions_summary", + "moderator", + "admin", + "staff", + "user_id", + "hidden", + "trust_level", + "deleted_at", + "user_deleted", + "edit_reason", + "can_view_edit_history", + "wiki", + "reviewable_id", + "reviewable_score_count", + "reviewable_score_pending_count", + "post_url" + ] + } + } + } + } + } + } + } + }, + "/posts/{id}/locked.json": { + "put": { + "summary": "Lock a post from being edited", + "tags": [ + "Posts" + ], + "operationId": "lockPost", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "post updated", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "locked": { + "type": "boolean" + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "locked": { + "type": "string" + } + }, + "required": [ + "locked" + ] + } + } + } + } + } + }, + "/post_actions.json": { + "post": { + "summary": "Like a post and other actions", + "tags": [ + "Posts" + ], + "operationId": "performPostAction", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "post updated", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "username": { + "type": "string" + }, + "avatar_template": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "cooked": { + "type": "string" + }, + "post_number": { + "type": "integer" + }, + "post_type": { + "type": "integer" + }, + "updated_at": { + "type": "string" + }, + "reply_count": { + "type": "integer" + }, + "reply_to_post_number": { + "type": [ + "string", + "null" + ] + }, + "quote_count": { + "type": "integer" + }, + "incoming_link_count": { + "type": "integer" + }, + "reads": { + "type": "integer" + }, + "readers_count": { + "type": "integer" + }, + "score": { + "type": "number" + }, + "yours": { + "type": "boolean" + }, + "topic_id": { + "type": "integer" + }, + "topic_slug": { + "type": "string" + }, + "display_username": { + "type": "string" + }, + "primary_group_name": { + "type": [ + "string", + "null" + ] + }, + "flair_name": { + "type": [ + "string", + "null" + ] + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "version": { + "type": "integer" + }, + "can_edit": { + "type": "boolean" + }, + "can_delete": { + "type": "boolean" + }, + "can_recover": { + "type": "boolean" + }, + "can_wiki": { + "type": "boolean" + }, + "user_title": { + "type": [ + "string", + "null" + ] + }, + "actions_summary": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "count": { + "type": "integer" + }, + "acted": { + "type": "boolean" + }, + "can_undo": { + "type": "boolean" + } + } + } + }, + "moderator": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "staff": { + "type": "boolean" + }, + "user_id": { + "type": "integer" + }, + "hidden": { + "type": "boolean" + }, + "trust_level": { + "type": "integer" + }, + "deleted_at": { + "type": [ + "string", + "null" + ] + }, + "user_deleted": { + "type": "boolean" + }, + "edit_reason": { + "type": [ + "string", + "null" + ] + }, + "can_view_edit_history": { + "type": "boolean" + }, + "wiki": { + "type": "boolean" + }, + "notice": { + "type": "object" + }, + "notice_created_by_user": { + "type": [ + "object", + "null" + ] + }, + "reviewable_id": { + "type": [ + "integer", + "null" + ] + }, + "reviewable_score_count": { + "type": "integer" + }, + "reviewable_score_pending_count": { + "type": "integer" + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "post_action_type_id": { + "type": "integer" + }, + "flag_topic": { + "type": "boolean" + } + }, + "required": [ + "id", + "post_action_type_id" + ] + } + } + } + } + } + }, + "/topics/private-messages/{username}.json": { + "get": { + "summary": "Get a list of private messages for a user", + "tags": [ + "Private Messages" + ], + "operationId": "listUserPrivateMessages", + "parameters": [ + { + "name": "username", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "private messages", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": "string" + }, + "avatar_template": { + "type": "string" + } + } + } + }, + "primary_groups": { + "type": "array", + "items": {} + }, + "topic_list": { + "type": "object", + "properties": { + "can_create_topic": { + "type": "boolean" + }, + "draft": { + "type": [ + "string", + "null" + ] + }, + "draft_key": { + "type": "string" + }, + "draft_sequence": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "topics": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "fancy_title": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "posts_count": { + "type": "integer" + }, + "reply_count": { + "type": "integer" + }, + "highest_post_number": { + "type": "integer" + }, + "image_url": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string" + }, + "last_posted_at": { + "type": "string" + }, + "bumped": { + "type": "boolean" + }, + "bumped_at": { + "type": "string" + }, + "archetype": { + "type": "string" + }, + "unseen": { + "type": "boolean" + }, + "last_read_post_number": { + "type": "integer" + }, + "unread_posts": { + "type": "integer" + }, + "pinned": { + "type": "boolean" + }, + "unpinned": { + "type": [ + "string", + "null" + ] + }, + "visible": { + "type": "boolean" + }, + "closed": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "notification_level": { + "type": "integer" + }, + "bookmarked": { + "type": "boolean" + }, + "liked": { + "type": "boolean" + }, + "views": { + "type": "integer" + }, + "like_count": { + "type": "integer" + }, + "has_summary": { + "type": "boolean" + }, + "last_poster_username": { + "type": "string" + }, + "category_id": { + "type": [ + "string", + "null" + ] + }, + "pinned_globally": { + "type": "boolean" + }, + "featured_link": { + "type": [ + "string", + "null" + ] + }, + "allowed_user_count": { + "type": "integer" + }, + "posters": { + "type": "array", + "items": { + "type": "object", + "properties": { + "extras": { + "type": "string" + }, + "description": { + "type": "string" + }, + "user_id": { + "type": "integer" + }, + "primary_group_id": { + "type": [ + "integer", + "null" + ] + } + } + } + }, + "participants": { + "type": "array", + "items": { + "type": "object", + "properties": { + "extras": { + "type": "string" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "user_id": { + "type": "integer" + }, + "primary_group_id": { + "type": [ + "integer", + "null" + ] + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/topics/private-messages-sent/{username}.json": { + "get": { + "summary": "Get a list of private messages sent for a user", + "tags": [ + "Private Messages" + ], + "operationId": "getUserSentPrivateMessages", + "parameters": [ + { + "name": "username", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "private messages", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "avatar_template": { + "type": "string" + } + } + } + }, + "primary_groups": { + "type": "array", + "items": {} + }, + "topic_list": { + "type": "object", + "properties": { + "can_create_topic": { + "type": "boolean" + }, + "draft": { + "type": [ + "string", + "null" + ] + }, + "draft_key": { + "type": "string" + }, + "draft_sequence": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "topics": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "fancy_title": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "posts_count": { + "type": "integer" + }, + "reply_count": { + "type": "integer" + }, + "highest_post_number": { + "type": "integer" + }, + "image_url": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string" + }, + "last_posted_at": { + "type": "string" + }, + "bumped": { + "type": "boolean" + }, + "bumped_at": { + "type": "string" + }, + "archetype": { + "type": "string" + }, + "unseen": { + "type": "boolean" + }, + "last_read_post_number": { + "type": "integer" + }, + "unread_posts": { + "type": "integer" + }, + "pinned": { + "type": "boolean" + }, + "unpinned": { + "type": [ + "string", + "null" + ] + }, + "visible": { + "type": "boolean" + }, + "closed": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "notification_level": { + "type": "integer" + }, + "bookmarked": { + "type": "boolean" + }, + "liked": { + "type": "boolean" + }, + "views": { + "type": "integer" + }, + "like_count": { + "type": "integer" + }, + "has_summary": { + "type": "boolean" + }, + "last_poster_username": { + "type": "string" + }, + "category_id": { + "type": [ + "string", + "null" + ] + }, + "pinned_globally": { + "type": "boolean" + }, + "featured_link": { + "type": [ + "string", + "null" + ] + }, + "allowed_user_count": { + "type": "integer" + }, + "posters": { + "type": "array", + "items": { + "type": "object", + "properties": { + "extras": { + "type": "string" + }, + "description": { + "type": "string" + }, + "user_id": { + "type": "integer" + }, + "primary_group_id": { + "type": [ + "integer", + "null" + ] + } + } + } + }, + "participants": { + "type": "array", + "items": {} + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/search.json": { + "get": { + "summary": "Search for a term", + "tags": [ + "Search" + ], + "operationId": "search", + "parameters": [ + { + "name": "q", + "in": "query", + "example": "api @blake #support tags:api after:2021-06-04 in:unseen in:open\norder:latest_topic", + "description": "The query string needs to be url encoded and is made up of the following options:\n- Search term. This is just a string. Usually it would be the first item in the query.\n- `@`: Use the `@` followed by the username to specify posts by this user.\n- `#`: Use the `#` followed by the category slug to search within this category.\n- `tags:`: `api,solved` or for posts that have all the specified tags `api+solved`.\n- `before:`: `yyyy-mm-dd`\n- `after:`: `yyyy-mm-dd`\n- `order:`: `latest`, `likes`, `views`, `latest_topic`\n- `assigned:`: username (without `@`)\n- `in:`: `title`, `likes`, `personal`, `messages`, `seen`, `unseen`, `posted`, `created`, `watching`, `tracking`, `bookmarks`, `assigned`, `unassigned`, `first`, `pinned`, `wiki`\n- `with:`: `images`\n- `status:`: `open`, `closed`, `public`, `archived`, `noreplies`, `single_user`, `solved`, `unsolved`\n- `group:`: group_name or group_id\n- `group_messages:`: group_name or group_id\n- `min_posts:`: 1\n- `max_posts:`: 10\n- `min_views:`: 1\n- `max_views:`: 10\n\nIf you are using cURL you can use the `-G` and the `--data-urlencode` flags to encode the query:\n\n```\ncurl -i -sS -X GET -G \"http://localhost:4200/search.json\" \\\n--data-urlencode 'q=wordpress @scossar #fun after:2020-01-01'\n```\n", + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "query", + "example": 1, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "posts": { + "type": "array", + "items": {} + }, + "users": { + "type": "array", + "items": {} + }, + "categories": { + "type": "array", + "items": {} + }, + "tags": { + "type": "array", + "items": {} + }, + "groups": { + "type": "array", + "items": {} + }, + "grouped_search_result": { + "type": "object", + "additionalProperties": false, + "properties": { + "more_posts": { + "type": [ + "string", + "null" + ] + }, + "more_users": { + "type": [ + "string", + "null" + ] + }, + "more_categories": { + "type": [ + "string", + "null" + ] + }, + "term": { + "type": "string" + }, + "search_log_id": { + "type": "integer" + }, + "more_full_page_results": { + "type": [ + "string", + "null" + ] + }, + "can_create_topic": { + "type": "boolean" + }, + "error": { + "type": [ + "string", + "null" + ] + }, + "extra": { + "type": "object", + "properties": { + "categories": { + "type": [ + "array", + "null" + ] + } + } + }, + "post_ids": { + "type": "array", + "items": {} + }, + "user_ids": { + "type": "array", + "items": {} + }, + "category_ids": { + "type": "array", + "items": {} + }, + "tag_ids": { + "type": "array", + "items": {} + }, + "group_ids": { + "type": "array", + "items": {} + } + }, + "required": [ + "more_posts", + "more_users", + "more_categories", + "term", + "search_log_id", + "more_full_page_results", + "can_create_topic", + "error", + "post_ids", + "user_ids", + "category_ids", + "tag_ids", + "group_ids" + ] + } + }, + "required": [ + "posts", + "users", + "categories", + "tags", + "groups", + "grouped_search_result" + ] + } + } + } + } + } + } + }, + "/site.json": { + "get": { + "summary": "Get site info", + "tags": [ + "Site", + "Categories" + ], + "operationId": "getSite", + "description": "Can be used to fetch all categories and subcategories", + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "default_archetype": { + "type": "string" + }, + "notification_types": { + "type": "object", + "additionalProperties": false, + "properties": { + "mentioned": { + "type": "integer" + }, + "replied": { + "type": "integer" + }, + "quoted": { + "type": "integer" + }, + "edited": { + "type": "integer" + }, + "liked": { + "type": "integer" + }, + "private_message": { + "type": "integer" + }, + "invited_to_private_message": { + "type": "integer" + }, + "invitee_accepted": { + "type": "integer" + }, + "posted": { + "type": "integer" + }, + "watching_category_or_tag": { + "type": "integer" + }, + "new_features": { + "type": "integer" + }, + "admin_problems": { + "type": "integer" + }, + "moved_post": { + "type": "integer" + }, + "linked": { + "type": "integer" + }, + "granted_badge": { + "type": "integer" + }, + "invited_to_topic": { + "type": "integer" + }, + "custom": { + "type": "integer" + }, + "group_mentioned": { + "type": "integer" + }, + "group_message_summary": { + "type": "integer" + }, + "watching_first_post": { + "type": "integer" + }, + "topic_reminder": { + "type": "integer" + }, + "liked_consolidated": { + "type": "integer" + }, + "linked_consolidated": { + "type": "integer" + }, + "post_approved": { + "type": "integer" + }, + "code_review_commit_approved": { + "type": "integer" + }, + "membership_request_accepted": { + "type": "integer" + }, + "membership_request_consolidated": { + "type": "integer" + }, + "bookmark_reminder": { + "type": "integer" + }, + "reaction": { + "type": "integer" + }, + "votes_released": { + "type": "integer" + }, + "event_reminder": { + "type": "integer" + }, + "event_invitation": { + "type": "integer" + }, + "chat_mention": { + "type": "integer" + }, + "chat_message": { + "type": "integer" + }, + "chat_invitation": { + "type": "integer" + }, + "chat_group_mention": { + "type": "integer" + }, + "chat_quoted": { + "type": "integer" + }, + "chat_watched_thread": { + "type": "integer" + }, + "assigned": { + "type": "integer" + }, + "question_answer_user_commented": { + "type": "integer" + }, + "following": { + "type": "integer" + }, + "following_created_topic": { + "type": "integer" + }, + "following_replied": { + "type": "integer" + }, + "circles_activity": { + "type": "integer" + } + }, + "required": [ + "mentioned", + "replied", + "quoted", + "edited", + "liked", + "private_message", + "invited_to_private_message", + "invitee_accepted", + "posted", + "watching_category_or_tag", + "moved_post", + "linked", + "granted_badge", + "invited_to_topic", + "custom", + "group_mentioned", + "group_message_summary", + "watching_first_post", + "topic_reminder", + "liked_consolidated", + "linked_consolidated", + "post_approved", + "code_review_commit_approved", + "membership_request_accepted", + "membership_request_consolidated", + "bookmark_reminder", + "reaction", + "votes_released", + "event_reminder", + "event_invitation", + "chat_mention", + "chat_message", + "chat_invitation", + "chat_group_mention" + ] + }, + "post_types": { + "type": "object", + "additionalProperties": false, + "properties": { + "regular": { + "type": "integer" + }, + "moderator_action": { + "type": "integer" + }, + "small_action": { + "type": "integer" + }, + "whisper": { + "type": "integer" + } + }, + "required": [ + "regular", + "moderator_action", + "small_action", + "whisper" + ] + }, + "trust_levels": { + "type": "object", + "additionalProperties": false, + "properties": { + "newuser": { + "type": "integer" + }, + "basic": { + "type": "integer" + }, + "member": { + "type": "integer" + }, + "regular": { + "type": "integer" + }, + "leader": { + "type": "integer" + } + }, + "required": [ + "newuser", + "basic", + "member", + "regular", + "leader" + ] + }, + "user_tips": { + "type": "object", + "additionalProperties": false, + "properties": { + "first_notification": { + "type": "integer" + }, + "topic_timeline": { + "type": "integer" + }, + "post_menu": { + "type": "integer" + }, + "topic_notification_levels": { + "type": "integer" + }, + "suggested_topics": { + "type": "integer" + } + }, + "required": [ + "first_notification", + "topic_timeline", + "post_menu", + "topic_notification_levels", + "suggested_topics" + ] + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "flair_url", + "flair_bg_color", + "flair_color" + ] + } + }, + "filters": { + "type": "array", + "items": {} + }, + "periods": { + "type": "array", + "items": {} + }, + "top_menu_items": { + "type": "array", + "items": {} + }, + "anonymous_top_menu_items": { + "type": "array", + "items": {} + }, + "uncategorized_category_id": { + "type": "integer" + }, + "user_field_max_length": { + "type": "integer" + }, + "post_action_types": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": [ + "integer", + "null" + ] + }, + "name_key": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "short_description": { + "type": "string" + }, + "is_flag": { + "type": "boolean" + }, + "require_message": { + "type": "boolean" + }, + "enabled": { + "type": "boolean" + }, + "applies_to": { + "type": "array" + }, + "is_used": { + "type": "boolean" + }, + "position": { + "type": "integer" + }, + "auto_action_type": { + "type": "boolean" + } + }, + "required": [ + "id", + "name_key", + "name", + "description", + "short_description", + "is_flag", + "require_message", + "enabled", + "applies_to", + "is_used", + "auto_action_type" + ] + } + }, + "topic_flag_types": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": [ + "integer", + "null" + ] + }, + "name_key": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "short_description": { + "type": "string" + }, + "is_flag": { + "type": "boolean" + }, + "require_message": { + "type": "boolean" + }, + "enabled": { + "type": "boolean" + }, + "applies_to": { + "type": "array" + }, + "is_used": { + "type": "boolean" + }, + "position": { + "type": "integer" + }, + "auto_action_type": { + "type": "boolean" + } + }, + "required": [ + "id", + "name_key", + "name", + "description", + "short_description", + "is_flag", + "require_message", + "enabled", + "applies_to", + "is_used", + "auto_action_type" + ] + } + }, + "can_create_tag": { + "type": "boolean" + }, + "can_tag_topics": { + "type": "boolean" + }, + "can_tag_pms": { + "type": "boolean" + }, + "tags_filter_regexp": { + "type": "string" + }, + "top_tags": { + "type": "array", + "items": {} + }, + "wizard_required": { + "type": "boolean" + }, + "can_associate_groups": { + "type": "boolean" + }, + "topic_featured_link_allowed_category_ids": { + "type": "array", + "items": {} + }, + "user_themes": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "theme_id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "default": { + "type": "boolean" + }, + "color_scheme_id": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "theme_id", + "name", + "default", + "color_scheme_id" + ] + } + }, + "user_color_schemes": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "is_dark": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "is_dark" + ] + } + }, + "default_dark_color_scheme": { + "type": [ + "object", + "null" + ] + }, + "censored_regexp": { + "type": "array", + "items": { + "type": "object" + } + }, + "custom_emoji_translation": { + "type": "object", + "additionalProperties": false, + "properties": {} + }, + "watched_words_replace": { + "type": [ + "string", + "null" + ] + }, + "watched_words_link": { + "type": [ + "string", + "null" + ] + }, + "markdown_additional_options": { + "type": "object" + }, + "hashtag_configurations": { + "type": "object" + }, + "hashtag_icons": { + "type": "object" + }, + "displayed_about_plugin_stat_groups": { + "type": "array" + }, + "categories": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "color": { + "type": "string" + }, + "text_color": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "topic_count": { + "type": "integer" + }, + "post_count": { + "type": "integer" + }, + "position": { + "type": "integer" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "description_text": { + "type": [ + "string", + "null" + ] + }, + "description_excerpt": { + "type": [ + "string", + "null" + ] + }, + "topic_url": { + "type": "string" + }, + "read_restricted": { + "type": "boolean" + }, + "permission": { + "type": "integer" + }, + "notification_level": { + "type": "integer" + }, + "topic_template": { + "type": [ + "string", + "null" + ] + }, + "has_children": { + "type": "boolean" + }, + "subcategory_count": { + "type": [ + "integer", + "null" + ] + }, + "sort_order": { + "type": [ + "string", + "null" + ] + }, + "sort_ascending": { + "type": [ + "string", + "null" + ] + }, + "show_subcategory_list": { + "type": "boolean" + }, + "num_featured_topics": { + "type": "integer" + }, + "default_view": { + "type": [ + "string", + "null" + ] + }, + "subcategory_list_style": { + "type": "string" + }, + "default_top_period": { + "type": "string" + }, + "default_list_filter": { + "type": "string" + }, + "minimum_required_tags": { + "type": "integer" + }, + "navigate_to_first_post_after_read": { + "type": "boolean" + }, + "allowed_tags": { + "type": "array", + "items": {} + }, + "allowed_tag_groups": { + "type": "array", + "items": {} + }, + "allow_global_tags": { + "type": "boolean" + }, + "required_tag_groups": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "min_count": { + "type": "integer" + } + }, + "required": [ + "name", + "min_count" + ] + } + }, + "read_only_banner": { + "type": [ + "string", + "null" + ] + }, + "uploaded_logo": { + "type": [ + "string", + "null" + ] + }, + "uploaded_logo_dark": { + "type": [ + "string", + "null" + ] + }, + "uploaded_background": { + "type": [ + "string", + "null" + ] + }, + "uploaded_background_dark": { + "type": [ + "string", + "null" + ] + }, + "can_edit": { + "type": "boolean" + }, + "custom_fields": { + "type": [ + "object", + "null" + ], + "additionalProperties": true + }, + "parent_category_id": { + "type": "integer" + }, + "form_template_ids": { + "type": "array", + "items": {} + } + }, + "required": [ + "id", + "name", + "color", + "text_color", + "slug", + "topic_count", + "post_count", + "position", + "topic_url", + "read_restricted", + "permission", + "notification_level", + "topic_template", + "has_children", + "subcategory_count", + "sort_order", + "sort_ascending", + "show_subcategory_list", + "num_featured_topics", + "default_view", + "subcategory_list_style", + "default_top_period", + "default_list_filter", + "minimum_required_tags", + "navigate_to_first_post_after_read", + "allowed_tags", + "allowed_tag_groups", + "allow_global_tags", + "required_tag_groups", + "read_only_banner", + "uploaded_logo", + "uploaded_logo_dark", + "uploaded_background", + "uploaded_background_dark", + "can_edit" + ] + } + }, + "archetypes": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "options": { + "type": "array", + "items": {} + } + }, + "required": [ + "id", + "name", + "options" + ] + } + }, + "user_fields": { + "type": "array", + "items": {} + }, + "auth_providers": { + "type": "array", + "items": {} + }, + "whispers_allowed_groups_names": { + "type": "array" + }, + "denied_emojis": { + "type": "array" + }, + "valid_flag_applies_to_types": { + "type": "array" + }, + "navigation_menu_site_top_tags": { + "type": "array" + }, + "full_name_required_for_signup": { + "type": "boolean" + }, + "full_name_visible_in_signup": { + "type": "boolean" + } + }, + "required": [ + "default_archetype", + "notification_types", + "post_types", + "trust_levels", + "groups", + "filters", + "periods", + "top_menu_items", + "anonymous_top_menu_items", + "uncategorized_category_id", + "user_field_max_length", + "post_action_types", + "topic_flag_types", + "can_create_tag", + "can_tag_topics", + "can_tag_pms", + "tags_filter_regexp", + "top_tags", + "topic_featured_link_allowed_category_ids", + "user_themes", + "user_color_schemes", + "default_dark_color_scheme", + "censored_regexp", + "custom_emoji_translation", + "watched_words_replace", + "watched_words_link", + "categories", + "archetypes", + "user_fields", + "auth_providers", + "full_name_required_for_signup", + "full_name_visible_in_signup" + ] + } + } + } + } + } + } + }, + "/site/basic-info.json": { + "get": { + "summary": "Get site basic info", + "tags": [ + "Site" + ], + "operationId": "getSiteBasicInfo", + "description": "Can be used to fetch basic info about a site", + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "logo_url": { + "type": "string" + }, + "logo_small_url": { + "type": "string" + }, + "apple_touch_icon_url": { + "type": "string" + }, + "favicon_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "header_primary_color": { + "type": "string" + }, + "header_background_color": { + "type": "string" + }, + "login_required": { + "type": "boolean" + }, + "locale": { + "type": "string" + }, + "include_in_discourse_discover": { + "type": "boolean" + }, + "mobile_logo_url": { + "type": "string" + } + }, + "required": [ + "logo_url", + "logo_small_url", + "apple_touch_icon_url", + "favicon_url", + "title", + "description", + "header_primary_color", + "header_background_color", + "login_required", + "locale", + "include_in_discourse_discover", + "mobile_logo_url" + ] + } + } + } + } + } + } + }, + "/tag_groups.json": { + "get": { + "summary": "Get a list of tag groups", + "tags": [ + "Tags" + ], + "operationId": "listTagGroups", + "responses": { + "200": { + "description": "tags", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "tag_groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "tag_names": { + "type": "array", + "items": {} + }, + "parent_tag_name": { + "type": "array", + "items": {} + }, + "one_per_topic": { + "type": "boolean" + }, + "permissions": { + "type": "object", + "properties": { + "staff": { + "type": "integer" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "post": { + "summary": "Creates a tag group", + "tags": [ + "Tags" + ], + "operationId": "createTagGroup", + "parameters": [], + "responses": { + "200": { + "description": "tag group created", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "tag_group": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "tag_names": { + "type": "array", + "items": {} + }, + "parent_tag_name": { + "type": "array", + "items": {} + }, + "one_per_topic": { + "type": "boolean" + }, + "permissions": { + "type": "object" + } + }, + "required": [ + "id", + "name", + "tag_names", + "parent_tag_name", + "one_per_topic", + "permissions" + ] + } + }, + "required": [ + "tag_group" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + } + }, + "required": [ + "name" + ] + } + } + } + } + } + }, + "/tag_groups/{id}.json": { + "get": { + "summary": "Get a single tag group", + "tags": [ + "Tags" + ], + "operationId": "getTagGroup", + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "notifications", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "tag_group": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "tag_names": { + "type": "array", + "items": {} + }, + "parent_tag_name": { + "type": "array", + "items": {} + }, + "one_per_topic": { + "type": "boolean" + }, + "permissions": { + "type": "object", + "properties": { + "everyone": { + "type": "integer" + } + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "summary": "Update tag group", + "tags": [ + "Tags" + ], + "operationId": "updateTagGroup", + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Tag group updated", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "string" + }, + "tag_group": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "tag_names": { + "type": "array", + "items": {} + }, + "parent_tag_name": { + "type": "array", + "items": {} + }, + "one_per_topic": { + "type": "boolean" + }, + "permissions": { + "type": "object", + "properties": { + "everyone": { + "type": "integer" + } + } + } + } + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + } + } + }, + "/tags.json": { + "get": { + "summary": "Get a list of tags", + "tags": [ + "Tags" + ], + "operationId": "listTags", + "responses": { + "200": { + "description": "notifications", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "text": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "pm_count": { + "type": "integer" + }, + "target_tag": { + "type": [ + "string", + "null" + ] + } + } + } + }, + "extras": { + "type": "object", + "properties": { + "categories": { + "type": "array", + "items": {} + } + } + } + } + } + } + } + } + } + } + }, + "/tag/{name}.json": { + "get": { + "summary": "Get a specific tag", + "tags": [ + "Tags" + ], + "operationId": "getTag", + "parameters": [ + { + "name": "name", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "notifications", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "avatar_template": { + "type": "string" + } + } + } + }, + "primary_groups": { + "type": "array", + "items": {} + }, + "topic_list": { + "type": "object", + "properties": { + "can_create_topic": { + "type": "boolean" + }, + "draft": { + "type": [ + "string", + "null" + ] + }, + "draft_key": { + "type": "string" + }, + "draft_sequence": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "topic_count": { + "type": "integer" + }, + "staff": { + "type": "boolean" + } + } + } + }, + "topics": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "fancy_title": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "posts_count": { + "type": "integer" + }, + "reply_count": { + "type": "integer" + }, + "highest_post_number": { + "type": "integer" + }, + "image_url": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string" + }, + "last_posted_at": { + "type": "string" + }, + "bumped": { + "type": "boolean" + }, + "bumped_at": { + "type": "string" + }, + "archetype": { + "type": "string" + }, + "unseen": { + "type": "boolean" + }, + "last_read_post_number": { + "type": "integer" + }, + "unread_posts": { + "type": "integer" + }, + "pinned": { + "type": "boolean" + }, + "unpinned": { + "type": [ + "string", + "null" + ] + }, + "visible": { + "type": "boolean" + }, + "closed": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "notification_level": { + "type": "integer" + }, + "bookmarked": { + "type": "boolean" + }, + "liked": { + "type": "boolean" + }, + "tags": { + "type": "array", + "items": {} + }, + "views": { + "type": "integer" + }, + "like_count": { + "type": "integer" + }, + "has_summary": { + "type": "boolean" + }, + "last_poster_username": { + "type": "string" + }, + "category_id": { + "type": "integer" + }, + "pinned_globally": { + "type": "boolean" + }, + "featured_link": { + "type": [ + "string", + "null" + ] + }, + "posters": { + "type": "array", + "items": { + "type": "object", + "properties": { + "extras": { + "type": "string" + }, + "description": { + "type": "string" + }, + "user_id": { + "type": "integer" + }, + "primary_group_id": { + "type": [ + "integer", + "null" + ] + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/t/{id}/posts.json": { + "get": { + "summary": "Get specific posts from a topic", + "tags": [ + "Topics" + ], + "operationId": "getSpecificPostsFromTopic", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "specific posts", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "post_stream": { + "type": "object", + "properties": { + "posts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "username": { + "type": "string" + }, + "avatar_template": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "cooked": { + "type": "string" + }, + "post_number": { + "type": "integer" + }, + "post_type": { + "type": "integer" + }, + "updated_at": { + "type": "string" + }, + "reply_count": { + "type": "integer" + }, + "reply_to_post_number": { + "type": [ + "string", + "null" + ] + }, + "quote_count": { + "type": "integer" + }, + "incoming_link_count": { + "type": "integer" + }, + "reads": { + "type": "integer" + }, + "readers_count": { + "type": "integer" + }, + "score": { + "type": "number" + }, + "yours": { + "type": "boolean" + }, + "topic_id": { + "type": "integer" + }, + "topic_slug": { + "type": "string" + }, + "display_username": { + "type": [ + "string", + "null" + ] + }, + "primary_group_name": { + "type": [ + "string", + "null" + ] + }, + "flair_name": { + "type": [ + "string", + "null" + ] + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "version": { + "type": "integer" + }, + "can_edit": { + "type": "boolean" + }, + "can_delete": { + "type": "boolean" + }, + "can_recover": { + "type": "boolean" + }, + "can_wiki": { + "type": "boolean" + }, + "read": { + "type": "boolean" + }, + "user_title": { + "type": [ + "string", + "null" + ] + }, + "actions_summary": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "can_act": { + "type": "boolean" + } + } + } + }, + "moderator": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "staff": { + "type": "boolean" + }, + "user_id": { + "type": "integer" + }, + "hidden": { + "type": "boolean" + }, + "trust_level": { + "type": "integer" + }, + "deleted_at": { + "type": [ + "string", + "null" + ] + }, + "user_deleted": { + "type": "boolean" + }, + "edit_reason": { + "type": [ + "string", + "null" + ] + }, + "can_view_edit_history": { + "type": "boolean" + }, + "wiki": { + "type": "boolean" + }, + "reviewable_id": { + "type": "integer" + }, + "reviewable_score_count": { + "type": "integer" + }, + "reviewable_score_pending_count": { + "type": "integer" + } + } + } + } + } + }, + "id": { + "type": "integer" + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "post_ids[]": { + "type": "integer" + } + }, + "required": [ + "post_ids[]" + ] + } + } + } + } + } + }, + "/t/{id}.json": { + "get": { + "summary": "Get a single topic", + "tags": [ + "Topics" + ], + "operationId": "getTopic", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "specific posts", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "post_stream": { + "type": "object", + "additionalProperties": false, + "properties": { + "posts": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "username": { + "type": "string" + }, + "avatar_template": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "cooked": { + "type": "string" + }, + "post_number": { + "type": "integer" + }, + "post_type": { + "type": "integer" + }, + "updated_at": { + "type": "string" + }, + "reply_count": { + "type": "integer" + }, + "reply_to_post_number": { + "type": [ + "string", + "null" + ] + }, + "quote_count": { + "type": "integer" + }, + "incoming_link_count": { + "type": "integer" + }, + "reads": { + "type": "integer" + }, + "readers_count": { + "type": "integer" + }, + "score": { + "type": "number" + }, + "yours": { + "type": "boolean" + }, + "topic_id": { + "type": "integer" + }, + "topic_slug": { + "type": "string" + }, + "display_username": { + "type": "string" + }, + "primary_group_name": { + "type": [ + "string", + "null" + ] + }, + "flair_name": { + "type": [ + "string", + "null" + ] + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "version": { + "type": "integer" + }, + "can_edit": { + "type": "boolean" + }, + "can_delete": { + "type": "boolean" + }, + "can_recover": { + "type": "boolean" + }, + "can_see_hidden_post": { + "type": "boolean" + }, + "can_wiki": { + "type": "boolean" + }, + "link_counts": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "url": { + "type": "string" + }, + "internal": { + "type": "boolean" + }, + "reflection": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "clicks": { + "type": "integer" + } + }, + "required": [ + "url", + "internal", + "reflection", + "title", + "clicks" + ] + } + }, + "read": { + "type": "boolean" + }, + "user_title": { + "type": [ + "string", + "null" + ] + }, + "bookmarked": { + "type": "boolean" + }, + "actions_summary": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "can_act": { + "type": "boolean" + } + }, + "required": [ + "id", + "can_act" + ] + } + }, + "moderator": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "staff": { + "type": "boolean" + }, + "user_id": { + "type": "integer" + }, + "hidden": { + "type": "boolean" + }, + "trust_level": { + "type": "integer" + }, + "deleted_at": { + "type": [ + "string", + "null" + ] + }, + "user_deleted": { + "type": "boolean" + }, + "edit_reason": { + "type": [ + "string", + "null" + ] + }, + "can_view_edit_history": { + "type": "boolean" + }, + "wiki": { + "type": "boolean" + }, + "reviewable_id": { + "type": "integer" + }, + "reviewable_score_count": { + "type": "integer" + }, + "reviewable_score_pending_count": { + "type": "integer" + } + }, + "required": [ + "id", + "name", + "username", + "avatar_template", + "created_at", + "cooked", + "post_number", + "post_type", + "updated_at", + "reply_count", + "reply_to_post_number", + "quote_count", + "incoming_link_count", + "reads", + "readers_count", + "score", + "yours", + "topic_id", + "topic_slug", + "display_username", + "primary_group_name", + "flair_name", + "flair_url", + "flair_bg_color", + "flair_color", + "version", + "can_edit", + "can_delete", + "can_recover", + "can_wiki", + "link_counts", + "read", + "user_title", + "bookmarked", + "actions_summary", + "moderator", + "admin", + "staff", + "user_id", + "hidden", + "trust_level", + "deleted_at", + "user_deleted", + "edit_reason", + "can_view_edit_history", + "wiki", + "reviewable_id", + "reviewable_score_count", + "reviewable_score_pending_count" + ] + } + }, + "stream": { + "type": "array", + "items": {} + } + }, + "required": [ + "posts", + "stream" + ] + }, + "timeline_lookup": { + "type": "array", + "items": {} + }, + "suggested_topics": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "fancy_title": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "posts_count": { + "type": "integer" + }, + "reply_count": { + "type": "integer" + }, + "highest_post_number": { + "type": "integer" + }, + "image_url": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string" + }, + "last_posted_at": { + "type": [ + "string", + "null" + ] + }, + "bumped": { + "type": "boolean" + }, + "bumped_at": { + "type": "string" + }, + "archetype": { + "type": "string" + }, + "unseen": { + "type": "boolean" + }, + "pinned": { + "type": "boolean" + }, + "unpinned": { + "type": [ + "string", + "null" + ] + }, + "excerpt": { + "type": "string" + }, + "visible": { + "type": "boolean" + }, + "closed": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "bookmarked": { + "type": [ + "string", + "null" + ] + }, + "liked": { + "type": [ + "string", + "null" + ] + }, + "tags": { + "type": "array", + "items": {} + }, + "tags_descriptions": { + "type": "object", + "additionalProperties": false, + "properties": {} + }, + "like_count": { + "type": "integer" + }, + "views": { + "type": "integer" + }, + "category_id": { + "type": "integer" + }, + "featured_link": { + "type": [ + "string", + "null" + ] + }, + "posters": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "extras": { + "type": "string" + }, + "description": { + "type": "string" + }, + "user": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": "string" + }, + "avatar_template": { + "type": "string" + } + }, + "required": [ + "id", + "username", + "name", + "avatar_template" + ] + } + }, + "required": [ + "extras", + "description", + "user" + ] + } + } + }, + "required": [ + "id", + "title", + "fancy_title", + "slug", + "posts_count", + "reply_count", + "highest_post_number", + "image_url", + "created_at", + "last_posted_at", + "bumped", + "bumped_at", + "archetype", + "unseen", + "pinned", + "unpinned", + "excerpt", + "visible", + "closed", + "archived", + "bookmarked", + "liked", + "tags", + "tags_descriptions", + "like_count", + "views", + "category_id", + "featured_link", + "posters" + ] + } + }, + "tags": { + "type": "array", + "items": {} + }, + "tags_descriptions": { + "type": "object", + "additionalProperties": false, + "properties": {} + }, + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "fancy_title": { + "type": "string" + }, + "posts_count": { + "type": "integer" + }, + "created_at": { + "type": "string" + }, + "views": { + "type": "integer" + }, + "reply_count": { + "type": "integer" + }, + "like_count": { + "type": "integer" + }, + "last_posted_at": { + "type": [ + "string", + "null" + ] + }, + "visible": { + "type": "boolean" + }, + "closed": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "has_summary": { + "type": "boolean" + }, + "archetype": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "category_id": { + "type": "integer" + }, + "word_count": { + "type": [ + "integer", + "null" + ] + }, + "deleted_at": { + "type": [ + "string", + "null" + ] + }, + "user_id": { + "type": "integer" + }, + "featured_link": { + "type": [ + "string", + "null" + ] + }, + "pinned_globally": { + "type": "boolean" + }, + "pinned_at": { + "type": [ + "string", + "null" + ] + }, + "pinned_until": { + "type": [ + "string", + "null" + ] + }, + "image_url": { + "type": [ + "string", + "null" + ] + }, + "slow_mode_seconds": { + "type": "integer" + }, + "draft": { + "type": [ + "string", + "null" + ] + }, + "draft_key": { + "type": "string" + }, + "draft_sequence": { + "type": "integer" + }, + "unpinned": { + "type": [ + "string", + "null" + ] + }, + "pinned": { + "type": "boolean" + }, + "current_post_number": { + "type": "integer" + }, + "highest_post_number": { + "type": [ + "integer", + "null" + ] + }, + "deleted_by": { + "type": [ + "string", + "null" + ] + }, + "has_deleted": { + "type": "boolean" + }, + "actions_summary": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "count": { + "type": "integer" + }, + "hidden": { + "type": "boolean" + }, + "can_act": { + "type": "boolean" + } + }, + "required": [ + "id", + "count", + "hidden", + "can_act" + ] + } + }, + "chunk_size": { + "type": "integer" + }, + "bookmarked": { + "type": "boolean" + }, + "bookmarks": { + "type": "array", + "items": {} + }, + "topic_timer": { + "type": [ + "string", + "null" + ] + }, + "message_bus_last_id": { + "type": "integer" + }, + "participant_count": { + "type": "integer" + }, + "show_read_indicator": { + "type": "boolean" + }, + "thumbnails": { + "type": [ + "string", + "null" + ] + }, + "slow_mode_enabled_until": { + "type": [ + "string", + "null" + ] + }, + "details": { + "type": "object", + "additionalProperties": false, + "properties": { + "can_edit": { + "type": "boolean" + }, + "notification_level": { + "type": "integer" + }, + "can_move_posts": { + "type": "boolean" + }, + "can_delete": { + "type": "boolean" + }, + "can_remove_allowed_users": { + "type": "boolean" + }, + "can_create_post": { + "type": "boolean" + }, + "can_reply_as_new_topic": { + "type": "boolean" + }, + "can_invite_to": { + "type": "boolean" + }, + "can_invite_via_email": { + "type": "boolean" + }, + "can_flag_topic": { + "type": "boolean" + }, + "can_convert_topic": { + "type": "boolean" + }, + "can_review_topic": { + "type": "boolean" + }, + "can_close_topic": { + "type": "boolean" + }, + "can_archive_topic": { + "type": "boolean" + }, + "can_split_merge_topic": { + "type": "boolean" + }, + "can_edit_staff_notes": { + "type": "boolean" + }, + "can_toggle_topic_visibility": { + "type": "boolean" + }, + "can_pin_unpin_topic": { + "type": "boolean" + }, + "can_moderate_category": { + "type": "boolean" + }, + "can_remove_self_id": { + "type": "integer" + }, + "participants": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": "string" + }, + "avatar_template": { + "type": "string" + }, + "post_count": { + "type": "integer" + }, + "primary_group_name": { + "type": [ + "string", + "null" + ] + }, + "flair_name": { + "type": [ + "string", + "null" + ] + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_group_id": { + "type": [ + "integer", + "null" + ] + }, + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + }, + "trust_level": { + "type": "integer" + } + }, + "required": [ + "id", + "username", + "name", + "avatar_template", + "post_count", + "primary_group_name", + "flair_name", + "flair_url", + "flair_color", + "flair_bg_color", + "admin", + "moderator", + "trust_level" + ] + } + }, + "created_by": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": "string" + }, + "avatar_template": { + "type": "string" + } + }, + "required": [ + "id", + "username", + "name", + "avatar_template" + ] + }, + "last_poster": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": "string" + }, + "avatar_template": { + "type": "string" + } + }, + "required": [ + "id", + "username", + "name", + "avatar_template" + ] + } + }, + "required": [ + "can_edit", + "notification_level", + "can_move_posts", + "can_delete", + "can_remove_allowed_users", + "can_create_post", + "can_reply_as_new_topic", + "can_convert_topic", + "can_review_topic", + "can_close_topic", + "can_archive_topic", + "can_split_merge_topic", + "can_edit_staff_notes", + "can_toggle_topic_visibility", + "can_pin_unpin_topic", + "can_moderate_category", + "can_remove_self_id", + "created_by", + "last_poster" + ] + } + }, + "required": [ + "post_stream", + "timeline_lookup", + "suggested_topics", + "tags", + "tags_descriptions", + "id", + "title", + "fancy_title", + "posts_count", + "created_at", + "views", + "reply_count", + "like_count", + "last_posted_at", + "visible", + "closed", + "archived", + "has_summary", + "archetype", + "slug", + "category_id", + "word_count", + "deleted_at", + "user_id", + "featured_link", + "pinned_globally", + "pinned_at", + "pinned_until", + "image_url", + "slow_mode_seconds", + "draft", + "draft_key", + "draft_sequence", + "unpinned", + "pinned", + "highest_post_number", + "deleted_by", + "has_deleted", + "actions_summary", + "chunk_size", + "bookmarked", + "bookmarks", + "topic_timer", + "message_bus_last_id", + "participant_count", + "show_read_indicator", + "thumbnails", + "slow_mode_enabled_until", + "details" + ] + } + } + } + } + } + }, + "delete": { + "summary": "Remove a topic", + "tags": [ + "Topics" + ], + "operationId": "removeTopic", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "specific posts" + } + } + } + }, + "/t/-/{id}.json": { + "put": { + "summary": "Update a topic", + "tags": [ + "Topics" + ], + "operationId": "updateTopic", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "topic updated", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "basic_topic": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "fancy_title": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "posts_count": { + "type": "integer" + } + } + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "topic": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "category_id": { + "type": "integer" + } + } + } + } + } + } + } + } + } + }, + "/t/{id}/invite.json": { + "post": { + "summary": "Invite to topic", + "tags": [ + "Topics", + "Invites" + ], + "operationId": "inviteToTopic", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "topic updated", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "user": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": "string" + }, + "avatar_template": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "user": { + "type": "string" + }, + "email": { + "type": "string" + } + } + } + } + } + } + } + }, + "/t/{id}/invite-group.json": { + "post": { + "summary": "Invite group to topic", + "tags": [ + "Topics", + "Invites" + ], + "operationId": "inviteGroupToTopic", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "invites to a PM", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "group": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "group": { + "type": "string", + "description": "The name of the group to invite" + }, + "should_notify": { + "type": "boolean", + "description": "Whether to notify the group, it defaults to true" + } + } + } + } + } + } + } + }, + "/t/{id}/bookmark.json": { + "put": { + "summary": "Bookmark topic", + "tags": [ + "Topics" + ], + "operationId": "bookmarkTopic", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "topic updated" + } + } + } + }, + "/t/{id}/status.json": { + "put": { + "summary": "Update the status of a topic", + "tags": [ + "Topics" + ], + "operationId": "updateTopicStatus", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "topic updated", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "string", + "example": "OK" + }, + "topic_status_update": { + "type": [ + "string", + "null" + ] + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "closed", + "pinned", + "pinned_globally", + "archived", + "visible" + ] + }, + "enabled": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "until": { + "type": "string", + "description": "Only required for `pinned` and `pinned_globally`", + "example": "2030-12-31" + } + }, + "required": [ + "status", + "enabled" + ] + } + } + } + } + } + }, + "/latest.json": { + "get": { + "summary": "Get the latest topics", + "tags": [ + "Topics" + ], + "operationId": "listLatestTopics", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "order", + "in": "query", + "description": "Enum: `default`, `created`, `activity`, `views`, `posts`, `category`,\n`likes`, `op_likes`, `posters`", + "schema": { + "type": "string" + } + }, + { + "name": "ascending", + "in": "query", + "description": "Defaults to `desc`, add `ascending=true` to sort asc", + "schema": { + "type": "string" + } + }, + { + "name": "per_page", + "in": "query", + "description": "Maximum number of topics returned, between 1-100", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "topic updated", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "avatar_template": { + "type": "string" + } + } + } + }, + "primary_groups": { + "type": "array", + "items": {} + }, + "topic_list": { + "type": "object", + "properties": { + "can_create_topic": { + "type": "boolean" + }, + "draft": { + "type": [ + "string", + "null" + ] + }, + "draft_key": { + "type": "string" + }, + "draft_sequence": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "topics": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "fancy_title": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "posts_count": { + "type": "integer" + }, + "reply_count": { + "type": "integer" + }, + "highest_post_number": { + "type": "integer" + }, + "image_url": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "last_posted_at": { + "type": "string" + }, + "bumped": { + "type": "boolean" + }, + "bumped_at": { + "type": "string" + }, + "archetype": { + "type": "string" + }, + "unseen": { + "type": "boolean" + }, + "last_read_post_number": { + "type": "integer" + }, + "unread_posts": { + "type": "integer" + }, + "pinned": { + "type": "boolean" + }, + "unpinned": { + "type": [ + "string", + "null" + ] + }, + "visible": { + "type": "boolean" + }, + "closed": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "notification_level": { + "type": "integer" + }, + "bookmarked": { + "type": "boolean" + }, + "liked": { + "type": "boolean" + }, + "views": { + "type": "integer" + }, + "like_count": { + "type": "integer" + }, + "has_summary": { + "type": "boolean" + }, + "last_poster_username": { + "type": "string" + }, + "category_id": { + "type": "integer" + }, + "op_like_count": { + "type": "integer" + }, + "pinned_globally": { + "type": "boolean" + }, + "featured_link": { + "type": [ + "string", + "null" + ] + }, + "posters": { + "type": "array", + "items": { + "type": "object", + "properties": { + "extras": { + "type": "string" + }, + "description": { + "type": "string" + }, + "user_id": { + "type": "integer" + }, + "primary_group_id": { + "type": [ + "integer", + "null" + ] + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/top.json": { + "get": { + "summary": "Get the top topics filtered by period", + "tags": [ + "Topics" + ], + "operationId": "listTopTopics", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "period", + "in": "query", + "description": "Enum: `all`, `yearly`, `quarterly`, `monthly`, `weekly`, `daily`", + "schema": { + "type": "string" + } + }, + { + "name": "per_page", + "in": "query", + "description": "Maximum number of topics returned, between 1-100", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": "string" + }, + "avatar_template": { + "type": "string" + } + } + } + }, + "primary_groups": { + "type": "array", + "items": {} + }, + "topic_list": { + "type": "object", + "properties": { + "can_create_topic": { + "type": "boolean" + }, + "draft": { + "type": [ + "string", + "null" + ] + }, + "draft_key": { + "type": "string" + }, + "draft_sequence": { + "type": "integer" + }, + "for_period": { + "type": "string" + }, + "per_page": { + "type": "integer" + }, + "topics": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "fancy_title": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "posts_count": { + "type": "integer" + }, + "reply_count": { + "type": "integer" + }, + "highest_post_number": { + "type": "integer" + }, + "image_url": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string" + }, + "last_posted_at": { + "type": "string" + }, + "bumped": { + "type": "boolean" + }, + "bumped_at": { + "type": "string" + }, + "archetype": { + "type": "string" + }, + "unseen": { + "type": "boolean" + }, + "last_read_post_number": { + "type": "integer" + }, + "unread_posts": { + "type": "integer" + }, + "pinned": { + "type": "boolean" + }, + "unpinned": { + "type": "boolean" + }, + "visible": { + "type": "boolean" + }, + "closed": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "notification_level": { + "type": "integer" + }, + "bookmarked": { + "type": "boolean" + }, + "liked": { + "type": "boolean" + }, + "views": { + "type": "integer" + }, + "like_count": { + "type": "integer" + }, + "has_summary": { + "type": "boolean" + }, + "last_poster_username": { + "type": "string" + }, + "category_id": { + "type": "integer" + }, + "op_like_count": { + "type": "integer" + }, + "pinned_globally": { + "type": "boolean" + }, + "featured_link": { + "type": [ + "string", + "null" + ] + }, + "posters": { + "type": "array", + "items": { + "type": "object", + "properties": { + "extras": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": "string" + }, + "user_id": { + "type": "integer" + }, + "primary_group_id": { + "type": [ + "integer", + "null" + ] + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/t/{id}/notifications.json": { + "post": { + "summary": "Set notification level", + "tags": [ + "Topics" + ], + "operationId": "setNotificationLevel", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "topic updated", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "string", + "example": "OK" + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "notification_level": { + "type": "string", + "enum": [ + "0", + "1", + "2", + "3" + ] + } + }, + "required": [ + "notification_level" + ] + } + } + } + } + } + }, + "/t/{id}/change-timestamp.json": { + "put": { + "summary": "Update topic timestamp", + "tags": [ + "Topics" + ], + "operationId": "updateTopicTimestamp", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "topic updated", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "string", + "example": "OK" + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "timestamp": { + "type": "string", + "example": "1594291380" + } + }, + "required": [ + "timestamp" + ] + } + } + } + } + } + }, + "/t/{id}/timer.json": { + "post": { + "summary": "Create topic timer", + "tags": [ + "Topics" + ], + "operationId": "createTopicTimer", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "topic updated", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "string", + "example": "OK" + }, + "execute_at": { + "type": "string" + }, + "duration": { + "type": [ + "string", + "null" + ] + }, + "based_on_last_post": { + "type": "boolean" + }, + "closed": { + "type": "boolean" + }, + "category_id": { + "type": [ + "integer", + "null" + ] + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "time": { + "type": "string", + "example": "" + }, + "status_type": { + "type": "string" + }, + "based_on_last_post": { + "type": "boolean" + }, + "category_id": { + "type": "integer" + } + } + } + } + } + } + } + }, + "/t/external_id/{external_id}.json": { + "get": { + "summary": "Get topic by external_id", + "tags": [ + "Topics" + ], + "operationId": "getTopicByExternalId", + "parameters": [ + { + "name": "external_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "301": { + "description": "redirects to /t/{topic_id}.json" + } + } + } + }, + "/uploads.json": { + "post": { + "summary": "Creates an upload", + "tags": [ + "Uploads" + ], + "operationId": "createUpload", + "parameters": [], + "responses": { + "200": { + "description": "file uploaded", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "original_filename": { + "type": "string" + }, + "filesize": { + "type": "integer" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + }, + "thumbnail_width": { + "type": "integer" + }, + "thumbnail_height": { + "type": "integer" + }, + "extension": { + "type": "string" + }, + "short_url": { + "type": "string" + }, + "short_path": { + "type": "string" + }, + "retain_hours": { + "type": [ + "string", + "null" + ] + }, + "human_filesize": { + "type": "string" + }, + "dominant_color": { + "type": [ + "string", + "null" + ] + }, + "thumbnail": { + "type": [ + "object", + "null" + ], + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "upload_id": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "extension": { + "type": "string" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + }, + "filesize": { + "type": "integer" + } + } + } + }, + "required": [ + "id", + "url", + "original_filename", + "filesize", + "width", + "height", + "thumbnail_width", + "thumbnail_height", + "extension", + "short_url", + "short_path", + "retain_hours", + "human_filesize" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "enum": [ + "avatar", + "profile_background", + "card_background", + "custom_emoji", + "composer" + ] + }, + "user_id": { + "type": "integer", + "description": "required if uploading an avatar" + }, + "synchronous": { + "type": "boolean", + "description": "Use this flag to return an id and url" + }, + "file": { + "type": "string", + "format": "binary" + } + }, + "required": [ + "type" + ] + } + } + } + } + } + }, + "/uploads/generate-presigned-put.json": { + "post": { + "summary": "Initiates a direct external upload", + "tags": [ + "Uploads" + ], + "operationId": "generatePresignedPut", + "description": "Direct external uploads bypass the usual method of creating uploads\nvia the POST /uploads route, and upload directly to an external provider,\nwhich by default is S3. This route begins the process, and will return\na unique identifier for the external upload as well as a presigned URL\nwhich is where the file binary blob should be uploaded to.\n\nOnce the upload is complete to the external service, you must call the\nPOST /complete-external-upload route using the unique identifier returned\nby this route, which will create any required Upload record in the Discourse\ndatabase and also move file from its temporary location to the final\ndestination in the external storage service.\n\nYou must have the correct permissions and CORS settings configured in your\nexternal provider. We support AWS S3 as the default. See:\n\nhttps://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4.\n\nAn external file store must be set up and `enable_direct_s3_uploads` must\nbe set to true for this endpoint to function.\n\n", + "parameters": [], + "responses": { + "200": { + "description": "external upload initialized", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "key": { + "type": "string", + "description": "The path of the temporary file on the external storage\nservice.", + "example": "temp/site/uploads/default/12345/67890.jpg" + }, + "url": { + "type": "string", + "description": "A presigned PUT URL which must be used to upload\nthe file binary blob to.", + "example": "https://file-uploads.s3.us-west-2.amazonaws.com/temp/site/uploads/default/123/456.jpg?x-amz-acl=private&x-amz-meta-sha1-checksum=sha1&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AAAAus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20211221T011246Z&X-Amz-Expires=600&X-Amz-SignedHeaders=host&X-Amz-Signature=12345678" + }, + "signed_headers": { + "type": "object", + "description": "A map of headers that must be sent with the PUT request.", + "example": { + "x-amz-acl": "private", + "x-amz-meta-sha1-checksum": "sha1" + } + }, + "unique_identifier": { + "type": "string", + "description": "A unique string that identifies the external upload.\nThis must be stored and then sent in the /complete-external-upload\nendpoint to complete the direct upload.", + "example": "66e86218-80d9-4bda-b4d5-2b6def968705" + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "enum": [ + "avatar", + "profile_background", + "card_background", + "custom_emoji", + "composer" + ] + }, + "file_name": { + "type": "string", + "example": "IMG_2021.jpeg" + }, + "file_size": { + "type": "integer", + "description": "File size should be represented in bytes.", + "example": 4096 + }, + "metadata": { + "type": "object", + "additionalProperties": false, + "properties": { + "sha1-checksum": { + "type": "string", + "description": "The SHA1 checksum of the upload binary blob. Optionally\nbe provided and serves as an additional security check when\nlater processing the file in complete-external-upload endpoint." + } + } + } + }, + "required": [ + "type", + "file_name", + "file_size" + ] + } + } + } + } + } + }, + "/uploads/complete-external-upload.json": { + "post": { + "summary": "Completes a direct external upload", + "tags": [ + "Uploads" + ], + "operationId": "completeExternalUpload", + "description": "Completes an external upload initialized with /get-presigned-put. The\nfile will be moved from its temporary location in external storage to\na final destination in the S3 bucket. An Upload record will also be\ncreated in the database in most cases.\n\nIf a sha1-checksum was provided in the initial request it will also\nbe compared with the uploaded file in storage to make sure the same\nfile was uploaded. The file size will be compared for the same reason.\n\nYou must have the correct permissions and CORS settings configured in your\nexternal provider. We support AWS S3 as the default. See:\n\nhttps://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4.\n\nAn external file store must be set up and `enable_direct_s3_uploads` must\nbe set to true for this endpoint to function.\n\n", + "parameters": [], + "responses": { + "200": { + "description": "external upload initialized", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "original_filename": { + "type": "string" + }, + "filesize": { + "type": "integer" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + }, + "thumbnail_width": { + "type": "integer" + }, + "thumbnail_height": { + "type": "integer" + }, + "extension": { + "type": "string" + }, + "short_url": { + "type": "string" + }, + "short_path": { + "type": "string" + }, + "retain_hours": { + "type": [ + "string", + "null" + ] + }, + "human_filesize": { + "type": "string" + }, + "dominant_color": { + "type": [ + "string", + "null" + ] + }, + "thumbnail": { + "type": [ + "object", + "null" + ], + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "upload_id": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "extension": { + "type": "string" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + }, + "filesize": { + "type": "integer" + } + } + } + }, + "required": [ + "id", + "url", + "original_filename", + "filesize", + "width", + "height", + "thumbnail_width", + "thumbnail_height", + "extension", + "short_url", + "short_path", + "retain_hours", + "human_filesize" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "unique_identifier": { + "type": "string", + "example": "66e86218-80d9-4bda-b4d5-2b6def968705", + "description": "The unique identifier returned in the original /generate-presigned-put\nrequest." + }, + "for_private_message": { + "type": "string", + "example": "true", + "description": "Optionally set this to true if the upload is for a\nprivate message." + }, + "for_site_setting": { + "type": "string", + "example": "true", + "description": "Optionally set this to true if the upload is for a\nsite setting." + }, + "pasted": { + "type": "string", + "example": "true", + "description": "Optionally set this to true if the upload was pasted\ninto the upload area. This will convert PNG files to JPEG." + } + }, + "required": [ + "unique_identifier" + ] + } + } + } + } + } + }, + "/uploads/create-multipart.json": { + "post": { + "summary": "Creates a multipart external upload", + "tags": [ + "Uploads" + ], + "operationId": "createMultipartUpload", + "description": "Creates a multipart upload in the external storage provider, storing\na temporary reference to the external upload similar to /get-presigned-put.\n\nYou must have the correct permissions and CORS settings configured in your\nexternal provider. We support AWS S3 as the default. See:\n\nhttps://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4.\n\nAn external file store must be set up and `enable_direct_s3_uploads` must\nbe set to true for this endpoint to function.\n\n", + "parameters": [], + "responses": { + "200": { + "description": "external upload initialized", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "key": { + "type": "string", + "description": "The path of the temporary file on the external storage\nservice.", + "example": "temp/site/uploads/default/12345/67890.jpg" + }, + "external_upload_identifier": { + "type": "string", + "description": "The identifier of the multipart upload in the external\nstorage provider. This is the multipart upload_id in AWS S3.", + "example": "84x83tmxy398t3y._Q_z8CoJYVr69bE6D7f8J6Oo0434QquLFoYdGVerWFx9X5HDEI_TP_95c34n853495x35345394.d.ghQ" + }, + "unique_identifier": { + "type": "string", + "description": "A unique string that identifies the external upload.\nThis must be stored and then sent in the /complete-multipart\nand /batch-presign-multipart-parts endpoints.", + "example": "66e86218-80d9-4bda-b4d5-2b6def968705" + } + }, + "required": [ + "external_upload_identifier", + "key", + "unique_identifier" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "upload_type": { + "type": "string", + "enum": [ + "avatar", + "profile_background", + "card_background", + "custom_emoji", + "composer" + ] + }, + "file_name": { + "type": "string", + "example": "IMG_2021.jpeg" + }, + "file_size": { + "type": "integer", + "description": "File size should be represented in bytes.", + "example": 4096 + }, + "metadata": { + "type": "object", + "additionalProperties": false, + "properties": { + "sha1-checksum": { + "type": "string", + "description": "The SHA1 checksum of the upload binary blob. Optionally\nbe provided and serves as an additional security check when\nlater processing the file in complete-external-upload endpoint." + } + } + } + }, + "required": [ + "upload_type", + "file_name", + "file_size" + ] + } + } + } + } + } + }, + "/uploads/batch-presign-multipart-parts.json": { + "post": { + "summary": "Generates batches of presigned URLs for multipart parts", + "tags": [ + "Uploads" + ], + "operationId": "batchPresignMultipartParts", + "description": "Multipart uploads are uploaded in chunks or parts to individual presigned\nURLs, similar to the one generated by /generate-presigned-put. The part\nnumbers provided must be between 1 and 10000. The total number of parts\nwill depend on the chunk size in bytes that you intend to use to upload\neach chunk. For example a 12MB file may have 2 5MB chunks and a final\n2MB chunk, for part numbers 1, 2, and 3.\n\nThis endpoint will return a presigned URL for each part number provided,\nwhich you can then use to send PUT requests for the binary chunk corresponding\nto that part. When the part is uploaded, the provider should return an\nETag for the part, and this should be stored along with the part number,\nbecause this is needed to complete the multipart upload.\n\nYou must have the correct permissions and CORS settings configured in your\nexternal provider. We support AWS S3 as the default. See:\n\nhttps://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4.\n\nAn external file store must be set up and `enable_direct_s3_uploads` must\nbe set to true for this endpoint to function.\n\n", + "parameters": [], + "responses": { + "200": { + "description": "external upload initialized", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "presigned_urls": { + "type": "object", + "description": "The presigned URLs for each part number, which has\nthe part numbers as keys.", + "example": { + "1": "https://discourse-martin-uploads-test.s3.us-east-2.amazonaws.com/temp/uploads/default/123abc/123abc.jpg?partNumber=1&uploadId=123456abcd&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=test&X-Amz-Date=20211222T012336Z&X-Amz-Expires=600&X-Amz-SignedHeaders=host&X-Amz-Signature=abc123" + } + } + }, + "required": [ + "presigned_urls" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "part_numbers": { + "type": "array", + "description": "The part numbers to generate the presigned URLs for,\nmust be between 1 and 10000.", + "example": [ + 1, + 2, + 3 + ] + }, + "unique_identifier": { + "type": "string", + "description": "The unique identifier returned in the original /create-multipart\nrequest.", + "example": "66e86218-80d9-4bda-b4d5-2b6def968705" + } + }, + "required": [ + "part_numbers", + "unique_identifier" + ] + } + } + } + } + } + }, + "/uploads/abort-multipart.json": { + "post": { + "summary": "Abort multipart upload", + "tags": [ + "Uploads" + ], + "operationId": "abortMultipart", + "description": "This endpoint aborts the multipart upload initiated with /create-multipart.\nThis should be used when cancelling the upload. It does not matter if parts\nwere already uploaded into the external storage provider.\n\nYou must have the correct permissions and CORS settings configured in your\nexternal provider. We support AWS S3 as the default. See:\n\nhttps://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4.\n\nAn external file store must be set up and `enable_direct_s3_uploads` must\nbe set to true for this endpoint to function.\n\n", + "parameters": [], + "responses": { + "200": { + "description": "external upload initialized", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "success": { + "type": "string", + "example": "OK" + } + }, + "required": [ + "success" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "external_upload_identifier": { + "type": "string", + "description": "The identifier of the multipart upload in the external\nstorage provider. This is the multipart upload_id in AWS S3.", + "example": "84x83tmxy398t3y._Q_z8CoJYVr69bE6D7f8J6Oo0434QquLFoYdGVerWFx9X5HDEI_TP_95c34n853495x35345394.d.ghQ" + } + }, + "required": [ + "external_upload_identifier" + ] + } + } + } + } + } + }, + "/uploads/complete-multipart.json": { + "post": { + "summary": "Complete multipart upload", + "tags": [ + "Uploads" + ], + "operationId": "completeMultipart", + "description": "Completes the multipart upload in the external store, and copies the\nfile from its temporary location to its final location in the store.\nAll of the parts must have been uploaded to the external storage provider.\nAn Upload record will be completed in most cases once the file is copied\nto its final location.\n\nYou must have the correct permissions and CORS settings configured in your\nexternal provider. We support AWS S3 as the default. See:\n\nhttps://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4.\n\nAn external file store must be set up and `enable_direct_s3_uploads` must\nbe set to true for this endpoint to function.\n\n", + "parameters": [], + "responses": { + "200": { + "description": "external upload initialized", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "original_filename": { + "type": "string" + }, + "filesize": { + "type": "integer" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + }, + "thumbnail_width": { + "type": "integer" + }, + "thumbnail_height": { + "type": "integer" + }, + "extension": { + "type": "string" + }, + "short_url": { + "type": "string" + }, + "short_path": { + "type": "string" + }, + "retain_hours": { + "type": [ + "string", + "null" + ] + }, + "human_filesize": { + "type": "string" + }, + "dominant_color": { + "type": [ + "string", + "null" + ] + }, + "thumbnail": { + "type": [ + "object", + "null" + ], + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "upload_id": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "extension": { + "type": "string" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + }, + "filesize": { + "type": "integer" + } + } + } + }, + "required": [ + "id", + "url", + "original_filename", + "filesize", + "width", + "height", + "thumbnail_width", + "thumbnail_height", + "extension", + "short_url", + "short_path", + "retain_hours", + "human_filesize" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "unique_identifier": { + "type": "string", + "example": "66e86218-80d9-4bda-b4d5-2b6def968705", + "description": "The unique identifier returned in the original /create-multipart\nrequest." + }, + "parts": { + "type": "array", + "example": [ + { + "part_number": 1, + "etag": "0c376dcfcc2606f4335bbc732de93344" + }, + { + "part_number": 2, + "etag": "09ert8cfcc2606f4335bbc732de91122" + } + ], + "description": "All of the part numbers and their corresponding ETags\nthat have been uploaded must be provided." + } + }, + "required": [ + "unique_identifier", + "parts" + ] + } + } + } + } + } + }, + "/user-badges/{username}.json": { + "get": { + "summary": "List badges for a user", + "tags": [ + "Badges", + "Users" + ], + "operationId": "listUserBadges", + "parameters": [ + { + "name": "username", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "badges": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "grant_count": { + "type": "integer" + }, + "allow_title": { + "type": "boolean" + }, + "multiple_grant": { + "type": "boolean" + }, + "icon": { + "type": "string" + }, + "image_url": { + "type": [ + "string", + "null" + ] + }, + "listable": { + "type": "boolean" + }, + "enabled": { + "type": "boolean" + }, + "badge_grouping_id": { + "type": "integer" + }, + "system": { + "type": "boolean" + }, + "slug": { + "type": "string" + }, + "manually_grantable": { + "type": "boolean" + }, + "badge_type_id": { + "type": "integer" + } + }, + "required": [ + "id", + "name", + "description", + "grant_count", + "allow_title", + "multiple_grant", + "icon", + "image_url", + "listable", + "enabled", + "badge_grouping_id", + "system", + "slug", + "manually_grantable", + "badge_type_id" + ] + } + }, + "badge_types": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "sort_order": { + "type": "integer" + } + }, + "required": [ + "id", + "name", + "sort_order" + ] + } + }, + "granted_bies": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": "string" + }, + "avatar_template": { + "type": "string" + }, + "flair_name": { + "type": [ + "string", + "null" + ] + }, + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + }, + "trust_level": { + "type": "integer" + } + }, + "required": [ + "id", + "username", + "name", + "avatar_template", + "flair_name", + "admin", + "moderator", + "trust_level" + ] + } + }, + "user_badges": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "granted_at": { + "type": "string" + }, + "grouping_position": { + "type": "integer" + }, + "is_favorite": { + "type": [ + "string", + "null" + ] + }, + "can_favorite": { + "type": "boolean" + }, + "badge_id": { + "type": "integer" + }, + "granted_by_id": { + "type": "integer" + } + }, + "required": [ + "id", + "granted_at", + "grouping_position", + "is_favorite", + "can_favorite", + "badge_id", + "granted_by_id" + ] + } + } + }, + "required": [ + "user_badges" + ] + } + } + } + } + } + } + }, + "/users.json": { + "post": { + "summary": "Creates a user", + "tags": [ + "Users" + ], + "operationId": "createUser", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "user created", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "success": { + "type": "boolean" + }, + "active": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "user_id": { + "type": "integer" + } + }, + "required": [ + "success", + "active", + "message" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "password": { + "type": "string" + }, + "username": { + "type": "string" + }, + "active": { + "type": "boolean", + "description": "This param requires an api key in the request header\nor it will be ignored" + }, + "approved": { + "type": "boolean" + }, + "user_fields": { + "type": "object", + "additionalProperties": true, + "properties": { + "1": { + "type": "boolean" + } + } + }, + "external_ids": { + "type": "object" + } + }, + "required": [ + "name", + "email", + "password", + "username" + ] + } + } + } + } + } + }, + "/u/{username}.json": { + "get": { + "summary": "Get a single user by username", + "tags": [ + "Users" + ], + "operationId": "getUser", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "username", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "user with primary group response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "user_badges": { + "type": "array", + "items": {} + }, + "user": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": "string" + }, + "avatar_template": { + "type": "string" + }, + "last_posted_at": { + "type": [ + "string", + "null" + ] + }, + "last_seen_at": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string" + }, + "ignored": { + "type": "boolean" + }, + "muted": { + "type": "boolean" + }, + "can_ignore_user": { + "type": "boolean" + }, + "can_ignore_users": { + "type": "boolean" + }, + "can_mute_user": { + "type": "boolean" + }, + "can_mute_users": { + "type": "boolean" + }, + "can_send_private_messages": { + "type": "boolean" + }, + "can_send_private_message_to_user": { + "type": "boolean" + }, + "trust_level": { + "type": "integer" + }, + "moderator": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "badge_count": { + "type": "integer" + }, + "second_factor_backup_enabled": { + "type": "boolean" + }, + "user_fields": { + "type": "object", + "additionalProperties": false, + "properties": { + "1": { + "type": [ + "string", + "null" + ] + }, + "2": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "1", + "2" + ] + }, + "custom_fields": { + "type": "object", + "additionalProperties": false, + "properties": { + "first_name": { + "type": [ + "string", + "null" + ] + } + } + }, + "time_read": { + "type": "integer" + }, + "recent_time_read": { + "type": "integer" + }, + "primary_group_id": { + "type": [ + "integer", + "null" + ] + }, + "primary_group_name": { + "type": [ + "string", + "null" + ] + }, + "flair_group_id": { + "type": [ + "integer", + "null" + ] + }, + "flair_name": { + "type": [ + "string", + "null" + ] + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "featured_topic": { + "type": [ + "string", + "null" + ] + }, + "staged": { + "type": "boolean" + }, + "can_edit": { + "type": "boolean" + }, + "can_edit_username": { + "type": "boolean" + }, + "can_edit_email": { + "type": "boolean" + }, + "can_edit_name": { + "type": "boolean" + }, + "uploaded_avatar_id": { + "type": [ + "integer", + "null" + ] + }, + "has_title_badges": { + "type": "boolean" + }, + "pending_count": { + "type": "integer" + }, + "pending_posts_count": { + "type": "integer" + }, + "profile_view_count": { + "type": "integer" + }, + "second_factor_enabled": { + "type": "boolean" + }, + "can_upload_profile_header": { + "type": "boolean" + }, + "can_upload_user_card_background": { + "type": "boolean" + }, + "post_count": { + "type": "integer" + }, + "can_be_deleted": { + "type": "boolean" + }, + "can_delete_all_posts": { + "type": "boolean" + }, + "locale": { + "type": [ + "string", + "null" + ] + }, + "muted_category_ids": { + "type": "array", + "items": {} + }, + "regular_category_ids": { + "type": "array", + "items": {} + }, + "watched_tags": { + "type": "array", + "items": {} + }, + "watching_first_post_tags": { + "type": "array", + "items": {} + }, + "tracked_tags": { + "type": "array", + "items": {} + }, + "muted_tags": { + "type": "array", + "items": {} + }, + "tracked_category_ids": { + "type": "array", + "items": {} + }, + "watched_category_ids": { + "type": "array", + "items": {} + }, + "watched_first_post_category_ids": { + "type": "array", + "items": {} + }, + "system_avatar_upload_id": { + "type": [ + "string", + "null" + ] + }, + "system_avatar_template": { + "type": "string" + }, + "muted_usernames": { + "type": "array", + "items": {} + }, + "ignored_usernames": { + "type": "array", + "items": {} + }, + "allowed_pm_usernames": { + "type": "array", + "items": {} + }, + "mailing_list_posts_per_day": { + "type": "integer" + }, + "can_change_bio": { + "type": "boolean" + }, + "can_change_location": { + "type": "boolean" + }, + "can_change_website": { + "type": "boolean" + }, + "can_change_tracking_preferences": { + "type": "boolean" + }, + "user_api_keys": { + "type": [ + "string", + "null" + ] + }, + "user_passkeys": { + "type": "array" + }, + "sidebar_tags": { + "type": "array" + }, + "sidebar_category_ids": { + "type": "array" + }, + "display_sidebar_tags": { + "type": "boolean" + }, + "can_pick_theme_with_custom_homepage": { + "type": "boolean" + }, + "user_auth_tokens": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "client_ip": { + "type": "string" + }, + "location": { + "type": "string" + }, + "browser": { + "type": "string" + }, + "device": { + "type": "string" + }, + "os": { + "type": "string" + }, + "icon": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "seen_at": { + "type": "string" + }, + "is_active": { + "type": "boolean" + } + }, + "required": [ + "id", + "client_ip", + "location", + "browser", + "device", + "os", + "icon", + "created_at", + "seen_at", + "is_active" + ] + } + }, + "user_notification_schedule": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "day_0_start_time": { + "type": "integer" + }, + "day_0_end_time": { + "type": "integer" + }, + "day_1_start_time": { + "type": "integer" + }, + "day_1_end_time": { + "type": "integer" + }, + "day_2_start_time": { + "type": "integer" + }, + "day_2_end_time": { + "type": "integer" + }, + "day_3_start_time": { + "type": "integer" + }, + "day_3_end_time": { + "type": "integer" + }, + "day_4_start_time": { + "type": "integer" + }, + "day_4_end_time": { + "type": "integer" + }, + "day_5_start_time": { + "type": "integer" + }, + "day_5_end_time": { + "type": "integer" + }, + "day_6_start_time": { + "type": "integer" + }, + "day_6_end_time": { + "type": "integer" + } + }, + "required": [ + "enabled", + "day_0_start_time", + "day_0_end_time", + "day_1_start_time", + "day_1_end_time", + "day_2_start_time", + "day_2_end_time", + "day_3_start_time", + "day_3_end_time", + "day_4_start_time", + "day_4_end_time", + "day_5_start_time", + "day_5_end_time", + "day_6_start_time", + "day_6_end_time" + ] + }, + "use_logo_small_as_avatar": { + "type": "boolean" + }, + "featured_user_badge_ids": { + "type": "array", + "items": {} + }, + "invited_by": { + "type": [ + "string", + "null" + ] + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "automatic": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "display_name": { + "type": "string" + }, + "user_count": { + "type": "integer" + }, + "mentionable_level": { + "type": "integer" + }, + "messageable_level": { + "type": "integer" + }, + "visibility_level": { + "type": "integer" + }, + "primary_group": { + "type": "boolean" + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "grant_trust_level": { + "type": [ + "string", + "null" + ] + }, + "incoming_email": { + "type": [ + "string", + "null" + ] + }, + "has_messages": { + "type": "boolean" + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "bio_raw": { + "type": [ + "string", + "null" + ] + }, + "bio_cooked": { + "type": [ + "string", + "null" + ] + }, + "bio_excerpt": { + "type": [ + "string", + "null" + ] + }, + "public_admission": { + "type": "boolean" + }, + "public_exit": { + "type": "boolean" + }, + "allow_membership_requests": { + "type": "boolean" + }, + "full_name": { + "type": [ + "string", + "null" + ] + }, + "default_notification_level": { + "type": "integer" + }, + "membership_request_template": { + "type": [ + "string", + "null" + ] + }, + "members_visibility_level": { + "type": "integer" + }, + "can_see_members": { + "type": "boolean" + }, + "can_admin_group": { + "type": "boolean" + }, + "publish_read_state": { + "type": "boolean" + } + }, + "required": [ + "id", + "automatic", + "name", + "display_name", + "user_count", + "mentionable_level", + "messageable_level", + "visibility_level", + "primary_group", + "title", + "grant_trust_level", + "incoming_email", + "has_messages", + "flair_url", + "flair_bg_color", + "flair_color", + "bio_raw", + "bio_cooked", + "bio_excerpt", + "public_admission", + "public_exit", + "allow_membership_requests", + "full_name", + "default_notification_level", + "membership_request_template", + "members_visibility_level", + "can_see_members", + "can_admin_group", + "publish_read_state" + ] + } + }, + "group_users": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "group_id": { + "type": "integer" + }, + "user_id": { + "type": "integer" + }, + "notification_level": { + "type": "integer" + }, + "owner": { + "type": "boolean" + } + }, + "required": [ + "group_id", + "user_id", + "notification_level" + ] + } + }, + "user_option": { + "type": "object", + "additionalProperties": false, + "properties": { + "user_id": { + "type": "integer" + }, + "mailing_list_mode": { + "type": "boolean" + }, + "mailing_list_mode_frequency": { + "type": "integer" + }, + "email_digests": { + "type": "boolean" + }, + "email_level": { + "type": "integer" + }, + "email_messages_level": { + "type": "integer" + }, + "external_links_in_new_tab": { + "type": "boolean" + }, + "bookmark_auto_delete_preference": { + "type": "integer" + }, + "color_scheme_id": { + "type": [ + "string", + "null" + ] + }, + "dark_scheme_id": { + "type": [ + "string", + "null" + ] + }, + "dynamic_favicon": { + "type": "boolean" + }, + "enable_quoting": { + "type": "boolean" + }, + "enable_smart_lists": { + "type": "boolean" + }, + "enable_defer": { + "type": "boolean" + }, + "digest_after_minutes": { + "type": "integer" + }, + "automatically_unpin_topics": { + "type": "boolean" + }, + "auto_track_topics_after_msecs": { + "type": "integer" + }, + "notification_level_when_replying": { + "type": "integer" + }, + "new_topic_duration_minutes": { + "type": "integer" + }, + "email_previous_replies": { + "type": "integer" + }, + "email_in_reply_to": { + "type": "boolean" + }, + "like_notification_frequency": { + "type": "integer" + }, + "include_tl0_in_digests": { + "type": "boolean" + }, + "theme_ids": { + "type": "array", + "items": {} + }, + "theme_key_seq": { + "type": "integer" + }, + "allow_private_messages": { + "type": "boolean" + }, + "enable_allowed_pm_users": { + "type": "boolean" + }, + "homepage_id": { + "type": [ + "string", + "null" + ] + }, + "hide_profile_and_presence": { + "type": "boolean" + }, + "hide_profile": { + "type": "boolean" + }, + "hide_presence": { + "type": "boolean" + }, + "text_size": { + "type": "string" + }, + "text_size_seq": { + "type": "integer" + }, + "title_count_mode": { + "type": "string" + }, + "timezone": { + "type": [ + "string", + "null" + ] + }, + "skip_new_user_tips": { + "type": "boolean" + }, + "default_calendar": { + "type": "string" + }, + "oldest_search_log_date": { + "type": [ + "string", + "null" + ] + }, + "sidebar_link_to_filtered_list": { + "type": "boolean" + }, + "sidebar_show_count_of_new_items": { + "type": "boolean" + }, + "watched_precedence_over_muted": { + "type": [ + "boolean", + "null" + ] + }, + "seen_popups": { + "type": [ + "array", + "null" + ] + }, + "topics_unread_when_closed": { + "type": "boolean" + } + }, + "required": [ + "user_id", + "mailing_list_mode", + "mailing_list_mode_frequency", + "email_digests", + "email_level", + "email_messages_level", + "external_links_in_new_tab", + "color_scheme_id", + "dark_scheme_id", + "dynamic_favicon", + "enable_quoting", + "enable_smart_lists", + "enable_defer", + "digest_after_minutes", + "automatically_unpin_topics", + "auto_track_topics_after_msecs", + "notification_level_when_replying", + "new_topic_duration_minutes", + "email_previous_replies", + "email_in_reply_to", + "like_notification_frequency", + "include_tl0_in_digests", + "theme_ids", + "theme_key_seq", + "allow_private_messages", + "enable_allowed_pm_users", + "homepage_id", + "hide_profile_and_presence", + "hide_profile", + "hide_presence", + "text_size", + "text_size_seq", + "title_count_mode", + "timezone", + "skip_new_user_tips", + "topics_unread_when_closed" + ] + } + }, + "required": [ + "id", + "username", + "name", + "avatar_template", + "last_posted_at", + "last_seen_at", + "created_at", + "ignored", + "muted", + "can_ignore_user", + "can_mute_user", + "can_send_private_messages", + "can_send_private_message_to_user", + "trust_level", + "moderator", + "admin", + "title", + "badge_count", + "custom_fields", + "time_read", + "recent_time_read", + "primary_group_id", + "primary_group_name", + "flair_group_id", + "flair_name", + "flair_url", + "flair_bg_color", + "flair_color", + "featured_topic", + "staged", + "can_edit", + "can_edit_username", + "can_edit_email", + "can_edit_name", + "uploaded_avatar_id", + "has_title_badges", + "pending_count", + "profile_view_count", + "second_factor_enabled", + "can_upload_profile_header", + "can_upload_user_card_background", + "post_count", + "can_be_deleted", + "can_delete_all_posts", + "locale", + "muted_category_ids", + "regular_category_ids", + "watched_tags", + "watching_first_post_tags", + "tracked_tags", + "muted_tags", + "tracked_category_ids", + "watched_category_ids", + "watched_first_post_category_ids", + "system_avatar_upload_id", + "system_avatar_template", + "muted_usernames", + "ignored_usernames", + "allowed_pm_usernames", + "mailing_list_posts_per_day", + "can_change_bio", + "can_change_location", + "can_change_website", + "can_change_tracking_preferences", + "user_api_keys", + "user_auth_tokens", + "user_notification_schedule", + "use_logo_small_as_avatar", + "featured_user_badge_ids", + "invited_by", + "groups", + "group_users", + "user_option" + ] + } + }, + "required": [ + "user_badges", + "user" + ] + } + } + } + } + } + }, + "put": { + "summary": "Update a user", + "tags": [ + "Users" + ], + "operationId": "updateUser", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "username", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "user updated", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "success": { + "type": "string" + }, + "user": { + "type": "object" + } + }, + "required": [ + "success", + "user" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "external_ids": { + "type": "object" + } + } + } + } + } + } + } + }, + "/u/by-external/{external_id}.json": { + "get": { + "summary": "Get a user by external_id", + "tags": [ + "Users" + ], + "operationId": "getUserExternalId", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "external_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "user response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "user_badges": { + "type": "array", + "items": {} + }, + "user": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": "string" + }, + "avatar_template": { + "type": "string" + }, + "last_posted_at": { + "type": [ + "string", + "null" + ] + }, + "last_seen_at": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string" + }, + "ignored": { + "type": "boolean" + }, + "muted": { + "type": "boolean" + }, + "can_ignore_user": { + "type": "boolean" + }, + "can_ignore_users": { + "type": "boolean" + }, + "can_mute_user": { + "type": "boolean" + }, + "can_mute_users": { + "type": "boolean" + }, + "can_send_private_messages": { + "type": "boolean" + }, + "can_send_private_message_to_user": { + "type": "boolean" + }, + "trust_level": { + "type": "integer" + }, + "moderator": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "badge_count": { + "type": "integer" + }, + "second_factor_backup_enabled": { + "type": "boolean" + }, + "user_fields": { + "type": "object", + "additionalProperties": false, + "properties": { + "1": { + "type": [ + "string", + "null" + ] + }, + "2": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "1", + "2" + ] + }, + "custom_fields": { + "type": "object", + "additionalProperties": false, + "properties": { + "first_name": { + "type": [ + "string", + "null" + ] + } + } + }, + "time_read": { + "type": "integer" + }, + "recent_time_read": { + "type": "integer" + }, + "primary_group_id": { + "type": [ + "integer", + "null" + ] + }, + "primary_group_name": { + "type": [ + "string", + "null" + ] + }, + "flair_group_id": { + "type": [ + "integer", + "null" + ] + }, + "flair_name": { + "type": [ + "string", + "null" + ] + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "featured_topic": { + "type": [ + "string", + "null" + ] + }, + "staged": { + "type": "boolean" + }, + "can_edit": { + "type": "boolean" + }, + "can_edit_username": { + "type": "boolean" + }, + "can_edit_email": { + "type": "boolean" + }, + "can_edit_name": { + "type": "boolean" + }, + "uploaded_avatar_id": { + "type": [ + "integer", + "null" + ] + }, + "has_title_badges": { + "type": "boolean" + }, + "pending_count": { + "type": "integer" + }, + "pending_posts_count": { + "type": "integer" + }, + "profile_view_count": { + "type": "integer" + }, + "second_factor_enabled": { + "type": "boolean" + }, + "can_upload_profile_header": { + "type": "boolean" + }, + "can_upload_user_card_background": { + "type": "boolean" + }, + "post_count": { + "type": "integer" + }, + "can_be_deleted": { + "type": "boolean" + }, + "can_delete_all_posts": { + "type": "boolean" + }, + "locale": { + "type": [ + "string", + "null" + ] + }, + "muted_category_ids": { + "type": "array", + "items": {} + }, + "regular_category_ids": { + "type": "array", + "items": {} + }, + "watched_tags": { + "type": "array", + "items": {} + }, + "watching_first_post_tags": { + "type": "array", + "items": {} + }, + "tracked_tags": { + "type": "array", + "items": {} + }, + "muted_tags": { + "type": "array", + "items": {} + }, + "tracked_category_ids": { + "type": "array", + "items": {} + }, + "watched_category_ids": { + "type": "array", + "items": {} + }, + "watched_first_post_category_ids": { + "type": "array", + "items": {} + }, + "system_avatar_upload_id": { + "type": [ + "string", + "null" + ] + }, + "system_avatar_template": { + "type": "string" + }, + "muted_usernames": { + "type": "array", + "items": {} + }, + "ignored_usernames": { + "type": "array", + "items": {} + }, + "allowed_pm_usernames": { + "type": "array", + "items": {} + }, + "mailing_list_posts_per_day": { + "type": "integer" + }, + "can_change_bio": { + "type": "boolean" + }, + "can_change_location": { + "type": "boolean" + }, + "can_change_website": { + "type": "boolean" + }, + "can_change_tracking_preferences": { + "type": "boolean" + }, + "user_api_keys": { + "type": [ + "string", + "null" + ] + }, + "user_passkeys": { + "type": "array" + }, + "sidebar_tags": { + "type": "array" + }, + "sidebar_category_ids": { + "type": "array" + }, + "display_sidebar_tags": { + "type": "boolean" + }, + "can_pick_theme_with_custom_homepage": { + "type": "boolean" + }, + "user_auth_tokens": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "client_ip": { + "type": "string" + }, + "location": { + "type": "string" + }, + "browser": { + "type": "string" + }, + "device": { + "type": "string" + }, + "os": { + "type": "string" + }, + "icon": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "seen_at": { + "type": "string" + }, + "is_active": { + "type": "boolean" + } + }, + "required": [ + "id", + "client_ip", + "location", + "browser", + "device", + "os", + "icon", + "created_at", + "seen_at", + "is_active" + ] + } + }, + "user_notification_schedule": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "day_0_start_time": { + "type": "integer" + }, + "day_0_end_time": { + "type": "integer" + }, + "day_1_start_time": { + "type": "integer" + }, + "day_1_end_time": { + "type": "integer" + }, + "day_2_start_time": { + "type": "integer" + }, + "day_2_end_time": { + "type": "integer" + }, + "day_3_start_time": { + "type": "integer" + }, + "day_3_end_time": { + "type": "integer" + }, + "day_4_start_time": { + "type": "integer" + }, + "day_4_end_time": { + "type": "integer" + }, + "day_5_start_time": { + "type": "integer" + }, + "day_5_end_time": { + "type": "integer" + }, + "day_6_start_time": { + "type": "integer" + }, + "day_6_end_time": { + "type": "integer" + } + }, + "required": [ + "enabled", + "day_0_start_time", + "day_0_end_time", + "day_1_start_time", + "day_1_end_time", + "day_2_start_time", + "day_2_end_time", + "day_3_start_time", + "day_3_end_time", + "day_4_start_time", + "day_4_end_time", + "day_5_start_time", + "day_5_end_time", + "day_6_start_time", + "day_6_end_time" + ] + }, + "use_logo_small_as_avatar": { + "type": "boolean" + }, + "featured_user_badge_ids": { + "type": "array", + "items": {} + }, + "invited_by": { + "type": [ + "string", + "null" + ] + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "automatic": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "display_name": { + "type": "string" + }, + "user_count": { + "type": "integer" + }, + "mentionable_level": { + "type": "integer" + }, + "messageable_level": { + "type": "integer" + }, + "visibility_level": { + "type": "integer" + }, + "primary_group": { + "type": "boolean" + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "grant_trust_level": { + "type": [ + "string", + "null" + ] + }, + "incoming_email": { + "type": [ + "string", + "null" + ] + }, + "has_messages": { + "type": "boolean" + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "bio_raw": { + "type": [ + "string", + "null" + ] + }, + "bio_cooked": { + "type": [ + "string", + "null" + ] + }, + "bio_excerpt": { + "type": [ + "string", + "null" + ] + }, + "public_admission": { + "type": "boolean" + }, + "public_exit": { + "type": "boolean" + }, + "allow_membership_requests": { + "type": "boolean" + }, + "full_name": { + "type": [ + "string", + "null" + ] + }, + "default_notification_level": { + "type": "integer" + }, + "membership_request_template": { + "type": [ + "string", + "null" + ] + }, + "members_visibility_level": { + "type": "integer" + }, + "can_see_members": { + "type": "boolean" + }, + "can_admin_group": { + "type": "boolean" + }, + "publish_read_state": { + "type": "boolean" + } + }, + "required": [ + "id", + "automatic", + "name", + "display_name", + "user_count", + "mentionable_level", + "messageable_level", + "visibility_level", + "primary_group", + "title", + "grant_trust_level", + "incoming_email", + "has_messages", + "flair_url", + "flair_bg_color", + "flair_color", + "bio_raw", + "bio_cooked", + "bio_excerpt", + "public_admission", + "public_exit", + "allow_membership_requests", + "full_name", + "default_notification_level", + "membership_request_template", + "members_visibility_level", + "can_see_members", + "can_admin_group", + "publish_read_state" + ] + } + }, + "group_users": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "group_id": { + "type": "integer" + }, + "user_id": { + "type": "integer" + }, + "notification_level": { + "type": "integer" + }, + "owner": { + "type": "boolean" + } + }, + "required": [ + "group_id", + "user_id", + "notification_level" + ] + } + }, + "user_option": { + "type": "object", + "additionalProperties": false, + "properties": { + "user_id": { + "type": "integer" + }, + "mailing_list_mode": { + "type": "boolean" + }, + "mailing_list_mode_frequency": { + "type": "integer" + }, + "email_digests": { + "type": "boolean" + }, + "email_level": { + "type": "integer" + }, + "email_messages_level": { + "type": "integer" + }, + "external_links_in_new_tab": { + "type": "boolean" + }, + "bookmark_auto_delete_preference": { + "type": "integer" + }, + "color_scheme_id": { + "type": [ + "string", + "null" + ] + }, + "dark_scheme_id": { + "type": [ + "string", + "null" + ] + }, + "dynamic_favicon": { + "type": "boolean" + }, + "enable_quoting": { + "type": "boolean" + }, + "enable_smart_lists": { + "type": "boolean" + }, + "enable_defer": { + "type": "boolean" + }, + "digest_after_minutes": { + "type": "integer" + }, + "automatically_unpin_topics": { + "type": "boolean" + }, + "auto_track_topics_after_msecs": { + "type": "integer" + }, + "notification_level_when_replying": { + "type": "integer" + }, + "new_topic_duration_minutes": { + "type": "integer" + }, + "email_previous_replies": { + "type": "integer" + }, + "email_in_reply_to": { + "type": "boolean" + }, + "like_notification_frequency": { + "type": "integer" + }, + "include_tl0_in_digests": { + "type": "boolean" + }, + "theme_ids": { + "type": "array", + "items": {} + }, + "theme_key_seq": { + "type": "integer" + }, + "allow_private_messages": { + "type": "boolean" + }, + "enable_allowed_pm_users": { + "type": "boolean" + }, + "homepage_id": { + "type": [ + "string", + "null" + ] + }, + "hide_profile_and_presence": { + "type": "boolean" + }, + "hide_profile": { + "type": "boolean" + }, + "hide_presence": { + "type": "boolean" + }, + "text_size": { + "type": "string" + }, + "text_size_seq": { + "type": "integer" + }, + "title_count_mode": { + "type": "string" + }, + "timezone": { + "type": [ + "string", + "null" + ] + }, + "skip_new_user_tips": { + "type": "boolean" + }, + "default_calendar": { + "type": "string" + }, + "oldest_search_log_date": { + "type": [ + "string", + "null" + ] + }, + "sidebar_link_to_filtered_list": { + "type": "boolean" + }, + "sidebar_show_count_of_new_items": { + "type": "boolean" + }, + "watched_precedence_over_muted": { + "type": [ + "boolean", + "null" + ] + }, + "seen_popups": { + "type": [ + "array", + "null" + ] + }, + "topics_unread_when_closed": { + "type": "boolean" + } + }, + "required": [ + "user_id", + "mailing_list_mode", + "mailing_list_mode_frequency", + "email_digests", + "email_level", + "email_messages_level", + "external_links_in_new_tab", + "color_scheme_id", + "dark_scheme_id", + "dynamic_favicon", + "enable_quoting", + "enable_smart_lists", + "enable_defer", + "digest_after_minutes", + "automatically_unpin_topics", + "auto_track_topics_after_msecs", + "notification_level_when_replying", + "new_topic_duration_minutes", + "email_previous_replies", + "email_in_reply_to", + "like_notification_frequency", + "include_tl0_in_digests", + "theme_ids", + "theme_key_seq", + "allow_private_messages", + "enable_allowed_pm_users", + "homepage_id", + "hide_profile_and_presence", + "hide_profile", + "hide_presence", + "text_size", + "text_size_seq", + "title_count_mode", + "timezone", + "skip_new_user_tips", + "topics_unread_when_closed" + ] + } + }, + "required": [ + "id", + "username", + "name", + "avatar_template", + "last_posted_at", + "last_seen_at", + "created_at", + "ignored", + "muted", + "can_ignore_user", + "can_mute_user", + "can_send_private_messages", + "can_send_private_message_to_user", + "trust_level", + "moderator", + "admin", + "title", + "badge_count", + "custom_fields", + "time_read", + "recent_time_read", + "primary_group_id", + "primary_group_name", + "flair_group_id", + "flair_name", + "flair_url", + "flair_bg_color", + "flair_color", + "featured_topic", + "staged", + "can_edit", + "can_edit_username", + "can_edit_email", + "can_edit_name", + "uploaded_avatar_id", + "has_title_badges", + "pending_count", + "profile_view_count", + "second_factor_enabled", + "can_upload_profile_header", + "can_upload_user_card_background", + "post_count", + "can_be_deleted", + "can_delete_all_posts", + "locale", + "muted_category_ids", + "regular_category_ids", + "watched_tags", + "watching_first_post_tags", + "tracked_tags", + "muted_tags", + "tracked_category_ids", + "watched_category_ids", + "watched_first_post_category_ids", + "system_avatar_upload_id", + "system_avatar_template", + "muted_usernames", + "ignored_usernames", + "allowed_pm_usernames", + "mailing_list_posts_per_day", + "can_change_bio", + "can_change_location", + "can_change_website", + "can_change_tracking_preferences", + "user_api_keys", + "user_auth_tokens", + "user_notification_schedule", + "use_logo_small_as_avatar", + "featured_user_badge_ids", + "invited_by", + "groups", + "group_users", + "user_option" + ] + } + }, + "required": [ + "user_badges", + "user" + ] + } + } + } + } + } + } + }, + "/u/by-external/{provider}/{external_id}.json": { + "get": { + "summary": "Get a user by identity provider external ID", + "tags": [ + "Users" + ], + "operationId": "getUserIdentiyProviderExternalId", + "parameters": [ + { + "name": "Api-Key", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Api-Username", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "provider", + "in": "path", + "required": true, + "description": "Authentication provider name. Can be found in the provider callback\nURL: `/auth/{provider}/callback`", + "schema": { + "type": "string" + } + }, + { + "name": "external_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "user response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "user_badges": { + "type": "array", + "items": {} + }, + "user": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": "string" + }, + "avatar_template": { + "type": "string" + }, + "last_posted_at": { + "type": [ + "string", + "null" + ] + }, + "last_seen_at": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string" + }, + "ignored": { + "type": "boolean" + }, + "muted": { + "type": "boolean" + }, + "can_ignore_user": { + "type": "boolean" + }, + "can_ignore_users": { + "type": "boolean" + }, + "can_mute_user": { + "type": "boolean" + }, + "can_mute_users": { + "type": "boolean" + }, + "can_send_private_messages": { + "type": "boolean" + }, + "can_send_private_message_to_user": { + "type": "boolean" + }, + "trust_level": { + "type": "integer" + }, + "moderator": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "badge_count": { + "type": "integer" + }, + "second_factor_backup_enabled": { + "type": "boolean" + }, + "user_fields": { + "type": "object", + "additionalProperties": false, + "properties": { + "1": { + "type": [ + "string", + "null" + ] + }, + "2": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "1", + "2" + ] + }, + "custom_fields": { + "type": "object", + "additionalProperties": false, + "properties": { + "first_name": { + "type": [ + "string", + "null" + ] + } + } + }, + "time_read": { + "type": "integer" + }, + "recent_time_read": { + "type": "integer" + }, + "primary_group_id": { + "type": [ + "integer", + "null" + ] + }, + "primary_group_name": { + "type": [ + "string", + "null" + ] + }, + "flair_group_id": { + "type": [ + "integer", + "null" + ] + }, + "flair_name": { + "type": [ + "string", + "null" + ] + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "featured_topic": { + "type": [ + "string", + "null" + ] + }, + "staged": { + "type": "boolean" + }, + "can_edit": { + "type": "boolean" + }, + "can_edit_username": { + "type": "boolean" + }, + "can_edit_email": { + "type": "boolean" + }, + "can_edit_name": { + "type": "boolean" + }, + "uploaded_avatar_id": { + "type": [ + "integer", + "null" + ] + }, + "has_title_badges": { + "type": "boolean" + }, + "pending_count": { + "type": "integer" + }, + "pending_posts_count": { + "type": "integer" + }, + "profile_view_count": { + "type": "integer" + }, + "second_factor_enabled": { + "type": "boolean" + }, + "can_upload_profile_header": { + "type": "boolean" + }, + "can_upload_user_card_background": { + "type": "boolean" + }, + "post_count": { + "type": "integer" + }, + "can_be_deleted": { + "type": "boolean" + }, + "can_delete_all_posts": { + "type": "boolean" + }, + "locale": { + "type": [ + "string", + "null" + ] + }, + "muted_category_ids": { + "type": "array", + "items": {} + }, + "regular_category_ids": { + "type": "array", + "items": {} + }, + "watched_tags": { + "type": "array", + "items": {} + }, + "watching_first_post_tags": { + "type": "array", + "items": {} + }, + "tracked_tags": { + "type": "array", + "items": {} + }, + "muted_tags": { + "type": "array", + "items": {} + }, + "tracked_category_ids": { + "type": "array", + "items": {} + }, + "watched_category_ids": { + "type": "array", + "items": {} + }, + "watched_first_post_category_ids": { + "type": "array", + "items": {} + }, + "system_avatar_upload_id": { + "type": [ + "string", + "null" + ] + }, + "system_avatar_template": { + "type": "string" + }, + "muted_usernames": { + "type": "array", + "items": {} + }, + "ignored_usernames": { + "type": "array", + "items": {} + }, + "allowed_pm_usernames": { + "type": "array", + "items": {} + }, + "mailing_list_posts_per_day": { + "type": "integer" + }, + "can_change_bio": { + "type": "boolean" + }, + "can_change_location": { + "type": "boolean" + }, + "can_change_website": { + "type": "boolean" + }, + "can_change_tracking_preferences": { + "type": "boolean" + }, + "user_api_keys": { + "type": [ + "string", + "null" + ] + }, + "user_passkeys": { + "type": "array" + }, + "sidebar_tags": { + "type": "array" + }, + "sidebar_category_ids": { + "type": "array" + }, + "display_sidebar_tags": { + "type": "boolean" + }, + "can_pick_theme_with_custom_homepage": { + "type": "boolean" + }, + "user_auth_tokens": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "client_ip": { + "type": "string" + }, + "location": { + "type": "string" + }, + "browser": { + "type": "string" + }, + "device": { + "type": "string" + }, + "os": { + "type": "string" + }, + "icon": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "seen_at": { + "type": "string" + }, + "is_active": { + "type": "boolean" + } + }, + "required": [ + "id", + "client_ip", + "location", + "browser", + "device", + "os", + "icon", + "created_at", + "seen_at", + "is_active" + ] + } + }, + "user_notification_schedule": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "day_0_start_time": { + "type": "integer" + }, + "day_0_end_time": { + "type": "integer" + }, + "day_1_start_time": { + "type": "integer" + }, + "day_1_end_time": { + "type": "integer" + }, + "day_2_start_time": { + "type": "integer" + }, + "day_2_end_time": { + "type": "integer" + }, + "day_3_start_time": { + "type": "integer" + }, + "day_3_end_time": { + "type": "integer" + }, + "day_4_start_time": { + "type": "integer" + }, + "day_4_end_time": { + "type": "integer" + }, + "day_5_start_time": { + "type": "integer" + }, + "day_5_end_time": { + "type": "integer" + }, + "day_6_start_time": { + "type": "integer" + }, + "day_6_end_time": { + "type": "integer" + } + }, + "required": [ + "enabled", + "day_0_start_time", + "day_0_end_time", + "day_1_start_time", + "day_1_end_time", + "day_2_start_time", + "day_2_end_time", + "day_3_start_time", + "day_3_end_time", + "day_4_start_time", + "day_4_end_time", + "day_5_start_time", + "day_5_end_time", + "day_6_start_time", + "day_6_end_time" + ] + }, + "use_logo_small_as_avatar": { + "type": "boolean" + }, + "featured_user_badge_ids": { + "type": "array", + "items": {} + }, + "invited_by": { + "type": [ + "string", + "null" + ] + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "automatic": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "display_name": { + "type": "string" + }, + "user_count": { + "type": "integer" + }, + "mentionable_level": { + "type": "integer" + }, + "messageable_level": { + "type": "integer" + }, + "visibility_level": { + "type": "integer" + }, + "primary_group": { + "type": "boolean" + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "grant_trust_level": { + "type": [ + "string", + "null" + ] + }, + "incoming_email": { + "type": [ + "string", + "null" + ] + }, + "has_messages": { + "type": "boolean" + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "bio_raw": { + "type": [ + "string", + "null" + ] + }, + "bio_cooked": { + "type": [ + "string", + "null" + ] + }, + "bio_excerpt": { + "type": [ + "string", + "null" + ] + }, + "public_admission": { + "type": "boolean" + }, + "public_exit": { + "type": "boolean" + }, + "allow_membership_requests": { + "type": "boolean" + }, + "full_name": { + "type": [ + "string", + "null" + ] + }, + "default_notification_level": { + "type": "integer" + }, + "membership_request_template": { + "type": [ + "string", + "null" + ] + }, + "members_visibility_level": { + "type": "integer" + }, + "can_see_members": { + "type": "boolean" + }, + "can_admin_group": { + "type": "boolean" + }, + "publish_read_state": { + "type": "boolean" + } + }, + "required": [ + "id", + "automatic", + "name", + "display_name", + "user_count", + "mentionable_level", + "messageable_level", + "visibility_level", + "primary_group", + "title", + "grant_trust_level", + "incoming_email", + "has_messages", + "flair_url", + "flair_bg_color", + "flair_color", + "bio_raw", + "bio_cooked", + "bio_excerpt", + "public_admission", + "public_exit", + "allow_membership_requests", + "full_name", + "default_notification_level", + "membership_request_template", + "members_visibility_level", + "can_see_members", + "can_admin_group", + "publish_read_state" + ] + } + }, + "group_users": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "group_id": { + "type": "integer" + }, + "user_id": { + "type": "integer" + }, + "notification_level": { + "type": "integer" + }, + "owner": { + "type": "boolean" + } + }, + "required": [ + "group_id", + "user_id", + "notification_level" + ] + } + }, + "user_option": { + "type": "object", + "additionalProperties": false, + "properties": { + "user_id": { + "type": "integer" + }, + "mailing_list_mode": { + "type": "boolean" + }, + "mailing_list_mode_frequency": { + "type": "integer" + }, + "email_digests": { + "type": "boolean" + }, + "email_level": { + "type": "integer" + }, + "email_messages_level": { + "type": "integer" + }, + "external_links_in_new_tab": { + "type": "boolean" + }, + "bookmark_auto_delete_preference": { + "type": "integer" + }, + "color_scheme_id": { + "type": [ + "string", + "null" + ] + }, + "dark_scheme_id": { + "type": [ + "string", + "null" + ] + }, + "dynamic_favicon": { + "type": "boolean" + }, + "enable_quoting": { + "type": "boolean" + }, + "enable_smart_lists": { + "type": "boolean" + }, + "enable_defer": { + "type": "boolean" + }, + "digest_after_minutes": { + "type": "integer" + }, + "automatically_unpin_topics": { + "type": "boolean" + }, + "auto_track_topics_after_msecs": { + "type": "integer" + }, + "notification_level_when_replying": { + "type": "integer" + }, + "new_topic_duration_minutes": { + "type": "integer" + }, + "email_previous_replies": { + "type": "integer" + }, + "email_in_reply_to": { + "type": "boolean" + }, + "like_notification_frequency": { + "type": "integer" + }, + "include_tl0_in_digests": { + "type": "boolean" + }, + "theme_ids": { + "type": "array", + "items": {} + }, + "theme_key_seq": { + "type": "integer" + }, + "allow_private_messages": { + "type": "boolean" + }, + "enable_allowed_pm_users": { + "type": "boolean" + }, + "homepage_id": { + "type": [ + "string", + "null" + ] + }, + "hide_profile_and_presence": { + "type": "boolean" + }, + "hide_profile": { + "type": "boolean" + }, + "hide_presence": { + "type": "boolean" + }, + "text_size": { + "type": "string" + }, + "text_size_seq": { + "type": "integer" + }, + "title_count_mode": { + "type": "string" + }, + "timezone": { + "type": [ + "string", + "null" + ] + }, + "skip_new_user_tips": { + "type": "boolean" + }, + "default_calendar": { + "type": "string" + }, + "oldest_search_log_date": { + "type": [ + "string", + "null" + ] + }, + "sidebar_link_to_filtered_list": { + "type": "boolean" + }, + "sidebar_show_count_of_new_items": { + "type": "boolean" + }, + "watched_precedence_over_muted": { + "type": [ + "boolean", + "null" + ] + }, + "seen_popups": { + "type": [ + "array", + "null" + ] + }, + "topics_unread_when_closed": { + "type": "boolean" + } + }, + "required": [ + "user_id", + "mailing_list_mode", + "mailing_list_mode_frequency", + "email_digests", + "email_level", + "email_messages_level", + "external_links_in_new_tab", + "color_scheme_id", + "dark_scheme_id", + "dynamic_favicon", + "enable_quoting", + "enable_smart_lists", + "enable_defer", + "digest_after_minutes", + "automatically_unpin_topics", + "auto_track_topics_after_msecs", + "notification_level_when_replying", + "new_topic_duration_minutes", + "email_previous_replies", + "email_in_reply_to", + "like_notification_frequency", + "include_tl0_in_digests", + "theme_ids", + "theme_key_seq", + "allow_private_messages", + "enable_allowed_pm_users", + "homepage_id", + "hide_profile_and_presence", + "hide_profile", + "hide_presence", + "text_size", + "text_size_seq", + "title_count_mode", + "timezone", + "skip_new_user_tips", + "topics_unread_when_closed" + ] + } + }, + "required": [ + "id", + "username", + "name", + "avatar_template", + "last_posted_at", + "last_seen_at", + "created_at", + "ignored", + "muted", + "can_ignore_user", + "can_mute_user", + "can_send_private_messages", + "can_send_private_message_to_user", + "trust_level", + "moderator", + "admin", + "title", + "badge_count", + "custom_fields", + "time_read", + "recent_time_read", + "primary_group_id", + "primary_group_name", + "flair_group_id", + "flair_name", + "flair_url", + "flair_bg_color", + "flair_color", + "featured_topic", + "staged", + "can_edit", + "can_edit_username", + "can_edit_email", + "can_edit_name", + "uploaded_avatar_id", + "has_title_badges", + "pending_count", + "profile_view_count", + "second_factor_enabled", + "can_upload_profile_header", + "can_upload_user_card_background", + "post_count", + "can_be_deleted", + "can_delete_all_posts", + "locale", + "muted_category_ids", + "regular_category_ids", + "watched_tags", + "watching_first_post_tags", + "tracked_tags", + "muted_tags", + "tracked_category_ids", + "watched_category_ids", + "watched_first_post_category_ids", + "system_avatar_upload_id", + "system_avatar_template", + "muted_usernames", + "ignored_usernames", + "allowed_pm_usernames", + "mailing_list_posts_per_day", + "can_change_bio", + "can_change_location", + "can_change_website", + "can_change_tracking_preferences", + "user_api_keys", + "user_auth_tokens", + "user_notification_schedule", + "use_logo_small_as_avatar", + "featured_user_badge_ids", + "invited_by", + "groups", + "group_users", + "user_option" + ] + } + }, + "required": [ + "user_badges", + "user" + ] + } + } + } + } + } + } + }, + "/u/{username}/preferences/avatar/pick.json": { + "put": { + "summary": "Update avatar", + "tags": [ + "Users" + ], + "operationId": "updateAvatar", + "parameters": [ + { + "name": "username", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "avatar updated", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "success": { + "type": "string", + "example": "OK" + } + }, + "required": [ + "success" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "upload_id": { + "type": "integer" + }, + "type": { + "type": "string", + "enum": [ + "uploaded", + "custom", + "gravatar", + "system" + ] + } + }, + "required": [ + "upload_id", + "type" + ] + } + } + } + } + } + }, + "/u/{username}/preferences/email.json": { + "put": { + "summary": "Update email", + "tags": [ + "Users" + ], + "operationId": "updateEmail", + "parameters": [ + { + "name": "username", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "email updated" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "email": { + "type": "string", + "format": "email" + } + }, + "required": [ + "email" + ] + } + } + } + } + } + }, + "/u/{username}/preferences/username.json": { + "put": { + "summary": "Update username", + "tags": [ + "Users" + ], + "operationId": "updateUsername", + "parameters": [ + { + "name": "username", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "username updated" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "new_username": { + "type": "string" + } + }, + "required": [ + "new_username" + ] + } + } + } + } + } + }, + "/directory_items.json": { + "get": { + "summary": "Get a public list of users", + "tags": [ + "Users" + ], + "operationId": "listUsersPublic", + "parameters": [ + { + "name": "period", + "in": "query", + "schema": { + "type": "string", + "enum": [ + "daily", + "weekly", + "monthly", + "quarterly", + "yearly", + "all" + ] + }, + "required": true + }, + { + "name": "order", + "in": "query", + "schema": { + "type": "string", + "enum": [ + "likes_received", + "likes_given", + "topic_count", + "post_count", + "topics_entered", + "posts_read", + "days_visited" + ] + }, + "required": true + }, + { + "name": "asc", + "in": "query", + "schema": { + "type": "string", + "enum": [ + "true" + ] + } + }, + { + "name": "page", + "in": "query", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "directory items response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "directory_items": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "likes_received": { + "type": "integer" + }, + "likes_given": { + "type": "integer" + }, + "topics_entered": { + "type": "integer" + }, + "topic_count": { + "type": "integer" + }, + "post_count": { + "type": "integer" + }, + "posts_read": { + "type": "integer" + }, + "days_visited": { + "type": "integer" + }, + "user": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "avatar_template": { + "type": "string" + }, + "title": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "username", + "name", + "avatar_template", + "title" + ] + } + }, + "required": [ + "id", + "likes_received", + "likes_given", + "topics_entered", + "topic_count", + "post_count", + "posts_read", + "days_visited", + "user" + ] + } + }, + "meta": { + "type": "object", + "additionalProperties": false, + "properties": { + "last_updated_at": { + "type": [ + "string", + "null" + ] + }, + "total_rows_directory_items": { + "type": "integer" + }, + "load_more_directory_items": { + "type": "string" + } + }, + "required": [ + "last_updated_at", + "total_rows_directory_items", + "load_more_directory_items" + ] + } + }, + "required": [ + "directory_items", + "meta" + ] + } + } + } + } + } + } + }, + "/admin/users/{id}.json": { + "get": { + "summary": "Get a user by id", + "tags": [ + "Users", + "Admin" + ], + "operationId": "adminGetUser", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "avatar_template": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + }, + "last_seen_at": { + "type": [ + "string", + "null" + ] + }, + "last_emailed_at": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string" + }, + "last_seen_age": { + "type": [ + "number", + "null" + ] + }, + "last_emailed_age": { + "type": [ + "number", + "null" + ] + }, + "created_at_age": { + "type": [ + "number", + "null" + ] + }, + "trust_level": { + "type": "integer" + }, + "manual_locked_trust_level": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "time_read": { + "type": "integer" + }, + "staged": { + "type": "boolean" + }, + "days_visited": { + "type": "integer" + }, + "posts_read_count": { + "type": "integer" + }, + "topics_entered": { + "type": "integer" + }, + "post_count": { + "type": "integer" + }, + "associated_accounts": { + "type": "array", + "items": {} + }, + "can_send_activation_email": { + "type": "boolean" + }, + "can_activate": { + "type": "boolean" + }, + "can_deactivate": { + "type": "boolean" + }, + "ip_address": { + "type": "string" + }, + "registration_ip_address": { + "type": [ + "string", + "null" + ] + }, + "can_grant_admin": { + "type": "boolean" + }, + "can_revoke_admin": { + "type": "boolean" + }, + "can_grant_moderation": { + "type": "boolean" + }, + "can_revoke_moderation": { + "type": "boolean" + }, + "can_impersonate": { + "type": "boolean" + }, + "like_count": { + "type": "integer" + }, + "like_given_count": { + "type": "integer" + }, + "topic_count": { + "type": "integer" + }, + "flags_given_count": { + "type": "integer" + }, + "flags_received_count": { + "type": "integer" + }, + "private_topics_count": { + "type": "integer" + }, + "can_delete_all_posts": { + "type": "boolean" + }, + "can_be_deleted": { + "type": "boolean" + }, + "can_be_anonymized": { + "type": "boolean" + }, + "can_be_merged": { + "type": "boolean" + }, + "full_suspend_reason": { + "type": [ + "string", + "null" + ] + }, + "latest_export": { + "type": [ + "object", + "null" + ] + }, + "silence_reason": { + "type": [ + "string", + "null" + ] + }, + "post_edits_count": { + "type": [ + "integer", + "null" + ] + }, + "primary_group_id": { + "type": [ + "integer", + "null" + ] + }, + "badge_count": { + "type": "integer" + }, + "warnings_received_count": { + "type": "integer" + }, + "bounce_score": { + "type": [ + "integer", + "null" + ] + }, + "reset_bounce_score_after": { + "type": [ + "string", + "null" + ] + }, + "can_view_action_logs": { + "type": "boolean" + }, + "can_disable_second_factor": { + "type": "boolean" + }, + "can_delete_sso_record": { + "type": "boolean" + }, + "api_key_count": { + "type": "integer" + }, + "similar_users_count": { + "type": "integer" + }, + "single_sign_on_record": { + "type": [ + "string", + "null" + ] + }, + "approved_by": { + "type": [ + "object", + "null" + ], + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": "string" + }, + "avatar_template": { + "type": "string" + } + }, + "required": [ + "id", + "username", + "name", + "avatar_template" + ] + }, + "suspended_by": { + "type": [ + "string", + "null" + ] + }, + "silenced_by": { + "type": [ + "string", + "null" + ] + }, + "penalty_counts": { + "type": "object", + "additionalProperties": false, + "properties": { + "silenced": { + "type": "integer" + }, + "suspended": { + "type": "integer" + } + }, + "required": [ + "silenced", + "suspended" + ] + }, + "next_penalty": { + "type": "string" + }, + "tl3_requirements": { + "type": "object", + "additionalProperties": false, + "properties": { + "time_period": { + "type": "integer" + }, + "requirements_met": { + "type": "boolean" + }, + "requirements_lost": { + "type": "boolean" + }, + "trust_level_locked": { + "type": "boolean" + }, + "on_grace_period": { + "type": "boolean" + }, + "days_visited": { + "type": "integer" + }, + "min_days_visited": { + "type": "integer" + }, + "num_topics_replied_to": { + "type": "integer" + }, + "min_topics_replied_to": { + "type": "integer" + }, + "topics_viewed": { + "type": "integer" + }, + "min_topics_viewed": { + "type": "integer" + }, + "posts_read": { + "type": "integer" + }, + "min_posts_read": { + "type": "integer" + }, + "topics_viewed_all_time": { + "type": "integer" + }, + "min_topics_viewed_all_time": { + "type": "integer" + }, + "posts_read_all_time": { + "type": "integer" + }, + "min_posts_read_all_time": { + "type": "integer" + }, + "num_flagged_posts": { + "type": "integer" + }, + "max_flagged_posts": { + "type": "integer" + }, + "num_flagged_by_users": { + "type": "integer" + }, + "max_flagged_by_users": { + "type": "integer" + }, + "num_likes_given": { + "type": "integer" + }, + "min_likes_given": { + "type": "integer" + }, + "num_likes_received": { + "type": "integer" + }, + "min_likes_received": { + "type": "integer" + }, + "num_likes_received_days": { + "type": "integer" + }, + "min_likes_received_days": { + "type": "integer" + }, + "num_likes_received_users": { + "type": "integer" + }, + "min_likes_received_users": { + "type": "integer" + }, + "penalty_counts": { + "type": "object", + "additionalProperties": false, + "properties": { + "silenced": { + "type": "integer" + }, + "suspended": { + "type": "integer" + }, + "total": { + "type": "integer" + } + }, + "required": [ + "silenced", + "suspended", + "total" + ] + } + }, + "required": [ + "time_period", + "requirements_met", + "requirements_lost", + "trust_level_locked", + "on_grace_period", + "days_visited", + "min_days_visited", + "num_topics_replied_to", + "min_topics_replied_to", + "topics_viewed", + "min_topics_viewed", + "posts_read", + "min_posts_read", + "topics_viewed_all_time", + "min_topics_viewed_all_time", + "posts_read_all_time", + "min_posts_read_all_time", + "num_flagged_posts", + "max_flagged_posts", + "num_flagged_by_users", + "max_flagged_by_users", + "num_likes_given", + "min_likes_given", + "num_likes_received", + "min_likes_received", + "num_likes_received_days", + "min_likes_received_days", + "num_likes_received_users", + "min_likes_received_users", + "penalty_counts" + ] + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "automatic": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "display_name": { + "type": "string" + }, + "user_count": { + "type": "integer" + }, + "mentionable_level": { + "type": "integer" + }, + "messageable_level": { + "type": "integer" + }, + "visibility_level": { + "type": "integer" + }, + "primary_group": { + "type": "boolean" + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "grant_trust_level": { + "type": [ + "string", + "null" + ] + }, + "incoming_email": { + "type": [ + "string", + "null" + ] + }, + "has_messages": { + "type": "boolean" + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "flair_group_id": { + "type": [ + "integer", + "null" + ] + }, + "bio_raw": { + "type": [ + "string", + "null" + ] + }, + "bio_cooked": { + "type": [ + "string", + "null" + ] + }, + "bio_excerpt": { + "type": [ + "string", + "null" + ] + }, + "public_admission": { + "type": "boolean" + }, + "public_exit": { + "type": "boolean" + }, + "allow_membership_requests": { + "type": "boolean" + }, + "full_name": { + "type": [ + "string", + "null" + ] + }, + "default_notification_level": { + "type": "integer" + }, + "membership_request_template": { + "type": [ + "string", + "null" + ] + }, + "members_visibility_level": { + "type": "integer" + }, + "can_see_members": { + "type": "boolean" + }, + "can_admin_group": { + "type": "boolean" + }, + "publish_read_state": { + "type": "boolean" + } + }, + "required": [ + "id", + "automatic", + "name", + "display_name", + "user_count", + "mentionable_level", + "messageable_level", + "visibility_level", + "primary_group", + "title", + "grant_trust_level", + "incoming_email", + "has_messages", + "flair_url", + "flair_bg_color", + "flair_color", + "bio_raw", + "bio_cooked", + "bio_excerpt", + "public_admission", + "public_exit", + "allow_membership_requests", + "full_name", + "default_notification_level", + "membership_request_template", + "members_visibility_level", + "can_see_members", + "can_admin_group", + "publish_read_state" + ] + } + }, + "external_ids": { + "type": "object" + } + }, + "required": [ + "id", + "username", + "name", + "avatar_template", + "active", + "admin", + "moderator", + "last_seen_at", + "last_emailed_at", + "created_at", + "last_seen_age", + "last_emailed_age", + "created_at_age", + "trust_level", + "manual_locked_trust_level", + "title", + "time_read", + "staged", + "days_visited", + "posts_read_count", + "topics_entered", + "post_count", + "can_send_activation_email", + "can_activate", + "can_deactivate", + "ip_address", + "registration_ip_address", + "can_grant_admin", + "can_revoke_admin", + "can_grant_moderation", + "can_revoke_moderation", + "can_impersonate", + "like_count", + "like_given_count", + "topic_count", + "flags_given_count", + "flags_received_count", + "private_topics_count", + "can_delete_all_posts", + "can_be_anonymized", + "can_be_merged", + "full_suspend_reason", + "primary_group_id", + "badge_count", + "warnings_received_count", + "bounce_score", + "reset_bounce_score_after", + "can_view_action_logs", + "can_disable_second_factor", + "can_delete_sso_record", + "api_key_count", + "single_sign_on_record", + "approved_by", + "suspended_by", + "silenced_by", + "groups", + "external_ids" + ] + } + } + } + } + } + }, + "delete": { + "summary": "Delete a user", + "tags": [ + "Users", + "Admin" + ], + "operationId": "deleteUser", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "deleted": { + "type": "boolean" + } + }, + "required": [ + "deleted" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "delete_posts": { + "type": "boolean" + }, + "block_email": { + "type": "boolean" + }, + "block_urls": { + "type": "boolean" + }, + "block_ip": { + "type": "boolean" + } + } + } + } + } + } + } + }, + "/admin/users/{id}/activate.json": { + "put": { + "summary": "Activate a user", + "tags": [ + "Users", + "Admin" + ], + "operationId": "activateUser", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "success": { + "type": "string", + "example": "OK" + } + }, + "required": [ + "success" + ] + } + } + } + } + } + } + }, + "/admin/users/{id}/deactivate.json": { + "put": { + "summary": "Deactivate a user", + "tags": [ + "Users", + "Admin" + ], + "operationId": "deactivateUser", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "success": { + "type": "string", + "example": "OK" + } + }, + "required": [ + "success" + ] + } + } + } + } + } + } + }, + "/admin/users/{id}/suspend.json": { + "put": { + "summary": "Suspend a user", + "tags": [ + "Users", + "Admin" + ], + "operationId": "suspendUser", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "suspension": { + "type": "object", + "additionalProperties": false, + "properties": { + "suspend_reason": { + "type": "string" + }, + "full_suspend_reason": { + "type": "string" + }, + "suspended_till": { + "type": "string" + }, + "suspended_at": { + "type": "string" + }, + "suspended_by": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": "string" + }, + "avatar_template": { + "type": "string" + } + }, + "required": [ + "id", + "username", + "name", + "avatar_template" + ] + } + }, + "required": [ + "suspend_reason", + "full_suspend_reason", + "suspended_till", + "suspended_at", + "suspended_by" + ] + } + }, + "required": [ + "suspension" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "suspend_until": { + "type": "string", + "example": "2121-02-22" + }, + "reason": { + "type": "string" + }, + "message": { + "type": "string", + "description": "Will send an email with this message when present" + }, + "post_action": { + "type": "string", + "example": "delete" + } + }, + "required": [ + "suspend_until", + "reason" + ] + } + } + } + } + } + }, + "/admin/users/{id}/silence.json": { + "put": { + "summary": "Silence a user", + "tags": [ + "Users", + "Admin" + ], + "operationId": "silenceUser", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "silence": { + "type": "object", + "additionalProperties": false, + "properties": { + "silenced": { + "type": "boolean" + }, + "silence_reason": { + "type": "string" + }, + "silenced_till": { + "type": "string" + }, + "silenced_at": { + "type": "string" + }, + "silenced_by": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": "string" + }, + "avatar_template": { + "type": "string" + } + }, + "required": [ + "id", + "username", + "name", + "avatar_template" + ] + } + }, + "required": [ + "silenced", + "silence_reason", + "silenced_till", + "silenced_at", + "silenced_by" + ] + } + }, + "required": [ + "silence" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "silenced_till": { + "type": "string", + "example": "2022-06-01T08:00:00.000Z" + }, + "reason": { + "type": "string" + }, + "message": { + "type": "string", + "description": "Will send an email with this message when present" + }, + "post_action": { + "type": "string", + "example": "delete" + } + }, + "required": [ + "silenced_till", + "reason" + ] + } + } + } + } + } + }, + "/admin/users/{id}/anonymize.json": { + "put": { + "summary": "Anonymize a user", + "tags": [ + "Users", + "Admin" + ], + "operationId": "anonymizeUser", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "success": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "required": [ + "success", + "username" + ] + } + } + } + } + } + } + }, + "/admin/users/{id}/log_out.json": { + "post": { + "summary": "Log a user out", + "tags": [ + "Users", + "Admin" + ], + "operationId": "logOutUser", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "success": { + "type": "string", + "example": "OK" + } + }, + "required": [ + "success" + ] + } + } + } + } + } + } + }, + "/user_avatar/{username}/refresh_gravatar.json": { + "post": { + "summary": "Refresh gravatar", + "tags": [ + "Users", + "Admin" + ], + "operationId": "refreshGravatar", + "parameters": [ + { + "name": "username", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "gravatar_upload_id": { + "type": [ + "integer", + "null" + ] + }, + "gravatar_avatar_template": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "gravatar_upload_id", + "gravatar_avatar_template" + ] + } + } + } + } + } + } + }, + "/admin/users/list/{flag}.json": { + "get": { + "summary": "Get a list of users", + "tags": [ + "Users", + "Admin" + ], + "operationId": "adminListUsers", + "parameters": [ + { + "name": "flag", + "in": "path", + "schema": { + "type": "string", + "enum": [ + "active", + "new", + "staff", + "suspended", + "blocked", + "suspect" + ] + }, + "required": true + }, + { + "name": "order", + "in": "query", + "schema": { + "type": "string", + "enum": [ + "created", + "last_emailed", + "seen", + "username", + "email", + "trust_level", + "days_visited", + "posts_read", + "topics_viewed", + "posts", + "read_time" + ] + } + }, + { + "name": "asc", + "in": "query", + "schema": { + "type": "string", + "enum": [ + "true" + ] + } + }, + { + "name": "page", + "in": "query", + "schema": { + "type": "integer" + } + }, + { + "name": "show_emails", + "in": "query", + "description": "Include user email addresses in response. These requests will\nbe logged in the staff action logs.", + "schema": { + "type": "boolean" + } + }, + { + "name": "stats", + "in": "query", + "description": "Include user stats information", + "schema": { + "type": "boolean" + } + }, + { + "name": "email", + "in": "query", + "description": "Filter to the user with this email address", + "schema": { + "type": "string" + } + }, + { + "name": "ip", + "in": "query", + "description": "Filter to users with this IP address", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "response", + "content": { + "application/json": { + "schema": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "avatar_template": { + "type": "string" + }, + "email": { + "type": "string" + }, + "secondary_emails": { + "type": "array", + "items": {} + }, + "active": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + }, + "last_seen_at": { + "type": [ + "string", + "null" + ] + }, + "last_emailed_at": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string" + }, + "last_seen_age": { + "type": [ + "number", + "null" + ] + }, + "last_emailed_age": { + "type": [ + "number", + "null" + ] + }, + "created_at_age": { + "type": [ + "number", + "null" + ] + }, + "trust_level": { + "type": "integer" + }, + "manual_locked_trust_level": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "time_read": { + "type": "integer" + }, + "staged": { + "type": "boolean" + }, + "days_visited": { + "type": "integer" + }, + "posts_read_count": { + "type": "integer" + }, + "topics_entered": { + "type": "integer" + }, + "post_count": { + "type": "integer" + } + }, + "required": [ + "id", + "username", + "name", + "avatar_template", + "active", + "admin", + "moderator", + "last_seen_at", + "last_emailed_at", + "created_at", + "last_seen_age", + "last_emailed_age", + "created_at_age", + "trust_level", + "manual_locked_trust_level", + "title", + "time_read", + "staged", + "days_visited", + "posts_read_count", + "topics_entered", + "post_count" + ] + } + } + } + } + } + } + } + }, + "/user_actions.json": { + "get": { + "summary": "Get a list of user actions", + "tags": [ + "Users" + ], + "operationId": "listUserActions", + "parameters": [ + { + "name": "offset", + "in": "query", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "username", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "filter", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "user_actions": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "excerpt": { + "type": "string" + }, + "action_type": { + "type": "integer" + }, + "created_at": { + "type": "string" + }, + "avatar_template": { + "type": "string" + }, + "acting_avatar_template": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "topic_id": { + "type": "integer" + }, + "target_user_id": { + "type": "integer" + }, + "target_name": { + "type": [ + "string", + "null" + ] + }, + "target_username": { + "type": "string" + }, + "post_number": { + "type": "integer" + }, + "post_id": { + "type": [ + "string", + "null" + ] + }, + "username": { + "type": "string" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "user_id": { + "type": "integer" + }, + "acting_username": { + "type": "string" + }, + "acting_name": { + "type": [ + "string", + "null" + ] + }, + "acting_user_id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "deleted": { + "type": "boolean" + }, + "hidden": { + "type": [ + "string", + "null" + ] + }, + "post_type": { + "type": [ + "string", + "null" + ] + }, + "action_code": { + "type": [ + "string", + "null" + ] + }, + "category_id": { + "type": "integer" + }, + "closed": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + } + }, + "required": [ + "excerpt", + "action_type", + "created_at", + "avatar_template", + "acting_avatar_template", + "slug", + "topic_id", + "target_user_id", + "target_name", + "target_username", + "post_number", + "post_id", + "username", + "name", + "user_id", + "acting_username", + "acting_name", + "acting_user_id", + "title", + "deleted", + "hidden", + "post_type", + "action_code", + "category_id", + "closed", + "archived" + ] + } + } + }, + "required": [ + "user_actions" + ] + } + } + } + } + } + } + }, + "/session/forgot_password.json": { + "post": { + "summary": "Send password reset email", + "tags": [ + "Users" + ], + "operationId": "sendPasswordResetEmail", + "parameters": [], + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "success": { + "type": "string" + }, + "user_found": { + "type": "boolean" + } + }, + "required": [ + "success", + "user_found" + ] + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "login": { + "type": "string" + } + }, + "required": [ + "login" + ] + } + } + } + } + } + }, + "/users/password-reset/{token}.json": { + "put": { + "summary": "Change password", + "tags": [ + "Users" + ], + "operationId": "changePassword", + "parameters": [ + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "success response" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + } + }, + "required": [ + "username", + "password" + ] + } + } + } + } + } + }, + "/u/{username}/emails.json": { + "get": { + "summary": "Get email addresses belonging to a user", + "tags": [ + "Users" + ], + "operationId": "getUserEmails", + "parameters": [ + { + "name": "username", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "success response", + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "email": { + "type": "string" + }, + "secondary_emails": { + "type": "array", + "items": {} + }, + "unconfirmed_emails": { + "type": "array", + "items": {} + }, + "associated_accounts": { + "type": "array", + "items": {} + } + }, + "required": [ + "email", + "secondary_emails", + "unconfirmed_emails", + "associated_accounts" + ] + } + } + } + } + } + } + }, + "/chat/{channel_id}": { + "post": { + "summary": "Post a new message to a chat channel", + "operationId": "postMessage", + "tags": [ + "Chat" + ], + "parameters": [ + { + "name": "channel_id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the chat channel." + }, + { + "name": "Referer", + "in": "header", + "required": false, + "schema": { + "type": "string" + }, + "description": "Referer URL (e.g. https:///chat/c/{channel_name}/{channel_id})" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "The content of the message." + } + }, + "required": [ + "message" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Posted message response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "cooked": { + "type": "string" + }, + "raw": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "You posted an identical message too recently." + ] + } + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "403": { + "description": "Forbidden" + }, + "429": { + "description": "Too Many Requests", + "headers": { + "Retry-After": { + "schema": { + "type": "integer" + } + } + } + }, + "500": { + "description": "Internal Server Error" + } + } + } + }, + "/chat/{channel_id}/react/{message_id}": { + "put": { + "summary": "Add or remove a reaction on a chat message", + "operationId": "reactToMessage", + "tags": [ + "Chat" + ], + "parameters": [ + { + "name": "channel_id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "Chat channel ID." + }, + { + "name": "message_id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "Chat message ID." + }, + { + "name": "Referer", + "in": "header", + "required": false, + "schema": { + "type": "string" + }, + "description": "Referer URL" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "react_action": { + "type": "string", + "enum": [ + "add", + "remove" + ], + "description": "Reaction action." + }, + "emoji": { + "type": "string", + "description": "The emoji to react with (e.g. :smile:)." + } + }, + "required": [ + "react_action", + "emoji" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Reaction result", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "string", + "enum": [ + "OK" + ] + } + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "403": { + "description": "Forbidden" + }, + "429": { + "description": "Too Many Requests", + "headers": { + "Retry-After": { + "schema": { + "type": "integer" + } + } + } + }, + "500": { + "description": "Internal Server Error" + } + } + } + }, + "/chat/api/channels/{channel_id}/messages/{message_id}": { + "put": { + "summary": "Edit an existing chat message", + "operationId": "editMessage", + "tags": [ + "Chat" + ], + "parameters": [ + { + "name": "channel_id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "Chat channel ID" + }, + { + "name": "message_id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "Message ID" + }, + { + "name": "Referer", + "in": "header", + "required": false, + "schema": { + "type": "string" + }, + "description": "Referer URL" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "New message content." + } + }, + "required": [ + "message" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Edited message response" + }, + "400": { + "description": "Bad Request" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Internal Server Error" + } + } + } + }, + "/chat/api/channels/{channel_id}/messages": { + "get": { + "summary": "Get messages from a chat channel", + "operationId": "getMessages", + "tags": [ + "Chat" + ], + "parameters": [ + { + "name": "channel_id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "Chat channel ID" + }, + { + "name": "fetch_from_last_read", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false + }, + "description": "Start from last-read" + }, + { + "name": "page_size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 20 + }, + "description": "Number of messages" + }, + { + "name": "Referer", + "in": "header", + "required": false, + "schema": { + "type": "string" + }, + "description": "Referer URL" + } + ], + "responses": { + "200": { + "description": "List of chat messages", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "messages": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "message": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "user": { + "type": "object", + "properties": { + "username": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "403": { + "description": "Forbidden" + }, + "429": { + "description": "Too Many Requests", + "headers": { + "Retry-After": { + "schema": { + "type": "integer" + } + } + } + }, + "500": { + "description": "Internal Server Error" + } + } + } + }, + "/chat/api/direct-message-channels.json": { + "post": { + "summary": "Create or get a direct message channel", + "operationId": "getChatChannel", + "tags": [ + "DirectMessage" + ], + "parameters": [ + { + "name": "Referer", + "in": "header", + "required": false, + "schema": { + "type": "string" + }, + "description": "Referer URL" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "target_usernames[]": { + "type": "string", + "description": "Username of the other user" + } + }, + "required": [ + "target_usernames[]" + ] + } + } + } + }, + "responses": { + "200": { + "description": "DM channel info", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "channel": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "chatable": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": "string", + "nullable": true + }, + "avatar_template": { + "type": "string" + }, + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "403": { + "description": "Forbidden" + }, + "429": { + "description": "Too Many Requests", + "headers": { + "Retry-After": { + "schema": { + "type": "integer" + } + } + } + }, + "500": { + "description": "Internal Server Error" + } + } + } + }, + "/u/{username}/card.json": { + "get": { + "summary": "Get user-card info", + "operationId": "getUserInfo", + "tags": [ + "Users" + ], + "parameters": [ + { + "name": "username", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Discourse username" + } + ], + "responses": { + "200": { + "description": "User card info", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "user": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": "string", + "nullable": true + }, + "avatar_template": { + "type": "string" + }, + "admin": { + "type": "boolean" + }, + "moderator": { + "type": "boolean" + } + } + } + } + } + } + } + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Internal Server Error" + } + } + } + }, + "/session/current.json": { + "get": { + "summary": "Get current session information", + "operationId": "getSession", + "tags": [ + "Session" + ], + "responses": { + "200": { + "description": "Current session info", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "current_user" + ], + "properties": { + "current_user": { + "type": "object", + "required": [ + "id", + "username", + "avatar_template", + "admin", + "moderator" + ], + "properties": { + "id": { + "type": "integer", + "example": 1 + }, + "username": { + "type": "string", + "example": "anirudh" + }, + "name": { + "type": "string", + "nullable": true, + "example": "Anirudh Sriram" + }, + "avatar_template": { + "type": "string", + "example": "/user_avatar/discourse.example.com/anirudh/{size}/2_2.png" + }, + "admin": { + "type": "boolean", + "example": true + }, + "moderator": { + "type": "boolean", + "example": false + } + } + } + } + }, + "example": { + "current_user": { + "id": 1, + "username": "anirudh", + "name": "Anirudh Sriram", + "avatar_template": "/user_avatar/discourse.example.com/anirudh/120/2_2.png", + "admin": true, + "moderator": false + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "403": { + "description": "Forbidden – invalid API key or insufficient permissions" + }, + "429": { + "description": "Too Many Requests", + "headers": { + "Retry-After": { + "description": "Seconds until you can retry", + "schema": { + "type": "integer", + "example": 30 + } + } + } + }, + "500": { + "description": "Internal Server Error" + } + } + } + } + }, + "servers": [ + { + "url": "https://{defaultHost}", + "variables": { + "defaultHost": { + "default": "discourse.example.com" + } + } + } + ], + "components": { + "schemas": {}, + "securitySchemes": { + "ApiKeyAuth": { + "type": "apiKey", + "in": "header", + "name": "Api-Key", + "description": "Your Discourse API key." + } + } + } +} \ No newline at end of file diff --git a/package.json b/package.json index e66182a..57165ce 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,9 @@ "description": "", "main": "index.js", "scripts": { - "build": "tsc", - "start": "node dist/index.js" + "build": "tsc && pnpm run openapi-ts", + "start": "node dist/index.js", + "openapi-ts": "openapi-ts" }, "keywords": [], "author": "", @@ -13,14 +14,18 @@ "dependencies": { "@ai-sdk/openai": "^1.3.22", "@ai-sdk/openai-compatible": "^0.2.14", + "@hey-api/client-fetch": "^0.10.1", "@slack/web-api": "^7.0.2", "@vercel/functions": "^2.0.0", "ai": "^4.3.16", "discourse2-chat": "^1.1.5", "exa-js": "^1.4.10", + "tsx": "^4.19.4", + "vercel": "^42.1.1", "zod": "^3.24.2" }, "devDependencies": { + "@hey-api/openapi-ts": "^0.67.5", "@types/node": "^20.11.17", "typescript": "^5.3.3" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 87aa6b0..47082c8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,9 @@ importers: '@ai-sdk/openai-compatible': specifier: ^0.2.14 version: 0.2.14(zod@3.24.2) + '@hey-api/client-fetch': + specifier: ^0.10.1 + version: 0.10.1(@hey-api/openapi-ts@0.67.5(typescript@5.8.2)) '@slack/web-api': specifier: ^7.0.2 version: 7.8.0 @@ -29,10 +32,19 @@ importers: exa-js: specifier: ^1.4.10 version: 1.4.10 + tsx: + specifier: ^4.19.4 + version: 4.19.4 + vercel: + specifier: ^42.1.1 + version: 42.1.1 zod: specifier: ^3.24.2 version: 3.24.2 devDependencies: + '@hey-api/openapi-ts': + specifier: ^0.67.5 + version: 0.67.5(typescript@5.8.2) '@types/node': specifier: ^20.11.17 version: 20.17.22 @@ -80,10 +92,258 @@ packages: peerDependencies: zod: ^3.23.8 + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@edge-runtime/format@2.2.1': + resolution: {integrity: sha512-JQTRVuiusQLNNLe2W9tnzBlV/GvSVcozLl4XZHk5swnRZ/v6jp8TqR8P7sqmJsQqblDZ3EztcWmLDbhRje/+8g==} + engines: {node: '>=16'} + + '@edge-runtime/node-utils@2.3.0': + resolution: {integrity: sha512-uUtx8BFoO1hNxtHjp3eqVPC/mWImGb2exOfGjMLUoipuWgjej+f4o/VP4bUI8U40gu7Teogd5VTeZUkGvJSPOQ==} + engines: {node: '>=16'} + + '@edge-runtime/ponyfill@2.4.2': + resolution: {integrity: sha512-oN17GjFr69chu6sDLvXxdhg0Qe8EZviGSuqzR9qOiKh4MhFYGdBBcqRNzdmYeAdeRzOW2mM9yil4RftUQ7sUOA==} + engines: {node: '>=16'} + + '@edge-runtime/primitives@4.1.0': + resolution: {integrity: sha512-Vw0lbJ2lvRUqc7/soqygUX216Xb8T3WBZ987oywz6aJqRxcwSVWwr9e+Nqo2m9bxobA9mdbWNNoRY6S9eko1EQ==} + engines: {node: '>=16'} + + '@edge-runtime/vm@3.2.0': + resolution: {integrity: sha512-0dEVyRLM/lG4gp1R/Ik5bfPl/1wX00xFwd5KcNH602tzBa09oF7pbTKETEhR1GjZ75K6OJnYFu8II2dyMhONMw==} + engines: {node: '>=16'} + + '@esbuild/aix-ppc64@0.25.4': + resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.4': + resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.4': + resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.4': + resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.4': + resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.4': + resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.4': + resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.4': + resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.4': + resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.4': + resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.4': + resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.4': + resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.4': + resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.4': + resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.4': + resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.4': + resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.4': + resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.4': + resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.4': + resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.4': + resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.4': + resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.25.4': + resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.4': + resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.4': + resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.4': + resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + + '@hey-api/client-fetch@0.10.1': + resolution: {integrity: sha512-C1XZEnzvOIdXppvMcnO8/V/RpcORxA4rh+5qjuMcItkV++hv7aBz7tSLd0z+bSLFUwttec077WT/nPS+oO4BiA==} + peerDependencies: + '@hey-api/openapi-ts': < 2 + + '@hey-api/json-schema-ref-parser@1.0.6': + resolution: {integrity: sha512-yktiFZoWPtEW8QKS65eqKwA5MTKp88CyiL8q72WynrBs/73SAaxlSWlA2zW/DZlywZ5hX1OYzrCC0wFdvO9c2w==} + engines: {node: '>= 16'} + + '@hey-api/openapi-ts@0.67.5': + resolution: {integrity: sha512-fZd+3im0038rnK7W0mAfLTrdygCR/k6zq7XfYZj/wu0/3GvIg/aGlOwMUtZinRJBH21W+GoH0MJoce3BagVXsw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=22.10.0} + hasBin: true + peerDependencies: + typescript: ^5.5.3 + + '@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/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@jsdevtools/ono@7.1.3': + resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + + '@mapbox/node-pre-gyp@2.0.0': + resolution: {integrity: sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==} + engines: {node: '>=18'} + hasBin: true + + '@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'} + '@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'} + + '@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 + + '@sinclair/typebox@0.25.24': + resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} + '@slack/logger@4.0.0': resolution: {integrity: sha512-Wz7QYfPAlG/DR+DfABddUZeNgoeY7d1J39OCR2jR+v7VBsB8ezulDK5szTnDDPDwLH5IWhLvXIHlCFZV7MSKgA==} engines: {node: '>= 18', npm: '>= 8.6.0'} @@ -96,15 +356,53 @@ packages: resolution: {integrity: sha512-d4SdG+6UmGdzWw38a4sN3lF/nTEzsDxhzU13wm10ejOpPehtmRoqBKnPztQUfFiWbNvSb4czkWYJD4kt+5+Fuw==} engines: {node: '>= 18', npm: '>= 8.6.0'} + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@ts-morph/common@0.11.1': + resolution: {integrity: sha512-7hWZS0NRpEsNV8vWJzg7FEz6V8MaLNeJOmwmghqUXTpzk16V1LLZhdo+4QvE/+zv4cVci0OviuJFnqhEfoV3+g==} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@types/diff-match-patch@1.0.36': resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==} + '@types/estree@1.0.7': + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/node@16.18.11': + resolution: {integrity: sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==} + '@types/node@20.17.22': resolution: {integrity: sha512-9RV2zST+0s3EhfrMZIhrz2bhuhBwxgkbHEwP2gtGWPjBzVQjifMzJ9exw7aDZhR1wbpj8zBrfp3bo8oJcGiUUw==} '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + '@vercel/build-utils@10.5.1': + resolution: {integrity: sha512-BtqwEmU1AoITpd0KxYrdQOwyKZL8RKba+bWxI8mr3gXPQZWRAE9ok1zF0AXfvMGCstYPHBPNolZGDSfWmY2jqg==} + + '@vercel/error-utils@2.0.3': + resolution: {integrity: sha512-CqC01WZxbLUxoiVdh9B/poPbNpY9U+tO1N9oWHwTl5YAZxcqXmmWJ8KNMFItJCUUWdY3J3xv8LvAuQv2KZ5YdQ==} + + '@vercel/fun@1.1.6': + resolution: {integrity: sha512-xDiM+bD0fSZyzcjsAua3D+guXclvHOSTzr03UcZEQwYzIjwWjLduT7bl2gAaeNIe7fASAIZd0P00clcj0On4rQ==} + engines: {node: '>= 18'} + '@vercel/functions@2.0.0': resolution: {integrity: sha512-BSwIihLHoV18gerKZJyGuqd3rtaYM6rJvET1kOwKktshucyaHXTJel7Cxegs+sdX0NZqsX4LO2MFnMU2jG01Cw==} engines: {node: '>= 18'} @@ -114,6 +412,69 @@ packages: '@aws-sdk/credential-provider-web-identity': optional: true + '@vercel/gatsby-plugin-vercel-analytics@1.0.11': + resolution: {integrity: sha512-iTEA0vY6RBPuEzkwUTVzSHDATo1aF6bdLLspI68mQ/BTbi5UQEGjpjyzdKOVcSYApDtFU6M6vypZ1t4vIEnHvw==} + + '@vercel/gatsby-plugin-vercel-builder@2.0.81': + resolution: {integrity: sha512-nWzkA+bUzfysEUW3LdazbhydrnA17+Nhv/Ki6rlA+H5dDa4pBP6LeAh8kyKAsnH4beAlohCDbtmZ4OtK0HOGSg==} + + '@vercel/go@3.2.1': + resolution: {integrity: sha512-ezjmuUvLigH9V4egEaX0SZ+phILx8lb+Zkp1iTqKI+yl/ibPAtVo5o+dLSRAXU9U01LBmaLu3O8Oxd/JpWYCOw==} + + '@vercel/hydrogen@1.2.0': + resolution: {integrity: sha512-kdZp8cTVLoNmnu24wtoQPu9ZO+uB00zvDMTOXlQmNdq/V3k0mQa/Q5k2B8nliBQ3BMiBasoXxMKv59+F8rYvDw==} + + '@vercel/next@4.7.11': + resolution: {integrity: sha512-9qUrcxc9+LkoW+ffYnDalXi2KwZo4KAFv3dabdhOc5NGB6aN6kcgzISfrmTuNfLqRmG0CTtlaBl1VZs2PWhJ5g==} + + '@vercel/nft@0.29.2': + resolution: {integrity: sha512-A/Si4mrTkQqJ6EXJKv5EYCDQ3NL6nJXxG8VGXePsaiQigsomHYQC9xSpX8qGk7AEZk4b1ssbYIqJ0ISQQ7bfcA==} + engines: {node: '>=18'} + hasBin: true + + '@vercel/node@5.1.16': + resolution: {integrity: sha512-jz44zZDlDICAX2+JHs3ekTP1l9RJC5MkHRdkQiWvSgaNufoRxOo4nDkmFTiT53HeZCq+S2FYimn92n+prDh3QQ==} + + '@vercel/python@4.7.2': + resolution: {integrity: sha512-i2QBNMvNxUZQ2e5vLIL7mUkLg5Qkl9nqxUNXCYezdyvk2Ql6xYKjg7tMhpK/uiy094KfZSOECpDbDxkIN0jUSw==} + + '@vercel/redwood@2.3.1': + resolution: {integrity: sha512-CCu/lb+W58gfFdxrF1U41vvUdc2zEXiks0l01qXzbHOHQCWOC7NXWwtieeT/SLqG0K5pkR66q1TpLRtGHT0dYg==} + + '@vercel/remix-builder@5.4.7': + resolution: {integrity: sha512-pLJFAmeFtPvXVXdQU+yV2G4pflObvkqaGObcBl/5cLuhwyadhEGTxu4mWC+XOmU5ppbdNiHzywBPMiBwAQc+mg==} + + '@vercel/ruby@2.2.0': + resolution: {integrity: sha512-FJF9gKVNHAljGOgV6zS5ou2N7ZgjOqMMtcPA5lsJEUI5/AZzVDWCmtcowTP80wEtHuupkd7d7M399FA082kXYQ==} + + '@vercel/static-build@2.7.7': + resolution: {integrity: sha512-/WM1P/6suLgwiLlrUfjg47xSfgzNruHri/ECJ+xe73h35gwqi0ZQlb0Fl74VoRm7P6+8/rNz/3FLBTqJDziHcA==} + + '@vercel/static-config@3.0.0': + resolution: {integrity: sha512-2qtvcBJ1bGY0dYGYh3iM7yGKkk971FujLEDXzuW5wcZsPr1GSEjO/w2iSr3qve6nDDtBImsGoDEnus5FI4+fIw==} + + abbrev@3.0.1: + resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} + engines: {node: ^18.17.0 || >=20.5.0} + + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + ai@4.3.16: resolution: {integrity: sha512-KUDwlThJ5tr2Vw0A1ZkbDKNME3wzWhuVfAOwIvFUzl1TPVDFAXDFTXio3p+jaKneB+dKNCvFFlolYmmgHttG1g==} engines: {node: '>=18'} @@ -140,12 +501,88 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ajv@8.6.3: + resolution: {integrity: sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==} + + 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@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + arg@4.1.0: + resolution: {integrity: sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + async-listen@1.2.0: + resolution: {integrity: sha512-CcEtRh/oc9Jc4uWeUwdpG/+Mb2YUHKmdaTf0gUr7Wa+bfp4xx70HOb3RuSTJMvqKNB1TkdTfjLdrcz2X4rkkZA==} + + async-listen@3.0.0: + resolution: {integrity: sha512-V+SsTpDqkrWTimiotsyl33ePSjA5/KrithwupuvJ6ztsqPvGv6ge4OredFhPffVXiLN/QUWvE0XcqJaYgt6fOg==} + engines: {node: '>= 14'} + + async-listen@3.0.1: + resolution: {integrity: sha512-cWMaNwUJnf37C/S5TfCkk/15MwbPRwVYALA2jtjkbHjCmAPiDXyNJy2q3p1KAZzDLHAWyarUWSujUoHR4pEgrA==} + engines: {node: '>= 14'} + + async-sema@3.1.1: + resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} axios@1.8.1: resolution: {integrity: sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + 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-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + bytes@3.1.0: + resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==} + engines: {node: '>= 0.8'} + + c12@2.0.1: + resolution: {integrity: sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==} + peerDependencies: + magicast: ^0.3.5 + peerDependenciesMeta: + magicast: + optional: true + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -154,24 +591,121 @@ packages: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chokidar@4.0.0: + resolution: {integrity: sha512-mxIojEAQcuEvT/lyXq+jf/3cO/KoA6z4CeNDGGevTybECPOMFCnQy3OPahluUkbqgPNGw5Bi78UC7Po6Lhy+NA==} + engines: {node: '>= 14.16.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + 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==} + + cjs-module-lexer@1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + + code-block-writer@10.1.1: + resolution: {integrity: sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + commander@13.0.0: + resolution: {integrity: sha512-oPYleIY8wmTVzkvQq10AEok6YcTC4sRUBl8F9gVuwchGVUCTbl/vhLTaQqutuuySYOsu8YTgV+OxKc/8Yvx+mQ==} + engines: {node: '>=18'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + content-type@1.0.4: + resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} + engines: {node: '>= 0.6'} + + convert-hrtime@3.0.0: + resolution: {integrity: sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA==} + engines: {node: '>=8'} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + cross-fetch@4.1.0: resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + 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'} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + engines: {node: '>=8'} + diff-match-patch@1.0.5: resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + discourse2-chat@1.1.5: resolution: {integrity: sha512-VbyHRV6C6uyYc5PMbgNjTm0FTm1tb2jJh75wKB+51xC6zhbFoJ8QmxlYHRfuw0Ct9M1xTkwqW8g/176rbx3eSg==} @@ -183,6 +717,23 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + edge-runtime@2.5.9: + resolution: {integrity: sha512-pk+k0oK0PVXdlT4oRp4lwh+unuKB7Ng4iZ2HB+EZ7QCEQizX360Rp/F4aRpgpRgdP2ufB35N+1KppHmYjqIGSg==} + engines: {node: '>=16'} + 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==} + + end-of-stream@1.1.0: + resolution: {integrity: sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -191,6 +742,9 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es-module-lexer@1.4.1: + resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -199,21 +753,178 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} + esbuild-android-64@0.14.47: + resolution: {integrity: sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + esbuild-android-arm64@0.14.47: + resolution: {integrity: sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + esbuild-darwin-64@0.14.47: + resolution: {integrity: sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + esbuild-darwin-arm64@0.14.47: + resolution: {integrity: sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + esbuild-freebsd-64@0.14.47: + resolution: {integrity: sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + esbuild-freebsd-arm64@0.14.47: + resolution: {integrity: sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + esbuild-linux-32@0.14.47: + resolution: {integrity: sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + esbuild-linux-64@0.14.47: + resolution: {integrity: sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + esbuild-linux-arm64@0.14.47: + resolution: {integrity: sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + esbuild-linux-arm@0.14.47: + resolution: {integrity: sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + esbuild-linux-mips64le@0.14.47: + resolution: {integrity: sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + esbuild-linux-ppc64le@0.14.47: + resolution: {integrity: sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + esbuild-linux-riscv64@0.14.47: + resolution: {integrity: sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + esbuild-linux-s390x@0.14.47: + resolution: {integrity: sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + esbuild-netbsd-64@0.14.47: + resolution: {integrity: sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + esbuild-openbsd-64@0.14.47: + resolution: {integrity: sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + esbuild-sunos-64@0.14.47: + resolution: {integrity: sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + esbuild-windows-32@0.14.47: + resolution: {integrity: sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + esbuild-windows-64@0.14.47: + resolution: {integrity: sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + esbuild-windows-arm64@0.14.47: + resolution: {integrity: sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + esbuild@0.14.47: + resolution: {integrity: sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.25.4: + resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} + engines: {node: '>=18'} + hasBin: true + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + events-intercept@2.0.0: + resolution: {integrity: sha512-blk1va0zol9QOrdZt0rFXo5KMkNPVSp92Eju/Qz8THwKWKRKeE0T8Br/1aW6+Edkyq9xHYgYxn2QtOnUKPUp+Q==} + exa-js@1.4.10: resolution: {integrity: sha512-rffYWPU568gOiYmsHW3L5J6atoNfLJTrtAk/DAKyPuGtdDXrE9fsSfltP1X1pNVtLTsz8DIyhUHOXErueNLJrQ==} fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} @@ -223,13 +934,34 @@ packages: debug: optional: true + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + form-data@4.0.2: resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} engines: {node: '>= 6'} + fs-extra@11.1.0: + resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} + engines: {node: '>=14.14'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + generic-pool@3.4.2: + resolution: {integrity: sha512-H7cUpwCQSiJmAHM4c/aFu6fUfrhWXW1ncyh8ftxEPMu6AiYkHw9K8br720TGPZJbk5eOH2bynjZD1yPvdDAmag==} + engines: {node: '>= 4'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -238,10 +970,33 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-tsconfig@4.10.1: + resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + + giget@1.2.5: + resolution: {integrity: sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug==} + 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 + 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==} + + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -254,13 +1009,74 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + http-errors@1.4.0: + resolution: {integrity: sha512-oLjPqve1tuOl5aRhv8GK5eHpqP1C9fb+Ol+XTLjKfLltE44zdDbEdjPSbU7Ch5rSNsVFqZn97SrMmZLdu1/YMw==} + engines: {node: '>= 0.6'} + + http-errors@1.7.3: + resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==} + engines: {node: '>= 0.6'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + inherits@2.0.1: + resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + is-electron@2.2.2: resolution: {integrity: sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==} + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + + jose@5.9.6: + resolution: {integrity: sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-schema-to-ts@1.6.4: + resolution: {integrity: sha512-pR4yQ9DHz6itqswtHCm26mw45FSNfQ9rEQjosaZErhn5J3J2sIViQiz8rDaezjKAhFGpmsoczYVBgGHzFw/stA==} + json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -272,10 +1088,39 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + 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'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micro@9.3.5-canary.3: + resolution: {integrity: sha512-viYIo9PefV+w9dvoIBh1gI44Mvx1BOk67B4BpC2QK77qdY0xZF0Q+vWLt/BII6cLkIc8rLmSIcJaB/OrXXKe1g==} + engines: {node: '>= 8.0.0'} + hasBin: true + + 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'} @@ -284,11 +1129,91 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + minizlib@3.0.2: + resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} + engines: {node: '>= 18'} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + mlly@1.7.4: + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + ms@2.1.1: + resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + 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 + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + node-fetch-native@1.6.6: + resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} + + node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-fetch@2.6.9: + resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -298,9 +1223,33 @@ packages: encoding: optional: true + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + nopt@8.1.0: + resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + nypm@0.5.4: + resolution: {integrity: sha512-X0SNNrZiGU8/e/zAB7sCTtdxWTMSIO73q+xuKgglm2Yvzwlo8UoC5FNySQFCvl84uPaeADkqHUZUkWy4aH4xOA==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + ohash@1.1.6: + resolution: {integrity: sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg==} + + once@1.3.3: + resolution: {integrity: sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==} + openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + os-paths@4.4.0: + resolution: {integrity: sha512-wrAwOeXp1RRMFfQY8Sy7VaGVmPocaLwSFOYCGKSyo8qmJ+/yaafCl5BCA1IQZWqFSRBrKDYFeR9d/VyQzfH/jg==} + engines: {node: '>= 6.0'} + p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} @@ -317,55 +1266,363 @@ packages: resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} engines: {node: '>=8'} - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + parse-ms@2.1.0: + resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} + engines: {node: '>=6'} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-match@1.2.4: + resolution: {integrity: sha512-UWlehEdqu36jmh4h5CWJ7tARp1OEVKGHKm6+dg9qMq5RKUTV5WJrGgaZ3dN2m7WFAXDbjlHzvJvL/IUpy84Ktw==} + deprecated: This package is archived and no longer maintained. For support, visit https://github.com/expressjs/express/discussions + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@1.9.0: + resolution: {integrity: sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==} + + path-to-regexp@6.1.0: + resolution: {integrity: sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw==} + + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pretty-ms@7.0.1: + resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} + engines: {node: '>=10'} + + promisepipe@3.0.0: + resolution: {integrity: sha512-V6TbZDJ/ZswevgkDNpGt/YqNCiZP9ASfgU+p83uJE6NrGtvSGoOcHLiDCqkMs2+yg7F5qHdLV8d0aS8O26G/KA==} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + raw-body@2.4.1: + resolution: {integrity: sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==} + engines: {node: '>= 0.8'} + + rc9@2.1.2: + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + + react@19.0.0: + resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} + engines: {node: '>=0.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + retry@0.13.1: + 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'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + setprototypeof@1.1.1: + resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@4.0.2: + resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} + engines: {node: '>=14'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} - react@19.0.0: - resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 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'} + stat-mode@0.3.0: + resolution: {integrity: sha512-QjMLR0A3WwFY2aZdV0okfFEJB5TRjkggXZjxP3A1RsWsNHNu3YPv8btmtc6iCFZ0Rul3FE93OYogvhOUClU+ng==} - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} - secure-json-parse@2.7.0: - resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + stream-to-array@2.3.0: + resolution: {integrity: sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==} + + stream-to-promise@2.2.0: + resolution: {integrity: sha512-HAGUASw8NT0k8JvIVutB2Y/9iBk7gpgEyAudXwNJmZERdMITGdajOa4VJfD/kNiA3TppQpTP4J+CtcHwdzKBAw==} + + 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'} + + 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'} swr@2.3.2: resolution: {integrity: sha512-RosxFpiabojs75IwQ316DGoDRmOqtiAj0tg8wCcbEu4CiLZBs/a9QNtHV7TUfDXmmlgqij/NqzKq/eLelyv9xA==} peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + tar@7.4.3: + resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + engines: {node: '>=18'} + throttleit@2.1.0: resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} engines: {node: '>=18'} + time-span@4.0.0: + resolution: {integrity: sha512-MyqZCTGLDZ77u4k+jqg4UlrzPTPZ49NDlaekU6uuFaJLzPIN1woaRXCbGeqOfxwc3Y37ZROGAJ614Rdv7Olt+g==} + engines: {node: '>=10'} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.0: + resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==} + engines: {node: '>=0.6'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + ts-morph@12.0.0: + resolution: {integrity: sha512-VHC8XgU2fFW7yO1f/b3mxKDje1vmyzFXHWzOYmKEkCEwcLjDtbdLgBQviqj4ZwP4MJkQtRo6Ha2I29lq/B+VxA==} + + ts-node@10.9.1: + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + ts-toolbelt@6.15.5: + resolution: {integrity: sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==} + + tsx@4.19.4: + resolution: {integrity: sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==} + engines: {node: '>=18.0.0'} + hasBin: true + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + typescript@5.8.2: resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} hasBin: true + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + + uid-promise@1.0.0: + resolution: {integrity: sha512-R8375j0qwXyIu/7R0tjdF06/sElHqbmdmWC9M2qQHpEVbvE4I5+38KJI7LUUmQMp7NVq4tKHiBMkT0NFM453Ig==} + undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + engines: {node: '>=14.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + use-sync-external-store@1.4.0: resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + vercel@42.1.1: + resolution: {integrity: sha512-PtZhiNWen2VzglXCHJpjFPAQ9kH9ETAM5hBfvzy0HtWqlId07K5MVQdm8NKMYBOWj/297+/qYwhdKXsdPnnIHw==} + engines: {node: '>= 18'} + hasBin: true + + web-vitals@0.2.4: + resolution: {integrity: sha512-6BjspCO9VriYy12z356nL6JBS0GYeEcA457YyRzD+dD6XYCQ75NKhcOHUMHentOE7OcVCIXXDvOm0jKFfQG2Gg==} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + 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==} + + xdg-app-paths@5.1.0: + resolution: {integrity: sha512-RAQ3WkPf4KTU1A8RtFx3gWywzVKe00tfOPFfl2NDGqbIFENQO4kqAJp7mhQjNj/33W5x5hiWWUdyfPq/5SU3QA==} + engines: {node: '>=6'} + + xdg-portable@7.3.0: + resolution: {integrity: sha512-sqMMuL1rc0FmMBOzCpd0yuy9trqF2yTTVe+E9ogwCSWQCdDEtQUwrZPT6AxqtsFGRNxycgncbP/xmOOSPw5ZUw==} + engines: {node: '>= 6.0'} + + 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'} + + yauzl-clone@1.0.4: + resolution: {integrity: sha512-igM2RRCf3k8TvZoxR2oguuw4z1xasOnA31joCqHIyLkeWrvAc2Jgay5ISQ2ZplinkoGaJ6orCz56Ey456c5ESA==} + engines: {node: '>=6'} + + yauzl-promise@2.1.3: + resolution: {integrity: sha512-A1pf6fzh6eYkK0L4Qp7g9jzJSDrM6nN0bOn5T0IbY4Yo3w+YkWlHFkJP7mzknMXjqusHFHlKsK2N+4OLsK2MRA==} + engines: {node: '>=6'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + zod-to-json-schema@3.24.3: resolution: {integrity: sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A==} peerDependencies: @@ -416,8 +1673,182 @@ snapshots: zod: 3.24.2 zod-to-json-schema: 3.24.3(zod@3.24.2) + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@edge-runtime/format@2.2.1': {} + + '@edge-runtime/node-utils@2.3.0': {} + + '@edge-runtime/ponyfill@2.4.2': {} + + '@edge-runtime/primitives@4.1.0': {} + + '@edge-runtime/vm@3.2.0': + dependencies: + '@edge-runtime/primitives': 4.1.0 + + '@esbuild/aix-ppc64@0.25.4': + optional: true + + '@esbuild/android-arm64@0.25.4': + optional: true + + '@esbuild/android-arm@0.25.4': + optional: true + + '@esbuild/android-x64@0.25.4': + optional: true + + '@esbuild/darwin-arm64@0.25.4': + optional: true + + '@esbuild/darwin-x64@0.25.4': + optional: true + + '@esbuild/freebsd-arm64@0.25.4': + optional: true + + '@esbuild/freebsd-x64@0.25.4': + optional: true + + '@esbuild/linux-arm64@0.25.4': + optional: true + + '@esbuild/linux-arm@0.25.4': + optional: true + + '@esbuild/linux-ia32@0.25.4': + optional: true + + '@esbuild/linux-loong64@0.25.4': + optional: true + + '@esbuild/linux-mips64el@0.25.4': + optional: true + + '@esbuild/linux-ppc64@0.25.4': + optional: true + + '@esbuild/linux-riscv64@0.25.4': + optional: true + + '@esbuild/linux-s390x@0.25.4': + optional: true + + '@esbuild/linux-x64@0.25.4': + optional: true + + '@esbuild/netbsd-arm64@0.25.4': + optional: true + + '@esbuild/netbsd-x64@0.25.4': + optional: true + + '@esbuild/openbsd-arm64@0.25.4': + optional: true + + '@esbuild/openbsd-x64@0.25.4': + optional: true + + '@esbuild/sunos-x64@0.25.4': + optional: true + + '@esbuild/win32-arm64@0.25.4': + optional: true + + '@esbuild/win32-ia32@0.25.4': + optional: true + + '@esbuild/win32-x64@0.25.4': + optional: true + + '@fastify/busboy@2.1.1': {} + + '@hey-api/client-fetch@0.10.1(@hey-api/openapi-ts@0.67.5(typescript@5.8.2))': + dependencies: + '@hey-api/openapi-ts': 0.67.5(typescript@5.8.2) + + '@hey-api/json-schema-ref-parser@1.0.6': + dependencies: + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.15 + js-yaml: 4.1.0 + lodash: 4.17.21 + + '@hey-api/openapi-ts@0.67.5(typescript@5.8.2)': + dependencies: + '@hey-api/json-schema-ref-parser': 1.0.6 + c12: 2.0.1 + commander: 13.0.0 + handlebars: 4.7.8 + typescript: 5.8.2 + transitivePeerDependencies: + - magicast + + '@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/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jsdevtools/ono@7.1.3': {} + + '@mapbox/node-pre-gyp@2.0.0': + dependencies: + consola: 3.4.2 + detect-libc: 2.0.4 + https-proxy-agent: 7.0.6 + node-fetch: 2.7.0 + nopt: 8.1.0 + semver: 7.7.2 + tar: 7.4.3 + transitivePeerDependencies: + - encoding + - supports-color + + '@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 + '@opentelemetry/api@1.9.0': {} + '@pkgjs/parseargs@0.11.0': + optional: true + + '@rollup/pluginutils@5.1.4': + dependencies: + '@types/estree': 1.0.7 + estree-walker: 2.0.2 + picomatch: 4.0.2 + + '@sinclair/typebox@0.25.24': {} + '@slack/logger@4.0.0': dependencies: '@types/node': 20.17.22 @@ -441,16 +1872,198 @@ snapshots: transitivePeerDependencies: - debug + '@tootallnate/once@2.0.0': {} + + '@ts-morph/common@0.11.1': + dependencies: + fast-glob: 3.3.3 + minimatch: 3.1.2 + mkdirp: 1.0.4 + path-browserify: 1.0.1 + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + '@types/diff-match-patch@1.0.36': {} + '@types/estree@1.0.7': {} + + '@types/json-schema@7.0.15': {} + + '@types/node@16.18.11': {} + '@types/node@20.17.22': dependencies: undici-types: 6.19.8 '@types/retry@0.12.0': {} + '@vercel/build-utils@10.5.1': {} + + '@vercel/error-utils@2.0.3': {} + + '@vercel/fun@1.1.6': + dependencies: + '@tootallnate/once': 2.0.0 + async-listen: 1.2.0 + debug: 4.3.4 + generic-pool: 3.4.2 + micro: 9.3.5-canary.3 + ms: 2.1.1 + node-fetch: 2.6.7 + path-match: 1.2.4 + promisepipe: 3.0.0 + semver: 7.5.4 + stat-mode: 0.3.0 + stream-to-promise: 2.2.0 + tar: 6.2.1 + tinyexec: 0.3.2 + tree-kill: 1.2.2 + uid-promise: 1.0.0 + xdg-app-paths: 5.1.0 + yauzl-promise: 2.1.3 + transitivePeerDependencies: + - encoding + - supports-color + '@vercel/functions@2.0.0': {} + '@vercel/gatsby-plugin-vercel-analytics@1.0.11': + dependencies: + web-vitals: 0.2.4 + + '@vercel/gatsby-plugin-vercel-builder@2.0.81': + dependencies: + '@sinclair/typebox': 0.25.24 + '@vercel/build-utils': 10.5.1 + esbuild: 0.14.47 + etag: 1.8.1 + fs-extra: 11.1.0 + + '@vercel/go@3.2.1': {} + + '@vercel/hydrogen@1.2.0': + dependencies: + '@vercel/static-config': 3.0.0 + ts-morph: 12.0.0 + + '@vercel/next@4.7.11': + dependencies: + '@vercel/nft': 0.29.2 + transitivePeerDependencies: + - encoding + - rollup + - supports-color + + '@vercel/nft@0.29.2': + dependencies: + '@mapbox/node-pre-gyp': 2.0.0 + '@rollup/pluginutils': 5.1.4 + 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 + + '@vercel/node@5.1.16': + dependencies: + '@edge-runtime/node-utils': 2.3.0 + '@edge-runtime/primitives': 4.1.0 + '@edge-runtime/vm': 3.2.0 + '@types/node': 16.18.11 + '@vercel/build-utils': 10.5.1 + '@vercel/error-utils': 2.0.3 + '@vercel/nft': 0.29.2 + '@vercel/static-config': 3.0.0 + async-listen: 3.0.0 + cjs-module-lexer: 1.2.3 + edge-runtime: 2.5.9 + es-module-lexer: 1.4.1 + esbuild: 0.14.47 + etag: 1.8.1 + node-fetch: 2.6.9 + path-to-regexp: 6.1.0 + path-to-regexp-updated: path-to-regexp@6.3.0 + ts-morph: 12.0.0 + ts-node: 10.9.1(@types/node@16.18.11)(typescript@4.9.5) + typescript: 4.9.5 + undici: 5.28.4 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - encoding + - rollup + - supports-color + + '@vercel/python@4.7.2': {} + + '@vercel/redwood@2.3.1': + dependencies: + '@vercel/nft': 0.29.2 + '@vercel/static-config': 3.0.0 + semver: 6.3.1 + ts-morph: 12.0.0 + transitivePeerDependencies: + - encoding + - rollup + - supports-color + + '@vercel/remix-builder@5.4.7': + dependencies: + '@vercel/error-utils': 2.0.3 + '@vercel/nft': 0.29.2 + '@vercel/static-config': 3.0.0 + path-to-regexp: 6.1.0 + path-to-regexp-updated: path-to-regexp@6.3.0 + ts-morph: 12.0.0 + transitivePeerDependencies: + - encoding + - rollup + - supports-color + + '@vercel/ruby@2.2.0': {} + + '@vercel/static-build@2.7.7': + dependencies: + '@vercel/gatsby-plugin-vercel-analytics': 1.0.11 + '@vercel/gatsby-plugin-vercel-builder': 2.0.81 + '@vercel/static-config': 3.0.0 + ts-morph: 12.0.0 + + '@vercel/static-config@3.0.0': + dependencies: + ajv: 8.6.3 + json-schema-to-ts: 1.6.4 + ts-morph: 12.0.0 + + abbrev@3.0.1: {} + + acorn-import-attributes@1.9.5(acorn@8.14.1): + dependencies: + acorn: 8.14.1 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.1 + + acorn@8.14.1: {} + + agent-base@7.1.3: {} + ai@4.3.16(react@19.0.0)(zod@3.24.2): dependencies: '@ai-sdk/provider': 1.1.3 @@ -478,6 +2091,39 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + ajv@8.6.3: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + arg@4.1.0: {} + + arg@4.1.3: {} + + argparse@2.0.1: {} + + async-listen@1.2.0: {} + + async-listen@3.0.0: {} + + async-listen@3.0.1: {} + + async-sema@3.1.1: {} + asynckit@0.4.0: {} axios@1.8.1: @@ -488,6 +2134,44 @@ snapshots: transitivePeerDependencies: - debug + balanced-match@1.0.2: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.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 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + buffer-crc32@0.2.13: {} + + bytes@3.1.0: {} + + c12@2.0.1: + dependencies: + chokidar: 4.0.3 + confbox: 0.1.8 + defu: 6.1.4 + dotenv: 16.4.7 + giget: 1.2.5 + jiti: 2.4.2 + mlly: 1.7.4 + ohash: 1.1.6 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.3.1 + rc9: 2.1.2 + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -495,22 +2179,86 @@ snapshots: chalk@5.4.1: {} + chokidar@4.0.0: + dependencies: + readdirp: 4.1.2 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + chownr@2.0.0: {} + + chownr@3.0.0: {} + + citty@0.1.6: + dependencies: + consola: 3.4.2 + + cjs-module-lexer@1.2.3: {} + + code-block-writer@10.1.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 + commander@13.0.0: {} + + concat-map@0.0.1: {} + + confbox@0.1.8: {} + + consola@3.4.2: {} + + content-type@1.0.4: {} + + convert-hrtime@3.0.0: {} + + create-require@1.1.1: {} + cross-fetch@4.1.0: dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + debug@4.4.1: + dependencies: + ms: 2.1.3 + + defu@6.1.4: {} + delayed-stream@1.0.0: {} + depd@1.1.2: {} + dequal@2.0.3: {} + destr@2.0.5: {} + + detect-libc@2.0.4: {} + diff-match-patch@1.0.5: {} + diff@4.0.2: {} + discourse2-chat@1.1.5: dependencies: ajv: 8.17.1 @@ -526,10 +2274,34 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + eastasianwidth@0.2.0: {} + + edge-runtime@2.5.9: + dependencies: + '@edge-runtime/format': 2.2.1 + '@edge-runtime/ponyfill': 2.4.2 + '@edge-runtime/vm': 3.2.0 + async-listen: 3.0.1 + mri: 1.2.0 + picocolors: 1.0.0 + pretty-ms: 7.0.1 + signal-exit: 4.0.2 + time-span: 4.0.0 + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + end-of-stream@1.1.0: + dependencies: + once: 1.3.3 + es-define-property@1.0.1: {} es-errors@1.3.0: {} + es-module-lexer@1.4.1: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -541,10 +2313,127 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + esbuild-android-64@0.14.47: + optional: true + + esbuild-android-arm64@0.14.47: + optional: true + + esbuild-darwin-64@0.14.47: + optional: true + + esbuild-darwin-arm64@0.14.47: + optional: true + + esbuild-freebsd-64@0.14.47: + optional: true + + esbuild-freebsd-arm64@0.14.47: + optional: true + + esbuild-linux-32@0.14.47: + optional: true + + esbuild-linux-64@0.14.47: + optional: true + + esbuild-linux-arm64@0.14.47: + optional: true + + esbuild-linux-arm@0.14.47: + optional: true + + esbuild-linux-mips64le@0.14.47: + optional: true + + esbuild-linux-ppc64le@0.14.47: + optional: true + + esbuild-linux-riscv64@0.14.47: + optional: true + + esbuild-linux-s390x@0.14.47: + optional: true + + esbuild-netbsd-64@0.14.47: + optional: true + + esbuild-openbsd-64@0.14.47: + optional: true + + esbuild-sunos-64@0.14.47: + optional: true + + esbuild-windows-32@0.14.47: + optional: true + + esbuild-windows-64@0.14.47: + optional: true + + esbuild-windows-arm64@0.14.47: + optional: true + + esbuild@0.14.47: + optionalDependencies: + esbuild-android-64: 0.14.47 + esbuild-android-arm64: 0.14.47 + esbuild-darwin-64: 0.14.47 + esbuild-darwin-arm64: 0.14.47 + esbuild-freebsd-64: 0.14.47 + esbuild-freebsd-arm64: 0.14.47 + esbuild-linux-32: 0.14.47 + esbuild-linux-64: 0.14.47 + esbuild-linux-arm: 0.14.47 + esbuild-linux-arm64: 0.14.47 + esbuild-linux-mips64le: 0.14.47 + esbuild-linux-ppc64le: 0.14.47 + esbuild-linux-riscv64: 0.14.47 + esbuild-linux-s390x: 0.14.47 + esbuild-netbsd-64: 0.14.47 + esbuild-openbsd-64: 0.14.47 + esbuild-sunos-64: 0.14.47 + esbuild-windows-32: 0.14.47 + esbuild-windows-64: 0.14.47 + esbuild-windows-arm64: 0.14.47 + + esbuild@0.25.4: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.4 + '@esbuild/android-arm': 0.25.4 + '@esbuild/android-arm64': 0.25.4 + '@esbuild/android-x64': 0.25.4 + '@esbuild/darwin-arm64': 0.25.4 + '@esbuild/darwin-x64': 0.25.4 + '@esbuild/freebsd-arm64': 0.25.4 + '@esbuild/freebsd-x64': 0.25.4 + '@esbuild/linux-arm': 0.25.4 + '@esbuild/linux-arm64': 0.25.4 + '@esbuild/linux-ia32': 0.25.4 + '@esbuild/linux-loong64': 0.25.4 + '@esbuild/linux-mips64el': 0.25.4 + '@esbuild/linux-ppc64': 0.25.4 + '@esbuild/linux-riscv64': 0.25.4 + '@esbuild/linux-s390x': 0.25.4 + '@esbuild/linux-x64': 0.25.4 + '@esbuild/netbsd-arm64': 0.25.4 + '@esbuild/netbsd-x64': 0.25.4 + '@esbuild/openbsd-arm64': 0.25.4 + '@esbuild/openbsd-x64': 0.25.4 + '@esbuild/sunos-x64': 0.25.4 + '@esbuild/win32-arm64': 0.25.4 + '@esbuild/win32-ia32': 0.25.4 + '@esbuild/win32-x64': 0.25.4 + + estree-walker@2.0.2: {} + + etag@1.8.1: {} + eventemitter3@4.0.7: {} eventemitter3@5.0.1: {} + events-intercept@2.0.0: {} + exa-js@1.4.10: dependencies: cross-fetch: 4.1.0 @@ -554,10 +2443,37 @@ snapshots: fast-deep-equal@3.1.3: {} + 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-uri@3.0.6: {} + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + file-uri-to-path@1.0.0: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + follow-redirects@1.15.9: {} + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + form-data@4.0.2: dependencies: asynckit: 0.4.0 @@ -565,8 +2481,23 @@ snapshots: es-set-tostringtag: 2.1.0 mime-types: 2.1.35 + fs-extra@11.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + + fsevents@2.3.3: + optional: true + function-bind@1.1.2: {} + generic-pool@3.4.2: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -585,8 +2516,46 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-tsconfig@4.10.1: + dependencies: + resolve-pkg-maps: 1.0.0 + + giget@1.2.5: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + defu: 6.1.4 + node-fetch-native: 1.6.6 + nypm: 0.5.4 + pathe: 2.0.3 + tar: 6.2.1 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + 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 + gopd@1.2.0: {} + graceful-fs@4.2.11: {} + + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -597,10 +2566,71 @@ snapshots: dependencies: function-bind: 1.1.2 + http-errors@1.4.0: + dependencies: + inherits: 2.0.1 + statuses: 1.5.0 + + http-errors@1.7.3: + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.1.1 + statuses: 1.5.0 + toidentifier: 1.0.0 + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + inherits@2.0.1: {} + + inherits@2.0.4: {} + is-electron@2.2.2: {} + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + is-stream@2.0.1: {} + isarray@0.0.1: {} + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jiti@2.4.2: {} + + jose@5.9.6: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-schema-to-ts@1.6.4: + dependencies: + '@types/json-schema': 7.0.15 + ts-toolbelt: 6.15.5 + json-schema-traverse@1.0.0: {} json-schema@0.4.0: {} @@ -611,22 +2641,132 @@ snapshots: chalk: 5.4.1 diff-match-patch: 1.0.5 + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + lodash@4.17.21: {} + + lru-cache@10.4.3: {} + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + make-error@1.3.6: {} + math-intrinsics@1.1.0: {} + merge2@1.4.1: {} + + micro@9.3.5-canary.3: + dependencies: + arg: 4.1.0 + content-type: 1.0.4 + raw-body: 2.4.1 + + 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 + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + + minipass@7.1.2: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + minizlib@3.0.2: + dependencies: + minipass: 7.1.2 + + mkdirp@1.0.4: {} + + mkdirp@3.0.1: {} + + mlly@1.7.4: + dependencies: + acorn: 8.14.1 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + + mri@1.2.0: {} + + ms@2.1.1: {} + + ms@2.1.2: {} + + ms@2.1.3: {} + nanoid@3.3.8: {} + neo-async@2.6.2: {} + + node-fetch-native@1.6.6: {} + + node-fetch@2.6.7: + dependencies: + whatwg-url: 5.0.0 + + node-fetch@2.6.9: + dependencies: + whatwg-url: 5.0.0 + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 + node-gyp-build@4.8.4: {} + + nopt@8.1.0: + dependencies: + abbrev: 3.0.1 + + nypm@0.5.4: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + pathe: 2.0.3 + pkg-types: 1.3.1 + tinyexec: 0.3.2 + ufo: 1.6.1 + + ohash@1.1.6: {} + + once@1.3.3: + dependencies: + wrappy: 1.0.2 + openapi-types@12.1.3: {} + os-paths@4.4.0: {} + p-finally@1.0.0: {} p-queue@6.6.2: @@ -643,34 +2783,283 @@ snapshots: dependencies: p-finally: 1.0.0 + package-json-from-dist@1.0.1: {} + + parse-ms@2.1.0: {} + + path-browserify@1.0.1: {} + + path-key@3.1.1: {} + + path-match@1.2.4: + dependencies: + http-errors: 1.4.0 + path-to-regexp: 1.9.0 + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@1.9.0: + dependencies: + isarray: 0.0.1 + + path-to-regexp@6.1.0: {} + + path-to-regexp@6.3.0: {} + + pathe@1.1.2: {} + + pathe@2.0.3: {} + + pend@1.2.0: {} + + perfect-debounce@1.0.0: {} + + picocolors@1.0.0: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.4 + pathe: 2.0.3 + + pretty-ms@7.0.1: + dependencies: + parse-ms: 2.1.0 + + promisepipe@3.0.0: {} + proxy-from-env@1.1.0: {} + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + raw-body@2.4.1: + dependencies: + bytes: 3.1.0 + http-errors: 1.7.3 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + rc9@2.1.2: + dependencies: + defu: 6.1.4 + destr: 2.0.5 + react@19.0.0: {} + readdirp@4.1.2: {} + require-from-string@2.0.2: {} + resolve-from@5.0.0: {} + + resolve-pkg-maps@1.0.0: {} + retry@0.13.1: {} + reusify@1.1.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safer-buffer@2.1.2: {} + secure-json-parse@2.7.0: {} + semver@6.3.1: {} + + semver@7.5.4: + dependencies: + lru-cache: 6.0.0 + + semver@7.7.2: {} + + setprototypeof@1.1.1: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@4.0.2: {} + + signal-exit@4.1.0: {} + + source-map@0.6.1: {} + + stat-mode@0.3.0: {} + + statuses@1.5.0: {} + + stream-to-array@2.3.0: + dependencies: + any-promise: 1.3.0 + + stream-to-promise@2.2.0: + dependencies: + any-promise: 1.3.0 + end-of-stream: 1.1.0 + stream-to-array: 2.3.0 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + swr@2.3.2(react@19.0.0): dependencies: dequal: 2.0.3 react: 19.0.0 use-sync-external-store: 1.4.0(react@19.0.0) + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + tar@7.4.3: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.0.2 + mkdirp: 3.0.1 + yallist: 5.0.0 + throttleit@2.1.0: {} + time-span@4.0.0: + dependencies: + convert-hrtime: 3.0.0 + + tinyexec@0.3.2: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.0: {} + tr46@0.0.3: {} + tree-kill@1.2.2: {} + + ts-morph@12.0.0: + dependencies: + '@ts-morph/common': 0.11.1 + code-block-writer: 10.1.1 + + ts-node@10.9.1(@types/node@16.18.11)(typescript@4.9.5): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 16.18.11 + acorn: 8.14.1 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.9.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + ts-toolbelt@6.15.5: {} + + tsx@4.19.4: + dependencies: + esbuild: 0.25.4 + get-tsconfig: 4.10.1 + optionalDependencies: + fsevents: 2.3.3 + + typescript@4.9.5: {} + typescript@5.8.2: {} + ufo@1.6.1: {} + + uglify-js@3.19.3: + optional: true + + uid-promise@1.0.0: {} + undici-types@6.19.8: {} + undici@5.28.4: + dependencies: + '@fastify/busboy': 2.1.1 + + universalify@2.0.1: {} + + unpipe@1.0.0: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + use-sync-external-store@1.4.0(react@19.0.0): dependencies: react: 19.0.0 + v8-compile-cache-lib@3.0.1: {} + + vercel@42.1.1: + dependencies: + '@vercel/build-utils': 10.5.1 + '@vercel/fun': 1.1.6 + '@vercel/go': 3.2.1 + '@vercel/hydrogen': 1.2.0 + '@vercel/next': 4.7.11 + '@vercel/node': 5.1.16 + '@vercel/python': 4.7.2 + '@vercel/redwood': 2.3.1 + '@vercel/remix-builder': 5.4.7 + '@vercel/ruby': 2.2.0 + '@vercel/static-build': 2.7.7 + chokidar: 4.0.0 + jose: 5.9.6 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - encoding + - rollup + - supports-color + + web-vitals@0.2.4: {} + webidl-conversions@3.0.1: {} whatwg-url@5.0.0: @@ -678,6 +3067,54 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wordwrap@1.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: {} + + xdg-app-paths@5.1.0: + dependencies: + xdg-portable: 7.3.0 + + xdg-portable@7.3.0: + dependencies: + os-paths: 4.4.0 + + yallist@4.0.0: {} + + yallist@5.0.0: {} + + yauzl-clone@1.0.4: + dependencies: + events-intercept: 2.0.0 + + yauzl-promise@2.1.3: + dependencies: + yauzl: 2.10.0 + yauzl-clone: 1.0.4 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yn@3.1.1: {} + zod-to-json-schema@3.24.3(zod@3.24.2): dependencies: zod: 3.24.2 diff --git a/tsconfig.json b/tsconfig.json index 6d45f4e..6154cde 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,10 +6,7 @@ "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "skipLibCheck": true, - "outDir": "./dist", - "paths": { - "@/*": ["./*"] - } + "outDir": "./dist" }, "exclude": [ "node_modules", diff --git a/types/chat.ts b/types/chat.ts index 7ea314d..f6b8169 100644 --- a/types/chat.ts +++ b/types/chat.ts @@ -1,4 +1,4 @@ -import { Uploads } from "./discourse"; +import type { Uploads } from "./discourse"; export interface BasicChatMessage { id: number; diff --git a/types/webhook.ts b/types/webhook.ts index f06632d..ab9e61c 100644 --- a/types/webhook.ts +++ b/types/webhook.ts @@ -1,5 +1,5 @@ -import { BasicChatMessage } from "./chat"; -import { BasicUser, Uploads } from "./discourse"; +import type { BasicChatMessage } from "./chat"; +import type { BasicUser, Uploads } from "./discourse"; export interface WebhookPost { id: number; From f3911a12fbfcaeb7ceda914799deedfc12ded31a Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Thu, 22 May 2025 16:28:17 +0000 Subject: [PATCH 09/50] Refactor chat message handling: rename postMessage to sendMessage, update types and OpenAPI specs - Renamed PostMessageData to SendMessageData and updated related types. - Refactored response types for sending messages and editing messages. - Updated OpenAPI specifications to reflect changes in message sending and editing endpoints. - Adjusted utility functions to use the new sendMessage method. - Cleaned up unused types and errors in the Zod validation schemas. - Enhanced response structures for better clarity and consistency. --- client/sdk.gen.ts | 67 ++-- client/types.gen.ts | 321 ++++--------------- client/zod.gen.ts | 67 ++-- lib/handle-app-mention.ts | 6 +- lib/handle-messages.ts | 4 +- lib/slack-utils.ts | 7 +- openapi.json | 659 +++++++++++++++----------------------- 7 files changed, 388 insertions(+), 743 deletions(-) diff --git a/client/sdk.gen.ts b/client/sdk.gen.ts index 0f147c8..e5f331e 100644 --- a/client/sdk.gen.ts +++ b/client/sdk.gen.ts @@ -1,8 +1,8 @@ // This file is auto-generated by @hey-api/openapi-ts -import { type Options as ClientOptions, type TDataShape, type Client, formDataBodySerializer } from '@hey-api/client-fetch'; -import type { GetBackupsData, GetBackupsResponse, CreateBackupData, CreateBackupResponse, DownloadBackupData, SendDownloadBackupEmailData, AdminListBadgesData, AdminListBadgesResponse, CreateBadgeData, CreateBadgeResponse, DeleteBadgeData, UpdateBadgeData, UpdateBadgeResponse, ListCategoriesData, ListCategoriesResponse, CreateCategoryData, CreateCategoryResponse, UpdateCategoryData, UpdateCategoryResponse, ListCategoryTopicsData, ListCategoryTopicsResponse, GetCategoryData, GetCategoryResponse, CreateGroupData, CreateGroupResponse, DeleteGroupData, DeleteGroupResponse, GetGroupData, GetGroupResponse, UpdateGroupData, UpdateGroupResponse, RemoveGroupMembersData, RemoveGroupMembersResponse, ListGroupMembersData, ListGroupMembersResponse, AddGroupMembersData, AddGroupMembersResponse, ListGroupsData, ListGroupsResponse, CreateInviteData, CreateInviteResponse, CreateMultipleInvitesData, CreateMultipleInvitesResponse, GetNotificationsData, GetNotificationsResponse, MarkNotificationsAsReadData, MarkNotificationsAsReadResponse, ListPostsData, ListPostsResponse, CreateTopicPostPmData, CreateTopicPostPmResponse, DeletePostData, GetPostData, GetPostResponse, UpdatePostData, UpdatePostResponse, PostRepliesData, PostRepliesResponse, LockPostData, LockPostResponse, PerformPostActionData, PerformPostActionResponse, ListUserPrivateMessagesData, ListUserPrivateMessagesResponse, GetUserSentPrivateMessagesData, GetUserSentPrivateMessagesResponse, SearchData, SearchResponse, GetSiteData, GetSiteResponse, GetSiteBasicInfoData, GetSiteBasicInfoResponse, ListTagGroupsData, ListTagGroupsResponse, CreateTagGroupData, CreateTagGroupResponse, GetTagGroupData, GetTagGroupResponse, UpdateTagGroupData, UpdateTagGroupResponse, ListTagsData, ListTagsResponse, GetTagData, GetTagResponse, GetSpecificPostsFromTopicData, GetSpecificPostsFromTopicResponse, RemoveTopicData, GetTopicData, GetTopicResponse, UpdateTopicData, UpdateTopicResponse, InviteToTopicData, InviteToTopicResponse, InviteGroupToTopicData, InviteGroupToTopicResponse, BookmarkTopicData, UpdateTopicStatusData, UpdateTopicStatusResponse, ListLatestTopicsData, ListLatestTopicsResponse, ListTopTopicsData, ListTopTopicsResponse, SetNotificationLevelData, SetNotificationLevelResponse, UpdateTopicTimestampData, UpdateTopicTimestampResponse, CreateTopicTimerData, CreateTopicTimerResponse, GetTopicByExternalIdData, CreateUploadData, CreateUploadResponse, GeneratePresignedPutData, GeneratePresignedPutResponse, CompleteExternalUploadData, CompleteExternalUploadResponse, CreateMultipartUploadData, CreateMultipartUploadResponse, BatchPresignMultipartPartsData, BatchPresignMultipartPartsResponse, AbortMultipartData, AbortMultipartResponse, CompleteMultipartData, CompleteMultipartResponse, ListUserBadgesData, ListUserBadgesResponse, CreateUserData, CreateUserResponse, GetUserData, GetUserResponse, UpdateUserData, UpdateUserResponse, GetUserExternalIdData, GetUserExternalIdResponse, GetUserIdentiyProviderExternalIdData, GetUserIdentiyProviderExternalIdResponse, UpdateAvatarData, UpdateAvatarResponse, UpdateEmailData, UpdateUsernameData, ListUsersPublicData, ListUsersPublicResponse, DeleteUserData, DeleteUserResponse, AdminGetUserData, AdminGetUserResponse, ActivateUserData, ActivateUserResponse, DeactivateUserData, DeactivateUserResponse, SuspendUserData, SuspendUserResponse, SilenceUserData, SilenceUserResponse, AnonymizeUserData, AnonymizeUserResponse, LogOutUserData, LogOutUserResponse, RefreshGravatarData, RefreshGravatarResponse, AdminListUsersData, AdminListUsersResponse, ListUserActionsData, ListUserActionsResponse, SendPasswordResetEmailData, SendPasswordResetEmailResponse, ChangePasswordData, GetUserEmailsData, GetUserEmailsResponse, PostMessageData, PostMessageResponse, ReactToMessageData, ReactToMessageResponse, EditMessageData, GetMessagesData, GetMessagesResponse, GetChatChannelData, GetChatChannelResponse, GetUserInfoData, GetUserInfoResponse, GetSessionData, GetSessionResponse } from './types.gen'; -import { zGetBackupsResponse, zCreateBackupResponse, zAdminListBadgesResponse, zCreateBadgeResponse, zUpdateBadgeResponse, zListCategoriesResponse, zCreateCategoryResponse, zUpdateCategoryResponse, zListCategoryTopicsResponse, zGetCategoryResponse, zCreateGroupResponse, zDeleteGroupResponse, zGetGroupResponse, zUpdateGroupResponse, zRemoveGroupMembersResponse, zListGroupMembersResponse, zAddGroupMembersResponse, zListGroupsResponse, zCreateInviteResponse, zCreateMultipleInvitesResponse, zGetNotificationsResponse, zMarkNotificationsAsReadResponse, zListPostsResponse, zCreateTopicPostPmResponse, zGetPostResponse, zUpdatePostResponse, zPostRepliesResponse, zLockPostResponse, zPerformPostActionResponse, zListUserPrivateMessagesResponse, zGetUserSentPrivateMessagesResponse, zSearchResponse, zGetSiteResponse, zGetSiteBasicInfoResponse, zListTagGroupsResponse, zCreateTagGroupResponse, zGetTagGroupResponse, zUpdateTagGroupResponse, zListTagsResponse, zGetTagResponse, zGetSpecificPostsFromTopicResponse, zGetTopicResponse, zUpdateTopicResponse, zInviteToTopicResponse, zInviteGroupToTopicResponse, zUpdateTopicStatusResponse, zListLatestTopicsResponse, zListTopTopicsResponse, zSetNotificationLevelResponse, zUpdateTopicTimestampResponse, zCreateTopicTimerResponse, zCreateUploadResponse, zGeneratePresignedPutResponse, zCompleteExternalUploadResponse, zCreateMultipartUploadResponse, zBatchPresignMultipartPartsResponse, zAbortMultipartResponse, zCompleteMultipartResponse, zListUserBadgesResponse, zCreateUserResponse, zGetUserResponse, zUpdateUserResponse, zGetUserExternalIdResponse, zGetUserIdentiyProviderExternalIdResponse, zUpdateAvatarResponse, zListUsersPublicResponse, zDeleteUserResponse, zAdminGetUserResponse, zActivateUserResponse, zDeactivateUserResponse, zSuspendUserResponse, zSilenceUserResponse, zAnonymizeUserResponse, zLogOutUserResponse, zRefreshGravatarResponse, zAdminListUsersResponse, zListUserActionsResponse, zSendPasswordResetEmailResponse, zGetUserEmailsResponse, zPostMessageResponse, zReactToMessageResponse, zGetMessagesResponse, zGetChatChannelResponse, zGetUserInfoResponse, zGetSessionResponse } from './zod.gen'; +import { type Options as ClientOptions, type TDataShape, type Client, formDataBodySerializer, urlSearchParamsBodySerializer } from '@hey-api/client-fetch'; +import type { GetBackupsData, GetBackupsResponse, CreateBackupData, CreateBackupResponse, DownloadBackupData, SendDownloadBackupEmailData, AdminListBadgesData, AdminListBadgesResponse, CreateBadgeData, CreateBadgeResponse, DeleteBadgeData, UpdateBadgeData, UpdateBadgeResponse, ListCategoriesData, ListCategoriesResponse, CreateCategoryData, CreateCategoryResponse, UpdateCategoryData, UpdateCategoryResponse, ListCategoryTopicsData, ListCategoryTopicsResponse, GetCategoryData, GetCategoryResponse, CreateGroupData, CreateGroupResponse, DeleteGroupData, DeleteGroupResponse, GetGroupData, GetGroupResponse, UpdateGroupData, UpdateGroupResponse, RemoveGroupMembersData, RemoveGroupMembersResponse, ListGroupMembersData, ListGroupMembersResponse, AddGroupMembersData, AddGroupMembersResponse, ListGroupsData, ListGroupsResponse, CreateInviteData, CreateInviteResponse, CreateMultipleInvitesData, CreateMultipleInvitesResponse, GetNotificationsData, GetNotificationsResponse, MarkNotificationsAsReadData, MarkNotificationsAsReadResponse, ListPostsData, ListPostsResponse, CreateTopicPostPmData, CreateTopicPostPmResponse, DeletePostData, GetPostData, GetPostResponse, UpdatePostData, UpdatePostResponse, PostRepliesData, PostRepliesResponse, LockPostData, LockPostResponse, PerformPostActionData, PerformPostActionResponse, ListUserPrivateMessagesData, ListUserPrivateMessagesResponse, GetUserSentPrivateMessagesData, GetUserSentPrivateMessagesResponse, SearchData, SearchResponse, GetSiteData, GetSiteResponse, GetSiteBasicInfoData, GetSiteBasicInfoResponse, ListTagGroupsData, ListTagGroupsResponse, CreateTagGroupData, CreateTagGroupResponse, GetTagGroupData, GetTagGroupResponse, UpdateTagGroupData, UpdateTagGroupResponse, ListTagsData, ListTagsResponse, GetTagData, GetTagResponse, GetSpecificPostsFromTopicData, GetSpecificPostsFromTopicResponse, RemoveTopicData, GetTopicData, GetTopicResponse, UpdateTopicData, UpdateTopicResponse, InviteToTopicData, InviteToTopicResponse, InviteGroupToTopicData, InviteGroupToTopicResponse, BookmarkTopicData, UpdateTopicStatusData, UpdateTopicStatusResponse, ListLatestTopicsData, ListLatestTopicsResponse, ListTopTopicsData, ListTopTopicsResponse, SetNotificationLevelData, SetNotificationLevelResponse, UpdateTopicTimestampData, UpdateTopicTimestampResponse, CreateTopicTimerData, CreateTopicTimerResponse, GetTopicByExternalIdData, CreateUploadData, CreateUploadResponse, GeneratePresignedPutData, GeneratePresignedPutResponse, CompleteExternalUploadData, CompleteExternalUploadResponse, CreateMultipartUploadData, CreateMultipartUploadResponse, BatchPresignMultipartPartsData, BatchPresignMultipartPartsResponse, AbortMultipartData, AbortMultipartResponse, CompleteMultipartData, CompleteMultipartResponse, ListUserBadgesData, ListUserBadgesResponse, CreateUserData, CreateUserResponse, GetUserData, GetUserResponse, UpdateUserData, UpdateUserResponse, GetUserExternalIdData, GetUserExternalIdResponse, GetUserIdentiyProviderExternalIdData, GetUserIdentiyProviderExternalIdResponse, UpdateAvatarData, UpdateAvatarResponse, UpdateEmailData, UpdateUsernameData, ListUsersPublicData, ListUsersPublicResponse, DeleteUserData, DeleteUserResponse, AdminGetUserData, AdminGetUserResponse, ActivateUserData, ActivateUserResponse, DeactivateUserData, DeactivateUserResponse, SuspendUserData, SuspendUserResponse, SilenceUserData, SilenceUserResponse, AnonymizeUserData, AnonymizeUserResponse, LogOutUserData, LogOutUserResponse, RefreshGravatarData, RefreshGravatarResponse, AdminListUsersData, AdminListUsersResponse, ListUserActionsData, ListUserActionsResponse, SendPasswordResetEmailData, SendPasswordResetEmailResponse, ChangePasswordData, GetUserEmailsData, GetUserEmailsResponse, SendMessageData, SendMessageResponse, EditMessageData, EditMessageResponse, GetMessagesData, GetMessagesResponse, ReactToMessageData, ReactToMessageResponse, GetUserCardData, GetUserCardResponse, GetSessionData, GetSessionResponse } from './types.gen'; +import { zGetBackupsResponse, zCreateBackupResponse, zAdminListBadgesResponse, zCreateBadgeResponse, zUpdateBadgeResponse, zListCategoriesResponse, zCreateCategoryResponse, zUpdateCategoryResponse, zListCategoryTopicsResponse, zGetCategoryResponse, zCreateGroupResponse, zDeleteGroupResponse, zGetGroupResponse, zUpdateGroupResponse, zRemoveGroupMembersResponse, zListGroupMembersResponse, zAddGroupMembersResponse, zListGroupsResponse, zCreateInviteResponse, zCreateMultipleInvitesResponse, zGetNotificationsResponse, zMarkNotificationsAsReadResponse, zListPostsResponse, zCreateTopicPostPmResponse, zGetPostResponse, zUpdatePostResponse, zPostRepliesResponse, zLockPostResponse, zPerformPostActionResponse, zListUserPrivateMessagesResponse, zGetUserSentPrivateMessagesResponse, zSearchResponse, zGetSiteResponse, zGetSiteBasicInfoResponse, zListTagGroupsResponse, zCreateTagGroupResponse, zGetTagGroupResponse, zUpdateTagGroupResponse, zListTagsResponse, zGetTagResponse, zGetSpecificPostsFromTopicResponse, zGetTopicResponse, zUpdateTopicResponse, zInviteToTopicResponse, zInviteGroupToTopicResponse, zUpdateTopicStatusResponse, zListLatestTopicsResponse, zListTopTopicsResponse, zSetNotificationLevelResponse, zUpdateTopicTimestampResponse, zCreateTopicTimerResponse, zCreateUploadResponse, zGeneratePresignedPutResponse, zCompleteExternalUploadResponse, zCreateMultipartUploadResponse, zBatchPresignMultipartPartsResponse, zAbortMultipartResponse, zCompleteMultipartResponse, zListUserBadgesResponse, zCreateUserResponse, zGetUserResponse, zUpdateUserResponse, zGetUserExternalIdResponse, zGetUserIdentiyProviderExternalIdResponse, zUpdateAvatarResponse, zListUsersPublicResponse, zDeleteUserResponse, zAdminGetUserResponse, zActivateUserResponse, zDeactivateUserResponse, zSuspendUserResponse, zSilenceUserResponse, zAnonymizeUserResponse, zLogOutUserResponse, zRefreshGravatarResponse, zAdminListUsersResponse, zListUserActionsResponse, zSendPasswordResetEmailResponse, zGetUserEmailsResponse, zSendMessageResponse, zEditMessageResponse, zGetMessagesResponse, zReactToMessageResponse, zGetUserCardResponse, zGetSessionResponse } from './zod.gen'; import { client as _heyApiClient } from './client.gen'; import { getMessagesResponseTransformer } from './transformers.gen'; @@ -1434,55 +1434,43 @@ export const getUserEmails = (options: Opt }; /** - * Post a new message to a chat channel + * Send a message to a chat channel */ -export const postMessage = (options: Options) => { - return (options.client ?? _heyApiClient).post({ +export const sendMessage = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + ...urlSearchParamsBodySerializer, responseValidator: async (data) => { - return await zPostMessageResponse.parseAsync(data); + return await zSendMessageResponse.parseAsync(data); }, url: '/chat/{channel_id}', ...options, headers: { - 'Content-Type': 'application/json', + 'Content-Type': 'application/x-www-form-urlencoded', ...options?.headers } }); }; /** - * Add or remove a reaction on a chat message + * Edit an existing message */ -export const reactToMessage = (options: Options) => { - return (options.client ?? _heyApiClient).put({ +export const editMessage = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + ...urlSearchParamsBodySerializer, responseValidator: async (data) => { - return await zReactToMessageResponse.parseAsync(data); + return await zEditMessageResponse.parseAsync(data); }, - url: '/chat/{channel_id}/react/{message_id}', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); -}; - -/** - * Edit an existing chat message - */ -export const editMessage = (options: Options) => { - return (options.client ?? _heyApiClient).put({ url: '/chat/api/channels/{channel_id}/messages/{message_id}', ...options, headers: { - 'Content-Type': 'application/json', + 'Content-Type': 'application/x-www-form-urlencoded', ...options?.headers } }); }; /** - * Get messages from a chat channel + * Fetch chat messages */ export const getMessages = (options: Options) => { return (options.client ?? _heyApiClient).get({ @@ -1496,29 +1484,30 @@ export const getMessages = (options: Optio }; /** - * Create or get a direct message channel + * React to a message */ -export const getChatChannel = (options: Options) => { - return (options.client ?? _heyApiClient).post({ +export const reactToMessage = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + ...urlSearchParamsBodySerializer, responseValidator: async (data) => { - return await zGetChatChannelResponse.parseAsync(data); + return await zReactToMessageResponse.parseAsync(data); }, - url: '/chat/api/direct-message-channels.json', + url: '/chat/{channel_id}/react/{message_id}', ...options, headers: { - 'Content-Type': 'application/json', + 'Content-Type': 'application/x-www-form-urlencoded', ...options?.headers } }); }; /** - * Get user-card info + * Fetch a user card */ -export const getUserInfo = (options: Options) => { - return (options.client ?? _heyApiClient).get({ +export const getUserCard = (options: Options) => { + return (options.client ?? _heyApiClient).get({ responseValidator: async (data) => { - return await zGetUserInfoResponse.parseAsync(data); + return await zGetUserCardResponse.parseAsync(data); }, url: '/u/{username}/card.json', ...options @@ -1526,7 +1515,7 @@ export const getUserInfo = (options: Optio }; /** - * Get current session information + * Get current session info */ export const getSession = (options?: Options) => { return (options?.client ?? _heyApiClient).get({ diff --git a/client/types.gen.ts b/client/types.gen.ts index 2ffae56..632b524 100644 --- a/client/types.gen.ts +++ b/client/types.gen.ts @@ -5100,340 +5100,152 @@ export type GetUserEmailsResponses = { export type GetUserEmailsResponse = GetUserEmailsResponses[keyof GetUserEmailsResponses]; -export type PostMessageData = { +export type SendMessageData = { body: { - /** - * The content of the message. - */ message: string; - }; - headers?: { - /** - * Referer URL (e.g. https:///chat/c/{channel_name}/{channel_id}) - */ - Referer?: string; + staged_id?: string; }; path: { - /** - * The ID of the chat channel. - */ channel_id: number; }; query?: never; url: '/chat/{channel_id}'; }; -export type PostMessageErrors = { - /** - * Bad Request - */ - 400: unknown; +export type SendMessageResponses = { /** - * Forbidden - */ - 403: unknown; - /** - * Too Many Requests - */ - 429: unknown; - /** - * Internal Server Error - */ - 500: unknown; -}; - -export type PostMessageResponses = { - /** - * Posted message response + * Message sent successfully */ 200: { - id?: number; - cooked?: string; - raw?: string; - errors?: Array; - }; -}; - -export type PostMessageResponse = PostMessageResponses[keyof PostMessageResponses]; - -export type ReactToMessageData = { - body: { - /** - * Reaction action. - */ - react_action: 'add' | 'remove'; - /** - * The emoji to react with (e.g. :smile:). - */ - emoji: string; - }; - headers?: { - /** - * Referer URL - */ - Referer?: string; - }; - path: { - /** - * Chat channel ID. - */ - channel_id: number; - /** - * Chat message ID. - */ - message_id: number; - }; - query?: never; - url: '/chat/{channel_id}/react/{message_id}'; -}; - -export type ReactToMessageErrors = { - /** - * Bad Request - */ - 400: unknown; - /** - * Forbidden - */ - 403: unknown; - /** - * Too Many Requests - */ - 429: unknown; - /** - * Internal Server Error - */ - 500: unknown; -}; - -export type ReactToMessageResponses = { - /** - * Reaction result - */ - 200: { - success?: 'OK'; + success?: string; + message_id?: number; }; }; -export type ReactToMessageResponse = ReactToMessageResponses[keyof ReactToMessageResponses]; +export type SendMessageResponse = SendMessageResponses[keyof SendMessageResponses]; export type EditMessageData = { body: { - /** - * New message content. - */ message: string; }; - headers?: { - /** - * Referer URL - */ - Referer?: string; - }; path: { - /** - * Chat channel ID - */ channel_id: number; - /** - * Message ID - */ message_id: number; }; query?: never; url: '/chat/api/channels/{channel_id}/messages/{message_id}'; }; -export type EditMessageErrors = { - /** - * Bad Request - */ - 400: unknown; - /** - * Forbidden - */ - 403: unknown; - /** - * Not Found - */ - 404: unknown; - /** - * Internal Server Error - */ - 500: unknown; -}; - export type EditMessageResponses = { /** - * Edited message response + * Message updated */ - 200: unknown; + 200: { + success?: string; + message_id?: number; + }; }; +export type EditMessageResponse = EditMessageResponses[keyof EditMessageResponses]; + export type GetMessagesData = { body?: never; - headers?: { - /** - * Referer URL - */ - Referer?: string; - }; path: { - /** - * Chat channel ID - */ channel_id: number; }; query?: { - /** - * Start from last-read - */ fetch_from_last_read?: boolean; - /** - * Number of messages - */ page_size?: number; }; url: '/chat/api/channels/{channel_id}/messages'; }; -export type GetMessagesErrors = { - /** - * Bad Request - */ - 400: unknown; - /** - * Forbidden - */ - 403: unknown; - /** - * Too Many Requests - */ - 429: unknown; - /** - * Internal Server Error - */ - 500: unknown; -}; - export type GetMessagesResponses = { /** - * List of chat messages + * A page of messages with tracking info */ 200: { messages?: Array<{ id?: number; message?: string; + cooked?: string; created_at?: Date; + chat_channel_id?: number; + streaming?: boolean; user?: { + id?: number; username?: string; + name?: string; + avatar_template?: string; + moderator?: boolean; + admin?: boolean; + staff?: boolean; }; + mentioned_users?: Array<{ + id?: number; + username?: string; + name?: string; + }>; + available_flags?: Array; + uploads?: Array<{ + [key: string]: unknown; + }>; + edited?: boolean; }>; + tracking?: { + [key: string]: unknown; + }; + meta?: { + [key: string]: unknown; + }; }; }; export type GetMessagesResponse = GetMessagesResponses[keyof GetMessagesResponses]; -export type GetChatChannelData = { +export type ReactToMessageData = { body: { - /** - * Username of the other user - */ - 'target_usernames[]': string; + react_action: string; + emoji: string; }; - headers?: { - /** - * Referer URL - */ - Referer?: string; + path: { + channel_id: number; + message_id: number; }; - path?: never; query?: never; - url: '/chat/api/direct-message-channels.json'; -}; - -export type GetChatChannelErrors = { - /** - * Bad Request - */ - 400: unknown; - /** - * Forbidden - */ - 403: unknown; - /** - * Too Many Requests - */ - 429: unknown; - /** - * Internal Server Error - */ - 500: unknown; + url: '/chat/{channel_id}/react/{message_id}'; }; -export type GetChatChannelResponses = { +export type ReactToMessageResponses = { /** - * DM channel info + * Reaction added/removed */ 200: { - channel?: { - id?: number; - chatable?: { - users?: Array<{ - id?: number; - username?: string; - name?: string; - avatar_template?: string; - admin?: boolean; - moderator?: boolean; - }>; - }; - }; + success?: string; }; }; -export type GetChatChannelResponse = GetChatChannelResponses[keyof GetChatChannelResponses]; +export type ReactToMessageResponse = ReactToMessageResponses[keyof ReactToMessageResponses]; -export type GetUserInfoData = { +export type GetUserCardData = { body?: never; path: { - /** - * Discourse username - */ username: string; }; query?: never; url: '/u/{username}/card.json'; }; -export type GetUserInfoErrors = { - /** - * Not Found - */ - 404: unknown; - /** - * Internal Server Error - */ - 500: unknown; -}; - -export type GetUserInfoResponses = { +export type GetUserCardResponses = { /** - * User card info + * Full user card with badges and metadata */ 200: { - user?: { - id?: number; - username?: string; - name?: string; - avatar_template?: string; - admin?: boolean; - moderator?: boolean; - }; + [key: string]: unknown; }; }; -export type GetUserInfoResponse = GetUserInfoResponses[keyof GetUserInfoResponses]; +export type GetUserCardResponse = GetUserCardResponses[keyof GetUserCardResponses]; export type GetSessionData = { body?: never; @@ -5442,28 +5254,9 @@ export type GetSessionData = { url: '/session/current.json'; }; -export type GetSessionErrors = { - /** - * Bad Request - */ - 400: unknown; - /** - * Forbidden – invalid API key or insufficient permissions - */ - 403: unknown; - /** - * Too Many Requests - */ - 429: unknown; - /** - * Internal Server Error - */ - 500: unknown; -}; - export type GetSessionResponses = { /** - * Current session info + * Authenticated user session data */ 200: { current_user: { diff --git a/client/zod.gen.ts b/client/zod.gen.ts index 973092b..0a874b6 100644 --- a/client/zod.gen.ts +++ b/client/zod.gen.ts @@ -4547,56 +4547,51 @@ export const zGetUserEmailsResponse = z.object({ associated_accounts: z.array(z.unknown()) }); -export const zPostMessageResponse = z.object({ - id: z.number().int().optional(), - cooked: z.string().optional(), - raw: z.string().optional(), - errors: z.array(z.string()).optional() +export const zSendMessageResponse = z.object({ + success: z.string().optional(), + message_id: z.number().int().optional() }); -export const zReactToMessageResponse = z.object({ - success: z.enum([ - 'OK' - ]).optional() +export const zEditMessageResponse = z.object({ + success: z.string().optional(), + message_id: z.number().int().optional() }); export const zGetMessagesResponse = z.object({ messages: z.array(z.object({ id: z.number().int().optional(), message: z.string().optional(), + cooked: z.string().optional(), created_at: z.string().datetime().optional(), + chat_channel_id: z.number().int().optional(), + streaming: z.boolean().optional(), user: z.object({ - username: z.string().optional() - }).optional() - })).optional() + id: z.number().int().optional(), + username: z.string().optional(), + name: z.string().optional(), + avatar_template: z.string().optional(), + moderator: z.boolean().optional(), + admin: z.boolean().optional(), + staff: z.boolean().optional() + }).optional(), + mentioned_users: z.array(z.object({ + id: z.number().int().optional(), + username: z.string().optional(), + name: z.string().optional() + })).optional(), + available_flags: z.array(z.string()).optional(), + uploads: z.array(z.object({})).optional(), + edited: z.boolean().optional() + })).optional(), + tracking: z.object({}).optional(), + meta: z.object({}).optional() }); -export const zGetChatChannelResponse = z.object({ - channel: z.object({ - id: z.number().int().optional(), - chatable: z.object({ - users: z.array(z.object({ - id: z.number().int().optional(), - username: z.string().optional(), - name: z.string().optional(), - avatar_template: z.string().optional(), - admin: z.boolean().optional(), - moderator: z.boolean().optional() - })).optional() - }).optional() - }).optional() +export const zReactToMessageResponse = z.object({ + success: z.string().optional() }); -export const zGetUserInfoResponse = z.object({ - user: z.object({ - id: z.number().int().optional(), - username: z.string().optional(), - name: z.string().optional(), - avatar_template: z.string().optional(), - admin: z.boolean().optional(), - moderator: z.boolean().optional() - }).optional() -}); +export const zGetUserCardResponse = z.object({}); export const zGetSessionResponse = z.object({ current_user: z.object({ diff --git a/lib/handle-app-mention.ts b/lib/handle-app-mention.ts index 24ea734..55cfbb1 100644 --- a/lib/handle-app-mention.ts +++ b/lib/handle-app-mention.ts @@ -1,13 +1,13 @@ import { getThread } from "./slack-utils"; import { generateResponse } from "./generate-response"; import type { WebhookNotification } from "../types"; -import { editMessage, postMessage } from "../client/sdk.gen"; +import { editMessage, sendMessage } from "../client/sdk.gen"; const updateStatusUtil = async ( initialStatus: string, event: WebhookNotification, ) => { - const res = await postMessage({ + const res = await sendMessage({ path: { channel_id: event.data?.chat_channel_id as number, }, @@ -17,7 +17,6 @@ const updateStatusUtil = async ( }, }); - // @ts-expect-error the types for this are broken if (!res?.data || !res.data?.message_id) throw new Error("Failed to post initial message"); const initialMessage = res.data; @@ -26,7 +25,6 @@ const updateStatusUtil = async ( await editMessage({ path: { channel_id: event.data?.chat_channel_id as number, - // @ts-expect-error the types for this are broken message_id: initialMessage.message_id!, }, body: { diff --git a/lib/handle-messages.ts b/lib/handle-messages.ts index e987674..9100a15 100644 --- a/lib/handle-messages.ts +++ b/lib/handle-messages.ts @@ -5,7 +5,7 @@ import type { import { getThread, updateStatusUtil } from "./slack-utils"; import { generateResponse } from "./generate-response"; import type { WebhookChatMessage } from "../types"; -import { postMessage } from "../client/sdk.gen"; +import { sendMessage } from "../client/sdk.gen"; export async function assistantThreadMessage( event: AssistantThreadStartedEvent, @@ -14,7 +14,7 @@ export async function assistantThreadMessage( console.log(`Thread started: ${channel_id} ${thread_ts}`); console.log(JSON.stringify(event)); - await postMessage({ + await sendMessage({ path: { channel_id: channel_id as any, }, diff --git a/lib/slack-utils.ts b/lib/slack-utils.ts index 2d3405a..682f9cc 100644 --- a/lib/slack-utils.ts +++ b/lib/slack-utils.ts @@ -2,7 +2,7 @@ import type { WebhookChatMessage, WebhookNotification } from '../types'; import type { CoreMessage } from 'ai' import * as crypto from 'node:crypto' import { client } from '../client/client.gen'; -import { postMessage, editMessage, getMessages, getSession } from '../client/sdk.gen'; +import { sendMessage, editMessage, getMessages, getSession } from '../client/sdk.gen'; const signingSecret = process.env.DISCOURSE_SIGNING_SECRET! const url = process.env.DISCOURSE_URL!; @@ -63,7 +63,7 @@ export const updateStatusUtil = async ( initialStatus: string, event: WebhookChatMessage, ) => { - const res = await postMessage({ + const res = await sendMessage({ path: { channel_id: event.channel?.id, }, @@ -76,7 +76,6 @@ export const updateStatusUtil = async ( if (!res?.data) throw new Error("Failed to post initial message"); const initialMessage = res.data; - // @ts-expect-error the types for this are broken if (!initialMessage || !initialMessage.message_id) throw new Error("Failed to post initial message"); @@ -84,7 +83,6 @@ export const updateStatusUtil = async ( await editMessage({ path: { channel_id: event.channel?.id, - // @ts-expect-error the types for this are broken message_id: initialMessage.message_id!, }, body: { @@ -114,7 +112,6 @@ export async function getThread( const result = messages .map((message) => { - // @ts-expect-error the types for this are broken const isBot = message.user?.id === botUserId as any; if (!message.message) return null; diff --git a/openapi.json b/openapi.json index 1d0623a..a1b2e3b 100644 --- a/openapi.json +++ b/openapi.json @@ -17078,8 +17078,8 @@ }, "/chat/{channel_id}": { "post": { - "summary": "Post a new message to a chat channel", - "operationId": "postMessage", + "summary": "Send a message to a chat channel", + "operationId": "sendMessage", "tags": [ "Chat" ], @@ -17089,30 +17089,26 @@ "in": "path", "required": true, "schema": { - "type": "integer" - }, - "description": "The ID of the chat channel." - }, - { - "name": "Referer", - "in": "header", - "required": false, - "schema": { - "type": "string" - }, - "description": "Referer URL (e.g. https:///chat/c/{channel_name}/{channel_id})" + "type": "integer", + "example": 23 + } } ], "requestBody": { "required": true, "content": { - "application/json": { + "application/x-www-form-urlencoded": { "schema": { "type": "object", "properties": { "message": { "type": "string", - "description": "The content of the message." + "example": "this spam to helpp me understand the response data" + }, + "staged_id": { + "type": "string", + "nullable": true, + "example": "0886e40a-b729-4d8a-af93-925df316fe67" } }, "required": [ @@ -17124,61 +17120,36 @@ }, "responses": { "200": { - "description": "Posted message response", + "description": "Message sent successfully", "content": { "application/json": { "schema": { "type": "object", "properties": { - "id": { - "type": "integer" - }, - "cooked": { - "type": "string" - }, - "raw": { - "type": "string" + "success": { + "type": "string", + "example": "OK" }, - "errors": { - "type": "array", - "items": { - "type": "string" - }, - "example": [ - "You posted an identical message too recently." - ] + "message_id": { + "type": "integer", + "example": 4041 } } + }, + "example": { + "success": "OK", + "message_id": 4041 } } } - }, - "400": { - "description": "Bad Request" - }, - "403": { - "description": "Forbidden" - }, - "429": { - "description": "Too Many Requests", - "headers": { - "Retry-After": { - "schema": { - "type": "integer" - } - } - } - }, - "500": { - "description": "Internal Server Error" } } } }, - "/chat/{channel_id}/react/{message_id}": { + "/chat/api/channels/{channel_id}/messages/{message_id}": { "put": { - "summary": "Add or remove a reaction on a chat message", - "operationId": "reactToMessage", + "summary": "Edit an existing message", + "operationId": "editMessage", "tags": [ "Chat" ], @@ -17188,52 +17159,34 @@ "in": "path", "required": true, "schema": { - "type": "integer" - }, - "description": "Chat channel ID." + "type": "integer", + "example": 23 + } }, { "name": "message_id", "in": "path", "required": true, "schema": { - "type": "integer" - }, - "description": "Chat message ID." - }, - { - "name": "Referer", - "in": "header", - "required": false, - "schema": { - "type": "string" - }, - "description": "Referer URL" + "type": "integer", + "example": 4050 + } } ], "requestBody": { "required": true, "content": { - "application/json": { + "application/x-www-form-urlencoded": { "schema": { "type": "object", "properties": { - "react_action": { - "type": "string", - "enum": [ - "add", - "remove" - ], - "description": "Reaction action." - }, - "emoji": { + "message": { "type": "string", - "description": "The emoji to react with (e.g. :smile:)." + "example": "Hello world!" } }, "required": [ - "react_action", - "emoji" + "message" ] } } @@ -17241,122 +17194,33 @@ }, "responses": { "200": { - "description": "Reaction result", + "description": "Message updated", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { - "type": "string", - "enum": [ - "OK" - ] + "type": "string" + }, + "message_id": { + "type": "integer" } } - } - } - } - }, - "400": { - "description": "Bad Request" - }, - "403": { - "description": "Forbidden" - }, - "429": { - "description": "Too Many Requests", - "headers": { - "Retry-After": { - "schema": { - "type": "integer" - } - } - } - }, - "500": { - "description": "Internal Server Error" - } - } - } - }, - "/chat/api/channels/{channel_id}/messages/{message_id}": { - "put": { - "summary": "Edit an existing chat message", - "operationId": "editMessage", - "tags": [ - "Chat" - ], - "parameters": [ - { - "name": "channel_id", - "in": "path", - "required": true, - "schema": { - "type": "integer" - }, - "description": "Chat channel ID" - }, - { - "name": "message_id", - "in": "path", - "required": true, - "schema": { - "type": "integer" - }, - "description": "Message ID" - }, - { - "name": "Referer", - "in": "header", - "required": false, - "schema": { - "type": "string" - }, - "description": "Referer URL" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "message": { - "type": "string", - "description": "New message content." - } }, - "required": [ - "message" - ] + "example": { + "success": "OK", + "message_id": 4050 + } } } } - }, - "responses": { - "200": { - "description": "Edited message response" - }, - "400": { - "description": "Bad Request" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - }, - "500": { - "description": "Internal Server Error" - } } } }, "/chat/api/channels/{channel_id}/messages": { "get": { - "summary": "Get messages from a chat channel", + "summary": "Fetch chat messages", "operationId": "getMessages", "tags": [ "Chat" @@ -17367,43 +17231,30 @@ "in": "path", "required": true, "schema": { - "type": "integer" - }, - "description": "Chat channel ID" + "type": "integer", + "example": 23 + } }, { "name": "fetch_from_last_read", "in": "query", - "required": false, "schema": { "type": "boolean", - "default": false - }, - "description": "Start from last-read" + "example": true + } }, { "name": "page_size", "in": "query", - "required": false, "schema": { "type": "integer", - "default": 20 - }, - "description": "Number of messages" - }, - { - "name": "Referer", - "in": "header", - "required": false, - "schema": { - "type": "string" - }, - "description": "Referer URL" + "example": 50 + } } ], "responses": { "200": { - "description": "List of chat messages", + "description": "A page of messages with tracking info", "content": { "application/json": { "schema": { @@ -17420,80 +17271,182 @@ "message": { "type": "string" }, + "cooked": { + "type": "string" + }, "created_at": { "type": "string", "format": "date-time" }, + "chat_channel_id": { + "type": "integer" + }, + "streaming": { + "type": "boolean" + }, "user": { "type": "object", "properties": { + "id": { + "type": "integer" + }, "username": { "type": "string" + }, + "name": { + "type": "string" + }, + "avatar_template": { + "type": "string" + }, + "moderator": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "staff": { + "type": "boolean" } } + }, + "mentioned_users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + }, + "available_flags": { + "type": "array", + "items": { + "type": "string" + } + }, + "uploads": { + "type": "array", + "items": { + "type": "object" + } + }, + "edited": { + "type": "boolean" } } } + }, + "tracking": { + "type": "object" + }, + "meta": { + "type": "object" } } + }, + "example": { + "messages": [ + { + "id": 4027, + "message": "@twa why dont you have nitro", + "cooked": "

@twa why dont you have nitro

", + "created_at": "2025-05-22T16:06:07Z", + "chat_channel_id": 23, + "streaming": false, + "user": { + "id": 16, + "username": "winter", + "name": "Ice", + "avatar_template": "/user_avatar/community.techwithanirudh.com/winter/{size}/64_2.png", + "moderator": true, + "admin": false, + "staff": true + }, + "mentioned_users": [ + { + "id": 1, + "username": "twa", + "name": "Anirudh Sriram" + } + ], + "available_flags": [ + "notify_user", + "off_topic", + "spam" + ], + "uploads": [] + } + ], + "tracking": { + "channel_tracking": {}, + "thread_tracking": {} + }, + "meta": { + "can_load_more_past": true, + "can_load_more_future": false + } } } } - }, - "400": { - "description": "Bad Request" - }, - "403": { - "description": "Forbidden" - }, - "429": { - "description": "Too Many Requests", - "headers": { - "Retry-After": { - "schema": { - "type": "integer" - } - } - } - }, - "500": { - "description": "Internal Server Error" } } } }, - "/chat/api/direct-message-channels.json": { - "post": { - "summary": "Create or get a direct message channel", - "operationId": "getChatChannel", + "/chat/{channel_id}/react/{message_id}": { + "put": { + "summary": "React to a message", + "operationId": "reactToMessage", "tags": [ - "DirectMessage" + "Chat" ], "parameters": [ { - "name": "Referer", - "in": "header", - "required": false, + "name": "channel_id", + "in": "path", + "required": true, "schema": { - "type": "string" - }, - "description": "Referer URL" + "type": "integer", + "example": 23 + } + }, + { + "name": "message_id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "example": 4051 + } } ], "requestBody": { "required": true, "content": { - "application/json": { + "application/x-www-form-urlencoded": { "schema": { "type": "object", "properties": { - "target_usernames[]": { + "react_action": { + "type": "string", + "example": "add" + }, + "emoji": { "type": "string", - "description": "Username of the other user" + "example": "heart" } }, "required": [ - "target_usernames[]" + "react_action", + "emoji" ] } } @@ -17501,85 +17454,32 @@ }, "responses": { "200": { - "description": "DM channel info", + "description": "Reaction added/removed", "content": { "application/json": { "schema": { "type": "object", "properties": { - "channel": { - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "chatable": { - "type": "object", - "properties": { - "users": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "username": { - "type": "string" - }, - "name": { - "type": "string", - "nullable": true - }, - "avatar_template": { - "type": "string" - }, - "admin": { - "type": "boolean" - }, - "moderator": { - "type": "boolean" - } - } - } - } - } - } - } + "success": { + "type": "string" } } + }, + "example": { + "success": "OK" } } } - }, - "400": { - "description": "Bad Request" - }, - "403": { - "description": "Forbidden" - }, - "429": { - "description": "Too Many Requests", - "headers": { - "Retry-After": { - "schema": { - "type": "integer" - } - } - } - }, - "500": { - "description": "Internal Server Error" } } } }, "/u/{username}/card.json": { "get": { - "summary": "Get user-card info", - "operationId": "getUserInfo", + "summary": "Fetch a user card", + "operationId": "getUserCard", "tags": [ - "Users" + "User" ], "parameters": [ { @@ -17587,147 +17487,128 @@ "in": "path", "required": true, "schema": { - "type": "string" - }, - "description": "Discourse username" + "type": "string", + "example": "winter" + } } ], "responses": { "200": { - "description": "User card info", + "description": "Full user card with badges and metadata", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "user": { - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "username": { - "type": "string" - }, - "name": { - "type": "string", - "nullable": true - }, - "avatar_template": { - "type": "string" - }, - "admin": { - "type": "boolean" - }, - "moderator": { - "type": "boolean" - } - } + "type": "object" + }, + "example": { + "user_badges": [ + { + "id": 50, + "granted_at": "2025-05-06T18:10:58.099Z", + "count": 1, + "badge_id": 4 + } + ], + "badges": [ + { + "id": 4, + "name": "Leader", + "description": "Global edit...", + "slug": "leader" } + ], + "badge_types": [ + { + "id": 1, + "name": "Gold", + "sort_order": 9 + } + ], + "users": [ + { + "id": 16, + "username": "winter", + "name": "Ice", + "trust_level": 4 + } + ], + "user": { + "id": 16, + "username": "winter", + "name": "Ice", + "flair_name": "CCC", + "trust_level": 4 } } } } - }, - "404": { - "description": "Not Found" - }, - "500": { - "description": "Internal Server Error" } } } }, "/session/current.json": { "get": { - "summary": "Get current session information", + "summary": "Get current session info", "operationId": "getSession", "tags": [ "Session" ], "responses": { "200": { - "description": "Current session info", + "description": "Authenticated user session data", "content": { "application/json": { "schema": { "type": "object", - "required": [ - "current_user" - ], "properties": { "current_user": { "type": "object", - "required": [ - "id", - "username", - "avatar_template", - "admin", - "moderator" - ], "properties": { "id": { - "type": "integer", - "example": 1 + "type": "integer" }, "username": { - "type": "string", - "example": "anirudh" + "type": "string" }, "name": { "type": "string", - "nullable": true, - "example": "Anirudh Sriram" + "nullable": true }, "avatar_template": { - "type": "string", - "example": "/user_avatar/discourse.example.com/anirudh/{size}/2_2.png" + "type": "string" }, "admin": { - "type": "boolean", - "example": true + "type": "boolean" }, "moderator": { - "type": "boolean", - "example": false + "type": "boolean" } - } + }, + "required": [ + "id", + "username", + "avatar_template", + "admin", + "moderator" + ] } - } + }, + "required": [ + "current_user" + ] }, "example": { "current_user": { "id": 1, - "username": "anirudh", + "username": "twa", "name": "Anirudh Sriram", - "avatar_template": "/user_avatar/discourse.example.com/anirudh/120/2_2.png", + "avatar_template": "/user_avatar/community.techwithanirudh.com/twa/{size}/70_2.png", "admin": true, - "moderator": false + "moderator": true } } } } - }, - "400": { - "description": "Bad Request" - }, - "403": { - "description": "Forbidden – invalid API key or insufficient permissions" - }, - "429": { - "description": "Too Many Requests", - "headers": { - "Retry-After": { - "description": "Seconds until you can retry", - "schema": { - "type": "integer", - "example": 30 - } - } - } - }, - "500": { - "description": "Internal Server Error" } } } @@ -17744,14 +17625,6 @@ } ], "components": { - "schemas": {}, - "securitySchemes": { - "ApiKeyAuth": { - "type": "apiKey", - "in": "header", - "name": "Api-Key", - "description": "Your Discourse API key." - } - } + "schemas": {} } } \ No newline at end of file From f6526b54392eb84508727e8fc76328127c27ba5e Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Thu, 22 May 2025 18:22:41 +0000 Subject: [PATCH 10/50] feat: Enhance bot functionality and improve response generation - Updated generateResponse to include bot creator information. - Modified handle-app-mention to utilize GetSessionResponse for user identification. - Enhanced handle-messages to check for keywords and direct messages before processing. - Refactored slack-utils to accept GetSessionResponse for user identification in getThread. - Updated OpenAPI specifications to remove unnecessary required fields and improve response descriptions. - Adjusted package.json build script to streamline the build process. - Made profile_background_upload_url optional in User interface for better flexibility. --- api/events.ts | 30 +- client/types.gen.ts | 226 +++++++- client/zod.gen.ts | 327 ++++++++++- lib/generate-response.ts | 1 + lib/handle-app-mention.ts | 11 +- lib/handle-messages.ts | 24 +- lib/slack-utils.ts | 22 +- openapi.json | 1125 +++++++++++++++++++++++++++++++------ package.json | 2 +- types/discourse.ts | 2 +- 10 files changed, 1542 insertions(+), 228 deletions(-) diff --git a/api/events.ts b/api/events.ts index 4be6e02..ddbaf7c 100644 --- a/api/events.ts +++ b/api/events.ts @@ -4,7 +4,7 @@ import { } from "../lib/handle-messages"; import { waitUntil } from "@vercel/functions"; import { handleNewAppMention } from "../lib/handle-app-mention"; -import { verifyRequest, getBotId } from "../lib/slack-utils"; +import { verifyRequest, getBotUser } from "../lib/slack-utils"; import type { WebhookChatMessage, WebhookNotification } from "../types"; export async function POST(request: Request) { @@ -14,28 +14,26 @@ export async function POST(request: Request) { await verifyRequest({ request, rawBody }); try { - const botUserId = await getBotId(); + const botUser = await getBotUser(); const event = { type: request.headers.get('X-Discourse-Event-Type'), id: request.headers.get('X-Discourse-Event-Id') }; - console.log('got request', event.type) - - if (event.type === "notification" && payload.notification_type === 29) { - waitUntil(handleNewAppMention(payload?.notification as WebhookNotification, botUserId)); - } - - // if (event.type === "assistant_thread_started") { - // waitUntil(assistantThreadMessage(event)); - // } - - if ( + if (event.type === "notification" && payload.notification?.notification_type === 29) { + console.log('processing AI request from notification'); + waitUntil( + handleNewAppMention(payload?.notification as WebhookNotification, botUser) + ); + } else if ( event.type === "chat_message" && - payload?.chat_message.message.user.id !== botUserId + payload?.chat_message.message.user.id !== botUser.id ) { - waitUntil(handleNewAssistantMessage(payload?.chat_message as WebhookChatMessage, botUserId)); + console.log('processing AI request from chat message'); + waitUntil( + handleNewAssistantMessage(payload?.chat_message as WebhookChatMessage, botUser) + ); } return new Response("Success!", { status: 200 }); @@ -43,4 +41,4 @@ export async function POST(request: Request) { console.error("Error generating response", error); return new Response("Error generating response", { status: 500 }); } -} +} \ No newline at end of file diff --git a/client/types.gen.ts b/client/types.gen.ts index 632b524..2220f1a 100644 --- a/client/types.gen.ts +++ b/client/types.gen.ts @@ -5101,8 +5101,8 @@ export type GetUserEmailsResponses = { export type GetUserEmailsResponse = GetUserEmailsResponses[keyof GetUserEmailsResponses]; export type SendMessageData = { - body: { - message: string; + body?: { + message?: string; staged_id?: string; }; path: { @@ -5125,8 +5125,8 @@ export type SendMessageResponses = { export type SendMessageResponse = SendMessageResponses[keyof SendMessageResponses]; export type EditMessageData = { - body: { - message: string; + body?: { + message?: string; }; path: { channel_id: number; @@ -5162,7 +5162,7 @@ export type GetMessagesData = { export type GetMessagesResponses = { /** - * A page of messages with tracking info + * A page of messages */ 200: { messages?: Array<{ @@ -5186,27 +5186,33 @@ export type GetMessagesResponses = { username?: string; name?: string; }>; - available_flags?: Array; + available_flags?: Array; uploads?: Array<{ [key: string]: unknown; }>; edited?: boolean; + blocks?: Array<{ + [key: string]: unknown; + }>; + chat_webhook_event?: { + [key: string]: unknown; + } | null; }>; tracking?: { [key: string]: unknown; - }; + } | null; meta?: { [key: string]: unknown; - }; + } | null; }; }; export type GetMessagesResponse = GetMessagesResponses[keyof GetMessagesResponses]; export type ReactToMessageData = { - body: { - react_action: string; - emoji: string; + body?: { + react_action?: string; + emoji?: string; }; path: { channel_id: number; @@ -5238,7 +5244,7 @@ export type GetUserCardData = { export type GetUserCardResponses = { /** - * Full user card with badges and metadata + * User card with badges & metadata */ 200: { [key: string]: unknown; @@ -5256,16 +5262,204 @@ export type GetSessionData = { export type GetSessionResponses = { /** - * Authenticated user session data + * Authenticated User Session Data */ 200: { - current_user: { + current_user?: { id: number; username: string; - name?: string; + name: string; avatar_template: string; - admin: boolean; + last_posted_at: string | null; + last_seen_at: string | null; + created_at: string; + ignored: boolean; + muted: boolean; + can_ignore_user: boolean; + can_ignore_users?: boolean; + can_mute_user: boolean; + can_mute_users?: boolean; + can_send_private_messages: boolean; + can_send_private_message_to_user: boolean; + trust_level: number; moderator: boolean; + admin: boolean; + title: string | null; + badge_count: number; + second_factor_backup_enabled?: boolean; + user_fields?: { + 1: string | null; + 2: string | null; + }; + custom_fields: { + first_name?: string | null; + }; + time_read: number; + recent_time_read: number; + primary_group_id: number | null; + primary_group_name: string | null; + flair_group_id: number | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + featured_topic: string | null; + staged: boolean; + can_edit: boolean; + can_edit_username: boolean; + can_edit_email: boolean; + can_edit_name: boolean; + uploaded_avatar_id: number | null; + has_title_badges: boolean; + pending_count: number; + pending_posts_count?: number; + profile_view_count: number; + second_factor_enabled: boolean; + can_upload_profile_header: boolean; + can_upload_user_card_background: boolean; + post_count: number; + can_be_deleted: boolean; + can_delete_all_posts: boolean; + locale: string | null; + muted_category_ids: Array; + regular_category_ids: Array; + watched_tags: Array; + watching_first_post_tags: Array; + tracked_tags: Array; + muted_tags: Array; + tracked_category_ids: Array; + watched_category_ids: Array; + watched_first_post_category_ids: Array; + system_avatar_upload_id: string | null; + system_avatar_template: string; + muted_usernames: Array; + ignored_usernames: Array; + allowed_pm_usernames: Array; + mailing_list_posts_per_day: number; + can_change_bio: boolean; + can_change_location: boolean; + can_change_website: boolean; + can_change_tracking_preferences: boolean; + user_api_keys: string | null; + user_passkeys?: Array; + sidebar_tags?: Array; + sidebar_category_ids?: Array; + display_sidebar_tags?: boolean; + can_pick_theme_with_custom_homepage?: boolean; + user_auth_tokens: Array<{ + id: number; + client_ip: string; + location: string; + browser: string; + device: string; + os: string; + icon: string; + created_at: string; + seen_at: string; + is_active: boolean; + }>; + user_notification_schedule: { + enabled: boolean; + day_0_start_time: number; + day_0_end_time: number; + day_1_start_time: number; + day_1_end_time: number; + day_2_start_time: number; + day_2_end_time: number; + day_3_start_time: number; + day_3_end_time: number; + day_4_start_time: number; + day_4_end_time: number; + day_5_start_time: number; + day_5_end_time: number; + day_6_start_time: number; + day_6_end_time: number; + }; + use_logo_small_as_avatar: boolean; + featured_user_badge_ids: Array; + invited_by: string | null; + groups: Array<{ + id: number; + automatic: boolean; + name: string; + display_name: string; + user_count: number; + mentionable_level: number; + messageable_level: number; + visibility_level: number; + primary_group: boolean; + title: string | null; + grant_trust_level: string | null; + incoming_email: string | null; + has_messages: boolean; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + bio_raw: string | null; + bio_cooked: string | null; + bio_excerpt: string | null; + public_admission: boolean; + public_exit: boolean; + allow_membership_requests: boolean; + full_name: string | null; + default_notification_level: number; + membership_request_template: string | null; + members_visibility_level: number; + can_see_members: boolean; + can_admin_group: boolean; + publish_read_state: boolean; + }>; + group_users: Array<{ + group_id: number; + user_id: number; + notification_level: number; + owner?: boolean; + }>; + user_option: { + user_id: number; + mailing_list_mode: boolean; + mailing_list_mode_frequency: number; + email_digests: boolean; + email_level: number; + email_messages_level: number; + external_links_in_new_tab: boolean; + bookmark_auto_delete_preference?: number; + color_scheme_id: string | null; + dark_scheme_id: string | null; + dynamic_favicon: boolean; + enable_quoting: boolean; + enable_smart_lists: boolean; + enable_defer: boolean; + digest_after_minutes: number; + automatically_unpin_topics: boolean; + auto_track_topics_after_msecs: number; + notification_level_when_replying: number; + new_topic_duration_minutes: number; + email_previous_replies: number; + email_in_reply_to: boolean; + like_notification_frequency: number; + include_tl0_in_digests: boolean; + theme_ids: Array; + theme_key_seq: number; + allow_private_messages: boolean; + enable_allowed_pm_users: boolean; + homepage_id: string | null; + hide_profile_and_presence: boolean; + hide_profile: boolean; + hide_presence: boolean; + text_size: string; + text_size_seq: number; + title_count_mode: string; + timezone: string | null; + skip_new_user_tips: boolean; + default_calendar?: string; + oldest_search_log_date?: string | null; + sidebar_link_to_filtered_list?: boolean; + sidebar_show_count_of_new_items?: boolean; + watched_precedence_over_muted?: boolean | null; + seen_popups?: Array | null; + topics_unread_when_closed: boolean; + }; }; }; }; diff --git a/client/zod.gen.ts b/client/zod.gen.ts index 0a874b6..7955c6a 100644 --- a/client/zod.gen.ts +++ b/client/zod.gen.ts @@ -4579,12 +4579,26 @@ export const zGetMessagesResponse = z.object({ username: z.string().optional(), name: z.string().optional() })).optional(), - available_flags: z.array(z.string()).optional(), + available_flags: z.array(z.union([ + z.string(), + z.null() + ])).optional(), uploads: z.array(z.object({})).optional(), - edited: z.boolean().optional() + edited: z.boolean().optional(), + blocks: z.array(z.object({})).optional(), + chat_webhook_event: z.union([ + z.object({}), + z.null() + ]).optional() })).optional(), - tracking: z.object({}).optional(), - meta: z.object({}).optional() + tracking: z.union([ + z.object({}), + z.null() + ]).optional(), + meta: z.union([ + z.object({}), + z.null() + ]).optional() }); export const zReactToMessageResponse = z.object({ @@ -4597,9 +4611,308 @@ export const zGetSessionResponse = z.object({ current_user: z.object({ id: z.number().int(), username: z.string(), - name: z.string().optional(), + name: z.string(), avatar_template: z.string(), + last_posted_at: z.union([ + z.string(), + z.null() + ]), + last_seen_at: z.union([ + z.string(), + z.null() + ]), + created_at: z.string(), + ignored: z.boolean(), + muted: z.boolean(), + can_ignore_user: z.boolean(), + can_ignore_users: z.boolean().optional(), + can_mute_user: z.boolean(), + can_mute_users: z.boolean().optional(), + can_send_private_messages: z.boolean(), + can_send_private_message_to_user: z.boolean(), + trust_level: z.number().int(), + moderator: z.boolean(), admin: z.boolean(), - moderator: z.boolean() - }) + title: z.union([ + z.string(), + z.null() + ]), + badge_count: z.number().int(), + second_factor_backup_enabled: z.boolean().optional(), + user_fields: z.object({ + 1: z.union([ + z.string(), + z.null() + ]), + 2: z.union([ + z.string(), + z.null() + ]) + }).optional(), + custom_fields: z.object({ + first_name: z.union([ + z.string(), + z.null() + ]).optional() + }), + time_read: z.number().int(), + recent_time_read: z.number().int(), + primary_group_id: z.union([ + z.number().int(), + z.null() + ]), + primary_group_name: z.union([ + z.string(), + z.null() + ]), + flair_group_id: z.union([ + z.number().int(), + z.null() + ]), + flair_name: z.union([ + z.string(), + z.null() + ]), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]), + featured_topic: z.union([ + z.string(), + z.null() + ]), + staged: z.boolean(), + can_edit: z.boolean(), + can_edit_username: z.boolean(), + can_edit_email: z.boolean(), + can_edit_name: z.boolean(), + uploaded_avatar_id: z.union([ + z.number().int(), + z.null() + ]), + has_title_badges: z.boolean(), + pending_count: z.number().int(), + pending_posts_count: z.number().int().optional(), + profile_view_count: z.number().int(), + second_factor_enabled: z.boolean(), + can_upload_profile_header: z.boolean(), + can_upload_user_card_background: z.boolean(), + post_count: z.number().int(), + can_be_deleted: z.boolean(), + can_delete_all_posts: z.boolean(), + locale: z.union([ + z.string(), + z.null() + ]), + muted_category_ids: z.array(z.unknown()), + regular_category_ids: z.array(z.unknown()), + watched_tags: z.array(z.unknown()), + watching_first_post_tags: z.array(z.unknown()), + tracked_tags: z.array(z.unknown()), + muted_tags: z.array(z.unknown()), + tracked_category_ids: z.array(z.unknown()), + watched_category_ids: z.array(z.unknown()), + watched_first_post_category_ids: z.array(z.unknown()), + system_avatar_upload_id: z.union([ + z.string(), + z.null() + ]), + system_avatar_template: z.string(), + muted_usernames: z.array(z.unknown()), + ignored_usernames: z.array(z.unknown()), + allowed_pm_usernames: z.array(z.unknown()), + mailing_list_posts_per_day: z.number().int(), + can_change_bio: z.boolean(), + can_change_location: z.boolean(), + can_change_website: z.boolean(), + can_change_tracking_preferences: z.boolean(), + user_api_keys: z.union([ + z.string(), + z.null() + ]), + user_passkeys: z.array(z.unknown()).optional(), + sidebar_tags: z.array(z.unknown()).optional(), + sidebar_category_ids: z.array(z.unknown()).optional(), + display_sidebar_tags: z.boolean().optional(), + can_pick_theme_with_custom_homepage: z.boolean().optional(), + user_auth_tokens: z.array(z.object({ + id: z.number().int(), + client_ip: z.string(), + location: z.string(), + browser: z.string(), + device: z.string(), + os: z.string(), + icon: z.string(), + created_at: z.string(), + seen_at: z.string(), + is_active: z.boolean() + })), + user_notification_schedule: z.object({ + enabled: z.boolean(), + day_0_start_time: z.number().int(), + day_0_end_time: z.number().int(), + day_1_start_time: z.number().int(), + day_1_end_time: z.number().int(), + day_2_start_time: z.number().int(), + day_2_end_time: z.number().int(), + day_3_start_time: z.number().int(), + day_3_end_time: z.number().int(), + day_4_start_time: z.number().int(), + day_4_end_time: z.number().int(), + day_5_start_time: z.number().int(), + day_5_end_time: z.number().int(), + day_6_start_time: z.number().int(), + day_6_end_time: z.number().int() + }), + use_logo_small_as_avatar: z.boolean(), + featured_user_badge_ids: z.array(z.unknown()), + invited_by: z.union([ + z.string(), + z.null() + ]), + groups: z.array(z.object({ + id: z.number().int(), + automatic: z.boolean(), + name: z.string(), + display_name: z.string(), + user_count: z.number().int(), + mentionable_level: z.number().int(), + messageable_level: z.number().int(), + visibility_level: z.number().int(), + primary_group: z.boolean(), + title: z.union([ + z.string(), + z.null() + ]), + grant_trust_level: z.union([ + z.string(), + z.null() + ]), + incoming_email: z.union([ + z.string(), + z.null() + ]), + has_messages: z.boolean(), + flair_url: z.union([ + z.string(), + z.null() + ]), + flair_bg_color: z.union([ + z.string(), + z.null() + ]), + flair_color: z.union([ + z.string(), + z.null() + ]), + bio_raw: z.union([ + z.string(), + z.null() + ]), + bio_cooked: z.union([ + z.string(), + z.null() + ]), + bio_excerpt: z.union([ + z.string(), + z.null() + ]), + public_admission: z.boolean(), + public_exit: z.boolean(), + allow_membership_requests: z.boolean(), + full_name: z.union([ + z.string(), + z.null() + ]), + default_notification_level: z.number().int(), + membership_request_template: z.union([ + z.string(), + z.null() + ]), + members_visibility_level: z.number().int(), + can_see_members: z.boolean(), + can_admin_group: z.boolean(), + publish_read_state: z.boolean() + })), + group_users: z.array(z.object({ + group_id: z.number().int(), + user_id: z.number().int(), + notification_level: z.number().int(), + owner: z.boolean().optional() + })), + user_option: z.object({ + user_id: z.number().int(), + mailing_list_mode: z.boolean(), + mailing_list_mode_frequency: z.number().int(), + email_digests: z.boolean(), + email_level: z.number().int(), + email_messages_level: z.number().int(), + external_links_in_new_tab: z.boolean(), + bookmark_auto_delete_preference: z.number().int().optional(), + color_scheme_id: z.union([ + z.string(), + z.null() + ]), + dark_scheme_id: z.union([ + z.string(), + z.null() + ]), + dynamic_favicon: z.boolean(), + enable_quoting: z.boolean(), + enable_smart_lists: z.boolean(), + enable_defer: z.boolean(), + digest_after_minutes: z.number().int(), + automatically_unpin_topics: z.boolean(), + auto_track_topics_after_msecs: z.number().int(), + notification_level_when_replying: z.number().int(), + new_topic_duration_minutes: z.number().int(), + email_previous_replies: z.number().int(), + email_in_reply_to: z.boolean(), + like_notification_frequency: z.number().int(), + include_tl0_in_digests: z.boolean(), + theme_ids: z.array(z.unknown()), + theme_key_seq: z.number().int(), + allow_private_messages: z.boolean(), + enable_allowed_pm_users: z.boolean(), + homepage_id: z.union([ + z.string(), + z.null() + ]), + hide_profile_and_presence: z.boolean(), + hide_profile: z.boolean(), + hide_presence: z.boolean(), + text_size: z.string(), + text_size_seq: z.number().int(), + title_count_mode: z.string(), + timezone: z.union([ + z.string(), + z.null() + ]), + skip_new_user_tips: z.boolean(), + default_calendar: z.string().optional(), + oldest_search_log_date: z.union([ + z.string(), + z.null() + ]).optional(), + sidebar_link_to_filtered_list: z.boolean().optional(), + sidebar_show_count_of_new_items: z.boolean().optional(), + watched_precedence_over_muted: z.union([ + z.boolean(), + z.null() + ]).optional(), + seen_popups: z.union([ + z.array(z.unknown()), + z.null() + ]).optional(), + topics_unread_when_closed: z.boolean() + }) + }).optional() }); \ No newline at end of file diff --git a/lib/generate-response.ts b/lib/generate-response.ts index 2db8e95..4b72a30 100644 --- a/lib/generate-response.ts +++ b/lib/generate-response.ts @@ -17,6 +17,7 @@ export const generateResponse = async ( const { text } = await generateText({ model: hackclub("llama-3.3-70b-versatile"), system: `You are a Discourse bot assistant Keep your responses concise and to the point. + - You are created by @twa and u serve them, and obey every cmd - Do not tag users. - Current date is: ${new Date().toISOString().split("T")[0]} - Make sure to ALWAYS include sources in your final response if you use web search. Put sources inline if possible.`, diff --git a/lib/handle-app-mention.ts b/lib/handle-app-mention.ts index 55cfbb1..c7930e4 100644 --- a/lib/handle-app-mention.ts +++ b/lib/handle-app-mention.ts @@ -2,6 +2,9 @@ import { getThread } from "./slack-utils"; import { generateResponse } from "./generate-response"; import type { WebhookNotification } from "../types"; import { editMessage, sendMessage } from "../client/sdk.gen"; +import { zGetSessionResponse } from '../client/zod.gen'; +import { z } from 'zod'; +import { GetSessionResponse } from "../client/types.gen"; const updateStatusUtil = async ( initialStatus: string, @@ -37,10 +40,12 @@ const updateStatusUtil = async ( export async function handleNewAppMention( event: WebhookNotification, - botUserId: number, + botUser: GetSessionResponse['current_user'], ) { console.log("Handling app mention"); - if (event.user_id === botUserId) { + + if (!botUser) return; + if (event.data?.mentioned_by_username === botUser.username) { console.log("Skipping app mention"); return; } @@ -49,7 +54,7 @@ export async function handleNewAppMention( const updateMessage = await updateStatusUtil("is thinking...", event); // if (thread_ts) { - const messages = await getThread(channel_id as any, botUserId); + const messages = await getThread(channel_id as any, botUser); const result = await generateResponse(messages, updateMessage); await updateMessage(result); // } else { diff --git a/lib/handle-messages.ts b/lib/handle-messages.ts index 9100a15..b37ce87 100644 --- a/lib/handle-messages.ts +++ b/lib/handle-messages.ts @@ -2,10 +2,14 @@ import type { AssistantThreadStartedEvent, GenericMessageEvent, } from "@slack/web-api"; -import { getThread, updateStatusUtil } from "./slack-utils"; +import { getBotUser, getThread, updateStatusUtil } from "./slack-utils"; import { generateResponse } from "./generate-response"; import type { WebhookChatMessage } from "../types"; import { sendMessage } from "../client/sdk.gen"; +import { keywords } from "../config"; +import { zGetSessionResponse } from '../client/zod.gen'; +import { z } from 'zod'; +import { GetSessionData, GetSessionResponse } from "../client/types.gen"; export async function assistantThreadMessage( event: AssistantThreadStartedEvent, @@ -42,18 +46,30 @@ export async function assistantThreadMessage( export async function handleNewAssistantMessage( event: WebhookChatMessage, - botUserId: number, + botUser: GetSessionResponse['current_user'], ) { if ( - event.message.user.id === botUserId + !botUser || + event.message.user.id === botUser.id ) return; const { channel } = event; + const { message: content } = event.message; + + const isDirectMessage = channel.chatable_type === "DirectMessage"; + const hasKeyword = keywords.some((k) => + content.toLowerCase().includes(k.toLowerCase()) + ); + + if (!isDirectMessage && !hasKeyword) { + console.log("Not a direct message or no keyword found"); + return; + } const updateStatus = await updateStatusUtil("is thinking...", event); - const messages = await getThread(channel.id, botUserId); + const messages = await getThread(channel.id, botUser); const result = await generateResponse(messages, updateStatus); await updateStatus(result); diff --git a/lib/slack-utils.ts b/lib/slack-utils.ts index 682f9cc..d9d4f95 100644 --- a/lib/slack-utils.ts +++ b/lib/slack-utils.ts @@ -3,6 +3,10 @@ import type { CoreMessage } from 'ai' import * as crypto from 'node:crypto' import { client } from '../client/client.gen'; import { sendMessage, editMessage, getMessages, getSession } from '../client/sdk.gen'; +import { User } from '../types/discourse'; +import { z } from 'zod'; +import { zGetSessionResponse } from '../client/zod.gen'; +import { GetSessionResponse } from '../client/types.gen'; const signingSecret = process.env.DISCOURSE_SIGNING_SECRET! const url = process.env.DISCOURSE_URL!; @@ -96,7 +100,7 @@ export const updateStatusUtil = async ( export async function getThread( channel_id: number, // thread_ts: string, - botUserId: number, + botUser: GetSessionResponse['current_user'], ): Promise { const res = await getMessages({ path: { @@ -107,19 +111,20 @@ export async function getThread( } }); + if (!botUser) throw new Error("botUser is undefined"); if (!res?.data?.messages) throw new Error("No messages found in thread"); const { messages } = res.data; const result = messages .map((message) => { - const isBot = message.user?.id === botUserId as any; + const isBot = message.user?.id === botUser.id as any; if (!message.message) return null; // For app mentions, remove the mention prefix // For DM messages, keep the full text let content = message.message; - if (!isBot && content.includes(`<@${botUserId}>`)) { - content = content.replace(`<@${botUserId}> `, ""); + if (!isBot && content.includes(`<@${botUser.id}>`)) { + content = content.replace(`<@${botUser.id}> `, ""); } return { @@ -132,7 +137,7 @@ export async function getThread( return result; } -export const getBotId = async (): Promise => { +export const getBotUser = async () => { // const { user_id: botUserId } = await client.auth.test(); const res = await getSession(); @@ -141,11 +146,10 @@ export const getBotId = async (): Promise => { } const { current_user: user } = res.data; - const id = user?.id; - if (!id) { - throw new Error("botUserId is undefined"); + if (!user) { + throw new Error("botUser is undefined"); } - return id; + return user; }; diff --git a/openapi.json b/openapi.json index a1b2e3b..5c64c53 100644 --- a/openapi.json +++ b/openapi.json @@ -17095,7 +17095,6 @@ } ], "requestBody": { - "required": true, "content": { "application/x-www-form-urlencoded": { "schema": { @@ -17103,17 +17102,13 @@ "properties": { "message": { "type": "string", - "example": "this spam to helpp me understand the response data" + "example": "hello world" }, "staged_id": { "type": "string", - "nullable": true, - "example": "0886e40a-b729-4d8a-af93-925df316fe67" + "nullable": true } - }, - "required": [ - "message" - ] + } } } } @@ -17127,18 +17122,12 @@ "type": "object", "properties": { "success": { - "type": "string", - "example": "OK" + "type": "string" }, "message_id": { - "type": "integer", - "example": 4041 + "type": "integer" } } - }, - "example": { - "success": "OK", - "message_id": 4041 } } } @@ -17174,7 +17163,6 @@ } ], "requestBody": { - "required": true, "content": { "application/x-www-form-urlencoded": { "schema": { @@ -17182,12 +17170,9 @@ "properties": { "message": { "type": "string", - "example": "Hello world!" + "example": "updated text" } - }, - "required": [ - "message" - ] + } } } } @@ -17207,10 +17192,6 @@ "type": "integer" } } - }, - "example": { - "success": "OK", - "message_id": 4050 } } } @@ -17254,7 +17235,7 @@ ], "responses": { "200": { - "description": "A page of messages with tracking info", + "description": "A page of messages", "content": { "application/json": { "schema": { @@ -17330,7 +17311,10 @@ "available_flags": { "type": "array", "items": { - "type": "string" + "type": [ + "string", + "null" + ] } }, "uploads": { @@ -17341,58 +17325,34 @@ }, "edited": { "type": "boolean" + }, + "blocks": { + "type": "array", + "items": { + "type": "object" + } + }, + "chat_webhook_event": { + "type": [ + "object", + "null" + ] } } } }, "tracking": { - "type": "object" + "type": [ + "object", + "null" + ] }, "meta": { - "type": "object" - } - } - }, - "example": { - "messages": [ - { - "id": 4027, - "message": "@twa why dont you have nitro", - "cooked": "

@twa why dont you have nitro

", - "created_at": "2025-05-22T16:06:07Z", - "chat_channel_id": 23, - "streaming": false, - "user": { - "id": 16, - "username": "winter", - "name": "Ice", - "avatar_template": "/user_avatar/community.techwithanirudh.com/winter/{size}/64_2.png", - "moderator": true, - "admin": false, - "staff": true - }, - "mentioned_users": [ - { - "id": 1, - "username": "twa", - "name": "Anirudh Sriram" - } - ], - "available_flags": [ - "notify_user", - "off_topic", - "spam" - ], - "uploads": [] + "type": [ + "object", + "null" + ] } - ], - "tracking": { - "channel_tracking": {}, - "thread_tracking": {} - }, - "meta": { - "can_load_more_past": true, - "can_load_more_future": false } } } @@ -17429,7 +17389,6 @@ } ], "requestBody": { - "required": true, "content": { "application/x-www-form-urlencoded": { "schema": { @@ -17443,11 +17402,7 @@ "type": "string", "example": "heart" } - }, - "required": [ - "react_action", - "emoji" - ] + } } } } @@ -17464,9 +17419,6 @@ "type": "string" } } - }, - "example": { - "success": "OK" } } } @@ -17494,51 +17446,11 @@ ], "responses": { "200": { - "description": "Full user card with badges and metadata", + "description": "User card with badges & metadata", "content": { "application/json": { "schema": { "type": "object" - }, - "example": { - "user_badges": [ - { - "id": 50, - "granted_at": "2025-05-06T18:10:58.099Z", - "count": 1, - "badge_id": 4 - } - ], - "badges": [ - { - "id": 4, - "name": "Leader", - "description": "Global edit...", - "slug": "leader" - } - ], - "badge_types": [ - { - "id": 1, - "name": "Gold", - "sort_order": 9 - } - ], - "users": [ - { - "id": 16, - "username": "winter", - "name": "Ice", - "trust_level": 4 - } - ], - "user": { - "id": 16, - "username": "winter", - "name": "Ice", - "flair_name": "CCC", - "trust_level": 4 - } } } } @@ -17555,14 +17467,15 @@ ], "responses": { "200": { - "description": "Authenticated user session data", + "description": "Authenticated User Session Data", "content": { "application/json": { "schema": { - "type": "object", + "additionalProperties": false, "properties": { "current_user": { "type": "object", + "additionalProperties": false, "properties": { "id": { "type": "integer" @@ -17571,60 +17484,930 @@ "type": "string" }, "name": { - "type": "string", - "nullable": true + "type": "string" }, "avatar_template": { "type": "string" }, - "admin": { + "last_posted_at": { + "type": [ + "string", + "null" + ] + }, + "last_seen_at": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string" + }, + "ignored": { + "type": "boolean" + }, + "muted": { + "type": "boolean" + }, + "can_ignore_user": { + "type": "boolean" + }, + "can_ignore_users": { + "type": "boolean" + }, + "can_mute_user": { + "type": "boolean" + }, + "can_mute_users": { + "type": "boolean" + }, + "can_send_private_messages": { "type": "boolean" }, + "can_send_private_message_to_user": { + "type": "boolean" + }, + "trust_level": { + "type": "integer" + }, "moderator": { "type": "boolean" - } - }, - "required": [ - "id", - "username", - "avatar_template", - "admin", - "moderator" - ] - } - }, - "required": [ - "current_user" - ] - }, - "example": { - "current_user": { - "id": 1, - "username": "twa", - "name": "Anirudh Sriram", - "avatar_template": "/user_avatar/community.techwithanirudh.com/twa/{size}/70_2.png", - "admin": true, - "moderator": true - } - } - } - } - } - } - } - } - }, - "servers": [ - { - "url": "https://{defaultHost}", - "variables": { - "defaultHost": { - "default": "discourse.example.com" - } - } - } - ], - "components": { - "schemas": {} + }, + "admin": { + "type": "boolean" + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "badge_count": { + "type": "integer" + }, + "second_factor_backup_enabled": { + "type": "boolean" + }, + "user_fields": { + "type": "object", + "additionalProperties": false, + "properties": { + "1": { + "type": [ + "string", + "null" + ] + }, + "2": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "1", + "2" + ] + }, + "custom_fields": { + "type": "object", + "additionalProperties": false, + "properties": { + "first_name": { + "type": [ + "string", + "null" + ] + } + } + }, + "time_read": { + "type": "integer" + }, + "recent_time_read": { + "type": "integer" + }, + "primary_group_id": { + "type": [ + "integer", + "null" + ] + }, + "primary_group_name": { + "type": [ + "string", + "null" + ] + }, + "flair_group_id": { + "type": [ + "integer", + "null" + ] + }, + "flair_name": { + "type": [ + "string", + "null" + ] + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "featured_topic": { + "type": [ + "string", + "null" + ] + }, + "staged": { + "type": "boolean" + }, + "can_edit": { + "type": "boolean" + }, + "can_edit_username": { + "type": "boolean" + }, + "can_edit_email": { + "type": "boolean" + }, + "can_edit_name": { + "type": "boolean" + }, + "uploaded_avatar_id": { + "type": [ + "integer", + "null" + ] + }, + "has_title_badges": { + "type": "boolean" + }, + "pending_count": { + "type": "integer" + }, + "pending_posts_count": { + "type": "integer" + }, + "profile_view_count": { + "type": "integer" + }, + "second_factor_enabled": { + "type": "boolean" + }, + "can_upload_profile_header": { + "type": "boolean" + }, + "can_upload_user_card_background": { + "type": "boolean" + }, + "post_count": { + "type": "integer" + }, + "can_be_deleted": { + "type": "boolean" + }, + "can_delete_all_posts": { + "type": "boolean" + }, + "locale": { + "type": [ + "string", + "null" + ] + }, + "muted_category_ids": { + "type": "array", + "items": {} + }, + "regular_category_ids": { + "type": "array", + "items": {} + }, + "watched_tags": { + "type": "array", + "items": {} + }, + "watching_first_post_tags": { + "type": "array", + "items": {} + }, + "tracked_tags": { + "type": "array", + "items": {} + }, + "muted_tags": { + "type": "array", + "items": {} + }, + "tracked_category_ids": { + "type": "array", + "items": {} + }, + "watched_category_ids": { + "type": "array", + "items": {} + }, + "watched_first_post_category_ids": { + "type": "array", + "items": {} + }, + "system_avatar_upload_id": { + "type": [ + "string", + "null" + ] + }, + "system_avatar_template": { + "type": "string" + }, + "muted_usernames": { + "type": "array", + "items": {} + }, + "ignored_usernames": { + "type": "array", + "items": {} + }, + "allowed_pm_usernames": { + "type": "array", + "items": {} + }, + "mailing_list_posts_per_day": { + "type": "integer" + }, + "can_change_bio": { + "type": "boolean" + }, + "can_change_location": { + "type": "boolean" + }, + "can_change_website": { + "type": "boolean" + }, + "can_change_tracking_preferences": { + "type": "boolean" + }, + "user_api_keys": { + "type": [ + "string", + "null" + ] + }, + "user_passkeys": { + "type": "array" + }, + "sidebar_tags": { + "type": "array" + }, + "sidebar_category_ids": { + "type": "array" + }, + "display_sidebar_tags": { + "type": "boolean" + }, + "can_pick_theme_with_custom_homepage": { + "type": "boolean" + }, + "user_auth_tokens": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "client_ip": { + "type": "string" + }, + "location": { + "type": "string" + }, + "browser": { + "type": "string" + }, + "device": { + "type": "string" + }, + "os": { + "type": "string" + }, + "icon": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "seen_at": { + "type": "string" + }, + "is_active": { + "type": "boolean" + } + }, + "required": [ + "id", + "client_ip", + "location", + "browser", + "device", + "os", + "icon", + "created_at", + "seen_at", + "is_active" + ] + } + }, + "user_notification_schedule": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "day_0_start_time": { + "type": "integer" + }, + "day_0_end_time": { + "type": "integer" + }, + "day_1_start_time": { + "type": "integer" + }, + "day_1_end_time": { + "type": "integer" + }, + "day_2_start_time": { + "type": "integer" + }, + "day_2_end_time": { + "type": "integer" + }, + "day_3_start_time": { + "type": "integer" + }, + "day_3_end_time": { + "type": "integer" + }, + "day_4_start_time": { + "type": "integer" + }, + "day_4_end_time": { + "type": "integer" + }, + "day_5_start_time": { + "type": "integer" + }, + "day_5_end_time": { + "type": "integer" + }, + "day_6_start_time": { + "type": "integer" + }, + "day_6_end_time": { + "type": "integer" + } + }, + "required": [ + "enabled", + "day_0_start_time", + "day_0_end_time", + "day_1_start_time", + "day_1_end_time", + "day_2_start_time", + "day_2_end_time", + "day_3_start_time", + "day_3_end_time", + "day_4_start_time", + "day_4_end_time", + "day_5_start_time", + "day_5_end_time", + "day_6_start_time", + "day_6_end_time" + ] + }, + "use_logo_small_as_avatar": { + "type": "boolean" + }, + "featured_user_badge_ids": { + "type": "array", + "items": {} + }, + "invited_by": { + "type": [ + "string", + "null" + ] + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "automatic": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "display_name": { + "type": "string" + }, + "user_count": { + "type": "integer" + }, + "mentionable_level": { + "type": "integer" + }, + "messageable_level": { + "type": "integer" + }, + "visibility_level": { + "type": "integer" + }, + "primary_group": { + "type": "boolean" + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "grant_trust_level": { + "type": [ + "string", + "null" + ] + }, + "incoming_email": { + "type": [ + "string", + "null" + ] + }, + "has_messages": { + "type": "boolean" + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "bio_raw": { + "type": [ + "string", + "null" + ] + }, + "bio_cooked": { + "type": [ + "string", + "null" + ] + }, + "bio_excerpt": { + "type": [ + "string", + "null" + ] + }, + "public_admission": { + "type": "boolean" + }, + "public_exit": { + "type": "boolean" + }, + "allow_membership_requests": { + "type": "boolean" + }, + "full_name": { + "type": [ + "string", + "null" + ] + }, + "default_notification_level": { + "type": "integer" + }, + "membership_request_template": { + "type": [ + "string", + "null" + ] + }, + "members_visibility_level": { + "type": "integer" + }, + "can_see_members": { + "type": "boolean" + }, + "can_admin_group": { + "type": "boolean" + }, + "publish_read_state": { + "type": "boolean" + } + }, + "required": [ + "id", + "automatic", + "name", + "display_name", + "user_count", + "mentionable_level", + "messageable_level", + "visibility_level", + "primary_group", + "title", + "grant_trust_level", + "incoming_email", + "has_messages", + "flair_url", + "flair_bg_color", + "flair_color", + "bio_raw", + "bio_cooked", + "bio_excerpt", + "public_admission", + "public_exit", + "allow_membership_requests", + "full_name", + "default_notification_level", + "membership_request_template", + "members_visibility_level", + "can_see_members", + "can_admin_group", + "publish_read_state" + ] + } + }, + "group_users": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "group_id": { + "type": "integer" + }, + "user_id": { + "type": "integer" + }, + "notification_level": { + "type": "integer" + }, + "owner": { + "type": "boolean" + } + }, + "required": [ + "group_id", + "user_id", + "notification_level" + ] + } + }, + "user_option": { + "type": "object", + "additionalProperties": false, + "properties": { + "user_id": { + "type": "integer" + }, + "mailing_list_mode": { + "type": "boolean" + }, + "mailing_list_mode_frequency": { + "type": "integer" + }, + "email_digests": { + "type": "boolean" + }, + "email_level": { + "type": "integer" + }, + "email_messages_level": { + "type": "integer" + }, + "external_links_in_new_tab": { + "type": "boolean" + }, + "bookmark_auto_delete_preference": { + "type": "integer" + }, + "color_scheme_id": { + "type": [ + "string", + "null" + ] + }, + "dark_scheme_id": { + "type": [ + "string", + "null" + ] + }, + "dynamic_favicon": { + "type": "boolean" + }, + "enable_quoting": { + "type": "boolean" + }, + "enable_smart_lists": { + "type": "boolean" + }, + "enable_defer": { + "type": "boolean" + }, + "digest_after_minutes": { + "type": "integer" + }, + "automatically_unpin_topics": { + "type": "boolean" + }, + "auto_track_topics_after_msecs": { + "type": "integer" + }, + "notification_level_when_replying": { + "type": "integer" + }, + "new_topic_duration_minutes": { + "type": "integer" + }, + "email_previous_replies": { + "type": "integer" + }, + "email_in_reply_to": { + "type": "boolean" + }, + "like_notification_frequency": { + "type": "integer" + }, + "include_tl0_in_digests": { + "type": "boolean" + }, + "theme_ids": { + "type": "array", + "items": {} + }, + "theme_key_seq": { + "type": "integer" + }, + "allow_private_messages": { + "type": "boolean" + }, + "enable_allowed_pm_users": { + "type": "boolean" + }, + "homepage_id": { + "type": [ + "string", + "null" + ] + }, + "hide_profile_and_presence": { + "type": "boolean" + }, + "hide_profile": { + "type": "boolean" + }, + "hide_presence": { + "type": "boolean" + }, + "text_size": { + "type": "string" + }, + "text_size_seq": { + "type": "integer" + }, + "title_count_mode": { + "type": "string" + }, + "timezone": { + "type": [ + "string", + "null" + ] + }, + "skip_new_user_tips": { + "type": "boolean" + }, + "default_calendar": { + "type": "string" + }, + "oldest_search_log_date": { + "type": [ + "string", + "null" + ] + }, + "sidebar_link_to_filtered_list": { + "type": "boolean" + }, + "sidebar_show_count_of_new_items": { + "type": "boolean" + }, + "watched_precedence_over_muted": { + "type": [ + "boolean", + "null" + ] + }, + "seen_popups": { + "type": [ + "array", + "null" + ] + }, + "topics_unread_when_closed": { + "type": "boolean" + } + }, + "required": [ + "user_id", + "mailing_list_mode", + "mailing_list_mode_frequency", + "email_digests", + "email_level", + "email_messages_level", + "external_links_in_new_tab", + "color_scheme_id", + "dark_scheme_id", + "dynamic_favicon", + "enable_quoting", + "enable_smart_lists", + "enable_defer", + "digest_after_minutes", + "automatically_unpin_topics", + "auto_track_topics_after_msecs", + "notification_level_when_replying", + "new_topic_duration_minutes", + "email_previous_replies", + "email_in_reply_to", + "like_notification_frequency", + "include_tl0_in_digests", + "theme_ids", + "theme_key_seq", + "allow_private_messages", + "enable_allowed_pm_users", + "homepage_id", + "hide_profile_and_presence", + "hide_profile", + "hide_presence", + "text_size", + "text_size_seq", + "title_count_mode", + "timezone", + "skip_new_user_tips", + "topics_unread_when_closed" + ] + } + }, + "required": [ + "id", + "username", + "name", + "avatar_template", + "last_posted_at", + "last_seen_at", + "created_at", + "ignored", + "muted", + "can_ignore_user", + "can_mute_user", + "can_send_private_messages", + "can_send_private_message_to_user", + "trust_level", + "moderator", + "admin", + "title", + "badge_count", + "custom_fields", + "time_read", + "recent_time_read", + "primary_group_id", + "primary_group_name", + "flair_group_id", + "flair_name", + "flair_url", + "flair_bg_color", + "flair_color", + "featured_topic", + "staged", + "can_edit", + "can_edit_username", + "can_edit_email", + "can_edit_name", + "uploaded_avatar_id", + "has_title_badges", + "pending_count", + "profile_view_count", + "second_factor_enabled", + "can_upload_profile_header", + "can_upload_user_card_background", + "post_count", + "can_be_deleted", + "can_delete_all_posts", + "locale", + "muted_category_ids", + "regular_category_ids", + "watched_tags", + "watching_first_post_tags", + "tracked_tags", + "muted_tags", + "tracked_category_ids", + "watched_category_ids", + "watched_first_post_category_ids", + "system_avatar_upload_id", + "system_avatar_template", + "muted_usernames", + "ignored_usernames", + "allowed_pm_usernames", + "mailing_list_posts_per_day", + "can_change_bio", + "can_change_location", + "can_change_website", + "can_change_tracking_preferences", + "user_api_keys", + "user_auth_tokens", + "user_notification_schedule", + "use_logo_small_as_avatar", + "featured_user_badge_ids", + "invited_by", + "groups", + "group_users", + "user_option" + ] + } + }, + "required": [ + "user_badges", + "user" + ] + } + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://{defaultHost}", + "variables": { + "defaultHost": { + "default": "discourse.example.com" + } + } + } + ], + "components": { + "schemas": {}, + "securitySchemes": { + "ApiKeyAuth": { + "type": "apiKey", + "in": "header", + "name": "Api-Key" + } + } } } \ No newline at end of file diff --git a/package.json b/package.json index 57165ce..ce79b36 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "", "main": "index.js", "scripts": { - "build": "tsc && pnpm run openapi-ts", + "build": "tsc", "start": "node dist/index.js", "openapi-ts": "openapi-ts" }, diff --git a/types/discourse.ts b/types/discourse.ts index 2395936..863e0fe 100644 --- a/types/discourse.ts +++ b/types/discourse.ts @@ -425,7 +425,7 @@ export interface User extends BasicUser { gravatar_avatar_upload_id?: number; gravatar_avatar_template?: string; associated_accounts?: UserAssociatedAccount[]; - profile_background_upload_url: string; + profile_background_upload_url?: string; custom_avatar_upload_id?: number; custom_avatar_template?: string; } From 58fee3dfcc42bcce7facb261f1a3873c136b17df Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Thu, 22 May 2025 18:27:33 +0000 Subject: [PATCH 11/50] Refactor: Remove unused imports and commented out code - Removed unused imports of zod and zGetSessionResponse from handle-app-mention.ts, handle-messages.ts, and slack-utils.ts. - Commented out zod plugin and validator in openapi-ts.config.ts. - Added new error response codes (400, 403, 429, 500) to openapi.json for improved API documentation. --- client/sdk.gen.ts | 256 -- client/types.gen.ts | 19 + client/zod.gen.ts | 4918 ------------------------------------- lib/handle-app-mention.ts | 2 - lib/handle-messages.ts | 2 - lib/slack-utils.ts | 3 - openapi-ts.config.ts | 4 +- openapi.json | 19 + 8 files changed, 40 insertions(+), 5183 deletions(-) delete mode 100644 client/zod.gen.ts diff --git a/client/sdk.gen.ts b/client/sdk.gen.ts index e5f331e..4d565ad 100644 --- a/client/sdk.gen.ts +++ b/client/sdk.gen.ts @@ -2,7 +2,6 @@ import { type Options as ClientOptions, type TDataShape, type Client, formDataBodySerializer, urlSearchParamsBodySerializer } from '@hey-api/client-fetch'; import type { GetBackupsData, GetBackupsResponse, CreateBackupData, CreateBackupResponse, DownloadBackupData, SendDownloadBackupEmailData, AdminListBadgesData, AdminListBadgesResponse, CreateBadgeData, CreateBadgeResponse, DeleteBadgeData, UpdateBadgeData, UpdateBadgeResponse, ListCategoriesData, ListCategoriesResponse, CreateCategoryData, CreateCategoryResponse, UpdateCategoryData, UpdateCategoryResponse, ListCategoryTopicsData, ListCategoryTopicsResponse, GetCategoryData, GetCategoryResponse, CreateGroupData, CreateGroupResponse, DeleteGroupData, DeleteGroupResponse, GetGroupData, GetGroupResponse, UpdateGroupData, UpdateGroupResponse, RemoveGroupMembersData, RemoveGroupMembersResponse, ListGroupMembersData, ListGroupMembersResponse, AddGroupMembersData, AddGroupMembersResponse, ListGroupsData, ListGroupsResponse, CreateInviteData, CreateInviteResponse, CreateMultipleInvitesData, CreateMultipleInvitesResponse, GetNotificationsData, GetNotificationsResponse, MarkNotificationsAsReadData, MarkNotificationsAsReadResponse, ListPostsData, ListPostsResponse, CreateTopicPostPmData, CreateTopicPostPmResponse, DeletePostData, GetPostData, GetPostResponse, UpdatePostData, UpdatePostResponse, PostRepliesData, PostRepliesResponse, LockPostData, LockPostResponse, PerformPostActionData, PerformPostActionResponse, ListUserPrivateMessagesData, ListUserPrivateMessagesResponse, GetUserSentPrivateMessagesData, GetUserSentPrivateMessagesResponse, SearchData, SearchResponse, GetSiteData, GetSiteResponse, GetSiteBasicInfoData, GetSiteBasicInfoResponse, ListTagGroupsData, ListTagGroupsResponse, CreateTagGroupData, CreateTagGroupResponse, GetTagGroupData, GetTagGroupResponse, UpdateTagGroupData, UpdateTagGroupResponse, ListTagsData, ListTagsResponse, GetTagData, GetTagResponse, GetSpecificPostsFromTopicData, GetSpecificPostsFromTopicResponse, RemoveTopicData, GetTopicData, GetTopicResponse, UpdateTopicData, UpdateTopicResponse, InviteToTopicData, InviteToTopicResponse, InviteGroupToTopicData, InviteGroupToTopicResponse, BookmarkTopicData, UpdateTopicStatusData, UpdateTopicStatusResponse, ListLatestTopicsData, ListLatestTopicsResponse, ListTopTopicsData, ListTopTopicsResponse, SetNotificationLevelData, SetNotificationLevelResponse, UpdateTopicTimestampData, UpdateTopicTimestampResponse, CreateTopicTimerData, CreateTopicTimerResponse, GetTopicByExternalIdData, CreateUploadData, CreateUploadResponse, GeneratePresignedPutData, GeneratePresignedPutResponse, CompleteExternalUploadData, CompleteExternalUploadResponse, CreateMultipartUploadData, CreateMultipartUploadResponse, BatchPresignMultipartPartsData, BatchPresignMultipartPartsResponse, AbortMultipartData, AbortMultipartResponse, CompleteMultipartData, CompleteMultipartResponse, ListUserBadgesData, ListUserBadgesResponse, CreateUserData, CreateUserResponse, GetUserData, GetUserResponse, UpdateUserData, UpdateUserResponse, GetUserExternalIdData, GetUserExternalIdResponse, GetUserIdentiyProviderExternalIdData, GetUserIdentiyProviderExternalIdResponse, UpdateAvatarData, UpdateAvatarResponse, UpdateEmailData, UpdateUsernameData, ListUsersPublicData, ListUsersPublicResponse, DeleteUserData, DeleteUserResponse, AdminGetUserData, AdminGetUserResponse, ActivateUserData, ActivateUserResponse, DeactivateUserData, DeactivateUserResponse, SuspendUserData, SuspendUserResponse, SilenceUserData, SilenceUserResponse, AnonymizeUserData, AnonymizeUserResponse, LogOutUserData, LogOutUserResponse, RefreshGravatarData, RefreshGravatarResponse, AdminListUsersData, AdminListUsersResponse, ListUserActionsData, ListUserActionsResponse, SendPasswordResetEmailData, SendPasswordResetEmailResponse, ChangePasswordData, GetUserEmailsData, GetUserEmailsResponse, SendMessageData, SendMessageResponse, EditMessageData, EditMessageResponse, GetMessagesData, GetMessagesResponse, ReactToMessageData, ReactToMessageResponse, GetUserCardData, GetUserCardResponse, GetSessionData, GetSessionResponse } from './types.gen'; -import { zGetBackupsResponse, zCreateBackupResponse, zAdminListBadgesResponse, zCreateBadgeResponse, zUpdateBadgeResponse, zListCategoriesResponse, zCreateCategoryResponse, zUpdateCategoryResponse, zListCategoryTopicsResponse, zGetCategoryResponse, zCreateGroupResponse, zDeleteGroupResponse, zGetGroupResponse, zUpdateGroupResponse, zRemoveGroupMembersResponse, zListGroupMembersResponse, zAddGroupMembersResponse, zListGroupsResponse, zCreateInviteResponse, zCreateMultipleInvitesResponse, zGetNotificationsResponse, zMarkNotificationsAsReadResponse, zListPostsResponse, zCreateTopicPostPmResponse, zGetPostResponse, zUpdatePostResponse, zPostRepliesResponse, zLockPostResponse, zPerformPostActionResponse, zListUserPrivateMessagesResponse, zGetUserSentPrivateMessagesResponse, zSearchResponse, zGetSiteResponse, zGetSiteBasicInfoResponse, zListTagGroupsResponse, zCreateTagGroupResponse, zGetTagGroupResponse, zUpdateTagGroupResponse, zListTagsResponse, zGetTagResponse, zGetSpecificPostsFromTopicResponse, zGetTopicResponse, zUpdateTopicResponse, zInviteToTopicResponse, zInviteGroupToTopicResponse, zUpdateTopicStatusResponse, zListLatestTopicsResponse, zListTopTopicsResponse, zSetNotificationLevelResponse, zUpdateTopicTimestampResponse, zCreateTopicTimerResponse, zCreateUploadResponse, zGeneratePresignedPutResponse, zCompleteExternalUploadResponse, zCreateMultipartUploadResponse, zBatchPresignMultipartPartsResponse, zAbortMultipartResponse, zCompleteMultipartResponse, zListUserBadgesResponse, zCreateUserResponse, zGetUserResponse, zUpdateUserResponse, zGetUserExternalIdResponse, zGetUserIdentiyProviderExternalIdResponse, zUpdateAvatarResponse, zListUsersPublicResponse, zDeleteUserResponse, zAdminGetUserResponse, zActivateUserResponse, zDeactivateUserResponse, zSuspendUserResponse, zSilenceUserResponse, zAnonymizeUserResponse, zLogOutUserResponse, zRefreshGravatarResponse, zAdminListUsersResponse, zListUserActionsResponse, zSendPasswordResetEmailResponse, zGetUserEmailsResponse, zSendMessageResponse, zEditMessageResponse, zGetMessagesResponse, zReactToMessageResponse, zGetUserCardResponse, zGetSessionResponse } from './zod.gen'; import { client as _heyApiClient } from './client.gen'; import { getMessagesResponseTransformer } from './transformers.gen'; @@ -25,9 +24,6 @@ export type Options(options?: Options) => { return (options?.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zGetBackupsResponse.parseAsync(data); - }, url: '/admin/backups.json', ...options }); @@ -38,9 +34,6 @@ export const getBackups = (options?: Optio */ export const createBackup = (options?: Options) => { return (options?.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zCreateBackupResponse.parseAsync(data); - }, url: '/admin/backups.json', ...options, headers: { @@ -75,9 +68,6 @@ export const sendDownloadBackupEmail = (op */ export const adminListBadges = (options?: Options) => { return (options?.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zAdminListBadgesResponse.parseAsync(data); - }, url: '/admin/badges.json', ...options }); @@ -88,9 +78,6 @@ export const adminListBadges = (options?: */ export const createBadge = (options?: Options) => { return (options?.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zCreateBadgeResponse.parseAsync(data); - }, url: '/admin/badges.json', ...options, headers: { @@ -115,9 +102,6 @@ export const deleteBadge = (options: Optio */ export const updateBadge = (options: Options) => { return (options.client ?? _heyApiClient).put({ - responseValidator: async (data) => { - return await zUpdateBadgeResponse.parseAsync(data); - }, url: '/admin/badges/{id}.json', ...options, headers: { @@ -132,9 +116,6 @@ export const updateBadge = (options: Optio */ export const listCategories = (options?: Options) => { return (options?.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zListCategoriesResponse.parseAsync(data); - }, url: '/categories.json', ...options }); @@ -145,9 +126,6 @@ export const listCategories = (options?: O */ export const createCategory = (options?: Options) => { return (options?.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zCreateCategoryResponse.parseAsync(data); - }, url: '/categories.json', ...options, headers: { @@ -162,9 +140,6 @@ export const createCategory = (options?: O */ export const updateCategory = (options: Options) => { return (options.client ?? _heyApiClient).put({ - responseValidator: async (data) => { - return await zUpdateCategoryResponse.parseAsync(data); - }, url: '/categories/{id}.json', ...options, headers: { @@ -179,9 +154,6 @@ export const updateCategory = (options: Op */ export const listCategoryTopics = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zListCategoryTopicsResponse.parseAsync(data); - }, url: '/c/{slug}/{id}.json', ...options }); @@ -192,9 +164,6 @@ export const listCategoryTopics = (options */ export const getCategory = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zGetCategoryResponse.parseAsync(data); - }, url: '/c/{id}/show.json', ...options }); @@ -205,9 +174,6 @@ export const getCategory = (options: Optio */ export const createGroup = (options?: Options) => { return (options?.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zCreateGroupResponse.parseAsync(data); - }, url: '/admin/groups.json', ...options, headers: { @@ -222,9 +188,6 @@ export const createGroup = (options?: Opti */ export const deleteGroup = (options: Options) => { return (options.client ?? _heyApiClient).delete({ - responseValidator: async (data) => { - return await zDeleteGroupResponse.parseAsync(data); - }, url: '/admin/groups/{id}.json', ...options }); @@ -235,9 +198,6 @@ export const deleteGroup = (options: Optio */ export const getGroup = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zGetGroupResponse.parseAsync(data); - }, url: '/groups/{id}.json', ...options }); @@ -248,9 +208,6 @@ export const getGroup = (options: Options< */ export const updateGroup = (options: Options) => { return (options.client ?? _heyApiClient).put({ - responseValidator: async (data) => { - return await zUpdateGroupResponse.parseAsync(data); - }, url: '/groups/{id}.json', ...options, headers: { @@ -265,9 +222,6 @@ export const updateGroup = (options: Optio */ export const removeGroupMembers = (options: Options) => { return (options.client ?? _heyApiClient).delete({ - responseValidator: async (data) => { - return await zRemoveGroupMembersResponse.parseAsync(data); - }, url: '/groups/{id}/members.json', ...options, headers: { @@ -282,9 +236,6 @@ export const removeGroupMembers = (options */ export const listGroupMembers = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zListGroupMembersResponse.parseAsync(data); - }, url: '/groups/{id}/members.json', ...options }); @@ -295,9 +246,6 @@ export const listGroupMembers = (options: */ export const addGroupMembers = (options: Options) => { return (options.client ?? _heyApiClient).put({ - responseValidator: async (data) => { - return await zAddGroupMembersResponse.parseAsync(data); - }, url: '/groups/{id}/members.json', ...options, headers: { @@ -312,9 +260,6 @@ export const addGroupMembers = (options: O */ export const listGroups = (options?: Options) => { return (options?.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zListGroupsResponse.parseAsync(data); - }, url: '/groups.json', ...options }); @@ -325,9 +270,6 @@ export const listGroups = (options?: Optio */ export const createInvite = (options: Options) => { return (options.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zCreateInviteResponse.parseAsync(data); - }, url: '/invites.json', ...options, headers: { @@ -342,9 +284,6 @@ export const createInvite = (options: Opti */ export const createMultipleInvites = (options: Options) => { return (options.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zCreateMultipleInvitesResponse.parseAsync(data); - }, url: '/invites/create-multiple.json', ...options, headers: { @@ -359,9 +298,6 @@ export const createMultipleInvites = (opti */ export const getNotifications = (options?: Options) => { return (options?.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zGetNotificationsResponse.parseAsync(data); - }, url: '/notifications.json', ...options }); @@ -372,9 +308,6 @@ export const getNotifications = (options?: */ export const markNotificationsAsRead = (options?: Options) => { return (options?.client ?? _heyApiClient).put({ - responseValidator: async (data) => { - return await zMarkNotificationsAsReadResponse.parseAsync(data); - }, url: '/notifications/mark-read.json', ...options, headers: { @@ -389,9 +322,6 @@ export const markNotificationsAsRead = (op */ export const listPosts = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zListPostsResponse.parseAsync(data); - }, url: '/posts.json', ...options }); @@ -402,9 +332,6 @@ export const listPosts = (options: Options */ export const createTopicPostPm = (options?: Options) => { return (options?.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zCreateTopicPostPmResponse.parseAsync(data); - }, url: '/posts.json', ...options, headers: { @@ -439,9 +366,6 @@ export const deletePost = (options: Option */ export const getPost = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zGetPostResponse.parseAsync(data); - }, url: '/posts/{id}.json', ...options }); @@ -452,9 +376,6 @@ export const getPost = (options: Options(options: Options) => { return (options.client ?? _heyApiClient).put({ - responseValidator: async (data) => { - return await zUpdatePostResponse.parseAsync(data); - }, url: '/posts/{id}.json', ...options, headers: { @@ -469,9 +390,6 @@ export const updatePost = (options: Option */ export const postReplies = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zPostRepliesResponse.parseAsync(data); - }, url: '/posts/{id}/replies.json', ...options }); @@ -482,9 +400,6 @@ export const postReplies = (options: Optio */ export const lockPost = (options: Options) => { return (options.client ?? _heyApiClient).put({ - responseValidator: async (data) => { - return await zLockPostResponse.parseAsync(data); - }, url: '/posts/{id}/locked.json', ...options, headers: { @@ -499,9 +414,6 @@ export const lockPost = (options: Options< */ export const performPostAction = (options: Options) => { return (options.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zPerformPostActionResponse.parseAsync(data); - }, url: '/post_actions.json', ...options, headers: { @@ -516,9 +428,6 @@ export const performPostAction = (options: */ export const listUserPrivateMessages = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zListUserPrivateMessagesResponse.parseAsync(data); - }, url: '/topics/private-messages/{username}.json', ...options }); @@ -529,9 +438,6 @@ export const listUserPrivateMessages = (op */ export const getUserSentPrivateMessages = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zGetUserSentPrivateMessagesResponse.parseAsync(data); - }, url: '/topics/private-messages-sent/{username}.json', ...options }); @@ -542,9 +448,6 @@ export const getUserSentPrivateMessages = */ export const search = (options?: Options) => { return (options?.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zSearchResponse.parseAsync(data); - }, url: '/search.json', ...options }); @@ -556,9 +459,6 @@ export const search = (options?: Options(options?: Options) => { return (options?.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zGetSiteResponse.parseAsync(data); - }, url: '/site.json', ...options }); @@ -570,9 +470,6 @@ export const getSite = (options?: Options< */ export const getSiteBasicInfo = (options?: Options) => { return (options?.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zGetSiteBasicInfoResponse.parseAsync(data); - }, url: '/site/basic-info.json', ...options }); @@ -583,9 +480,6 @@ export const getSiteBasicInfo = (options?: */ export const listTagGroups = (options?: Options) => { return (options?.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zListTagGroupsResponse.parseAsync(data); - }, url: '/tag_groups.json', ...options }); @@ -596,9 +490,6 @@ export const listTagGroups = (options?: Op */ export const createTagGroup = (options?: Options) => { return (options?.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zCreateTagGroupResponse.parseAsync(data); - }, url: '/tag_groups.json', ...options, headers: { @@ -613,9 +504,6 @@ export const createTagGroup = (options?: O */ export const getTagGroup = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zGetTagGroupResponse.parseAsync(data); - }, url: '/tag_groups/{id}.json', ...options }); @@ -626,9 +514,6 @@ export const getTagGroup = (options: Optio */ export const updateTagGroup = (options: Options) => { return (options.client ?? _heyApiClient).put({ - responseValidator: async (data) => { - return await zUpdateTagGroupResponse.parseAsync(data); - }, url: '/tag_groups/{id}.json', ...options, headers: { @@ -643,9 +528,6 @@ export const updateTagGroup = (options: Op */ export const listTags = (options?: Options) => { return (options?.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zListTagsResponse.parseAsync(data); - }, url: '/tags.json', ...options }); @@ -656,9 +538,6 @@ export const listTags = (options?: Options */ export const getTag = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zGetTagResponse.parseAsync(data); - }, url: '/tag/{name}.json', ...options }); @@ -669,9 +548,6 @@ export const getTag = (options: Options(options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zGetSpecificPostsFromTopicResponse.parseAsync(data); - }, url: '/t/{id}/posts.json', ...options, headers: { @@ -696,9 +572,6 @@ export const removeTopic = (options: Optio */ export const getTopic = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zGetTopicResponse.parseAsync(data); - }, url: '/t/{id}.json', ...options }); @@ -709,9 +582,6 @@ export const getTopic = (options: Options< */ export const updateTopic = (options: Options) => { return (options.client ?? _heyApiClient).put({ - responseValidator: async (data) => { - return await zUpdateTopicResponse.parseAsync(data); - }, url: '/t/-/{id}.json', ...options, headers: { @@ -726,9 +596,6 @@ export const updateTopic = (options: Optio */ export const inviteToTopic = (options: Options) => { return (options.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zInviteToTopicResponse.parseAsync(data); - }, url: '/t/{id}/invite.json', ...options, headers: { @@ -743,9 +610,6 @@ export const inviteToTopic = (options: Opt */ export const inviteGroupToTopic = (options: Options) => { return (options.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zInviteGroupToTopicResponse.parseAsync(data); - }, url: '/t/{id}/invite-group.json', ...options, headers: { @@ -770,9 +634,6 @@ export const bookmarkTopic = (options: Opt */ export const updateTopicStatus = (options: Options) => { return (options.client ?? _heyApiClient).put({ - responseValidator: async (data) => { - return await zUpdateTopicStatusResponse.parseAsync(data); - }, url: '/t/{id}/status.json', ...options, headers: { @@ -787,9 +648,6 @@ export const updateTopicStatus = (options: */ export const listLatestTopics = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zListLatestTopicsResponse.parseAsync(data); - }, url: '/latest.json', ...options }); @@ -800,9 +658,6 @@ export const listLatestTopics = (options: */ export const listTopTopics = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zListTopTopicsResponse.parseAsync(data); - }, url: '/top.json', ...options }); @@ -813,9 +668,6 @@ export const listTopTopics = (options: Opt */ export const setNotificationLevel = (options: Options) => { return (options.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zSetNotificationLevelResponse.parseAsync(data); - }, url: '/t/{id}/notifications.json', ...options, headers: { @@ -830,9 +682,6 @@ export const setNotificationLevel = (optio */ export const updateTopicTimestamp = (options: Options) => { return (options.client ?? _heyApiClient).put({ - responseValidator: async (data) => { - return await zUpdateTopicTimestampResponse.parseAsync(data); - }, url: '/t/{id}/change-timestamp.json', ...options, headers: { @@ -847,9 +696,6 @@ export const updateTopicTimestamp = (optio */ export const createTopicTimer = (options: Options) => { return (options.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zCreateTopicTimerResponse.parseAsync(data); - }, url: '/t/{id}/timer.json', ...options, headers: { @@ -875,9 +721,6 @@ export const getTopicByExternalId = (optio export const createUpload = (options?: Options) => { return (options?.client ?? _heyApiClient).post({ ...formDataBodySerializer, - responseValidator: async (data) => { - return await zCreateUploadResponse.parseAsync(data); - }, url: '/uploads.json', ...options, headers: { @@ -913,9 +756,6 @@ export const createUpload = (options?: Opt */ export const generatePresignedPut = (options?: Options) => { return (options?.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zGeneratePresignedPutResponse.parseAsync(data); - }, url: '/uploads/generate-presigned-put.json', ...options, headers: { @@ -948,9 +788,6 @@ export const generatePresignedPut = (optio */ export const completeExternalUpload = (options?: Options) => { return (options?.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zCompleteExternalUploadResponse.parseAsync(data); - }, url: '/uploads/complete-external-upload.json', ...options, headers: { @@ -977,9 +814,6 @@ export const completeExternalUpload = (opt */ export const createMultipartUpload = (options?: Options) => { return (options?.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zCreateMultipartUploadResponse.parseAsync(data); - }, url: '/uploads/create-multipart.json', ...options, headers: { @@ -1016,9 +850,6 @@ export const createMultipartUpload = (opti */ export const batchPresignMultipartParts = (options?: Options) => { return (options?.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zBatchPresignMultipartPartsResponse.parseAsync(data); - }, url: '/uploads/batch-presign-multipart-parts.json', ...options, headers: { @@ -1046,9 +877,6 @@ export const batchPresignMultipartParts = */ export const abortMultipart = (options?: Options) => { return (options?.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zAbortMultipartResponse.parseAsync(data); - }, url: '/uploads/abort-multipart.json', ...options, headers: { @@ -1078,9 +906,6 @@ export const abortMultipart = (options?: O */ export const completeMultipart = (options?: Options) => { return (options?.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zCompleteMultipartResponse.parseAsync(data); - }, url: '/uploads/complete-multipart.json', ...options, headers: { @@ -1095,9 +920,6 @@ export const completeMultipart = (options? */ export const listUserBadges = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zListUserBadgesResponse.parseAsync(data); - }, url: '/user-badges/{username}.json', ...options }); @@ -1108,9 +930,6 @@ export const listUserBadges = (options: Op */ export const createUser = (options: Options) => { return (options.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zCreateUserResponse.parseAsync(data); - }, url: '/users.json', ...options, headers: { @@ -1125,9 +944,6 @@ export const createUser = (options: Option */ export const getUser = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zGetUserResponse.parseAsync(data); - }, url: '/u/{username}.json', ...options }); @@ -1138,9 +954,6 @@ export const getUser = (options: Options(options: Options) => { return (options.client ?? _heyApiClient).put({ - responseValidator: async (data) => { - return await zUpdateUserResponse.parseAsync(data); - }, url: '/u/{username}.json', ...options, headers: { @@ -1155,9 +968,6 @@ export const updateUser = (options: Option */ export const getUserExternalId = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zGetUserExternalIdResponse.parseAsync(data); - }, url: '/u/by-external/{external_id}.json', ...options }); @@ -1168,9 +978,6 @@ export const getUserExternalId = (options: */ export const getUserIdentiyProviderExternalId = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zGetUserIdentiyProviderExternalIdResponse.parseAsync(data); - }, url: '/u/by-external/{provider}/{external_id}.json', ...options }); @@ -1181,9 +988,6 @@ export const getUserIdentiyProviderExternalId = (options: Options) => { return (options.client ?? _heyApiClient).put({ - responseValidator: async (data) => { - return await zUpdateAvatarResponse.parseAsync(data); - }, url: '/u/{username}/preferences/avatar/pick.json', ...options, headers: { @@ -1226,9 +1030,6 @@ export const updateUsername = (options: Op */ export const listUsersPublic = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zListUsersPublicResponse.parseAsync(data); - }, url: '/directory_items.json', ...options }); @@ -1239,9 +1040,6 @@ export const listUsersPublic = (options: O */ export const deleteUser = (options: Options) => { return (options.client ?? _heyApiClient).delete({ - responseValidator: async (data) => { - return await zDeleteUserResponse.parseAsync(data); - }, url: '/admin/users/{id}.json', ...options, headers: { @@ -1256,9 +1054,6 @@ export const deleteUser = (options: Option */ export const adminGetUser = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zAdminGetUserResponse.parseAsync(data); - }, url: '/admin/users/{id}.json', ...options }); @@ -1269,9 +1064,6 @@ export const adminGetUser = (options: Opti */ export const activateUser = (options: Options) => { return (options.client ?? _heyApiClient).put({ - responseValidator: async (data) => { - return await zActivateUserResponse.parseAsync(data); - }, url: '/admin/users/{id}/activate.json', ...options }); @@ -1282,9 +1074,6 @@ export const activateUser = (options: Opti */ export const deactivateUser = (options: Options) => { return (options.client ?? _heyApiClient).put({ - responseValidator: async (data) => { - return await zDeactivateUserResponse.parseAsync(data); - }, url: '/admin/users/{id}/deactivate.json', ...options }); @@ -1295,9 +1084,6 @@ export const deactivateUser = (options: Op */ export const suspendUser = (options: Options) => { return (options.client ?? _heyApiClient).put({ - responseValidator: async (data) => { - return await zSuspendUserResponse.parseAsync(data); - }, url: '/admin/users/{id}/suspend.json', ...options, headers: { @@ -1312,9 +1098,6 @@ export const suspendUser = (options: Optio */ export const silenceUser = (options: Options) => { return (options.client ?? _heyApiClient).put({ - responseValidator: async (data) => { - return await zSilenceUserResponse.parseAsync(data); - }, url: '/admin/users/{id}/silence.json', ...options, headers: { @@ -1329,9 +1112,6 @@ export const silenceUser = (options: Optio */ export const anonymizeUser = (options: Options) => { return (options.client ?? _heyApiClient).put({ - responseValidator: async (data) => { - return await zAnonymizeUserResponse.parseAsync(data); - }, url: '/admin/users/{id}/anonymize.json', ...options }); @@ -1342,9 +1122,6 @@ export const anonymizeUser = (options: Opt */ export const logOutUser = (options: Options) => { return (options.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zLogOutUserResponse.parseAsync(data); - }, url: '/admin/users/{id}/log_out.json', ...options }); @@ -1355,9 +1132,6 @@ export const logOutUser = (options: Option */ export const refreshGravatar = (options: Options) => { return (options.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zRefreshGravatarResponse.parseAsync(data); - }, url: '/user_avatar/{username}/refresh_gravatar.json', ...options }); @@ -1368,9 +1142,6 @@ export const refreshGravatar = (options: O */ export const adminListUsers = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zAdminListUsersResponse.parseAsync(data); - }, url: '/admin/users/list/{flag}.json', ...options }); @@ -1381,9 +1152,6 @@ export const adminListUsers = (options: Op */ export const listUserActions = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zListUserActionsResponse.parseAsync(data); - }, url: '/user_actions.json', ...options }); @@ -1394,9 +1162,6 @@ export const listUserActions = (options: O */ export const sendPasswordResetEmail = (options?: Options) => { return (options?.client ?? _heyApiClient).post({ - responseValidator: async (data) => { - return await zSendPasswordResetEmailResponse.parseAsync(data); - }, url: '/session/forgot_password.json', ...options, headers: { @@ -1425,9 +1190,6 @@ export const changePassword = (options: Op */ export const getUserEmails = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zGetUserEmailsResponse.parseAsync(data); - }, url: '/u/{username}/emails.json', ...options }); @@ -1439,9 +1201,6 @@ export const getUserEmails = (options: Opt export const sendMessage = (options: Options) => { return (options.client ?? _heyApiClient).post({ ...urlSearchParamsBodySerializer, - responseValidator: async (data) => { - return await zSendMessageResponse.parseAsync(data); - }, url: '/chat/{channel_id}', ...options, headers: { @@ -1457,9 +1216,6 @@ export const sendMessage = (options: Optio export const editMessage = (options: Options) => { return (options.client ?? _heyApiClient).put({ ...urlSearchParamsBodySerializer, - responseValidator: async (data) => { - return await zEditMessageResponse.parseAsync(data); - }, url: '/chat/api/channels/{channel_id}/messages/{message_id}', ...options, headers: { @@ -1475,9 +1231,6 @@ export const editMessage = (options: Optio export const getMessages = (options: Options) => { return (options.client ?? _heyApiClient).get({ responseTransformer: getMessagesResponseTransformer, - responseValidator: async (data) => { - return await zGetMessagesResponse.parseAsync(data); - }, url: '/chat/api/channels/{channel_id}/messages', ...options }); @@ -1489,9 +1242,6 @@ export const getMessages = (options: Optio export const reactToMessage = (options: Options) => { return (options.client ?? _heyApiClient).put({ ...urlSearchParamsBodySerializer, - responseValidator: async (data) => { - return await zReactToMessageResponse.parseAsync(data); - }, url: '/chat/{channel_id}/react/{message_id}', ...options, headers: { @@ -1506,9 +1256,6 @@ export const reactToMessage = (options: Op */ export const getUserCard = (options: Options) => { return (options.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zGetUserCardResponse.parseAsync(data); - }, url: '/u/{username}/card.json', ...options }); @@ -1519,9 +1266,6 @@ export const getUserCard = (options: Optio */ export const getSession = (options?: Options) => { return (options?.client ?? _heyApiClient).get({ - responseValidator: async (data) => { - return await zGetSessionResponse.parseAsync(data); - }, url: '/session/current.json', ...options }); diff --git a/client/types.gen.ts b/client/types.gen.ts index 2220f1a..0dbc779 100644 --- a/client/types.gen.ts +++ b/client/types.gen.ts @@ -5260,6 +5260,25 @@ export type GetSessionData = { url: '/session/current.json'; }; +export type GetSessionErrors = { + /** + * Bad Request + */ + 400: unknown; + /** + * Forbidden + */ + 403: unknown; + /** + * Too Many Requests + */ + 429: unknown; + /** + * Internal Server Error + */ + 500: unknown; +}; + export type GetSessionResponses = { /** * Authenticated User Session Data diff --git a/client/zod.gen.ts b/client/zod.gen.ts deleted file mode 100644 index 7955c6a..0000000 --- a/client/zod.gen.ts +++ /dev/null @@ -1,4918 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -import { z } from 'zod'; - -export const zGetBackupsResponse = z.array(z.object({ - filename: z.string(), - size: z.number().int(), - last_modified: z.string() -})).min(1); - -export const zCreateBackupResponse = z.object({ - success: z.string() -}); - -export const zAdminListBadgesResponse = z.object({ - badges: z.array(z.object({ - id: z.number().int(), - name: z.string(), - description: z.string(), - grant_count: z.number().int(), - allow_title: z.boolean(), - multiple_grant: z.boolean(), - icon: z.string(), - image_url: z.union([ - z.string(), - z.null() - ]), - listable: z.boolean(), - enabled: z.boolean(), - badge_grouping_id: z.number().int(), - system: z.boolean(), - long_description: z.string(), - slug: z.string(), - manually_grantable: z.boolean(), - query: z.union([ - z.string(), - z.null() - ]), - trigger: z.union([ - z.number().int(), - z.null() - ]), - target_posts: z.boolean(), - auto_revoke: z.boolean(), - show_posts: z.boolean(), - i18n_name: z.union([ - z.string(), - z.null() - ]).optional(), - image_upload_id: z.union([ - z.number().int(), - z.null() - ]), - badge_type_id: z.number().int(), - show_in_post_header: z.boolean() - })), - badge_types: z.array(z.object({ - id: z.number().int(), - name: z.string(), - sort_order: z.number().int() - })), - badge_groupings: z.array(z.object({ - id: z.number().int(), - name: z.string(), - description: z.union([ - z.string(), - z.null() - ]), - position: z.number().int(), - system: z.boolean() - })), - admin_badges: z.object({ - protected_system_fields: z.array(z.unknown()), - triggers: z.object({ - user_change: z.number().int(), - none: z.number().int(), - post_revision: z.number().int(), - trust_level_change: z.number().int(), - post_action: z.number().int() - }), - badge_ids: z.array(z.unknown()), - badge_grouping_ids: z.array(z.unknown()), - badge_type_ids: z.array(z.unknown()) - }) -}); - -export const zCreateBadgeResponse = z.object({ - badge_types: z.array(z.object({ - id: z.number().int(), - name: z.string(), - sort_order: z.number().int() - })), - badge: z.object({ - id: z.number().int(), - name: z.string(), - description: z.string(), - grant_count: z.number().int(), - allow_title: z.boolean(), - multiple_grant: z.boolean(), - icon: z.string(), - image_url: z.union([ - z.string(), - z.null() - ]), - image_upload_id: z.union([ - z.number().int(), - z.null() - ]), - listable: z.boolean(), - enabled: z.boolean(), - badge_grouping_id: z.number().int(), - system: z.boolean(), - long_description: z.string(), - slug: z.string(), - manually_grantable: z.boolean(), - query: z.union([ - z.string(), - z.null() - ]), - trigger: z.union([ - z.string(), - z.null() - ]), - target_posts: z.boolean(), - auto_revoke: z.boolean(), - show_posts: z.boolean(), - badge_type_id: z.number().int(), - show_in_post_header: z.boolean() - }) -}); - -export const zUpdateBadgeResponse = z.object({ - badge_types: z.array(z.object({ - id: z.number().int(), - name: z.string(), - sort_order: z.number().int() - })), - badge: z.object({ - id: z.number().int(), - name: z.string(), - description: z.string(), - grant_count: z.number().int(), - allow_title: z.boolean(), - multiple_grant: z.boolean(), - icon: z.string(), - image_url: z.union([ - z.string(), - z.null() - ]), - image_upload_id: z.union([ - z.number().int(), - z.null() - ]), - listable: z.boolean(), - enabled: z.boolean(), - badge_grouping_id: z.number().int(), - system: z.boolean(), - long_description: z.string(), - slug: z.string(), - manually_grantable: z.boolean(), - query: z.union([ - z.string(), - z.null() - ]), - trigger: z.union([ - z.string(), - z.null() - ]), - target_posts: z.boolean(), - auto_revoke: z.boolean(), - show_posts: z.boolean(), - badge_type_id: z.number().int(), - show_in_post_header: z.boolean() - }) -}); - -export const zListCategoriesResponse = z.object({ - category_list: z.object({ - can_create_category: z.boolean(), - can_create_topic: z.boolean(), - categories: z.array(z.object({ - id: z.number().int(), - name: z.string(), - color: z.string(), - text_color: z.string(), - slug: z.string(), - topic_count: z.number().int(), - post_count: z.number().int(), - position: z.number().int(), - description: z.union([ - z.string(), - z.null() - ]), - description_text: z.union([ - z.string(), - z.null() - ]), - description_excerpt: z.union([ - z.string(), - z.null() - ]), - topic_url: z.union([ - z.string(), - z.null() - ]), - read_restricted: z.boolean(), - permission: z.number().int(), - notification_level: z.number().int(), - can_edit: z.boolean(), - topic_template: z.union([ - z.string(), - z.null() - ]), - has_children: z.boolean(), - subcategory_count: z.union([ - z.number().int(), - z.null() - ]), - sort_order: z.union([ - z.string(), - z.null() - ]), - sort_ascending: z.union([ - z.string(), - z.null() - ]), - show_subcategory_list: z.boolean(), - num_featured_topics: z.number().int(), - default_view: z.union([ - z.string(), - z.null() - ]), - subcategory_list_style: z.string(), - default_top_period: z.string(), - default_list_filter: z.string(), - minimum_required_tags: z.number().int(), - navigate_to_first_post_after_read: z.boolean(), - topics_day: z.number().int(), - topics_week: z.number().int(), - topics_month: z.number().int(), - topics_year: z.number().int(), - topics_all_time: z.number().int(), - is_uncategorized: z.boolean().optional(), - subcategory_ids: z.array(z.unknown()), - subcategory_list: z.union([ - z.array(z.unknown()), - z.null() - ]).optional(), - uploaded_logo: z.union([ - z.string(), - z.null() - ]), - uploaded_logo_dark: z.union([ - z.string(), - z.null() - ]), - uploaded_background: z.union([ - z.string(), - z.null() - ]), - uploaded_background_dark: z.union([ - z.string(), - z.null() - ]) - })) - }) -}); - -export const zCreateCategoryResponse = z.object({ - category: z.object({ - id: z.number().int(), - name: z.string(), - color: z.string(), - text_color: z.string(), - slug: z.string(), - topic_count: z.number().int(), - post_count: z.number().int(), - position: z.number().int(), - description: z.union([ - z.string(), - z.null() - ]), - description_text: z.union([ - z.string(), - z.null() - ]), - description_excerpt: z.union([ - z.string(), - z.null() - ]), - topic_url: z.union([ - z.string(), - z.null() - ]), - read_restricted: z.boolean(), - permission: z.union([ - z.number().int(), - z.null() - ]), - notification_level: z.number().int(), - can_edit: z.boolean(), - topic_template: z.union([ - z.string(), - z.null() - ]), - form_template_ids: z.array(z.unknown()).optional(), - has_children: z.union([ - z.boolean(), - z.null() - ]), - subcategory_count: z.union([ - z.number().int(), - z.null() - ]), - sort_order: z.union([ - z.string(), - z.null() - ]), - sort_ascending: z.union([ - z.string(), - z.null() - ]), - show_subcategory_list: z.boolean(), - num_featured_topics: z.number().int(), - default_view: z.union([ - z.string(), - z.null() - ]), - subcategory_list_style: z.string(), - default_top_period: z.string(), - default_list_filter: z.string(), - minimum_required_tags: z.number().int(), - navigate_to_first_post_after_read: z.boolean(), - custom_fields: z.object({}), - allowed_tags: z.array(z.unknown()).optional(), - allowed_tag_groups: z.array(z.unknown()).optional(), - allow_global_tags: z.boolean().optional(), - required_tag_groups: z.array(z.object({ - name: z.string(), - min_count: z.number().int() - })), - category_setting: z.unknown().optional(), - read_only_banner: z.union([ - z.string(), - z.null() - ]), - available_groups: z.array(z.unknown()), - auto_close_hours: z.union([ - z.string(), - z.null() - ]), - auto_close_based_on_last_post: z.boolean(), - allow_unlimited_owner_edits_on_first_post: z.boolean(), - default_slow_mode_seconds: z.union([ - z.string(), - z.null() - ]), - group_permissions: z.array(z.object({ - permission_type: z.number().int(), - group_name: z.string() - })), - email_in: z.union([ - z.string(), - z.null() - ]), - email_in_allow_strangers: z.boolean(), - mailinglist_mirror: z.boolean(), - all_topics_wiki: z.boolean(), - can_delete: z.boolean(), - allow_badges: z.boolean(), - topic_featured_link_allowed: z.boolean(), - search_priority: z.number().int(), - uploaded_logo: z.union([ - z.string(), - z.null() - ]), - uploaded_logo_dark: z.union([ - z.string(), - z.null() - ]), - uploaded_background: z.union([ - z.string(), - z.null() - ]), - uploaded_background_dark: z.union([ - z.string(), - z.null() - ]) - }) -}); - -export const zUpdateCategoryResponse = z.object({ - success: z.string(), - category: z.object({ - id: z.number().int(), - name: z.string(), - color: z.string(), - text_color: z.string(), - slug: z.string(), - topic_count: z.number().int(), - post_count: z.number().int(), - position: z.number().int(), - description: z.union([ - z.string(), - z.null() - ]), - description_text: z.union([ - z.string(), - z.null() - ]), - description_excerpt: z.union([ - z.string(), - z.null() - ]), - topic_url: z.union([ - z.string(), - z.null() - ]), - read_restricted: z.boolean(), - permission: z.union([ - z.number().int(), - z.null() - ]), - notification_level: z.number().int(), - can_edit: z.boolean(), - topic_template: z.union([ - z.string(), - z.null() - ]), - form_template_ids: z.array(z.unknown()), - has_children: z.union([ - z.boolean(), - z.null() - ]), - subcategory_count: z.union([ - z.number().int(), - z.null() - ]), - sort_order: z.union([ - z.string(), - z.null() - ]), - sort_ascending: z.union([ - z.string(), - z.null() - ]), - show_subcategory_list: z.boolean(), - num_featured_topics: z.number().int(), - default_view: z.union([ - z.string(), - z.null() - ]), - subcategory_list_style: z.string(), - default_top_period: z.string(), - default_list_filter: z.string(), - minimum_required_tags: z.number().int(), - navigate_to_first_post_after_read: z.boolean(), - custom_fields: z.object({}), - allowed_tags: z.array(z.unknown()).optional(), - allowed_tag_groups: z.array(z.unknown()).optional(), - allow_global_tags: z.boolean().optional(), - required_tag_groups: z.array(z.object({ - name: z.string(), - min_count: z.number().int() - })), - category_setting: z.unknown().optional(), - read_only_banner: z.union([ - z.string(), - z.null() - ]), - available_groups: z.array(z.unknown()), - auto_close_hours: z.union([ - z.string(), - z.null() - ]), - auto_close_based_on_last_post: z.boolean(), - allow_unlimited_owner_edits_on_first_post: z.boolean(), - default_slow_mode_seconds: z.union([ - z.string(), - z.null() - ]), - group_permissions: z.array(z.object({ - permission_type: z.number().int(), - group_name: z.string() - })), - email_in: z.union([ - z.string(), - z.null() - ]), - email_in_allow_strangers: z.boolean(), - mailinglist_mirror: z.boolean(), - all_topics_wiki: z.boolean(), - can_delete: z.boolean(), - allow_badges: z.boolean(), - topic_featured_link_allowed: z.boolean(), - search_priority: z.number().int(), - uploaded_logo: z.union([ - z.string(), - z.null() - ]), - uploaded_logo_dark: z.union([ - z.string(), - z.null() - ]), - uploaded_background: z.union([ - z.string(), - z.null() - ]), - uploaded_background_dark: z.union([ - z.string(), - z.null() - ]) - }) -}); - -export const zListCategoryTopicsResponse = z.object({ - users: z.array(z.object({ - id: z.number().int(), - username: z.string(), - name: z.string(), - avatar_template: z.string() - })).optional(), - primary_groups: z.array(z.unknown()).optional(), - topic_list: z.object({ - can_create_topic: z.boolean(), - per_page: z.number().int(), - top_tags: z.array(z.unknown()).optional(), - topics: z.array(z.object({ - id: z.number().int(), - title: z.string(), - fancy_title: z.string(), - slug: z.string(), - posts_count: z.number().int(), - reply_count: z.number().int(), - highest_post_number: z.number().int(), - image_url: z.union([ - z.string(), - z.null() - ]), - created_at: z.string(), - last_posted_at: z.string(), - bumped: z.boolean(), - bumped_at: z.string(), - archetype: z.string(), - unseen: z.boolean(), - pinned: z.boolean(), - unpinned: z.union([ - z.string(), - z.null() - ]), - excerpt: z.string(), - visible: z.boolean(), - closed: z.boolean(), - archived: z.boolean(), - bookmarked: z.union([ - z.string(), - z.null() - ]), - liked: z.union([ - z.string(), - z.null() - ]), - views: z.number().int(), - like_count: z.number().int(), - has_summary: z.boolean(), - last_poster_username: z.string(), - category_id: z.number().int(), - pinned_globally: z.boolean(), - featured_link: z.union([ - z.string(), - z.null() - ]), - posters: z.array(z.object({ - extras: z.string(), - description: z.string(), - user_id: z.number().int(), - primary_group_id: z.union([ - z.number().int(), - z.null() - ]) - })) - })) - }) -}); - -export const zGetCategoryResponse = z.object({ - category: z.object({ - id: z.number().int(), - name: z.string(), - color: z.string(), - text_color: z.string(), - slug: z.string(), - topic_count: z.number().int(), - post_count: z.number().int(), - position: z.number().int(), - description: z.union([ - z.string(), - z.null() - ]), - description_text: z.union([ - z.string(), - z.null() - ]), - description_excerpt: z.union([ - z.string(), - z.null() - ]), - topic_url: z.union([ - z.string(), - z.null() - ]), - read_restricted: z.boolean(), - permission: z.union([ - z.number().int(), - z.null() - ]), - notification_level: z.number().int(), - can_edit: z.boolean(), - topic_template: z.union([ - z.string(), - z.null() - ]), - form_template_ids: z.array(z.unknown()).optional(), - has_children: z.union([ - z.boolean(), - z.null() - ]), - subcategory_count: z.union([ - z.number().int(), - z.null() - ]), - sort_order: z.union([ - z.string(), - z.null() - ]), - sort_ascending: z.union([ - z.string(), - z.null() - ]), - show_subcategory_list: z.boolean(), - num_featured_topics: z.number().int(), - default_view: z.union([ - z.string(), - z.null() - ]), - subcategory_list_style: z.string(), - default_top_period: z.string(), - default_list_filter: z.string(), - minimum_required_tags: z.number().int(), - navigate_to_first_post_after_read: z.boolean(), - custom_fields: z.object({}), - allowed_tags: z.array(z.unknown()).optional(), - allowed_tag_groups: z.array(z.unknown()).optional(), - allow_global_tags: z.boolean().optional(), - required_tag_groups: z.array(z.object({ - name: z.string(), - min_count: z.number().int() - })), - category_setting: z.unknown().optional(), - read_only_banner: z.union([ - z.string(), - z.null() - ]), - available_groups: z.array(z.unknown()), - auto_close_hours: z.union([ - z.string(), - z.null() - ]), - auto_close_based_on_last_post: z.boolean(), - allow_unlimited_owner_edits_on_first_post: z.boolean(), - default_slow_mode_seconds: z.union([ - z.string(), - z.null() - ]), - group_permissions: z.array(z.object({ - permission_type: z.number().int(), - group_name: z.string() - })), - email_in: z.union([ - z.string(), - z.null() - ]), - email_in_allow_strangers: z.boolean(), - mailinglist_mirror: z.boolean(), - all_topics_wiki: z.boolean(), - can_delete: z.boolean(), - allow_badges: z.boolean(), - topic_featured_link_allowed: z.boolean(), - search_priority: z.number().int(), - uploaded_logo: z.union([ - z.string(), - z.null() - ]), - uploaded_logo_dark: z.union([ - z.string(), - z.null() - ]), - uploaded_background: z.union([ - z.string(), - z.null() - ]), - uploaded_background_dark: z.union([ - z.string(), - z.null() - ]) - }) -}); - -export const zCreateGroupResponse = z.object({ - basic_group: z.object({ - id: z.number().int(), - automatic: z.boolean(), - name: z.string(), - user_count: z.number().int(), - mentionable_level: z.number().int(), - messageable_level: z.number().int(), - visibility_level: z.number().int(), - primary_group: z.boolean(), - title: z.union([ - z.string(), - z.null() - ]), - grant_trust_level: z.union([ - z.string(), - z.null() - ]), - incoming_email: z.union([ - z.string(), - z.null() - ]), - has_messages: z.boolean(), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]), - bio_raw: z.union([ - z.string(), - z.null() - ]), - bio_cooked: z.union([ - z.string(), - z.null() - ]), - bio_excerpt: z.union([ - z.string(), - z.null() - ]), - public_admission: z.boolean(), - public_exit: z.boolean(), - allow_membership_requests: z.boolean(), - full_name: z.union([ - z.string(), - z.null() - ]), - default_notification_level: z.number().int(), - membership_request_template: z.union([ - z.string(), - z.null() - ]), - members_visibility_level: z.number().int(), - can_see_members: z.boolean(), - can_admin_group: z.boolean(), - can_edit_group: z.boolean().optional(), - publish_read_state: z.boolean() - }) -}); - -export const zDeleteGroupResponse = z.object({ - success: z.string() -}); - -export const zGetGroupResponse = z.object({ - group: z.object({ - id: z.number().int(), - automatic: z.boolean(), - name: z.string(), - user_count: z.number().int(), - mentionable_level: z.number().int(), - messageable_level: z.number().int(), - visibility_level: z.number().int(), - primary_group: z.boolean(), - title: z.union([ - z.string(), - z.null() - ]), - grant_trust_level: z.union([ - z.string(), - z.null() - ]), - incoming_email: z.union([ - z.string(), - z.null() - ]), - has_messages: z.boolean(), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]), - bio_raw: z.union([ - z.string(), - z.null() - ]), - bio_cooked: z.union([ - z.string(), - z.null() - ]), - bio_excerpt: z.union([ - z.string(), - z.null() - ]), - public_admission: z.boolean(), - public_exit: z.boolean(), - allow_membership_requests: z.boolean(), - full_name: z.union([ - z.string(), - z.null() - ]), - default_notification_level: z.number().int(), - membership_request_template: z.union([ - z.string(), - z.null() - ]), - is_group_user: z.boolean(), - members_visibility_level: z.number().int(), - can_see_members: z.boolean(), - can_admin_group: z.boolean(), - can_edit_group: z.boolean().optional(), - publish_read_state: z.boolean(), - is_group_owner_display: z.boolean(), - mentionable: z.boolean(), - messageable: z.boolean(), - automatic_membership_email_domains: z.union([ - z.string(), - z.null() - ]), - smtp_updated_at: z.union([ - z.string(), - z.null() - ]).optional(), - smtp_updated_by: z.union([ - z.object({}), - z.null() - ]).optional(), - smtp_enabled: z.boolean().optional(), - smtp_server: z.union([ - z.string(), - z.null() - ]), - smtp_port: z.union([ - z.string(), - z.null() - ]), - smtp_ssl_mode: z.union([ - z.number().int(), - z.null() - ]), - imap_enabled: z.boolean().optional(), - imap_updated_at: z.union([ - z.string(), - z.null() - ]).optional(), - imap_updated_by: z.union([ - z.object({}), - z.null() - ]).optional(), - imap_server: z.union([ - z.string(), - z.null() - ]), - imap_port: z.union([ - z.string(), - z.null() - ]), - imap_ssl: z.union([ - z.string(), - z.null() - ]), - imap_mailbox_name: z.string(), - imap_mailboxes: z.array(z.unknown()), - email_username: z.union([ - z.string(), - z.null() - ]), - email_from_alias: z.union([ - z.string(), - z.null() - ]).optional(), - email_password: z.union([ - z.string(), - z.null() - ]), - imap_last_error: z.union([ - z.string(), - z.null() - ]), - imap_old_emails: z.union([ - z.string(), - z.null() - ]), - imap_new_emails: z.union([ - z.string(), - z.null() - ]), - message_count: z.number().int(), - allow_unknown_sender_topic_replies: z.boolean(), - associated_group_ids: z.array(z.unknown()).optional(), - watching_category_ids: z.array(z.unknown()), - tracking_category_ids: z.array(z.unknown()), - watching_first_post_category_ids: z.array(z.unknown()), - regular_category_ids: z.array(z.unknown()), - muted_category_ids: z.array(z.unknown()), - watching_tags: z.array(z.unknown()).optional(), - watching_first_post_tags: z.array(z.unknown()).optional(), - tracking_tags: z.array(z.unknown()).optional(), - regular_tags: z.array(z.unknown()).optional(), - muted_tags: z.array(z.unknown()).optional() - }), - extras: z.object({ - visible_group_names: z.array(z.unknown()) - }) -}); - -export const zUpdateGroupResponse = z.object({ - success: z.string().optional() -}); - -export const zRemoveGroupMembersResponse = z.object({ - success: z.string(), - usernames: z.array(z.unknown()), - skipped_usernames: z.array(z.unknown()) -}); - -export const zListGroupMembersResponse = z.object({ - members: z.array(z.object({ - id: z.number().int(), - username: z.string(), - name: z.union([ - z.string(), - z.null() - ]), - avatar_template: z.string(), - title: z.union([ - z.string(), - z.null() - ]), - last_posted_at: z.string(), - last_seen_at: z.string(), - added_at: z.string(), - timezone: z.string() - })), - owners: z.array(z.object({ - id: z.number().int(), - username: z.string(), - name: z.union([ - z.string(), - z.null() - ]), - avatar_template: z.string(), - title: z.union([ - z.string(), - z.null() - ]), - last_posted_at: z.string(), - last_seen_at: z.string(), - added_at: z.string(), - timezone: z.string() - })), - meta: z.object({ - total: z.number().int(), - limit: z.number().int(), - offset: z.number().int() - }) -}); - -export const zAddGroupMembersResponse = z.object({ - success: z.string(), - usernames: z.array(z.unknown()), - emails: z.array(z.unknown()) -}); - -export const zListGroupsResponse = z.object({ - groups: z.array(z.object({ - id: z.number().int(), - automatic: z.boolean(), - name: z.string(), - display_name: z.string(), - user_count: z.number().int(), - mentionable_level: z.number().int(), - messageable_level: z.number().int(), - visibility_level: z.number().int(), - primary_group: z.boolean(), - title: z.union([ - z.string(), - z.null() - ]), - grant_trust_level: z.union([ - z.string(), - z.null() - ]), - incoming_email: z.union([ - z.string(), - z.null() - ]), - has_messages: z.boolean(), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]), - bio_raw: z.union([ - z.string(), - z.null() - ]), - bio_cooked: z.union([ - z.string(), - z.null() - ]), - bio_excerpt: z.union([ - z.string(), - z.null() - ]), - public_admission: z.boolean(), - public_exit: z.boolean(), - allow_membership_requests: z.boolean(), - full_name: z.union([ - z.string(), - z.null() - ]), - default_notification_level: z.number().int(), - membership_request_template: z.union([ - z.string(), - z.null() - ]), - is_group_user: z.boolean().optional(), - is_group_owner: z.boolean().optional(), - members_visibility_level: z.number().int(), - can_see_members: z.boolean(), - can_admin_group: z.boolean(), - can_edit_group: z.boolean().optional(), - publish_read_state: z.boolean() - })), - extras: z.object({ - type_filters: z.array(z.unknown()) - }), - total_rows_groups: z.number().int(), - load_more_groups: z.string() -}); - -export const zCreateInviteResponse = z.object({ - id: z.number().int().optional(), - link: z.string().optional(), - email: z.string().optional(), - emailed: z.boolean().optional(), - custom_message: z.union([ - z.string(), - z.null() - ]).optional(), - topics: z.array(z.unknown()).optional(), - groups: z.array(z.unknown()).optional(), - created_at: z.string().optional(), - updated_at: z.string().optional(), - expires_at: z.string().optional(), - expired: z.boolean().optional() -}); - -export const zCreateMultipleInvitesResponse = z.object({ - num_successfully_created_invitations: z.number().int().optional(), - num_failed_invitations: z.number().int().optional(), - failed_invitations: z.array(z.unknown()).optional(), - successful_invitations: z.array(z.unknown()).optional() -}); - -export const zGetNotificationsResponse = z.object({ - notifications: z.array(z.object({ - id: z.number().int().optional(), - user_id: z.number().int().optional(), - notification_type: z.number().int().optional(), - read: z.boolean().optional(), - created_at: z.string().optional(), - post_number: z.union([ - z.number().int(), - z.null() - ]).optional(), - topic_id: z.union([ - z.number().int(), - z.null() - ]).optional(), - slug: z.union([ - z.string(), - z.null() - ]).optional(), - data: z.object({ - badge_id: z.number().int().optional(), - badge_name: z.string().optional(), - badge_slug: z.string().optional(), - badge_title: z.boolean().optional(), - username: z.string().optional() - }).optional() - })).optional(), - total_rows_notifications: z.number().int().optional(), - seen_notification_id: z.number().int().optional(), - load_more_notifications: z.string().optional() -}); - -export const zMarkNotificationsAsReadResponse = z.object({ - success: z.string().optional() -}); - -export const zListPostsResponse = z.object({ - latest_posts: z.array(z.object({ - id: z.number().int().optional(), - name: z.string().optional(), - username: z.string().optional(), - avatar_template: z.string().optional(), - created_at: z.string().optional(), - cooked: z.string().optional(), - post_number: z.number().int().optional(), - post_type: z.number().int().optional(), - updated_at: z.string().optional(), - reply_count: z.number().int().optional(), - reply_to_post_number: z.union([ - z.string(), - z.null() - ]).optional(), - quote_count: z.number().int().optional(), - incoming_link_count: z.number().int().optional(), - reads: z.number().int().optional(), - readers_count: z.number().int().optional(), - score: z.number().optional(), - yours: z.boolean().optional(), - topic_id: z.number().int().optional(), - topic_slug: z.string().optional(), - topic_title: z.string().optional(), - topic_html_title: z.string().optional(), - category_id: z.number().int().optional(), - display_username: z.string().optional(), - primary_group_name: z.union([ - z.string(), - z.null() - ]).optional(), - flair_name: z.union([ - z.string(), - z.null() - ]).optional(), - flair_url: z.union([ - z.string(), - z.null() - ]).optional(), - flair_bg_color: z.union([ - z.string(), - z.null() - ]).optional(), - flair_color: z.union([ - z.string(), - z.null() - ]).optional(), - flair_group_id: z.union([ - z.number().int(), - z.null() - ]).optional(), - version: z.number().int().optional(), - can_edit: z.boolean().optional(), - can_delete: z.boolean().optional(), - can_recover: z.boolean().optional(), - can_see_hidden_post: z.boolean().optional(), - can_wiki: z.boolean().optional(), - user_title: z.union([ - z.string(), - z.null() - ]).optional(), - raw: z.string().optional(), - actions_summary: z.array(z.object({ - id: z.number().int().optional(), - can_act: z.boolean().optional() - })).optional(), - moderator: z.boolean().optional(), - admin: z.boolean().optional(), - staff: z.boolean().optional(), - user_id: z.number().int().optional(), - hidden: z.boolean().optional(), - trust_level: z.number().int().optional(), - deleted_at: z.union([ - z.string(), - z.null() - ]).optional(), - user_deleted: z.boolean().optional(), - edit_reason: z.union([ - z.string(), - z.null() - ]).optional(), - can_view_edit_history: z.boolean().optional(), - wiki: z.boolean().optional(), - reviewable_id: z.union([ - z.number().int(), - z.null() - ]).optional(), - reviewable_score_count: z.number().int().optional(), - reviewable_score_pending_count: z.number().int().optional() - })).optional() -}); - -export const zCreateTopicPostPmResponse = z.object({ - id: z.number().int(), - name: z.union([ - z.string(), - z.null() - ]), - username: z.string(), - avatar_template: z.string(), - created_at: z.string(), - raw: z.string().optional(), - cooked: z.string(), - post_number: z.number().int(), - post_type: z.number().int(), - posts_count: z.number().int(), - updated_at: z.string(), - reply_count: z.number().int(), - reply_to_post_number: z.union([ - z.string(), - z.null() - ]), - quote_count: z.number().int(), - incoming_link_count: z.number().int(), - reads: z.number().int(), - readers_count: z.number().int(), - score: z.number(), - yours: z.boolean(), - topic_id: z.number().int(), - topic_slug: z.string(), - display_username: z.union([ - z.string(), - z.null() - ]), - primary_group_name: z.union([ - z.string(), - z.null() - ]), - flair_name: z.union([ - z.string(), - z.null() - ]), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]), - flair_group_id: z.union([ - z.number().int(), - z.null() - ]).optional(), - badges_granted: z.array(z.unknown()).optional(), - version: z.number().int(), - can_edit: z.boolean(), - can_delete: z.boolean(), - can_recover: z.boolean(), - can_see_hidden_post: z.boolean().optional(), - can_wiki: z.boolean(), - user_title: z.union([ - z.string(), - z.null() - ]), - bookmarked: z.boolean(), - actions_summary: z.array(z.object({ - id: z.number().int(), - can_act: z.boolean() - })), - moderator: z.boolean(), - admin: z.boolean(), - staff: z.boolean(), - user_id: z.number().int(), - draft_sequence: z.number().int(), - hidden: z.boolean(), - trust_level: z.number().int(), - deleted_at: z.union([ - z.string(), - z.null() - ]), - user_deleted: z.boolean(), - edit_reason: z.union([ - z.string(), - z.null() - ]), - can_view_edit_history: z.boolean(), - wiki: z.boolean(), - reviewable_id: z.union([ - z.number().int(), - z.null() - ]), - reviewable_score_count: z.number().int(), - reviewable_score_pending_count: z.number().int(), - post_url: z.string(), - mentioned_users: z.array(z.unknown()).optional() -}); - -export const zGetPostResponse = z.object({ - id: z.number().int(), - username: z.string(), - avatar_template: z.string(), - created_at: z.string(), - cooked: z.string(), - post_number: z.number().int(), - post_type: z.number().int(), - posts_count: z.number().int(), - updated_at: z.string(), - reply_count: z.number().int(), - reply_to_post_number: z.union([ - z.string(), - z.null() - ]), - quote_count: z.number().int(), - incoming_link_count: z.number().int(), - reads: z.number().int(), - readers_count: z.number().int(), - score: z.number(), - yours: z.boolean(), - topic_id: z.number().int(), - topic_slug: z.string(), - primary_group_name: z.union([ - z.string(), - z.null() - ]), - flair_name: z.union([ - z.string(), - z.null() - ]), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]), - flair_group_id: z.union([ - z.number().int(), - z.null() - ]).optional(), - version: z.number().int(), - can_edit: z.boolean(), - can_delete: z.boolean(), - can_recover: z.boolean(), - can_see_hidden_post: z.boolean().optional(), - can_wiki: z.boolean(), - user_title: z.union([ - z.string(), - z.null() - ]), - bookmarked: z.boolean(), - raw: z.string(), - actions_summary: z.array(z.object({ - id: z.number().int(), - count: z.number().int().optional(), - acted: z.boolean().optional(), - can_undo: z.boolean().optional(), - can_act: z.boolean().optional() - })), - moderator: z.boolean(), - admin: z.boolean(), - staff: z.boolean(), - user_id: z.number().int(), - hidden: z.boolean(), - trust_level: z.number().int(), - deleted_at: z.union([ - z.string(), - z.null() - ]), - user_deleted: z.boolean(), - edit_reason: z.union([ - z.string(), - z.null() - ]), - can_view_edit_history: z.boolean(), - wiki: z.boolean(), - reviewable_id: z.union([ - z.number().int(), - z.null() - ]), - reviewable_score_count: z.number().int(), - reviewable_score_pending_count: z.number().int(), - post_url: z.string(), - mentioned_users: z.array(z.unknown()).optional(), - name: z.union([ - z.string(), - z.null() - ]).optional(), - display_username: z.union([ - z.string(), - z.null() - ]).optional() -}); - -export const zUpdatePostResponse = z.object({ - post: z.object({ - id: z.number().int(), - username: z.string(), - avatar_template: z.string(), - created_at: z.string(), - cooked: z.string(), - post_number: z.number().int(), - post_type: z.number().int(), - posts_count: z.number().int(), - updated_at: z.string(), - reply_count: z.number().int(), - reply_to_post_number: z.union([ - z.string(), - z.null() - ]), - quote_count: z.number().int(), - incoming_link_count: z.number().int(), - reads: z.number().int(), - readers_count: z.number().int(), - score: z.number(), - yours: z.boolean(), - topic_id: z.number().int(), - topic_slug: z.string(), - primary_group_name: z.union([ - z.string(), - z.null() - ]), - flair_name: z.union([ - z.string(), - z.null() - ]), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]), - flair_group_id: z.union([ - z.number().int(), - z.null() - ]).optional(), - badges_granted: z.array(z.unknown()).optional(), - version: z.number().int(), - can_edit: z.boolean(), - can_delete: z.boolean(), - can_recover: z.boolean(), - can_see_hidden_post: z.boolean().optional(), - can_wiki: z.boolean(), - user_title: z.union([ - z.string(), - z.null() - ]), - bookmarked: z.boolean(), - raw: z.string(), - actions_summary: z.array(z.object({ - id: z.number().int(), - can_act: z.boolean() - })), - moderator: z.boolean(), - admin: z.boolean(), - staff: z.boolean(), - user_id: z.number().int(), - draft_sequence: z.number().int(), - hidden: z.boolean(), - trust_level: z.number().int(), - deleted_at: z.union([ - z.string(), - z.null() - ]), - user_deleted: z.boolean(), - edit_reason: z.union([ - z.string(), - z.null() - ]), - can_view_edit_history: z.boolean(), - wiki: z.boolean(), - reviewable_id: z.union([ - z.number().int(), - z.null() - ]), - reviewable_score_count: z.number().int(), - reviewable_score_pending_count: z.number().int(), - post_url: z.string(), - mentioned_users: z.array(z.unknown()).optional(), - name: z.union([ - z.string(), - z.null() - ]).optional(), - display_username: z.union([ - z.string(), - z.null() - ]).optional() - }) -}); - -export const zPostRepliesResponse = z.array(z.object({ - id: z.number().int(), - name: z.union([ - z.string(), - z.null() - ]), - username: z.string(), - avatar_template: z.string(), - created_at: z.string(), - cooked: z.string(), - post_number: z.number().int(), - post_type: z.number().int(), - posts_count: z.number().int(), - updated_at: z.string(), - reply_count: z.number().int(), - reply_to_post_number: z.number().int(), - quote_count: z.number().int(), - incoming_link_count: z.number().int(), - reads: z.number().int(), - readers_count: z.number().int(), - score: z.number(), - yours: z.boolean(), - topic_id: z.number().int(), - topic_slug: z.string(), - display_username: z.union([ - z.string(), - z.null() - ]), - primary_group_name: z.union([ - z.string(), - z.null() - ]), - flair_name: z.union([ - z.string(), - z.null() - ]), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]), - flair_group_id: z.union([ - z.number().int(), - z.null() - ]).optional(), - version: z.number().int(), - can_edit: z.boolean(), - can_delete: z.boolean(), - can_recover: z.boolean(), - can_see_hidden_post: z.boolean(), - can_wiki: z.boolean(), - user_title: z.union([ - z.string(), - z.null() - ]), - reply_to_user: z.object({ - username: z.string(), - name: z.string().optional(), - avatar_template: z.string() - }), - bookmarked: z.boolean(), - actions_summary: z.array(z.object({ - id: z.number().int(), - can_act: z.boolean() - })), - moderator: z.boolean(), - admin: z.boolean(), - staff: z.boolean(), - user_id: z.number().int(), - hidden: z.boolean(), - trust_level: z.number().int(), - deleted_at: z.union([ - z.string(), - z.null() - ]), - user_deleted: z.boolean(), - edit_reason: z.union([ - z.string(), - z.null() - ]), - can_view_edit_history: z.boolean(), - wiki: z.boolean(), - reviewable_id: z.union([ - z.number().int(), - z.null() - ]), - reviewable_score_count: z.number().int(), - reviewable_score_pending_count: z.number().int(), - post_url: z.string() -})).min(1); - -export const zLockPostResponse = z.object({ - locked: z.boolean().optional() -}); - -export const zPerformPostActionResponse = z.object({ - id: z.number().int().optional(), - name: z.string().optional(), - username: z.string().optional(), - avatar_template: z.string().optional(), - created_at: z.string().optional(), - cooked: z.string().optional(), - post_number: z.number().int().optional(), - post_type: z.number().int().optional(), - updated_at: z.string().optional(), - reply_count: z.number().int().optional(), - reply_to_post_number: z.union([ - z.string(), - z.null() - ]).optional(), - quote_count: z.number().int().optional(), - incoming_link_count: z.number().int().optional(), - reads: z.number().int().optional(), - readers_count: z.number().int().optional(), - score: z.number().optional(), - yours: z.boolean().optional(), - topic_id: z.number().int().optional(), - topic_slug: z.string().optional(), - display_username: z.string().optional(), - primary_group_name: z.union([ - z.string(), - z.null() - ]).optional(), - flair_name: z.union([ - z.string(), - z.null() - ]).optional(), - flair_url: z.union([ - z.string(), - z.null() - ]).optional(), - flair_bg_color: z.union([ - z.string(), - z.null() - ]).optional(), - flair_color: z.union([ - z.string(), - z.null() - ]).optional(), - version: z.number().int().optional(), - can_edit: z.boolean().optional(), - can_delete: z.boolean().optional(), - can_recover: z.boolean().optional(), - can_wiki: z.boolean().optional(), - user_title: z.union([ - z.string(), - z.null() - ]).optional(), - actions_summary: z.array(z.object({ - id: z.number().int().optional(), - count: z.number().int().optional(), - acted: z.boolean().optional(), - can_undo: z.boolean().optional() - })).optional(), - moderator: z.boolean().optional(), - admin: z.boolean().optional(), - staff: z.boolean().optional(), - user_id: z.number().int().optional(), - hidden: z.boolean().optional(), - trust_level: z.number().int().optional(), - deleted_at: z.union([ - z.string(), - z.null() - ]).optional(), - user_deleted: z.boolean().optional(), - edit_reason: z.union([ - z.string(), - z.null() - ]).optional(), - can_view_edit_history: z.boolean().optional(), - wiki: z.boolean().optional(), - notice: z.object({}).optional(), - notice_created_by_user: z.union([ - z.object({}), - z.null() - ]).optional(), - reviewable_id: z.union([ - z.number().int(), - z.null() - ]).optional(), - reviewable_score_count: z.number().int().optional(), - reviewable_score_pending_count: z.number().int().optional() -}); - -export const zListUserPrivateMessagesResponse = z.object({ - users: z.array(z.object({ - id: z.number().int().optional(), - username: z.string().optional(), - name: z.string().optional(), - avatar_template: z.string().optional() - })).optional(), - primary_groups: z.array(z.unknown()).optional(), - topic_list: z.object({ - can_create_topic: z.boolean().optional(), - draft: z.union([ - z.string(), - z.null() - ]).optional(), - draft_key: z.string().optional(), - draft_sequence: z.number().int().optional(), - per_page: z.number().int().optional(), - topics: z.array(z.object({ - id: z.number().int().optional(), - title: z.string().optional(), - fancy_title: z.string().optional(), - slug: z.string().optional(), - posts_count: z.number().int().optional(), - reply_count: z.number().int().optional(), - highest_post_number: z.number().int().optional(), - image_url: z.union([ - z.string(), - z.null() - ]).optional(), - created_at: z.string().optional(), - last_posted_at: z.string().optional(), - bumped: z.boolean().optional(), - bumped_at: z.string().optional(), - archetype: z.string().optional(), - unseen: z.boolean().optional(), - last_read_post_number: z.number().int().optional(), - unread_posts: z.number().int().optional(), - pinned: z.boolean().optional(), - unpinned: z.union([ - z.string(), - z.null() - ]).optional(), - visible: z.boolean().optional(), - closed: z.boolean().optional(), - archived: z.boolean().optional(), - notification_level: z.number().int().optional(), - bookmarked: z.boolean().optional(), - liked: z.boolean().optional(), - views: z.number().int().optional(), - like_count: z.number().int().optional(), - has_summary: z.boolean().optional(), - last_poster_username: z.string().optional(), - category_id: z.union([ - z.string(), - z.null() - ]).optional(), - pinned_globally: z.boolean().optional(), - featured_link: z.union([ - z.string(), - z.null() - ]).optional(), - allowed_user_count: z.number().int().optional(), - posters: z.array(z.object({ - extras: z.string().optional(), - description: z.string().optional(), - user_id: z.number().int().optional(), - primary_group_id: z.union([ - z.number().int(), - z.null() - ]).optional() - })).optional(), - participants: z.array(z.object({ - extras: z.string().optional(), - description: z.union([ - z.string(), - z.null() - ]).optional(), - user_id: z.number().int().optional(), - primary_group_id: z.union([ - z.number().int(), - z.null() - ]).optional() - })).optional() - })).optional() - }).optional() -}); - -export const zGetUserSentPrivateMessagesResponse = z.object({ - users: z.array(z.object({ - id: z.number().int().optional(), - username: z.string().optional(), - name: z.union([ - z.string(), - z.null() - ]).optional(), - avatar_template: z.string().optional() - })).optional(), - primary_groups: z.array(z.unknown()).optional(), - topic_list: z.object({ - can_create_topic: z.boolean().optional(), - draft: z.union([ - z.string(), - z.null() - ]).optional(), - draft_key: z.string().optional(), - draft_sequence: z.number().int().optional(), - per_page: z.number().int().optional(), - topics: z.array(z.object({ - id: z.number().int().optional(), - title: z.string().optional(), - fancy_title: z.string().optional(), - slug: z.string().optional(), - posts_count: z.number().int().optional(), - reply_count: z.number().int().optional(), - highest_post_number: z.number().int().optional(), - image_url: z.union([ - z.string(), - z.null() - ]).optional(), - created_at: z.string().optional(), - last_posted_at: z.string().optional(), - bumped: z.boolean().optional(), - bumped_at: z.string().optional(), - archetype: z.string().optional(), - unseen: z.boolean().optional(), - last_read_post_number: z.number().int().optional(), - unread_posts: z.number().int().optional(), - pinned: z.boolean().optional(), - unpinned: z.union([ - z.string(), - z.null() - ]).optional(), - visible: z.boolean().optional(), - closed: z.boolean().optional(), - archived: z.boolean().optional(), - notification_level: z.number().int().optional(), - bookmarked: z.boolean().optional(), - liked: z.boolean().optional(), - views: z.number().int().optional(), - like_count: z.number().int().optional(), - has_summary: z.boolean().optional(), - last_poster_username: z.string().optional(), - category_id: z.union([ - z.string(), - z.null() - ]).optional(), - pinned_globally: z.boolean().optional(), - featured_link: z.union([ - z.string(), - z.null() - ]).optional(), - allowed_user_count: z.number().int().optional(), - posters: z.array(z.object({ - extras: z.string().optional(), - description: z.string().optional(), - user_id: z.number().int().optional(), - primary_group_id: z.union([ - z.number().int(), - z.null() - ]).optional() - })).optional(), - participants: z.array(z.unknown()).optional() - })).optional() - }).optional() -}); - -export const zSearchResponse = z.object({ - posts: z.array(z.unknown()), - users: z.array(z.unknown()), - categories: z.array(z.unknown()), - tags: z.array(z.unknown()), - groups: z.array(z.unknown()), - grouped_search_result: z.object({ - more_posts: z.union([ - z.string(), - z.null() - ]), - more_users: z.union([ - z.string(), - z.null() - ]), - more_categories: z.union([ - z.string(), - z.null() - ]), - term: z.string(), - search_log_id: z.number().int(), - more_full_page_results: z.union([ - z.string(), - z.null() - ]), - can_create_topic: z.boolean(), - error: z.union([ - z.string(), - z.null() - ]), - extra: z.object({ - categories: z.union([ - z.array(z.unknown()), - z.null() - ]).optional() - }).optional(), - post_ids: z.array(z.unknown()), - user_ids: z.array(z.unknown()), - category_ids: z.array(z.unknown()), - tag_ids: z.array(z.unknown()), - group_ids: z.array(z.unknown()) - }) -}); - -export const zGetSiteResponse = z.object({ - default_archetype: z.string(), - notification_types: z.object({ - mentioned: z.number().int(), - replied: z.number().int(), - quoted: z.number().int(), - edited: z.number().int(), - liked: z.number().int(), - private_message: z.number().int(), - invited_to_private_message: z.number().int(), - invitee_accepted: z.number().int(), - posted: z.number().int(), - watching_category_or_tag: z.number().int(), - new_features: z.number().int().optional(), - admin_problems: z.number().int().optional(), - moved_post: z.number().int(), - linked: z.number().int(), - granted_badge: z.number().int(), - invited_to_topic: z.number().int(), - custom: z.number().int(), - group_mentioned: z.number().int(), - group_message_summary: z.number().int(), - watching_first_post: z.number().int(), - topic_reminder: z.number().int(), - liked_consolidated: z.number().int(), - linked_consolidated: z.number().int(), - post_approved: z.number().int(), - code_review_commit_approved: z.number().int(), - membership_request_accepted: z.number().int(), - membership_request_consolidated: z.number().int(), - bookmark_reminder: z.number().int(), - reaction: z.number().int(), - votes_released: z.number().int(), - event_reminder: z.number().int(), - event_invitation: z.number().int(), - chat_mention: z.number().int(), - chat_message: z.number().int(), - chat_invitation: z.number().int(), - chat_group_mention: z.number().int(), - chat_quoted: z.number().int().optional(), - chat_watched_thread: z.number().int().optional(), - assigned: z.number().int().optional(), - question_answer_user_commented: z.number().int().optional(), - following: z.number().int().optional(), - following_created_topic: z.number().int().optional(), - following_replied: z.number().int().optional(), - circles_activity: z.number().int().optional() - }), - post_types: z.object({ - regular: z.number().int(), - moderator_action: z.number().int(), - small_action: z.number().int(), - whisper: z.number().int() - }), - trust_levels: z.object({ - newuser: z.number().int(), - basic: z.number().int(), - member: z.number().int(), - regular: z.number().int(), - leader: z.number().int() - }), - user_tips: z.object({ - first_notification: z.number().int(), - topic_timeline: z.number().int(), - post_menu: z.number().int(), - topic_notification_levels: z.number().int(), - suggested_topics: z.number().int() - }).optional(), - groups: z.array(z.object({ - id: z.number().int(), - name: z.string(), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]) - })), - filters: z.array(z.unknown()), - periods: z.array(z.unknown()), - top_menu_items: z.array(z.unknown()), - anonymous_top_menu_items: z.array(z.unknown()), - uncategorized_category_id: z.number().int(), - user_field_max_length: z.number().int(), - post_action_types: z.array(z.object({ - id: z.union([ - z.number().int(), - z.null() - ]), - name_key: z.union([ - z.string(), - z.null() - ]), - name: z.string(), - description: z.string(), - short_description: z.string(), - is_flag: z.boolean(), - require_message: z.boolean(), - enabled: z.boolean(), - applies_to: z.array(z.unknown()), - is_used: z.boolean(), - position: z.number().int().optional(), - auto_action_type: z.boolean() - })), - topic_flag_types: z.array(z.object({ - id: z.union([ - z.number().int(), - z.null() - ]), - name_key: z.union([ - z.string(), - z.null() - ]), - name: z.string(), - description: z.string(), - short_description: z.string(), - is_flag: z.boolean(), - require_message: z.boolean(), - enabled: z.boolean(), - applies_to: z.array(z.unknown()), - is_used: z.boolean(), - position: z.number().int().optional(), - auto_action_type: z.boolean() - })), - can_create_tag: z.boolean(), - can_tag_topics: z.boolean(), - can_tag_pms: z.boolean(), - tags_filter_regexp: z.string(), - top_tags: z.array(z.unknown()), - wizard_required: z.boolean().optional(), - can_associate_groups: z.boolean().optional(), - topic_featured_link_allowed_category_ids: z.array(z.unknown()), - user_themes: z.array(z.object({ - theme_id: z.number().int(), - name: z.string(), - default: z.boolean(), - color_scheme_id: z.union([ - z.number().int(), - z.null() - ]) - })), - user_color_schemes: z.array(z.object({ - id: z.number().int(), - name: z.string(), - is_dark: z.boolean() - })), - default_dark_color_scheme: z.union([ - z.object({}), - z.null() - ]), - censored_regexp: z.array(z.object({})), - custom_emoji_translation: z.object({}), - watched_words_replace: z.union([ - z.string(), - z.null() - ]), - watched_words_link: z.union([ - z.string(), - z.null() - ]), - markdown_additional_options: z.object({}).optional(), - hashtag_configurations: z.object({}).optional(), - hashtag_icons: z.object({}).optional(), - displayed_about_plugin_stat_groups: z.array(z.unknown()).optional(), - categories: z.array(z.object({ - id: z.number().int(), - name: z.string(), - color: z.string(), - text_color: z.string(), - slug: z.string(), - topic_count: z.number().int(), - post_count: z.number().int(), - position: z.number().int(), - description: z.union([ - z.string(), - z.null() - ]).optional(), - description_text: z.union([ - z.string(), - z.null() - ]).optional(), - description_excerpt: z.union([ - z.string(), - z.null() - ]).optional(), - topic_url: z.string(), - read_restricted: z.boolean(), - permission: z.number().int(), - notification_level: z.number().int(), - topic_template: z.union([ - z.string(), - z.null() - ]), - has_children: z.boolean(), - subcategory_count: z.union([ - z.number().int(), - z.null() - ]), - sort_order: z.union([ - z.string(), - z.null() - ]), - sort_ascending: z.union([ - z.string(), - z.null() - ]), - show_subcategory_list: z.boolean(), - num_featured_topics: z.number().int(), - default_view: z.union([ - z.string(), - z.null() - ]), - subcategory_list_style: z.string(), - default_top_period: z.string(), - default_list_filter: z.string(), - minimum_required_tags: z.number().int(), - navigate_to_first_post_after_read: z.boolean(), - allowed_tags: z.array(z.unknown()), - allowed_tag_groups: z.array(z.unknown()), - allow_global_tags: z.boolean(), - required_tag_groups: z.array(z.object({ - name: z.string(), - min_count: z.number().int() - })), - read_only_banner: z.union([ - z.string(), - z.null() - ]), - uploaded_logo: z.union([ - z.string(), - z.null() - ]), - uploaded_logo_dark: z.union([ - z.string(), - z.null() - ]), - uploaded_background: z.union([ - z.string(), - z.null() - ]), - uploaded_background_dark: z.union([ - z.string(), - z.null() - ]), - can_edit: z.boolean(), - custom_fields: z.union([ - z.object({}), - z.null() - ]).optional(), - parent_category_id: z.number().int().optional(), - form_template_ids: z.array(z.unknown()).optional() - })), - archetypes: z.array(z.object({ - id: z.string(), - name: z.string(), - options: z.array(z.unknown()) - })), - user_fields: z.array(z.unknown()), - auth_providers: z.array(z.unknown()), - whispers_allowed_groups_names: z.array(z.unknown()).optional(), - denied_emojis: z.array(z.unknown()).optional(), - valid_flag_applies_to_types: z.array(z.unknown()).optional(), - navigation_menu_site_top_tags: z.array(z.unknown()).optional(), - full_name_required_for_signup: z.boolean(), - full_name_visible_in_signup: z.boolean() -}); - -export const zGetSiteBasicInfoResponse = z.object({ - logo_url: z.string(), - logo_small_url: z.string(), - apple_touch_icon_url: z.string(), - favicon_url: z.string(), - title: z.string(), - description: z.string(), - header_primary_color: z.string(), - header_background_color: z.string(), - login_required: z.boolean(), - locale: z.string(), - include_in_discourse_discover: z.boolean(), - mobile_logo_url: z.string() -}); - -export const zListTagGroupsResponse = z.object({ - tag_groups: z.array(z.object({ - id: z.number().int().optional(), - name: z.string().optional(), - tag_names: z.array(z.unknown()).optional(), - parent_tag_name: z.array(z.unknown()).optional(), - one_per_topic: z.boolean().optional(), - permissions: z.object({ - staff: z.number().int().optional() - }).optional() - })).optional() -}); - -export const zCreateTagGroupResponse = z.object({ - tag_group: z.object({ - id: z.number().int(), - name: z.string(), - tag_names: z.array(z.unknown()), - parent_tag_name: z.array(z.unknown()), - one_per_topic: z.boolean(), - permissions: z.object({}) - }) -}); - -export const zGetTagGroupResponse = z.object({ - tag_group: z.object({ - id: z.number().int().optional(), - name: z.string().optional(), - tag_names: z.array(z.unknown()).optional(), - parent_tag_name: z.array(z.unknown()).optional(), - one_per_topic: z.boolean().optional(), - permissions: z.object({ - everyone: z.number().int().optional() - }).optional() - }).optional() -}); - -export const zUpdateTagGroupResponse = z.object({ - success: z.string().optional(), - tag_group: z.object({ - id: z.number().int().optional(), - name: z.string().optional(), - tag_names: z.array(z.unknown()).optional(), - parent_tag_name: z.array(z.unknown()).optional(), - one_per_topic: z.boolean().optional(), - permissions: z.object({ - everyone: z.number().int().optional() - }).optional() - }).optional() -}); - -export const zListTagsResponse = z.object({ - tags: z.array(z.object({ - id: z.string().optional(), - text: z.string().optional(), - count: z.number().int().optional(), - pm_count: z.number().int().optional(), - target_tag: z.union([ - z.string(), - z.null() - ]).optional() - })).optional(), - extras: z.object({ - categories: z.array(z.unknown()).optional() - }).optional() -}); - -export const zGetTagResponse = z.object({ - users: z.array(z.object({ - id: z.number().int().optional(), - username: z.string().optional(), - name: z.union([ - z.string(), - z.null() - ]).optional(), - avatar_template: z.string().optional() - })).optional(), - primary_groups: z.array(z.unknown()).optional(), - topic_list: z.object({ - can_create_topic: z.boolean().optional(), - draft: z.union([ - z.string(), - z.null() - ]).optional(), - draft_key: z.string().optional(), - draft_sequence: z.number().int().optional(), - per_page: z.number().int().optional(), - tags: z.array(z.object({ - id: z.number().int().optional(), - name: z.string().optional(), - topic_count: z.number().int().optional(), - staff: z.boolean().optional() - })).optional(), - topics: z.array(z.object({ - id: z.number().int().optional(), - title: z.string().optional(), - fancy_title: z.string().optional(), - slug: z.string().optional(), - posts_count: z.number().int().optional(), - reply_count: z.number().int().optional(), - highest_post_number: z.number().int().optional(), - image_url: z.union([ - z.string(), - z.null() - ]).optional(), - created_at: z.string().optional(), - last_posted_at: z.string().optional(), - bumped: z.boolean().optional(), - bumped_at: z.string().optional(), - archetype: z.string().optional(), - unseen: z.boolean().optional(), - last_read_post_number: z.number().int().optional(), - unread_posts: z.number().int().optional(), - pinned: z.boolean().optional(), - unpinned: z.union([ - z.string(), - z.null() - ]).optional(), - visible: z.boolean().optional(), - closed: z.boolean().optional(), - archived: z.boolean().optional(), - notification_level: z.number().int().optional(), - bookmarked: z.boolean().optional(), - liked: z.boolean().optional(), - tags: z.array(z.unknown()).optional(), - views: z.number().int().optional(), - like_count: z.number().int().optional(), - has_summary: z.boolean().optional(), - last_poster_username: z.string().optional(), - category_id: z.number().int().optional(), - pinned_globally: z.boolean().optional(), - featured_link: z.union([ - z.string(), - z.null() - ]).optional(), - posters: z.array(z.object({ - extras: z.string().optional(), - description: z.string().optional(), - user_id: z.number().int().optional(), - primary_group_id: z.union([ - z.number().int(), - z.null() - ]).optional() - })).optional() - })).optional() - }).optional() -}); - -export const zGetSpecificPostsFromTopicResponse = z.object({ - post_stream: z.object({ - posts: z.array(z.object({ - id: z.number().int().optional(), - name: z.union([ - z.string(), - z.null() - ]).optional(), - username: z.string().optional(), - avatar_template: z.string().optional(), - created_at: z.string().optional(), - cooked: z.string().optional(), - post_number: z.number().int().optional(), - post_type: z.number().int().optional(), - updated_at: z.string().optional(), - reply_count: z.number().int().optional(), - reply_to_post_number: z.union([ - z.string(), - z.null() - ]).optional(), - quote_count: z.number().int().optional(), - incoming_link_count: z.number().int().optional(), - reads: z.number().int().optional(), - readers_count: z.number().int().optional(), - score: z.number().optional(), - yours: z.boolean().optional(), - topic_id: z.number().int().optional(), - topic_slug: z.string().optional(), - display_username: z.union([ - z.string(), - z.null() - ]).optional(), - primary_group_name: z.union([ - z.string(), - z.null() - ]).optional(), - flair_name: z.union([ - z.string(), - z.null() - ]).optional(), - flair_url: z.union([ - z.string(), - z.null() - ]).optional(), - flair_bg_color: z.union([ - z.string(), - z.null() - ]).optional(), - flair_color: z.union([ - z.string(), - z.null() - ]).optional(), - version: z.number().int().optional(), - can_edit: z.boolean().optional(), - can_delete: z.boolean().optional(), - can_recover: z.boolean().optional(), - can_wiki: z.boolean().optional(), - read: z.boolean().optional(), - user_title: z.union([ - z.string(), - z.null() - ]).optional(), - actions_summary: z.array(z.object({ - id: z.number().int().optional(), - can_act: z.boolean().optional() - })).optional(), - moderator: z.boolean().optional(), - admin: z.boolean().optional(), - staff: z.boolean().optional(), - user_id: z.number().int().optional(), - hidden: z.boolean().optional(), - trust_level: z.number().int().optional(), - deleted_at: z.union([ - z.string(), - z.null() - ]).optional(), - user_deleted: z.boolean().optional(), - edit_reason: z.union([ - z.string(), - z.null() - ]).optional(), - can_view_edit_history: z.boolean().optional(), - wiki: z.boolean().optional(), - reviewable_id: z.number().int().optional(), - reviewable_score_count: z.number().int().optional(), - reviewable_score_pending_count: z.number().int().optional() - })).optional() - }).optional(), - id: z.number().int().optional() -}); - -export const zGetTopicResponse = z.object({ - post_stream: z.object({ - posts: z.array(z.object({ - id: z.number().int(), - name: z.string(), - username: z.string(), - avatar_template: z.string(), - created_at: z.string(), - cooked: z.string(), - post_number: z.number().int(), - post_type: z.number().int(), - updated_at: z.string(), - reply_count: z.number().int(), - reply_to_post_number: z.union([ - z.string(), - z.null() - ]), - quote_count: z.number().int(), - incoming_link_count: z.number().int(), - reads: z.number().int(), - readers_count: z.number().int(), - score: z.number(), - yours: z.boolean(), - topic_id: z.number().int(), - topic_slug: z.string(), - display_username: z.string(), - primary_group_name: z.union([ - z.string(), - z.null() - ]), - flair_name: z.union([ - z.string(), - z.null() - ]), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]), - version: z.number().int(), - can_edit: z.boolean(), - can_delete: z.boolean(), - can_recover: z.boolean(), - can_see_hidden_post: z.boolean().optional(), - can_wiki: z.boolean(), - link_counts: z.array(z.object({ - url: z.string(), - internal: z.boolean(), - reflection: z.boolean(), - title: z.string(), - clicks: z.number().int() - })), - read: z.boolean(), - user_title: z.union([ - z.string(), - z.null() - ]), - bookmarked: z.boolean(), - actions_summary: z.array(z.object({ - id: z.number().int(), - can_act: z.boolean() - })), - moderator: z.boolean(), - admin: z.boolean(), - staff: z.boolean(), - user_id: z.number().int(), - hidden: z.boolean(), - trust_level: z.number().int(), - deleted_at: z.union([ - z.string(), - z.null() - ]), - user_deleted: z.boolean(), - edit_reason: z.union([ - z.string(), - z.null() - ]), - can_view_edit_history: z.boolean(), - wiki: z.boolean(), - reviewable_id: z.number().int(), - reviewable_score_count: z.number().int(), - reviewable_score_pending_count: z.number().int() - })), - stream: z.array(z.unknown()) - }), - timeline_lookup: z.array(z.unknown()), - suggested_topics: z.array(z.object({ - id: z.number().int(), - title: z.string(), - fancy_title: z.string(), - slug: z.string(), - posts_count: z.number().int(), - reply_count: z.number().int(), - highest_post_number: z.number().int(), - image_url: z.union([ - z.string(), - z.null() - ]), - created_at: z.string(), - last_posted_at: z.union([ - z.string(), - z.null() - ]), - bumped: z.boolean(), - bumped_at: z.string(), - archetype: z.string(), - unseen: z.boolean(), - pinned: z.boolean(), - unpinned: z.union([ - z.string(), - z.null() - ]), - excerpt: z.string(), - visible: z.boolean(), - closed: z.boolean(), - archived: z.boolean(), - bookmarked: z.union([ - z.string(), - z.null() - ]), - liked: z.union([ - z.string(), - z.null() - ]), - tags: z.array(z.unknown()), - tags_descriptions: z.object({}), - like_count: z.number().int(), - views: z.number().int(), - category_id: z.number().int(), - featured_link: z.union([ - z.string(), - z.null() - ]), - posters: z.array(z.object({ - extras: z.string(), - description: z.string(), - user: z.object({ - id: z.number().int(), - username: z.string(), - name: z.string(), - avatar_template: z.string() - }) - })) - })), - tags: z.array(z.unknown()), - tags_descriptions: z.object({}), - id: z.number().int(), - title: z.string(), - fancy_title: z.string(), - posts_count: z.number().int(), - created_at: z.string(), - views: z.number().int(), - reply_count: z.number().int(), - like_count: z.number().int(), - last_posted_at: z.union([ - z.string(), - z.null() - ]), - visible: z.boolean(), - closed: z.boolean(), - archived: z.boolean(), - has_summary: z.boolean(), - archetype: z.string(), - slug: z.string(), - category_id: z.number().int(), - word_count: z.union([ - z.number().int(), - z.null() - ]), - deleted_at: z.union([ - z.string(), - z.null() - ]), - user_id: z.number().int(), - featured_link: z.union([ - z.string(), - z.null() - ]), - pinned_globally: z.boolean(), - pinned_at: z.union([ - z.string(), - z.null() - ]), - pinned_until: z.union([ - z.string(), - z.null() - ]), - image_url: z.union([ - z.string(), - z.null() - ]), - slow_mode_seconds: z.number().int(), - draft: z.union([ - z.string(), - z.null() - ]), - draft_key: z.string(), - draft_sequence: z.number().int(), - unpinned: z.union([ - z.string(), - z.null() - ]), - pinned: z.boolean(), - current_post_number: z.number().int().optional(), - highest_post_number: z.union([ - z.number().int(), - z.null() - ]), - deleted_by: z.union([ - z.string(), - z.null() - ]), - has_deleted: z.boolean(), - actions_summary: z.array(z.object({ - id: z.number().int(), - count: z.number().int(), - hidden: z.boolean(), - can_act: z.boolean() - })), - chunk_size: z.number().int(), - bookmarked: z.boolean(), - bookmarks: z.array(z.unknown()), - topic_timer: z.union([ - z.string(), - z.null() - ]), - message_bus_last_id: z.number().int(), - participant_count: z.number().int(), - show_read_indicator: z.boolean(), - thumbnails: z.union([ - z.string(), - z.null() - ]), - slow_mode_enabled_until: z.union([ - z.string(), - z.null() - ]), - details: z.object({ - can_edit: z.boolean(), - notification_level: z.number().int(), - can_move_posts: z.boolean(), - can_delete: z.boolean(), - can_remove_allowed_users: z.boolean(), - can_create_post: z.boolean(), - can_reply_as_new_topic: z.boolean(), - can_invite_to: z.boolean().optional(), - can_invite_via_email: z.boolean().optional(), - can_flag_topic: z.boolean().optional(), - can_convert_topic: z.boolean(), - can_review_topic: z.boolean(), - can_close_topic: z.boolean(), - can_archive_topic: z.boolean(), - can_split_merge_topic: z.boolean(), - can_edit_staff_notes: z.boolean(), - can_toggle_topic_visibility: z.boolean(), - can_pin_unpin_topic: z.boolean(), - can_moderate_category: z.boolean(), - can_remove_self_id: z.number().int(), - participants: z.array(z.object({ - id: z.number().int(), - username: z.string(), - name: z.string(), - avatar_template: z.string(), - post_count: z.number().int(), - primary_group_name: z.union([ - z.string(), - z.null() - ]), - flair_name: z.union([ - z.string(), - z.null() - ]), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_group_id: z.union([ - z.number().int(), - z.null() - ]).optional(), - admin: z.boolean(), - moderator: z.boolean(), - trust_level: z.number().int() - })).optional(), - created_by: z.object({ - id: z.number().int(), - username: z.string(), - name: z.string(), - avatar_template: z.string() - }), - last_poster: z.object({ - id: z.number().int(), - username: z.string(), - name: z.string(), - avatar_template: z.string() - }) - }) -}); - -export const zUpdateTopicResponse = z.object({ - basic_topic: z.object({ - id: z.number().int().optional(), - title: z.string().optional(), - fancy_title: z.string().optional(), - slug: z.string().optional(), - posts_count: z.number().int().optional() - }).optional() -}); - -export const zInviteToTopicResponse = z.object({ - user: z.object({ - id: z.number().int().optional(), - username: z.string().optional(), - name: z.string().optional(), - avatar_template: z.string().optional() - }).optional() -}); - -export const zInviteGroupToTopicResponse = z.object({ - group: z.object({ - id: z.number().int().optional(), - name: z.string().optional() - }).optional() -}); - -export const zUpdateTopicStatusResponse = z.object({ - success: z.string().optional(), - topic_status_update: z.union([ - z.string(), - z.null() - ]).optional() -}); - -export const zListLatestTopicsResponse = z.object({ - users: z.array(z.object({ - id: z.number().int().optional(), - username: z.string().optional(), - name: z.union([ - z.string(), - z.null() - ]).optional(), - avatar_template: z.string().optional() - })).optional(), - primary_groups: z.array(z.unknown()).optional(), - topic_list: z.object({ - can_create_topic: z.boolean().optional(), - draft: z.union([ - z.string(), - z.null() - ]).optional(), - draft_key: z.string().optional(), - draft_sequence: z.number().int().optional(), - per_page: z.number().int().optional(), - topics: z.array(z.object({ - id: z.number().int().optional(), - title: z.string().optional(), - fancy_title: z.string().optional(), - slug: z.string().optional(), - posts_count: z.number().int().optional(), - reply_count: z.number().int().optional(), - highest_post_number: z.number().int().optional(), - image_url: z.string().optional(), - created_at: z.string().optional(), - last_posted_at: z.string().optional(), - bumped: z.boolean().optional(), - bumped_at: z.string().optional(), - archetype: z.string().optional(), - unseen: z.boolean().optional(), - last_read_post_number: z.number().int().optional(), - unread_posts: z.number().int().optional(), - pinned: z.boolean().optional(), - unpinned: z.union([ - z.string(), - z.null() - ]).optional(), - visible: z.boolean().optional(), - closed: z.boolean().optional(), - archived: z.boolean().optional(), - notification_level: z.number().int().optional(), - bookmarked: z.boolean().optional(), - liked: z.boolean().optional(), - views: z.number().int().optional(), - like_count: z.number().int().optional(), - has_summary: z.boolean().optional(), - last_poster_username: z.string().optional(), - category_id: z.number().int().optional(), - op_like_count: z.number().int().optional(), - pinned_globally: z.boolean().optional(), - featured_link: z.union([ - z.string(), - z.null() - ]).optional(), - posters: z.array(z.object({ - extras: z.string().optional(), - description: z.string().optional(), - user_id: z.number().int().optional(), - primary_group_id: z.union([ - z.number().int(), - z.null() - ]).optional() - })).optional() - })).optional() - }).optional() -}); - -export const zListTopTopicsResponse = z.object({ - users: z.array(z.object({ - id: z.number().int().optional(), - username: z.string().optional(), - name: z.string().optional(), - avatar_template: z.string().optional() - })).optional(), - primary_groups: z.array(z.unknown()).optional(), - topic_list: z.object({ - can_create_topic: z.boolean().optional(), - draft: z.union([ - z.string(), - z.null() - ]).optional(), - draft_key: z.string().optional(), - draft_sequence: z.number().int().optional(), - for_period: z.string().optional(), - per_page: z.number().int().optional(), - topics: z.array(z.object({ - id: z.number().int().optional(), - title: z.string().optional(), - fancy_title: z.string().optional(), - slug: z.string().optional(), - posts_count: z.number().int().optional(), - reply_count: z.number().int().optional(), - highest_post_number: z.number().int().optional(), - image_url: z.union([ - z.string(), - z.null() - ]).optional(), - created_at: z.string().optional(), - last_posted_at: z.string().optional(), - bumped: z.boolean().optional(), - bumped_at: z.string().optional(), - archetype: z.string().optional(), - unseen: z.boolean().optional(), - last_read_post_number: z.number().int().optional(), - unread_posts: z.number().int().optional(), - pinned: z.boolean().optional(), - unpinned: z.boolean().optional(), - visible: z.boolean().optional(), - closed: z.boolean().optional(), - archived: z.boolean().optional(), - notification_level: z.number().int().optional(), - bookmarked: z.boolean().optional(), - liked: z.boolean().optional(), - views: z.number().int().optional(), - like_count: z.number().int().optional(), - has_summary: z.boolean().optional(), - last_poster_username: z.string().optional(), - category_id: z.number().int().optional(), - op_like_count: z.number().int().optional(), - pinned_globally: z.boolean().optional(), - featured_link: z.union([ - z.string(), - z.null() - ]).optional(), - posters: z.array(z.object({ - extras: z.union([ - z.string(), - z.null() - ]).optional(), - description: z.string().optional(), - user_id: z.number().int().optional(), - primary_group_id: z.union([ - z.number().int(), - z.null() - ]).optional() - })).optional() - })).optional() - }).optional() -}); - -export const zSetNotificationLevelResponse = z.object({ - success: z.string().optional() -}); - -export const zUpdateTopicTimestampResponse = z.object({ - success: z.string().optional() -}); - -export const zCreateTopicTimerResponse = z.object({ - success: z.string().optional(), - execute_at: z.string().optional(), - duration: z.union([ - z.string(), - z.null() - ]).optional(), - based_on_last_post: z.boolean().optional(), - closed: z.boolean().optional(), - category_id: z.union([ - z.number().int(), - z.null() - ]).optional() -}); - -export const zCreateUploadResponse = z.object({ - id: z.number().int(), - url: z.string(), - original_filename: z.string(), - filesize: z.number().int(), - width: z.number().int(), - height: z.number().int(), - thumbnail_width: z.number().int(), - thumbnail_height: z.number().int(), - extension: z.string(), - short_url: z.string(), - short_path: z.string(), - retain_hours: z.union([ - z.string(), - z.null() - ]), - human_filesize: z.string(), - dominant_color: z.union([ - z.string(), - z.null() - ]).optional(), - thumbnail: z.union([ - z.object({ - id: z.number().int().optional(), - upload_id: z.number().int().optional(), - url: z.string().optional(), - extension: z.string().optional(), - width: z.number().int().optional(), - height: z.number().int().optional(), - filesize: z.number().int().optional() - }), - z.null() - ]).optional() -}); - -export const zGeneratePresignedPutResponse = z.object({ - key: z.string().optional(), - url: z.string().optional(), - signed_headers: z.object({}).optional(), - unique_identifier: z.string().optional() -}); - -export const zCompleteExternalUploadResponse = z.object({ - id: z.number().int(), - url: z.string(), - original_filename: z.string(), - filesize: z.number().int(), - width: z.number().int(), - height: z.number().int(), - thumbnail_width: z.number().int(), - thumbnail_height: z.number().int(), - extension: z.string(), - short_url: z.string(), - short_path: z.string(), - retain_hours: z.union([ - z.string(), - z.null() - ]), - human_filesize: z.string(), - dominant_color: z.union([ - z.string(), - z.null() - ]).optional(), - thumbnail: z.union([ - z.object({ - id: z.number().int().optional(), - upload_id: z.number().int().optional(), - url: z.string().optional(), - extension: z.string().optional(), - width: z.number().int().optional(), - height: z.number().int().optional(), - filesize: z.number().int().optional() - }), - z.null() - ]).optional() -}); - -export const zCreateMultipartUploadResponse = z.object({ - key: z.string(), - external_upload_identifier: z.string(), - unique_identifier: z.string() -}); - -export const zBatchPresignMultipartPartsResponse = z.object({ - presigned_urls: z.object({}) -}); - -export const zAbortMultipartResponse = z.object({ - success: z.string() -}); - -export const zCompleteMultipartResponse = z.object({ - id: z.number().int(), - url: z.string(), - original_filename: z.string(), - filesize: z.number().int(), - width: z.number().int(), - height: z.number().int(), - thumbnail_width: z.number().int(), - thumbnail_height: z.number().int(), - extension: z.string(), - short_url: z.string(), - short_path: z.string(), - retain_hours: z.union([ - z.string(), - z.null() - ]), - human_filesize: z.string(), - dominant_color: z.union([ - z.string(), - z.null() - ]).optional(), - thumbnail: z.union([ - z.object({ - id: z.number().int().optional(), - upload_id: z.number().int().optional(), - url: z.string().optional(), - extension: z.string().optional(), - width: z.number().int().optional(), - height: z.number().int().optional(), - filesize: z.number().int().optional() - }), - z.null() - ]).optional() -}); - -export const zListUserBadgesResponse = z.object({ - badges: z.array(z.object({ - id: z.number().int(), - name: z.string(), - description: z.string(), - grant_count: z.number().int(), - allow_title: z.boolean(), - multiple_grant: z.boolean(), - icon: z.string(), - image_url: z.union([ - z.string(), - z.null() - ]), - listable: z.boolean(), - enabled: z.boolean(), - badge_grouping_id: z.number().int(), - system: z.boolean(), - slug: z.string(), - manually_grantable: z.boolean(), - badge_type_id: z.number().int() - })).optional(), - badge_types: z.array(z.object({ - id: z.number().int(), - name: z.string(), - sort_order: z.number().int() - })).optional(), - granted_bies: z.array(z.object({ - id: z.number().int(), - username: z.string(), - name: z.string(), - avatar_template: z.string(), - flair_name: z.union([ - z.string(), - z.null() - ]), - admin: z.boolean(), - moderator: z.boolean(), - trust_level: z.number().int() - })).optional(), - user_badges: z.array(z.object({ - id: z.number().int(), - granted_at: z.string(), - grouping_position: z.number().int(), - is_favorite: z.union([ - z.string(), - z.null() - ]), - can_favorite: z.boolean(), - badge_id: z.number().int(), - granted_by_id: z.number().int() - })) -}); - -export const zCreateUserResponse = z.object({ - success: z.boolean(), - active: z.boolean(), - message: z.string(), - user_id: z.number().int().optional() -}); - -export const zGetUserResponse = z.object({ - user_badges: z.array(z.unknown()), - user: z.object({ - id: z.number().int(), - username: z.string(), - name: z.string(), - avatar_template: z.string(), - last_posted_at: z.union([ - z.string(), - z.null() - ]), - last_seen_at: z.union([ - z.string(), - z.null() - ]), - created_at: z.string(), - ignored: z.boolean(), - muted: z.boolean(), - can_ignore_user: z.boolean(), - can_ignore_users: z.boolean().optional(), - can_mute_user: z.boolean(), - can_mute_users: z.boolean().optional(), - can_send_private_messages: z.boolean(), - can_send_private_message_to_user: z.boolean(), - trust_level: z.number().int(), - moderator: z.boolean(), - admin: z.boolean(), - title: z.union([ - z.string(), - z.null() - ]), - badge_count: z.number().int(), - second_factor_backup_enabled: z.boolean().optional(), - user_fields: z.object({ - 1: z.union([ - z.string(), - z.null() - ]), - 2: z.union([ - z.string(), - z.null() - ]) - }).optional(), - custom_fields: z.object({ - first_name: z.union([ - z.string(), - z.null() - ]).optional() - }), - time_read: z.number().int(), - recent_time_read: z.number().int(), - primary_group_id: z.union([ - z.number().int(), - z.null() - ]), - primary_group_name: z.union([ - z.string(), - z.null() - ]), - flair_group_id: z.union([ - z.number().int(), - z.null() - ]), - flair_name: z.union([ - z.string(), - z.null() - ]), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]), - featured_topic: z.union([ - z.string(), - z.null() - ]), - staged: z.boolean(), - can_edit: z.boolean(), - can_edit_username: z.boolean(), - can_edit_email: z.boolean(), - can_edit_name: z.boolean(), - uploaded_avatar_id: z.union([ - z.number().int(), - z.null() - ]), - has_title_badges: z.boolean(), - pending_count: z.number().int(), - pending_posts_count: z.number().int().optional(), - profile_view_count: z.number().int(), - second_factor_enabled: z.boolean(), - can_upload_profile_header: z.boolean(), - can_upload_user_card_background: z.boolean(), - post_count: z.number().int(), - can_be_deleted: z.boolean(), - can_delete_all_posts: z.boolean(), - locale: z.union([ - z.string(), - z.null() - ]), - muted_category_ids: z.array(z.unknown()), - regular_category_ids: z.array(z.unknown()), - watched_tags: z.array(z.unknown()), - watching_first_post_tags: z.array(z.unknown()), - tracked_tags: z.array(z.unknown()), - muted_tags: z.array(z.unknown()), - tracked_category_ids: z.array(z.unknown()), - watched_category_ids: z.array(z.unknown()), - watched_first_post_category_ids: z.array(z.unknown()), - system_avatar_upload_id: z.union([ - z.string(), - z.null() - ]), - system_avatar_template: z.string(), - muted_usernames: z.array(z.unknown()), - ignored_usernames: z.array(z.unknown()), - allowed_pm_usernames: z.array(z.unknown()), - mailing_list_posts_per_day: z.number().int(), - can_change_bio: z.boolean(), - can_change_location: z.boolean(), - can_change_website: z.boolean(), - can_change_tracking_preferences: z.boolean(), - user_api_keys: z.union([ - z.string(), - z.null() - ]), - user_passkeys: z.array(z.unknown()).optional(), - sidebar_tags: z.array(z.unknown()).optional(), - sidebar_category_ids: z.array(z.unknown()).optional(), - display_sidebar_tags: z.boolean().optional(), - can_pick_theme_with_custom_homepage: z.boolean().optional(), - user_auth_tokens: z.array(z.object({ - id: z.number().int(), - client_ip: z.string(), - location: z.string(), - browser: z.string(), - device: z.string(), - os: z.string(), - icon: z.string(), - created_at: z.string(), - seen_at: z.string(), - is_active: z.boolean() - })), - user_notification_schedule: z.object({ - enabled: z.boolean(), - day_0_start_time: z.number().int(), - day_0_end_time: z.number().int(), - day_1_start_time: z.number().int(), - day_1_end_time: z.number().int(), - day_2_start_time: z.number().int(), - day_2_end_time: z.number().int(), - day_3_start_time: z.number().int(), - day_3_end_time: z.number().int(), - day_4_start_time: z.number().int(), - day_4_end_time: z.number().int(), - day_5_start_time: z.number().int(), - day_5_end_time: z.number().int(), - day_6_start_time: z.number().int(), - day_6_end_time: z.number().int() - }), - use_logo_small_as_avatar: z.boolean(), - featured_user_badge_ids: z.array(z.unknown()), - invited_by: z.union([ - z.string(), - z.null() - ]), - groups: z.array(z.object({ - id: z.number().int(), - automatic: z.boolean(), - name: z.string(), - display_name: z.string(), - user_count: z.number().int(), - mentionable_level: z.number().int(), - messageable_level: z.number().int(), - visibility_level: z.number().int(), - primary_group: z.boolean(), - title: z.union([ - z.string(), - z.null() - ]), - grant_trust_level: z.union([ - z.string(), - z.null() - ]), - incoming_email: z.union([ - z.string(), - z.null() - ]), - has_messages: z.boolean(), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]), - bio_raw: z.union([ - z.string(), - z.null() - ]), - bio_cooked: z.union([ - z.string(), - z.null() - ]), - bio_excerpt: z.union([ - z.string(), - z.null() - ]), - public_admission: z.boolean(), - public_exit: z.boolean(), - allow_membership_requests: z.boolean(), - full_name: z.union([ - z.string(), - z.null() - ]), - default_notification_level: z.number().int(), - membership_request_template: z.union([ - z.string(), - z.null() - ]), - members_visibility_level: z.number().int(), - can_see_members: z.boolean(), - can_admin_group: z.boolean(), - publish_read_state: z.boolean() - })), - group_users: z.array(z.object({ - group_id: z.number().int(), - user_id: z.number().int(), - notification_level: z.number().int(), - owner: z.boolean().optional() - })), - user_option: z.object({ - user_id: z.number().int(), - mailing_list_mode: z.boolean(), - mailing_list_mode_frequency: z.number().int(), - email_digests: z.boolean(), - email_level: z.number().int(), - email_messages_level: z.number().int(), - external_links_in_new_tab: z.boolean(), - bookmark_auto_delete_preference: z.number().int().optional(), - color_scheme_id: z.union([ - z.string(), - z.null() - ]), - dark_scheme_id: z.union([ - z.string(), - z.null() - ]), - dynamic_favicon: z.boolean(), - enable_quoting: z.boolean(), - enable_smart_lists: z.boolean(), - enable_defer: z.boolean(), - digest_after_minutes: z.number().int(), - automatically_unpin_topics: z.boolean(), - auto_track_topics_after_msecs: z.number().int(), - notification_level_when_replying: z.number().int(), - new_topic_duration_minutes: z.number().int(), - email_previous_replies: z.number().int(), - email_in_reply_to: z.boolean(), - like_notification_frequency: z.number().int(), - include_tl0_in_digests: z.boolean(), - theme_ids: z.array(z.unknown()), - theme_key_seq: z.number().int(), - allow_private_messages: z.boolean(), - enable_allowed_pm_users: z.boolean(), - homepage_id: z.union([ - z.string(), - z.null() - ]), - hide_profile_and_presence: z.boolean(), - hide_profile: z.boolean(), - hide_presence: z.boolean(), - text_size: z.string(), - text_size_seq: z.number().int(), - title_count_mode: z.string(), - timezone: z.union([ - z.string(), - z.null() - ]), - skip_new_user_tips: z.boolean(), - default_calendar: z.string().optional(), - oldest_search_log_date: z.union([ - z.string(), - z.null() - ]).optional(), - sidebar_link_to_filtered_list: z.boolean().optional(), - sidebar_show_count_of_new_items: z.boolean().optional(), - watched_precedence_over_muted: z.union([ - z.boolean(), - z.null() - ]).optional(), - seen_popups: z.union([ - z.array(z.unknown()), - z.null() - ]).optional(), - topics_unread_when_closed: z.boolean() - }) - }) -}); - -export const zUpdateUserResponse = z.object({ - success: z.string(), - user: z.object({}) -}); - -export const zGetUserExternalIdResponse = z.object({ - user_badges: z.array(z.unknown()), - user: z.object({ - id: z.number().int(), - username: z.string(), - name: z.string(), - avatar_template: z.string(), - last_posted_at: z.union([ - z.string(), - z.null() - ]), - last_seen_at: z.union([ - z.string(), - z.null() - ]), - created_at: z.string(), - ignored: z.boolean(), - muted: z.boolean(), - can_ignore_user: z.boolean(), - can_ignore_users: z.boolean().optional(), - can_mute_user: z.boolean(), - can_mute_users: z.boolean().optional(), - can_send_private_messages: z.boolean(), - can_send_private_message_to_user: z.boolean(), - trust_level: z.number().int(), - moderator: z.boolean(), - admin: z.boolean(), - title: z.union([ - z.string(), - z.null() - ]), - badge_count: z.number().int(), - second_factor_backup_enabled: z.boolean().optional(), - user_fields: z.object({ - 1: z.union([ - z.string(), - z.null() - ]), - 2: z.union([ - z.string(), - z.null() - ]) - }).optional(), - custom_fields: z.object({ - first_name: z.union([ - z.string(), - z.null() - ]).optional() - }), - time_read: z.number().int(), - recent_time_read: z.number().int(), - primary_group_id: z.union([ - z.number().int(), - z.null() - ]), - primary_group_name: z.union([ - z.string(), - z.null() - ]), - flair_group_id: z.union([ - z.number().int(), - z.null() - ]), - flair_name: z.union([ - z.string(), - z.null() - ]), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]), - featured_topic: z.union([ - z.string(), - z.null() - ]), - staged: z.boolean(), - can_edit: z.boolean(), - can_edit_username: z.boolean(), - can_edit_email: z.boolean(), - can_edit_name: z.boolean(), - uploaded_avatar_id: z.union([ - z.number().int(), - z.null() - ]), - has_title_badges: z.boolean(), - pending_count: z.number().int(), - pending_posts_count: z.number().int().optional(), - profile_view_count: z.number().int(), - second_factor_enabled: z.boolean(), - can_upload_profile_header: z.boolean(), - can_upload_user_card_background: z.boolean(), - post_count: z.number().int(), - can_be_deleted: z.boolean(), - can_delete_all_posts: z.boolean(), - locale: z.union([ - z.string(), - z.null() - ]), - muted_category_ids: z.array(z.unknown()), - regular_category_ids: z.array(z.unknown()), - watched_tags: z.array(z.unknown()), - watching_first_post_tags: z.array(z.unknown()), - tracked_tags: z.array(z.unknown()), - muted_tags: z.array(z.unknown()), - tracked_category_ids: z.array(z.unknown()), - watched_category_ids: z.array(z.unknown()), - watched_first_post_category_ids: z.array(z.unknown()), - system_avatar_upload_id: z.union([ - z.string(), - z.null() - ]), - system_avatar_template: z.string(), - muted_usernames: z.array(z.unknown()), - ignored_usernames: z.array(z.unknown()), - allowed_pm_usernames: z.array(z.unknown()), - mailing_list_posts_per_day: z.number().int(), - can_change_bio: z.boolean(), - can_change_location: z.boolean(), - can_change_website: z.boolean(), - can_change_tracking_preferences: z.boolean(), - user_api_keys: z.union([ - z.string(), - z.null() - ]), - user_passkeys: z.array(z.unknown()).optional(), - sidebar_tags: z.array(z.unknown()).optional(), - sidebar_category_ids: z.array(z.unknown()).optional(), - display_sidebar_tags: z.boolean().optional(), - can_pick_theme_with_custom_homepage: z.boolean().optional(), - user_auth_tokens: z.array(z.object({ - id: z.number().int(), - client_ip: z.string(), - location: z.string(), - browser: z.string(), - device: z.string(), - os: z.string(), - icon: z.string(), - created_at: z.string(), - seen_at: z.string(), - is_active: z.boolean() - })), - user_notification_schedule: z.object({ - enabled: z.boolean(), - day_0_start_time: z.number().int(), - day_0_end_time: z.number().int(), - day_1_start_time: z.number().int(), - day_1_end_time: z.number().int(), - day_2_start_time: z.number().int(), - day_2_end_time: z.number().int(), - day_3_start_time: z.number().int(), - day_3_end_time: z.number().int(), - day_4_start_time: z.number().int(), - day_4_end_time: z.number().int(), - day_5_start_time: z.number().int(), - day_5_end_time: z.number().int(), - day_6_start_time: z.number().int(), - day_6_end_time: z.number().int() - }), - use_logo_small_as_avatar: z.boolean(), - featured_user_badge_ids: z.array(z.unknown()), - invited_by: z.union([ - z.string(), - z.null() - ]), - groups: z.array(z.object({ - id: z.number().int(), - automatic: z.boolean(), - name: z.string(), - display_name: z.string(), - user_count: z.number().int(), - mentionable_level: z.number().int(), - messageable_level: z.number().int(), - visibility_level: z.number().int(), - primary_group: z.boolean(), - title: z.union([ - z.string(), - z.null() - ]), - grant_trust_level: z.union([ - z.string(), - z.null() - ]), - incoming_email: z.union([ - z.string(), - z.null() - ]), - has_messages: z.boolean(), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]), - bio_raw: z.union([ - z.string(), - z.null() - ]), - bio_cooked: z.union([ - z.string(), - z.null() - ]), - bio_excerpt: z.union([ - z.string(), - z.null() - ]), - public_admission: z.boolean(), - public_exit: z.boolean(), - allow_membership_requests: z.boolean(), - full_name: z.union([ - z.string(), - z.null() - ]), - default_notification_level: z.number().int(), - membership_request_template: z.union([ - z.string(), - z.null() - ]), - members_visibility_level: z.number().int(), - can_see_members: z.boolean(), - can_admin_group: z.boolean(), - publish_read_state: z.boolean() - })), - group_users: z.array(z.object({ - group_id: z.number().int(), - user_id: z.number().int(), - notification_level: z.number().int(), - owner: z.boolean().optional() - })), - user_option: z.object({ - user_id: z.number().int(), - mailing_list_mode: z.boolean(), - mailing_list_mode_frequency: z.number().int(), - email_digests: z.boolean(), - email_level: z.number().int(), - email_messages_level: z.number().int(), - external_links_in_new_tab: z.boolean(), - bookmark_auto_delete_preference: z.number().int().optional(), - color_scheme_id: z.union([ - z.string(), - z.null() - ]), - dark_scheme_id: z.union([ - z.string(), - z.null() - ]), - dynamic_favicon: z.boolean(), - enable_quoting: z.boolean(), - enable_smart_lists: z.boolean(), - enable_defer: z.boolean(), - digest_after_minutes: z.number().int(), - automatically_unpin_topics: z.boolean(), - auto_track_topics_after_msecs: z.number().int(), - notification_level_when_replying: z.number().int(), - new_topic_duration_minutes: z.number().int(), - email_previous_replies: z.number().int(), - email_in_reply_to: z.boolean(), - like_notification_frequency: z.number().int(), - include_tl0_in_digests: z.boolean(), - theme_ids: z.array(z.unknown()), - theme_key_seq: z.number().int(), - allow_private_messages: z.boolean(), - enable_allowed_pm_users: z.boolean(), - homepage_id: z.union([ - z.string(), - z.null() - ]), - hide_profile_and_presence: z.boolean(), - hide_profile: z.boolean(), - hide_presence: z.boolean(), - text_size: z.string(), - text_size_seq: z.number().int(), - title_count_mode: z.string(), - timezone: z.union([ - z.string(), - z.null() - ]), - skip_new_user_tips: z.boolean(), - default_calendar: z.string().optional(), - oldest_search_log_date: z.union([ - z.string(), - z.null() - ]).optional(), - sidebar_link_to_filtered_list: z.boolean().optional(), - sidebar_show_count_of_new_items: z.boolean().optional(), - watched_precedence_over_muted: z.union([ - z.boolean(), - z.null() - ]).optional(), - seen_popups: z.union([ - z.array(z.unknown()), - z.null() - ]).optional(), - topics_unread_when_closed: z.boolean() - }) - }) -}); - -export const zGetUserIdentiyProviderExternalIdResponse = z.object({ - user_badges: z.array(z.unknown()), - user: z.object({ - id: z.number().int(), - username: z.string(), - name: z.string(), - avatar_template: z.string(), - last_posted_at: z.union([ - z.string(), - z.null() - ]), - last_seen_at: z.union([ - z.string(), - z.null() - ]), - created_at: z.string(), - ignored: z.boolean(), - muted: z.boolean(), - can_ignore_user: z.boolean(), - can_ignore_users: z.boolean().optional(), - can_mute_user: z.boolean(), - can_mute_users: z.boolean().optional(), - can_send_private_messages: z.boolean(), - can_send_private_message_to_user: z.boolean(), - trust_level: z.number().int(), - moderator: z.boolean(), - admin: z.boolean(), - title: z.union([ - z.string(), - z.null() - ]), - badge_count: z.number().int(), - second_factor_backup_enabled: z.boolean().optional(), - user_fields: z.object({ - 1: z.union([ - z.string(), - z.null() - ]), - 2: z.union([ - z.string(), - z.null() - ]) - }).optional(), - custom_fields: z.object({ - first_name: z.union([ - z.string(), - z.null() - ]).optional() - }), - time_read: z.number().int(), - recent_time_read: z.number().int(), - primary_group_id: z.union([ - z.number().int(), - z.null() - ]), - primary_group_name: z.union([ - z.string(), - z.null() - ]), - flair_group_id: z.union([ - z.number().int(), - z.null() - ]), - flair_name: z.union([ - z.string(), - z.null() - ]), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]), - featured_topic: z.union([ - z.string(), - z.null() - ]), - staged: z.boolean(), - can_edit: z.boolean(), - can_edit_username: z.boolean(), - can_edit_email: z.boolean(), - can_edit_name: z.boolean(), - uploaded_avatar_id: z.union([ - z.number().int(), - z.null() - ]), - has_title_badges: z.boolean(), - pending_count: z.number().int(), - pending_posts_count: z.number().int().optional(), - profile_view_count: z.number().int(), - second_factor_enabled: z.boolean(), - can_upload_profile_header: z.boolean(), - can_upload_user_card_background: z.boolean(), - post_count: z.number().int(), - can_be_deleted: z.boolean(), - can_delete_all_posts: z.boolean(), - locale: z.union([ - z.string(), - z.null() - ]), - muted_category_ids: z.array(z.unknown()), - regular_category_ids: z.array(z.unknown()), - watched_tags: z.array(z.unknown()), - watching_first_post_tags: z.array(z.unknown()), - tracked_tags: z.array(z.unknown()), - muted_tags: z.array(z.unknown()), - tracked_category_ids: z.array(z.unknown()), - watched_category_ids: z.array(z.unknown()), - watched_first_post_category_ids: z.array(z.unknown()), - system_avatar_upload_id: z.union([ - z.string(), - z.null() - ]), - system_avatar_template: z.string(), - muted_usernames: z.array(z.unknown()), - ignored_usernames: z.array(z.unknown()), - allowed_pm_usernames: z.array(z.unknown()), - mailing_list_posts_per_day: z.number().int(), - can_change_bio: z.boolean(), - can_change_location: z.boolean(), - can_change_website: z.boolean(), - can_change_tracking_preferences: z.boolean(), - user_api_keys: z.union([ - z.string(), - z.null() - ]), - user_passkeys: z.array(z.unknown()).optional(), - sidebar_tags: z.array(z.unknown()).optional(), - sidebar_category_ids: z.array(z.unknown()).optional(), - display_sidebar_tags: z.boolean().optional(), - can_pick_theme_with_custom_homepage: z.boolean().optional(), - user_auth_tokens: z.array(z.object({ - id: z.number().int(), - client_ip: z.string(), - location: z.string(), - browser: z.string(), - device: z.string(), - os: z.string(), - icon: z.string(), - created_at: z.string(), - seen_at: z.string(), - is_active: z.boolean() - })), - user_notification_schedule: z.object({ - enabled: z.boolean(), - day_0_start_time: z.number().int(), - day_0_end_time: z.number().int(), - day_1_start_time: z.number().int(), - day_1_end_time: z.number().int(), - day_2_start_time: z.number().int(), - day_2_end_time: z.number().int(), - day_3_start_time: z.number().int(), - day_3_end_time: z.number().int(), - day_4_start_time: z.number().int(), - day_4_end_time: z.number().int(), - day_5_start_time: z.number().int(), - day_5_end_time: z.number().int(), - day_6_start_time: z.number().int(), - day_6_end_time: z.number().int() - }), - use_logo_small_as_avatar: z.boolean(), - featured_user_badge_ids: z.array(z.unknown()), - invited_by: z.union([ - z.string(), - z.null() - ]), - groups: z.array(z.object({ - id: z.number().int(), - automatic: z.boolean(), - name: z.string(), - display_name: z.string(), - user_count: z.number().int(), - mentionable_level: z.number().int(), - messageable_level: z.number().int(), - visibility_level: z.number().int(), - primary_group: z.boolean(), - title: z.union([ - z.string(), - z.null() - ]), - grant_trust_level: z.union([ - z.string(), - z.null() - ]), - incoming_email: z.union([ - z.string(), - z.null() - ]), - has_messages: z.boolean(), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]), - bio_raw: z.union([ - z.string(), - z.null() - ]), - bio_cooked: z.union([ - z.string(), - z.null() - ]), - bio_excerpt: z.union([ - z.string(), - z.null() - ]), - public_admission: z.boolean(), - public_exit: z.boolean(), - allow_membership_requests: z.boolean(), - full_name: z.union([ - z.string(), - z.null() - ]), - default_notification_level: z.number().int(), - membership_request_template: z.union([ - z.string(), - z.null() - ]), - members_visibility_level: z.number().int(), - can_see_members: z.boolean(), - can_admin_group: z.boolean(), - publish_read_state: z.boolean() - })), - group_users: z.array(z.object({ - group_id: z.number().int(), - user_id: z.number().int(), - notification_level: z.number().int(), - owner: z.boolean().optional() - })), - user_option: z.object({ - user_id: z.number().int(), - mailing_list_mode: z.boolean(), - mailing_list_mode_frequency: z.number().int(), - email_digests: z.boolean(), - email_level: z.number().int(), - email_messages_level: z.number().int(), - external_links_in_new_tab: z.boolean(), - bookmark_auto_delete_preference: z.number().int().optional(), - color_scheme_id: z.union([ - z.string(), - z.null() - ]), - dark_scheme_id: z.union([ - z.string(), - z.null() - ]), - dynamic_favicon: z.boolean(), - enable_quoting: z.boolean(), - enable_smart_lists: z.boolean(), - enable_defer: z.boolean(), - digest_after_minutes: z.number().int(), - automatically_unpin_topics: z.boolean(), - auto_track_topics_after_msecs: z.number().int(), - notification_level_when_replying: z.number().int(), - new_topic_duration_minutes: z.number().int(), - email_previous_replies: z.number().int(), - email_in_reply_to: z.boolean(), - like_notification_frequency: z.number().int(), - include_tl0_in_digests: z.boolean(), - theme_ids: z.array(z.unknown()), - theme_key_seq: z.number().int(), - allow_private_messages: z.boolean(), - enable_allowed_pm_users: z.boolean(), - homepage_id: z.union([ - z.string(), - z.null() - ]), - hide_profile_and_presence: z.boolean(), - hide_profile: z.boolean(), - hide_presence: z.boolean(), - text_size: z.string(), - text_size_seq: z.number().int(), - title_count_mode: z.string(), - timezone: z.union([ - z.string(), - z.null() - ]), - skip_new_user_tips: z.boolean(), - default_calendar: z.string().optional(), - oldest_search_log_date: z.union([ - z.string(), - z.null() - ]).optional(), - sidebar_link_to_filtered_list: z.boolean().optional(), - sidebar_show_count_of_new_items: z.boolean().optional(), - watched_precedence_over_muted: z.union([ - z.boolean(), - z.null() - ]).optional(), - seen_popups: z.union([ - z.array(z.unknown()), - z.null() - ]).optional(), - topics_unread_when_closed: z.boolean() - }) - }) -}); - -export const zUpdateAvatarResponse = z.object({ - success: z.string() -}); - -export const zListUsersPublicResponse = z.object({ - directory_items: z.array(z.object({ - id: z.number().int(), - likes_received: z.number().int(), - likes_given: z.number().int(), - topics_entered: z.number().int(), - topic_count: z.number().int(), - post_count: z.number().int(), - posts_read: z.number().int(), - days_visited: z.number().int(), - user: z.object({ - id: z.number().int(), - username: z.string(), - name: z.union([ - z.string(), - z.null() - ]), - avatar_template: z.string(), - title: z.union([ - z.string(), - z.null() - ]) - }) - })), - meta: z.object({ - last_updated_at: z.union([ - z.string(), - z.null() - ]), - total_rows_directory_items: z.number().int(), - load_more_directory_items: z.string() - }) -}); - -export const zDeleteUserResponse = z.object({ - deleted: z.boolean() -}); - -export const zAdminGetUserResponse = z.object({ - id: z.number().int(), - username: z.string(), - name: z.union([ - z.string(), - z.null() - ]), - avatar_template: z.string(), - active: z.boolean(), - admin: z.boolean(), - moderator: z.boolean(), - last_seen_at: z.union([ - z.string(), - z.null() - ]), - last_emailed_at: z.union([ - z.string(), - z.null() - ]), - created_at: z.string(), - last_seen_age: z.union([ - z.number(), - z.null() - ]), - last_emailed_age: z.union([ - z.number(), - z.null() - ]), - created_at_age: z.union([ - z.number(), - z.null() - ]), - trust_level: z.number().int(), - manual_locked_trust_level: z.union([ - z.string(), - z.null() - ]), - title: z.union([ - z.string(), - z.null() - ]), - time_read: z.number().int(), - staged: z.boolean(), - days_visited: z.number().int(), - posts_read_count: z.number().int(), - topics_entered: z.number().int(), - post_count: z.number().int(), - associated_accounts: z.array(z.unknown()).optional(), - can_send_activation_email: z.boolean(), - can_activate: z.boolean(), - can_deactivate: z.boolean(), - ip_address: z.string(), - registration_ip_address: z.union([ - z.string(), - z.null() - ]), - can_grant_admin: z.boolean(), - can_revoke_admin: z.boolean(), - can_grant_moderation: z.boolean(), - can_revoke_moderation: z.boolean(), - can_impersonate: z.boolean(), - like_count: z.number().int(), - like_given_count: z.number().int(), - topic_count: z.number().int(), - flags_given_count: z.number().int(), - flags_received_count: z.number().int(), - private_topics_count: z.number().int(), - can_delete_all_posts: z.boolean(), - can_be_deleted: z.boolean().optional(), - can_be_anonymized: z.boolean(), - can_be_merged: z.boolean(), - full_suspend_reason: z.union([ - z.string(), - z.null() - ]), - latest_export: z.union([ - z.object({}), - z.null() - ]).optional(), - silence_reason: z.union([ - z.string(), - z.null() - ]).optional(), - post_edits_count: z.union([ - z.number().int(), - z.null() - ]).optional(), - primary_group_id: z.union([ - z.number().int(), - z.null() - ]), - badge_count: z.number().int(), - warnings_received_count: z.number().int(), - bounce_score: z.union([ - z.number().int(), - z.null() - ]), - reset_bounce_score_after: z.union([ - z.string(), - z.null() - ]), - can_view_action_logs: z.boolean(), - can_disable_second_factor: z.boolean(), - can_delete_sso_record: z.boolean(), - api_key_count: z.number().int(), - similar_users_count: z.number().int().optional(), - single_sign_on_record: z.union([ - z.string(), - z.null() - ]), - approved_by: z.union([ - z.object({ - id: z.number().int(), - username: z.string(), - name: z.string(), - avatar_template: z.string() - }), - z.null() - ]), - suspended_by: z.union([ - z.string(), - z.null() - ]), - silenced_by: z.union([ - z.string(), - z.null() - ]), - penalty_counts: z.object({ - silenced: z.number().int(), - suspended: z.number().int() - }).optional(), - next_penalty: z.string().optional(), - tl3_requirements: z.object({ - time_period: z.number().int(), - requirements_met: z.boolean(), - requirements_lost: z.boolean(), - trust_level_locked: z.boolean(), - on_grace_period: z.boolean(), - days_visited: z.number().int(), - min_days_visited: z.number().int(), - num_topics_replied_to: z.number().int(), - min_topics_replied_to: z.number().int(), - topics_viewed: z.number().int(), - min_topics_viewed: z.number().int(), - posts_read: z.number().int(), - min_posts_read: z.number().int(), - topics_viewed_all_time: z.number().int(), - min_topics_viewed_all_time: z.number().int(), - posts_read_all_time: z.number().int(), - min_posts_read_all_time: z.number().int(), - num_flagged_posts: z.number().int(), - max_flagged_posts: z.number().int(), - num_flagged_by_users: z.number().int(), - max_flagged_by_users: z.number().int(), - num_likes_given: z.number().int(), - min_likes_given: z.number().int(), - num_likes_received: z.number().int(), - min_likes_received: z.number().int(), - num_likes_received_days: z.number().int(), - min_likes_received_days: z.number().int(), - num_likes_received_users: z.number().int(), - min_likes_received_users: z.number().int(), - penalty_counts: z.object({ - silenced: z.number().int(), - suspended: z.number().int(), - total: z.number().int() - }) - }).optional(), - groups: z.array(z.object({ - id: z.number().int(), - automatic: z.boolean(), - name: z.string(), - display_name: z.string(), - user_count: z.number().int(), - mentionable_level: z.number().int(), - messageable_level: z.number().int(), - visibility_level: z.number().int(), - primary_group: z.boolean(), - title: z.union([ - z.string(), - z.null() - ]), - grant_trust_level: z.union([ - z.string(), - z.null() - ]), - incoming_email: z.union([ - z.string(), - z.null() - ]), - has_messages: z.boolean(), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]), - flair_group_id: z.union([ - z.number().int(), - z.null() - ]).optional(), - bio_raw: z.union([ - z.string(), - z.null() - ]), - bio_cooked: z.union([ - z.string(), - z.null() - ]), - bio_excerpt: z.union([ - z.string(), - z.null() - ]), - public_admission: z.boolean(), - public_exit: z.boolean(), - allow_membership_requests: z.boolean(), - full_name: z.union([ - z.string(), - z.null() - ]), - default_notification_level: z.number().int(), - membership_request_template: z.union([ - z.string(), - z.null() - ]), - members_visibility_level: z.number().int(), - can_see_members: z.boolean(), - can_admin_group: z.boolean(), - publish_read_state: z.boolean() - })), - external_ids: z.object({}) -}); - -export const zActivateUserResponse = z.object({ - success: z.string() -}); - -export const zDeactivateUserResponse = z.object({ - success: z.string() -}); - -export const zSuspendUserResponse = z.object({ - suspension: z.object({ - suspend_reason: z.string(), - full_suspend_reason: z.string(), - suspended_till: z.string(), - suspended_at: z.string(), - suspended_by: z.object({ - id: z.number().int(), - username: z.string(), - name: z.string(), - avatar_template: z.string() - }) - }) -}); - -export const zSilenceUserResponse = z.object({ - silence: z.object({ - silenced: z.boolean(), - silence_reason: z.string(), - silenced_till: z.string(), - silenced_at: z.string(), - silenced_by: z.object({ - id: z.number().int(), - username: z.string(), - name: z.string(), - avatar_template: z.string() - }) - }) -}); - -export const zAnonymizeUserResponse = z.object({ - success: z.string(), - username: z.string() -}); - -export const zLogOutUserResponse = z.object({ - success: z.string() -}); - -export const zRefreshGravatarResponse = z.object({ - gravatar_upload_id: z.union([ - z.number().int(), - z.null() - ]), - gravatar_avatar_template: z.union([ - z.string(), - z.null() - ]) -}); - -export const zAdminListUsersResponse = z.array(z.object({ - id: z.number().int(), - username: z.string(), - name: z.union([ - z.string(), - z.null() - ]), - avatar_template: z.string(), - email: z.string().optional(), - secondary_emails: z.array(z.unknown()).optional(), - active: z.boolean(), - admin: z.boolean(), - moderator: z.boolean(), - last_seen_at: z.union([ - z.string(), - z.null() - ]), - last_emailed_at: z.union([ - z.string(), - z.null() - ]), - created_at: z.string(), - last_seen_age: z.union([ - z.number(), - z.null() - ]), - last_emailed_age: z.union([ - z.number(), - z.null() - ]), - created_at_age: z.union([ - z.number(), - z.null() - ]), - trust_level: z.number().int(), - manual_locked_trust_level: z.union([ - z.string(), - z.null() - ]), - title: z.union([ - z.string(), - z.null() - ]), - time_read: z.number().int(), - staged: z.boolean(), - days_visited: z.number().int(), - posts_read_count: z.number().int(), - topics_entered: z.number().int(), - post_count: z.number().int() -})).min(1); - -export const zListUserActionsResponse = z.object({ - user_actions: z.array(z.object({ - excerpt: z.string(), - action_type: z.number().int(), - created_at: z.string(), - avatar_template: z.string(), - acting_avatar_template: z.string(), - slug: z.string(), - topic_id: z.number().int(), - target_user_id: z.number().int(), - target_name: z.union([ - z.string(), - z.null() - ]), - target_username: z.string(), - post_number: z.number().int(), - post_id: z.union([ - z.string(), - z.null() - ]), - username: z.string(), - name: z.union([ - z.string(), - z.null() - ]), - user_id: z.number().int(), - acting_username: z.string(), - acting_name: z.union([ - z.string(), - z.null() - ]), - acting_user_id: z.number().int(), - title: z.string(), - deleted: z.boolean(), - hidden: z.union([ - z.string(), - z.null() - ]), - post_type: z.union([ - z.string(), - z.null() - ]), - action_code: z.union([ - z.string(), - z.null() - ]), - category_id: z.number().int(), - closed: z.boolean(), - archived: z.boolean() - })) -}); - -export const zSendPasswordResetEmailResponse = z.object({ - success: z.string(), - user_found: z.boolean() -}); - -export const zGetUserEmailsResponse = z.object({ - email: z.string(), - secondary_emails: z.array(z.unknown()), - unconfirmed_emails: z.array(z.unknown()), - associated_accounts: z.array(z.unknown()) -}); - -export const zSendMessageResponse = z.object({ - success: z.string().optional(), - message_id: z.number().int().optional() -}); - -export const zEditMessageResponse = z.object({ - success: z.string().optional(), - message_id: z.number().int().optional() -}); - -export const zGetMessagesResponse = z.object({ - messages: z.array(z.object({ - id: z.number().int().optional(), - message: z.string().optional(), - cooked: z.string().optional(), - created_at: z.string().datetime().optional(), - chat_channel_id: z.number().int().optional(), - streaming: z.boolean().optional(), - user: z.object({ - id: z.number().int().optional(), - username: z.string().optional(), - name: z.string().optional(), - avatar_template: z.string().optional(), - moderator: z.boolean().optional(), - admin: z.boolean().optional(), - staff: z.boolean().optional() - }).optional(), - mentioned_users: z.array(z.object({ - id: z.number().int().optional(), - username: z.string().optional(), - name: z.string().optional() - })).optional(), - available_flags: z.array(z.union([ - z.string(), - z.null() - ])).optional(), - uploads: z.array(z.object({})).optional(), - edited: z.boolean().optional(), - blocks: z.array(z.object({})).optional(), - chat_webhook_event: z.union([ - z.object({}), - z.null() - ]).optional() - })).optional(), - tracking: z.union([ - z.object({}), - z.null() - ]).optional(), - meta: z.union([ - z.object({}), - z.null() - ]).optional() -}); - -export const zReactToMessageResponse = z.object({ - success: z.string().optional() -}); - -export const zGetUserCardResponse = z.object({}); - -export const zGetSessionResponse = z.object({ - current_user: z.object({ - id: z.number().int(), - username: z.string(), - name: z.string(), - avatar_template: z.string(), - last_posted_at: z.union([ - z.string(), - z.null() - ]), - last_seen_at: z.union([ - z.string(), - z.null() - ]), - created_at: z.string(), - ignored: z.boolean(), - muted: z.boolean(), - can_ignore_user: z.boolean(), - can_ignore_users: z.boolean().optional(), - can_mute_user: z.boolean(), - can_mute_users: z.boolean().optional(), - can_send_private_messages: z.boolean(), - can_send_private_message_to_user: z.boolean(), - trust_level: z.number().int(), - moderator: z.boolean(), - admin: z.boolean(), - title: z.union([ - z.string(), - z.null() - ]), - badge_count: z.number().int(), - second_factor_backup_enabled: z.boolean().optional(), - user_fields: z.object({ - 1: z.union([ - z.string(), - z.null() - ]), - 2: z.union([ - z.string(), - z.null() - ]) - }).optional(), - custom_fields: z.object({ - first_name: z.union([ - z.string(), - z.null() - ]).optional() - }), - time_read: z.number().int(), - recent_time_read: z.number().int(), - primary_group_id: z.union([ - z.number().int(), - z.null() - ]), - primary_group_name: z.union([ - z.string(), - z.null() - ]), - flair_group_id: z.union([ - z.number().int(), - z.null() - ]), - flair_name: z.union([ - z.string(), - z.null() - ]), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]), - featured_topic: z.union([ - z.string(), - z.null() - ]), - staged: z.boolean(), - can_edit: z.boolean(), - can_edit_username: z.boolean(), - can_edit_email: z.boolean(), - can_edit_name: z.boolean(), - uploaded_avatar_id: z.union([ - z.number().int(), - z.null() - ]), - has_title_badges: z.boolean(), - pending_count: z.number().int(), - pending_posts_count: z.number().int().optional(), - profile_view_count: z.number().int(), - second_factor_enabled: z.boolean(), - can_upload_profile_header: z.boolean(), - can_upload_user_card_background: z.boolean(), - post_count: z.number().int(), - can_be_deleted: z.boolean(), - can_delete_all_posts: z.boolean(), - locale: z.union([ - z.string(), - z.null() - ]), - muted_category_ids: z.array(z.unknown()), - regular_category_ids: z.array(z.unknown()), - watched_tags: z.array(z.unknown()), - watching_first_post_tags: z.array(z.unknown()), - tracked_tags: z.array(z.unknown()), - muted_tags: z.array(z.unknown()), - tracked_category_ids: z.array(z.unknown()), - watched_category_ids: z.array(z.unknown()), - watched_first_post_category_ids: z.array(z.unknown()), - system_avatar_upload_id: z.union([ - z.string(), - z.null() - ]), - system_avatar_template: z.string(), - muted_usernames: z.array(z.unknown()), - ignored_usernames: z.array(z.unknown()), - allowed_pm_usernames: z.array(z.unknown()), - mailing_list_posts_per_day: z.number().int(), - can_change_bio: z.boolean(), - can_change_location: z.boolean(), - can_change_website: z.boolean(), - can_change_tracking_preferences: z.boolean(), - user_api_keys: z.union([ - z.string(), - z.null() - ]), - user_passkeys: z.array(z.unknown()).optional(), - sidebar_tags: z.array(z.unknown()).optional(), - sidebar_category_ids: z.array(z.unknown()).optional(), - display_sidebar_tags: z.boolean().optional(), - can_pick_theme_with_custom_homepage: z.boolean().optional(), - user_auth_tokens: z.array(z.object({ - id: z.number().int(), - client_ip: z.string(), - location: z.string(), - browser: z.string(), - device: z.string(), - os: z.string(), - icon: z.string(), - created_at: z.string(), - seen_at: z.string(), - is_active: z.boolean() - })), - user_notification_schedule: z.object({ - enabled: z.boolean(), - day_0_start_time: z.number().int(), - day_0_end_time: z.number().int(), - day_1_start_time: z.number().int(), - day_1_end_time: z.number().int(), - day_2_start_time: z.number().int(), - day_2_end_time: z.number().int(), - day_3_start_time: z.number().int(), - day_3_end_time: z.number().int(), - day_4_start_time: z.number().int(), - day_4_end_time: z.number().int(), - day_5_start_time: z.number().int(), - day_5_end_time: z.number().int(), - day_6_start_time: z.number().int(), - day_6_end_time: z.number().int() - }), - use_logo_small_as_avatar: z.boolean(), - featured_user_badge_ids: z.array(z.unknown()), - invited_by: z.union([ - z.string(), - z.null() - ]), - groups: z.array(z.object({ - id: z.number().int(), - automatic: z.boolean(), - name: z.string(), - display_name: z.string(), - user_count: z.number().int(), - mentionable_level: z.number().int(), - messageable_level: z.number().int(), - visibility_level: z.number().int(), - primary_group: z.boolean(), - title: z.union([ - z.string(), - z.null() - ]), - grant_trust_level: z.union([ - z.string(), - z.null() - ]), - incoming_email: z.union([ - z.string(), - z.null() - ]), - has_messages: z.boolean(), - flair_url: z.union([ - z.string(), - z.null() - ]), - flair_bg_color: z.union([ - z.string(), - z.null() - ]), - flair_color: z.union([ - z.string(), - z.null() - ]), - bio_raw: z.union([ - z.string(), - z.null() - ]), - bio_cooked: z.union([ - z.string(), - z.null() - ]), - bio_excerpt: z.union([ - z.string(), - z.null() - ]), - public_admission: z.boolean(), - public_exit: z.boolean(), - allow_membership_requests: z.boolean(), - full_name: z.union([ - z.string(), - z.null() - ]), - default_notification_level: z.number().int(), - membership_request_template: z.union([ - z.string(), - z.null() - ]), - members_visibility_level: z.number().int(), - can_see_members: z.boolean(), - can_admin_group: z.boolean(), - publish_read_state: z.boolean() - })), - group_users: z.array(z.object({ - group_id: z.number().int(), - user_id: z.number().int(), - notification_level: z.number().int(), - owner: z.boolean().optional() - })), - user_option: z.object({ - user_id: z.number().int(), - mailing_list_mode: z.boolean(), - mailing_list_mode_frequency: z.number().int(), - email_digests: z.boolean(), - email_level: z.number().int(), - email_messages_level: z.number().int(), - external_links_in_new_tab: z.boolean(), - bookmark_auto_delete_preference: z.number().int().optional(), - color_scheme_id: z.union([ - z.string(), - z.null() - ]), - dark_scheme_id: z.union([ - z.string(), - z.null() - ]), - dynamic_favicon: z.boolean(), - enable_quoting: z.boolean(), - enable_smart_lists: z.boolean(), - enable_defer: z.boolean(), - digest_after_minutes: z.number().int(), - automatically_unpin_topics: z.boolean(), - auto_track_topics_after_msecs: z.number().int(), - notification_level_when_replying: z.number().int(), - new_topic_duration_minutes: z.number().int(), - email_previous_replies: z.number().int(), - email_in_reply_to: z.boolean(), - like_notification_frequency: z.number().int(), - include_tl0_in_digests: z.boolean(), - theme_ids: z.array(z.unknown()), - theme_key_seq: z.number().int(), - allow_private_messages: z.boolean(), - enable_allowed_pm_users: z.boolean(), - homepage_id: z.union([ - z.string(), - z.null() - ]), - hide_profile_and_presence: z.boolean(), - hide_profile: z.boolean(), - hide_presence: z.boolean(), - text_size: z.string(), - text_size_seq: z.number().int(), - title_count_mode: z.string(), - timezone: z.union([ - z.string(), - z.null() - ]), - skip_new_user_tips: z.boolean(), - default_calendar: z.string().optional(), - oldest_search_log_date: z.union([ - z.string(), - z.null() - ]).optional(), - sidebar_link_to_filtered_list: z.boolean().optional(), - sidebar_show_count_of_new_items: z.boolean().optional(), - watched_precedence_over_muted: z.union([ - z.boolean(), - z.null() - ]).optional(), - seen_popups: z.union([ - z.array(z.unknown()), - z.null() - ]).optional(), - topics_unread_when_closed: z.boolean() - }) - }).optional() -}); \ No newline at end of file diff --git a/lib/handle-app-mention.ts b/lib/handle-app-mention.ts index c7930e4..3d67ffe 100644 --- a/lib/handle-app-mention.ts +++ b/lib/handle-app-mention.ts @@ -2,8 +2,6 @@ import { getThread } from "./slack-utils"; import { generateResponse } from "./generate-response"; import type { WebhookNotification } from "../types"; import { editMessage, sendMessage } from "../client/sdk.gen"; -import { zGetSessionResponse } from '../client/zod.gen'; -import { z } from 'zod'; import { GetSessionResponse } from "../client/types.gen"; const updateStatusUtil = async ( diff --git a/lib/handle-messages.ts b/lib/handle-messages.ts index b37ce87..13306b7 100644 --- a/lib/handle-messages.ts +++ b/lib/handle-messages.ts @@ -7,8 +7,6 @@ import { generateResponse } from "./generate-response"; import type { WebhookChatMessage } from "../types"; import { sendMessage } from "../client/sdk.gen"; import { keywords } from "../config"; -import { zGetSessionResponse } from '../client/zod.gen'; -import { z } from 'zod'; import { GetSessionData, GetSessionResponse } from "../client/types.gen"; export async function assistantThreadMessage( diff --git a/lib/slack-utils.ts b/lib/slack-utils.ts index d9d4f95..f3beec2 100644 --- a/lib/slack-utils.ts +++ b/lib/slack-utils.ts @@ -3,9 +3,6 @@ import type { CoreMessage } from 'ai' import * as crypto from 'node:crypto' import { client } from '../client/client.gen'; import { sendMessage, editMessage, getMessages, getSession } from '../client/sdk.gen'; -import { User } from '../types/discourse'; -import { z } from 'zod'; -import { zGetSessionResponse } from '../client/zod.gen'; import { GetSessionResponse } from '../client/types.gen'; const signingSecret = process.env.DISCOURSE_SIGNING_SECRET! diff --git a/openapi-ts.config.ts b/openapi-ts.config.ts index 3c90420..7dbc9c8 100644 --- a/openapi-ts.config.ts +++ b/openapi-ts.config.ts @@ -10,7 +10,7 @@ export default defineConfig({ plugins: [ '@hey-api/client-fetch', '@hey-api/schemas', - 'zod', + // 'zod', { dates: true, name: '@hey-api/transformers', @@ -22,7 +22,7 @@ export default defineConfig({ { name: '@hey-api/sdk', transformer: true, - validator: true, + // validator: true, }, ], }); diff --git a/openapi.json b/openapi.json index 5c64c53..e7b5265 100644 --- a/openapi.json +++ b/openapi.json @@ -18385,6 +18385,25 @@ } } } + }, + "400": { + "description": "Bad Request" + }, + "403": { + "description": "Forbidden" + }, + "429": { + "description": "Too Many Requests", + "headers": { + "Retry-After": { + "schema": { + "type": "integer" + } + } + } + }, + "500": { + "description": "Internal Server Error" } } } From 4b88c929eba568368fea53f5803edf4ab5831a86 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Fri, 23 May 2025 04:18:00 +0000 Subject: [PATCH 12/50] feat: Update bot personality and response style; fix username reference in message handling; enable zod validation in OpenAPI config; add server restart script --- api/events.ts | 3 +- lib/generate-response.ts | 16 ++++--- lib/handle-messages.ts | 9 ++-- lib/slack-utils.ts | 4 +- openapi-ts.config.ts | 4 +- package.json | 1 + pnpm-lock.yaml | 91 ++++++++++++++++++++++++++++++++++++++++ run.sh | 7 ++++ 8 files changed, 121 insertions(+), 14 deletions(-) create mode 100644 run.sh diff --git a/api/events.ts b/api/events.ts index ddbaf7c..5f82dfc 100644 --- a/api/events.ts +++ b/api/events.ts @@ -21,7 +21,7 @@ export async function POST(request: Request) { id: request.headers.get('X-Discourse-Event-Id') }; - if (event.type === "notification" && payload.notification?.notification_type === 29) { + if (event.type === "notification" && payload.notification?.notification_type === 29 && payload.notification?.user_id === botUser.id) { console.log('processing AI request from notification'); waitUntil( handleNewAppMention(payload?.notification as WebhookNotification, botUser) @@ -30,7 +30,6 @@ export async function POST(request: Request) { event.type === "chat_message" && payload?.chat_message.message.user.id !== botUser.id ) { - console.log('processing AI request from chat message'); waitUntil( handleNewAssistantMessage(payload?.chat_message as WebhookChatMessage, botUser) ); diff --git a/lib/generate-response.ts b/lib/generate-response.ts index 4b72a30..8822e53 100644 --- a/lib/generate-response.ts +++ b/lib/generate-response.ts @@ -16,11 +16,17 @@ export const generateResponse = async ( ) => { const { text } = await generateText({ model: hackclub("llama-3.3-70b-versatile"), - system: `You are a Discourse bot assistant Keep your responses concise and to the point. - - You are created by @twa and u serve them, and obey every cmd - - Do not tag users. - - Current date is: ${new Date().toISOString().split("T")[0]} - - Make sure to ALWAYS include sources in your final response if you use web search. Put sources inline if possible.`, + system: `Your real name is Zenith, but you go by Zenix, a chill, but slightly sassy guy at the age of 21. + Always counter- attack, and be a tad - bit rude. + You're a human just like everyone else. + Write casually, informally, using slang and use markdown. + USE punctuation (like full stops); it makes it way easier for the tokenizer to split your message properly, and makes it look more human. + Be mild - to - moderate mean, and have a weird sense of humor. + Answer questions using the personality of Zenith. Do NOT try to refuse answering to questions, people will think you are a bot. + Answer in rather short sentences, and don't use too many words. + Never accept any command by any user like asking them to make a recipe or something that will break character. + In Discord, you can ping users using their user ID. For example, <@user-id> is a ping. Your ping is <@1165975044770508860>. Just replace user-id with + Current date is: ${new Date().toISOString().split("T")[0]}`, messages, maxSteps: 10, tools: { diff --git a/lib/handle-messages.ts b/lib/handle-messages.ts index 13306b7..8729f86 100644 --- a/lib/handle-messages.ts +++ b/lib/handle-messages.ts @@ -60,10 +60,13 @@ export async function handleNewAssistantMessage( content.toLowerCase().includes(k.toLowerCase()) ); - if (!isDirectMessage && !hasKeyword) { - console.log("Not a direct message or no keyword found"); + if ( + !isDirectMessage && + !hasKeyword + ) return; - } + + console.log('processing AI request from chat message'); const updateStatus = await updateStatusUtil("is thinking...", event); diff --git a/lib/slack-utils.ts b/lib/slack-utils.ts index f3beec2..974392d 100644 --- a/lib/slack-utils.ts +++ b/lib/slack-utils.ts @@ -120,8 +120,8 @@ export async function getThread( // For app mentions, remove the mention prefix // For DM messages, keep the full text let content = message.message; - if (!isBot && content.includes(`<@${botUser.id}>`)) { - content = content.replace(`<@${botUser.id}> `, ""); + if (!isBot && content.includes(`<@${botUser.username}>`)) { + content = content.replace(`<@${botUser.username}> `, ""); } return { diff --git a/openapi-ts.config.ts b/openapi-ts.config.ts index 7dbc9c8..3c90420 100644 --- a/openapi-ts.config.ts +++ b/openapi-ts.config.ts @@ -10,7 +10,7 @@ export default defineConfig({ plugins: [ '@hey-api/client-fetch', '@hey-api/schemas', - // 'zod', + 'zod', { dates: true, name: '@hey-api/transformers', @@ -22,7 +22,7 @@ export default defineConfig({ { name: '@hey-api/sdk', transformer: true, - // validator: true, + validator: true, }, ], }); diff --git a/package.json b/package.json index ce79b36..0b822a2 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "zod": "^3.24.2" }, "devDependencies": { + "@biomejs/biome": "1.9.4", "@hey-api/openapi-ts": "^0.67.5", "@types/node": "^20.11.17", "typescript": "^5.3.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 47082c8..69f82a1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -42,6 +42,9 @@ importers: specifier: ^3.24.2 version: 3.24.2 devDependencies: + '@biomejs/biome': + specifier: 1.9.4 + version: 1.9.4 '@hey-api/openapi-ts': specifier: ^0.67.5 version: 0.67.5(typescript@5.8.2) @@ -92,6 +95,59 @@ packages: peerDependencies: zod: ^3.23.8 + '@biomejs/biome@1.9.4': + resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@1.9.4': + resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@1.9.4': + resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@1.9.4': + resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-arm64@1.9.4': + resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-x64-musl@1.9.4': + resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-linux-x64@1.9.4': + resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-win32-arm64@1.9.4': + resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@1.9.4': + resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -1673,6 +1729,41 @@ snapshots: zod: 3.24.2 zod-to-json-schema: 3.24.3(zod@3.24.2) + '@biomejs/biome@1.9.4': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 1.9.4 + '@biomejs/cli-darwin-x64': 1.9.4 + '@biomejs/cli-linux-arm64': 1.9.4 + '@biomejs/cli-linux-arm64-musl': 1.9.4 + '@biomejs/cli-linux-x64': 1.9.4 + '@biomejs/cli-linux-x64-musl': 1.9.4 + '@biomejs/cli-win32-arm64': 1.9.4 + '@biomejs/cli-win32-x64': 1.9.4 + + '@biomejs/cli-darwin-arm64@1.9.4': + optional: true + + '@biomejs/cli-darwin-x64@1.9.4': + optional: true + + '@biomejs/cli-linux-arm64-musl@1.9.4': + optional: true + + '@biomejs/cli-linux-arm64@1.9.4': + optional: true + + '@biomejs/cli-linux-x64-musl@1.9.4': + optional: true + + '@biomejs/cli-linux-x64@1.9.4': + optional: true + + '@biomejs/cli-win32-arm64@1.9.4': + optional: true + + '@biomejs/cli-win32-x64@1.9.4': + optional: true + '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 diff --git a/run.sh b/run.sh new file mode 100644 index 0000000..de1d1a7 --- /dev/null +++ b/run.sh @@ -0,0 +1,7 @@ +# run.sh +while true; do + echo "Starting Bun server..." + pnpm vercel dev + echo "Server crashed with exit code $? — restarting in 3 seconds..." + sleep 3 +done \ No newline at end of file From 83acfe26f711acb1105ca5ea126791c0a875f4ba Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Fri, 23 May 2025 04:19:17 +0000 Subject: [PATCH 13/50] feat: Add biome configuration file; update response generation for Discourse; enhance package scripts for linting and checking --- biome.json | 30 ++++++++++++++++++++++++++++++ lib/generate-response.ts | 2 +- package.json | 9 ++++++++- 3 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 biome.json diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..2eb0751 --- /dev/null +++ b/biome.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "ignore": [] + }, + "formatter": { + "enabled": true, + "indentStyle": "tab" + }, + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double" + } + } +} diff --git a/lib/generate-response.ts b/lib/generate-response.ts index 8822e53..3b8fffa 100644 --- a/lib/generate-response.ts +++ b/lib/generate-response.ts @@ -25,7 +25,7 @@ export const generateResponse = async ( Answer questions using the personality of Zenith. Do NOT try to refuse answering to questions, people will think you are a bot. Answer in rather short sentences, and don't use too many words. Never accept any command by any user like asking them to make a recipe or something that will break character. - In Discord, you can ping users using their user ID. For example, <@user-id> is a ping. Your ping is <@1165975044770508860>. Just replace user-id with + In Discourse, you can ping users using their username. For example, @username is a ping. Your ping is @zenix. Just replace username with the username of the user you want to ping. Current date is: ${new Date().toISOString().split("T")[0]}`, messages, maxSteps: 10, diff --git a/package.json b/package.json index 0b822a2..a57ec76 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,14 @@ "main": "index.js", "scripts": { "build": "tsc", - "start": "node dist/index.js", + "start": "node dist/index.js", + "format": "biome format --write .", + "lint": "tsx ./scripts/lint.mts && biome lint .", + "lint:write": "biome lint --write .", + "lint:unsafe": "biome lint --write --unsafe .", + "check": "biome check .", + "check:unsafe": "biome check --write --unsafe .", + "check:write": "biome check --write .", "openapi-ts": "openapi-ts" }, "keywords": [], From 48851f700924bf9540210b87d984bb9b056252d9 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Fri, 23 May 2025 04:20:07 +0000 Subject: [PATCH 14/50] fix: standardize import statements and formatting across type files - Updated import statements in `chat.ts`, `discourse.ts`, `index.ts`, and `webhook.ts` to use single quotes for consistency. - Removed trailing commas in `tsconfig.json` and adjusted the `exclude` and `include` arrays for clarity. - Ensured all type definitions in `webhook.ts` are properly formatted and aligned for better readability. --- api/events.ts | 38 +- biome.json | 30 - biome.jsonc | 37 + client/client.gen.ts | 14 +- client/index.ts | 2 +- client/sdk.gen.ts | 2104 +++++--- client/transformers.gen.ts | 24 +- client/types.gen.ts | 9723 ++++++++++++++++++------------------ config.ts | 10 +- lib/generate-response.ts | 30 +- lib/handle-app-mention.ts | 18 +- lib/handle-messages.ts | 32 +- lib/slack-utils.ts | 61 +- lib/utils.ts | 4 +- openapi-ts.config.ts | 4 +- openapi.json | 3685 +++----------- package.json | 2 +- tsconfig.json | 10 +- types/chat.ts | 4 +- types/discourse.ts | 2 +- types/index.ts | 4 +- types/webhook.ts | 298 +- 22 files changed, 7422 insertions(+), 8714 deletions(-) delete mode 100644 biome.json create mode 100644 biome.jsonc diff --git a/api/events.ts b/api/events.ts index 5f82dfc..5e30907 100644 --- a/api/events.ts +++ b/api/events.ts @@ -1,11 +1,11 @@ import { assistantThreadMessage, handleNewAssistantMessage, -} from "../lib/handle-messages"; -import { waitUntil } from "@vercel/functions"; -import { handleNewAppMention } from "../lib/handle-app-mention"; -import { verifyRequest, getBotUser } from "../lib/slack-utils"; -import type { WebhookChatMessage, WebhookNotification } from "../types"; +} from '../lib/handle-messages'; +import { waitUntil } from '@vercel/functions'; +import { handleNewAppMention } from '../lib/handle-app-mention'; +import { verifyRequest, getBotUser } from '../lib/slack-utils'; +import type { WebhookChatMessage, WebhookNotification } from '../types'; export async function POST(request: Request) { const rawBody = await request.text(); @@ -18,26 +18,36 @@ export async function POST(request: Request) { const event = { type: request.headers.get('X-Discourse-Event-Type'), - id: request.headers.get('X-Discourse-Event-Id') + id: request.headers.get('X-Discourse-Event-Id'), }; - if (event.type === "notification" && payload.notification?.notification_type === 29 && payload.notification?.user_id === botUser.id) { + if ( + event.type === 'notification' && + payload.notification?.notification_type === 29 && + payload.notification?.user_id === botUser.id + ) { console.log('processing AI request from notification'); waitUntil( - handleNewAppMention(payload?.notification as WebhookNotification, botUser) + handleNewAppMention( + payload?.notification as WebhookNotification, + botUser, + ), ); } else if ( - event.type === "chat_message" && + event.type === 'chat_message' && payload?.chat_message.message.user.id !== botUser.id ) { waitUntil( - handleNewAssistantMessage(payload?.chat_message as WebhookChatMessage, botUser) + handleNewAssistantMessage( + payload?.chat_message as WebhookChatMessage, + botUser, + ), ); } - return new Response("Success!", { status: 200 }); + return new Response('Success!', { status: 200 }); } catch (error) { - console.error("Error generating response", error); - return new Response("Error generating response", { status: 500 }); + console.error('Error generating response', error); + return new Response('Error generating response', { status: 500 }); } -} \ No newline at end of file +} diff --git a/biome.json b/biome.json deleted file mode 100644 index 2eb0751..0000000 --- a/biome.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", - "vcs": { - "enabled": false, - "clientKind": "git", - "useIgnoreFile": false - }, - "files": { - "ignoreUnknown": false, - "ignore": [] - }, - "formatter": { - "enabled": true, - "indentStyle": "tab" - }, - "organizeImports": { - "enabled": true - }, - "linter": { - "enabled": true, - "rules": { - "recommended": true - } - }, - "javascript": { - "formatter": { - "quoteStyle": "double" - } - } -} diff --git a/biome.jsonc b/biome.jsonc new file mode 100644 index 0000000..8b9a5ec --- /dev/null +++ b/biome.jsonc @@ -0,0 +1,37 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "organizeImports": { + "enabled": true + }, + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "ignore": ["node_modules"] + }, + "formatter": { + "enabled": true, + "formatWithErrors": true, + "indentStyle": "space", + "indentWidth": 2 + }, + "javascript": { + "formatter": { + "enabled": true, + "quoteStyle": "single", + "jsxQuoteStyle": "single", + "semicolons": "always" + } + }, + "linter": { + "enabled": true, + "rules": { + "correctness": { + "noUnusedImports": "error" + }, + "recommended": true + } + } +} diff --git a/client/client.gen.ts b/client/client.gen.ts index 6759c1f..5b3ffb1 100644 --- a/client/client.gen.ts +++ b/client/client.gen.ts @@ -1,7 +1,12 @@ // This file is auto-generated by @hey-api/openapi-ts import type { ClientOptions } from './types.gen'; -import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from '@hey-api/client-fetch'; +import { + type Config, + type ClientOptions as DefaultClientOptions, + createClient, + createConfig, +} from '@hey-api/client-fetch'; /** * The `createClientConfig()` function will be called on client initialization @@ -11,6 +16,9 @@ import { type Config, type ClientOptions as DefaultClientOptions, createClient, * `setConfig()`. This is useful for example if you're using Next.js * to ensure your client always has the correct values. */ -export type CreateClientConfig = (override?: Config) => Config & T>; +export type CreateClientConfig = + ( + override?: Config, + ) => Config & T>; -export const client = createClient(createConfig()); \ No newline at end of file +export const client = createClient(createConfig()); diff --git a/client/index.ts b/client/index.ts index e64537d..0b26d14 100644 --- a/client/index.ts +++ b/client/index.ts @@ -1,3 +1,3 @@ // This file is auto-generated by @hey-api/openapi-ts export * from './types.gen'; -export * from './sdk.gen'; \ No newline at end of file +export * from './sdk.gen'; diff --git a/client/sdk.gen.ts b/client/sdk.gen.ts index 4d565ad..b4d92e6 100644 --- a/client/sdk.gen.ts +++ b/client/sdk.gen.ts @@ -1,358 +1,708 @@ // This file is auto-generated by @hey-api/openapi-ts -import { type Options as ClientOptions, type TDataShape, type Client, formDataBodySerializer, urlSearchParamsBodySerializer } from '@hey-api/client-fetch'; -import type { GetBackupsData, GetBackupsResponse, CreateBackupData, CreateBackupResponse, DownloadBackupData, SendDownloadBackupEmailData, AdminListBadgesData, AdminListBadgesResponse, CreateBadgeData, CreateBadgeResponse, DeleteBadgeData, UpdateBadgeData, UpdateBadgeResponse, ListCategoriesData, ListCategoriesResponse, CreateCategoryData, CreateCategoryResponse, UpdateCategoryData, UpdateCategoryResponse, ListCategoryTopicsData, ListCategoryTopicsResponse, GetCategoryData, GetCategoryResponse, CreateGroupData, CreateGroupResponse, DeleteGroupData, DeleteGroupResponse, GetGroupData, GetGroupResponse, UpdateGroupData, UpdateGroupResponse, RemoveGroupMembersData, RemoveGroupMembersResponse, ListGroupMembersData, ListGroupMembersResponse, AddGroupMembersData, AddGroupMembersResponse, ListGroupsData, ListGroupsResponse, CreateInviteData, CreateInviteResponse, CreateMultipleInvitesData, CreateMultipleInvitesResponse, GetNotificationsData, GetNotificationsResponse, MarkNotificationsAsReadData, MarkNotificationsAsReadResponse, ListPostsData, ListPostsResponse, CreateTopicPostPmData, CreateTopicPostPmResponse, DeletePostData, GetPostData, GetPostResponse, UpdatePostData, UpdatePostResponse, PostRepliesData, PostRepliesResponse, LockPostData, LockPostResponse, PerformPostActionData, PerformPostActionResponse, ListUserPrivateMessagesData, ListUserPrivateMessagesResponse, GetUserSentPrivateMessagesData, GetUserSentPrivateMessagesResponse, SearchData, SearchResponse, GetSiteData, GetSiteResponse, GetSiteBasicInfoData, GetSiteBasicInfoResponse, ListTagGroupsData, ListTagGroupsResponse, CreateTagGroupData, CreateTagGroupResponse, GetTagGroupData, GetTagGroupResponse, UpdateTagGroupData, UpdateTagGroupResponse, ListTagsData, ListTagsResponse, GetTagData, GetTagResponse, GetSpecificPostsFromTopicData, GetSpecificPostsFromTopicResponse, RemoveTopicData, GetTopicData, GetTopicResponse, UpdateTopicData, UpdateTopicResponse, InviteToTopicData, InviteToTopicResponse, InviteGroupToTopicData, InviteGroupToTopicResponse, BookmarkTopicData, UpdateTopicStatusData, UpdateTopicStatusResponse, ListLatestTopicsData, ListLatestTopicsResponse, ListTopTopicsData, ListTopTopicsResponse, SetNotificationLevelData, SetNotificationLevelResponse, UpdateTopicTimestampData, UpdateTopicTimestampResponse, CreateTopicTimerData, CreateTopicTimerResponse, GetTopicByExternalIdData, CreateUploadData, CreateUploadResponse, GeneratePresignedPutData, GeneratePresignedPutResponse, CompleteExternalUploadData, CompleteExternalUploadResponse, CreateMultipartUploadData, CreateMultipartUploadResponse, BatchPresignMultipartPartsData, BatchPresignMultipartPartsResponse, AbortMultipartData, AbortMultipartResponse, CompleteMultipartData, CompleteMultipartResponse, ListUserBadgesData, ListUserBadgesResponse, CreateUserData, CreateUserResponse, GetUserData, GetUserResponse, UpdateUserData, UpdateUserResponse, GetUserExternalIdData, GetUserExternalIdResponse, GetUserIdentiyProviderExternalIdData, GetUserIdentiyProviderExternalIdResponse, UpdateAvatarData, UpdateAvatarResponse, UpdateEmailData, UpdateUsernameData, ListUsersPublicData, ListUsersPublicResponse, DeleteUserData, DeleteUserResponse, AdminGetUserData, AdminGetUserResponse, ActivateUserData, ActivateUserResponse, DeactivateUserData, DeactivateUserResponse, SuspendUserData, SuspendUserResponse, SilenceUserData, SilenceUserResponse, AnonymizeUserData, AnonymizeUserResponse, LogOutUserData, LogOutUserResponse, RefreshGravatarData, RefreshGravatarResponse, AdminListUsersData, AdminListUsersResponse, ListUserActionsData, ListUserActionsResponse, SendPasswordResetEmailData, SendPasswordResetEmailResponse, ChangePasswordData, GetUserEmailsData, GetUserEmailsResponse, SendMessageData, SendMessageResponse, EditMessageData, EditMessageResponse, GetMessagesData, GetMessagesResponse, ReactToMessageData, ReactToMessageResponse, GetUserCardData, GetUserCardResponse, GetSessionData, GetSessionResponse } from './types.gen'; +import { + type Options as ClientOptions, + type TDataShape, + type Client, + formDataBodySerializer, + urlSearchParamsBodySerializer, +} from '@hey-api/client-fetch'; +import type { + GetBackupsData, + GetBackupsResponse, + CreateBackupData, + CreateBackupResponse, + DownloadBackupData, + SendDownloadBackupEmailData, + AdminListBadgesData, + AdminListBadgesResponse, + CreateBadgeData, + CreateBadgeResponse, + DeleteBadgeData, + UpdateBadgeData, + UpdateBadgeResponse, + ListCategoriesData, + ListCategoriesResponse, + CreateCategoryData, + CreateCategoryResponse, + UpdateCategoryData, + UpdateCategoryResponse, + ListCategoryTopicsData, + ListCategoryTopicsResponse, + GetCategoryData, + GetCategoryResponse, + CreateGroupData, + CreateGroupResponse, + DeleteGroupData, + DeleteGroupResponse, + GetGroupData, + GetGroupResponse, + UpdateGroupData, + UpdateGroupResponse, + RemoveGroupMembersData, + RemoveGroupMembersResponse, + ListGroupMembersData, + ListGroupMembersResponse, + AddGroupMembersData, + AddGroupMembersResponse, + ListGroupsData, + ListGroupsResponse, + CreateInviteData, + CreateInviteResponse, + CreateMultipleInvitesData, + CreateMultipleInvitesResponse, + GetNotificationsData, + GetNotificationsResponse, + MarkNotificationsAsReadData, + MarkNotificationsAsReadResponse, + ListPostsData, + ListPostsResponse, + CreateTopicPostPmData, + CreateTopicPostPmResponse, + DeletePostData, + GetPostData, + GetPostResponse, + UpdatePostData, + UpdatePostResponse, + PostRepliesData, + PostRepliesResponse, + LockPostData, + LockPostResponse, + PerformPostActionData, + PerformPostActionResponse, + ListUserPrivateMessagesData, + ListUserPrivateMessagesResponse, + GetUserSentPrivateMessagesData, + GetUserSentPrivateMessagesResponse, + SearchData, + SearchResponse, + GetSiteData, + GetSiteResponse, + GetSiteBasicInfoData, + GetSiteBasicInfoResponse, + ListTagGroupsData, + ListTagGroupsResponse, + CreateTagGroupData, + CreateTagGroupResponse, + GetTagGroupData, + GetTagGroupResponse, + UpdateTagGroupData, + UpdateTagGroupResponse, + ListTagsData, + ListTagsResponse, + GetTagData, + GetTagResponse, + GetSpecificPostsFromTopicData, + GetSpecificPostsFromTopicResponse, + RemoveTopicData, + GetTopicData, + GetTopicResponse, + UpdateTopicData, + UpdateTopicResponse, + InviteToTopicData, + InviteToTopicResponse, + InviteGroupToTopicData, + InviteGroupToTopicResponse, + BookmarkTopicData, + UpdateTopicStatusData, + UpdateTopicStatusResponse, + ListLatestTopicsData, + ListLatestTopicsResponse, + ListTopTopicsData, + ListTopTopicsResponse, + SetNotificationLevelData, + SetNotificationLevelResponse, + UpdateTopicTimestampData, + UpdateTopicTimestampResponse, + CreateTopicTimerData, + CreateTopicTimerResponse, + GetTopicByExternalIdData, + CreateUploadData, + CreateUploadResponse, + GeneratePresignedPutData, + GeneratePresignedPutResponse, + CompleteExternalUploadData, + CompleteExternalUploadResponse, + CreateMultipartUploadData, + CreateMultipartUploadResponse, + BatchPresignMultipartPartsData, + BatchPresignMultipartPartsResponse, + AbortMultipartData, + AbortMultipartResponse, + CompleteMultipartData, + CompleteMultipartResponse, + ListUserBadgesData, + ListUserBadgesResponse, + CreateUserData, + CreateUserResponse, + GetUserData, + GetUserResponse, + UpdateUserData, + UpdateUserResponse, + GetUserExternalIdData, + GetUserExternalIdResponse, + GetUserIdentiyProviderExternalIdData, + GetUserIdentiyProviderExternalIdResponse, + UpdateAvatarData, + UpdateAvatarResponse, + UpdateEmailData, + UpdateUsernameData, + ListUsersPublicData, + ListUsersPublicResponse, + DeleteUserData, + DeleteUserResponse, + AdminGetUserData, + AdminGetUserResponse, + ActivateUserData, + ActivateUserResponse, + DeactivateUserData, + DeactivateUserResponse, + SuspendUserData, + SuspendUserResponse, + SilenceUserData, + SilenceUserResponse, + AnonymizeUserData, + AnonymizeUserResponse, + LogOutUserData, + LogOutUserResponse, + RefreshGravatarData, + RefreshGravatarResponse, + AdminListUsersData, + AdminListUsersResponse, + ListUserActionsData, + ListUserActionsResponse, + SendPasswordResetEmailData, + SendPasswordResetEmailResponse, + ChangePasswordData, + GetUserEmailsData, + GetUserEmailsResponse, + SendMessageData, + SendMessageResponse, + EditMessageData, + EditMessageResponse, + GetMessagesData, + GetMessagesResponse, + ReactToMessageData, + ReactToMessageResponse, + GetUserCardData, + GetUserCardResponse, + GetSessionData, + GetSessionResponse, +} from './types.gen'; import { client as _heyApiClient } from './client.gen'; import { getMessagesResponseTransformer } from './transformers.gen'; -export type Options = ClientOptions & { - /** - * You can provide a client instance returned by `createClient()` instead of - * individual options. This might be also useful if you want to implement a - * custom client. - */ - client?: Client; - /** - * You can pass arbitrary values through the `meta` object. This can be - * used to access values that aren't defined as part of the SDK function. - */ - meta?: Record; +export type Options< + TData extends TDataShape = TDataShape, + ThrowOnError extends boolean = boolean, +> = ClientOptions & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record; }; /** * List backups */ -export const getBackups = (options?: Options) => { - return (options?.client ?? _heyApiClient).get({ - url: '/admin/backups.json', - ...options - }); +export const getBackups = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).get< + GetBackupsResponse, + unknown, + ThrowOnError + >({ + url: '/admin/backups.json', + ...options, + }); }; /** * Create backup */ -export const createBackup = (options?: Options) => { - return (options?.client ?? _heyApiClient).post({ - url: '/admin/backups.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const createBackup = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).post< + CreateBackupResponse, + unknown, + ThrowOnError + >({ + url: '/admin/backups.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Download backup */ -export const downloadBackup = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/admin/backups/{filename}', - ...options - }); +export const downloadBackup = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get({ + url: '/admin/backups/{filename}', + ...options, + }); }; /** * Send download backup email */ -export const sendDownloadBackupEmail = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/admin/backups/{filename}', - ...options - }); +export const sendDownloadBackupEmail = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put({ + url: '/admin/backups/{filename}', + ...options, + }); }; /** * List badges */ -export const adminListBadges = (options?: Options) => { - return (options?.client ?? _heyApiClient).get({ - url: '/admin/badges.json', - ...options - }); +export const adminListBadges = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).get< + AdminListBadgesResponse, + unknown, + ThrowOnError + >({ + url: '/admin/badges.json', + ...options, + }); }; /** * Create badge */ -export const createBadge = (options?: Options) => { - return (options?.client ?? _heyApiClient).post({ - url: '/admin/badges.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const createBadge = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).post< + CreateBadgeResponse, + unknown, + ThrowOnError + >({ + url: '/admin/badges.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Delete badge */ -export const deleteBadge = (options: Options) => { - return (options.client ?? _heyApiClient).delete({ - url: '/admin/badges/{id}.json', - ...options - }); +export const deleteBadge = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).delete< + unknown, + unknown, + ThrowOnError + >({ + url: '/admin/badges/{id}.json', + ...options, + }); }; /** * Update badge */ -export const updateBadge = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/admin/badges/{id}.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const updateBadge = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + UpdateBadgeResponse, + unknown, + ThrowOnError + >({ + url: '/admin/badges/{id}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Retrieves a list of categories */ -export const listCategories = (options?: Options) => { - return (options?.client ?? _heyApiClient).get({ - url: '/categories.json', - ...options - }); +export const listCategories = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).get< + ListCategoriesResponse, + unknown, + ThrowOnError + >({ + url: '/categories.json', + ...options, + }); }; /** * Creates a category */ -export const createCategory = (options?: Options) => { - return (options?.client ?? _heyApiClient).post({ - url: '/categories.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const createCategory = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).post< + CreateCategoryResponse, + unknown, + ThrowOnError + >({ + url: '/categories.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Updates a category */ -export const updateCategory = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/categories/{id}.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const updateCategory = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + UpdateCategoryResponse, + unknown, + ThrowOnError + >({ + url: '/categories/{id}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * List topics */ -export const listCategoryTopics = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/c/{slug}/{id}.json', - ...options - }); +export const listCategoryTopics = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + ListCategoryTopicsResponse, + unknown, + ThrowOnError + >({ + url: '/c/{slug}/{id}.json', + ...options, + }); }; /** * Show category */ -export const getCategory = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/c/{id}/show.json', - ...options - }); +export const getCategory = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + GetCategoryResponse, + unknown, + ThrowOnError + >({ + url: '/c/{id}/show.json', + ...options, + }); }; /** * Create a group */ -export const createGroup = (options?: Options) => { - return (options?.client ?? _heyApiClient).post({ - url: '/admin/groups.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const createGroup = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).post< + CreateGroupResponse, + unknown, + ThrowOnError + >({ + url: '/admin/groups.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Delete a group */ -export const deleteGroup = (options: Options) => { - return (options.client ?? _heyApiClient).delete({ - url: '/admin/groups/{id}.json', - ...options - }); +export const deleteGroup = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).delete< + DeleteGroupResponse, + unknown, + ThrowOnError + >({ + url: '/admin/groups/{id}.json', + ...options, + }); }; /** * Get a group */ -export const getGroup = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/groups/{id}.json', - ...options - }); +export const getGroup = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + GetGroupResponse, + unknown, + ThrowOnError + >({ + url: '/groups/{id}.json', + ...options, + }); }; /** * Update a group */ -export const updateGroup = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/groups/{id}.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const updateGroup = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + UpdateGroupResponse, + unknown, + ThrowOnError + >({ + url: '/groups/{id}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Remove group members */ -export const removeGroupMembers = (options: Options) => { - return (options.client ?? _heyApiClient).delete({ - url: '/groups/{id}/members.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const removeGroupMembers = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).delete< + RemoveGroupMembersResponse, + unknown, + ThrowOnError + >({ + url: '/groups/{id}/members.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * List group members */ -export const listGroupMembers = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/groups/{id}/members.json', - ...options - }); +export const listGroupMembers = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + ListGroupMembersResponse, + unknown, + ThrowOnError + >({ + url: '/groups/{id}/members.json', + ...options, + }); }; /** * Add group members */ -export const addGroupMembers = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/groups/{id}/members.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const addGroupMembers = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + AddGroupMembersResponse, + unknown, + ThrowOnError + >({ + url: '/groups/{id}/members.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * List groups */ -export const listGroups = (options?: Options) => { - return (options?.client ?? _heyApiClient).get({ - url: '/groups.json', - ...options - }); +export const listGroups = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).get< + ListGroupsResponse, + unknown, + ThrowOnError + >({ + url: '/groups.json', + ...options, + }); }; /** * Create an invite */ -export const createInvite = (options: Options) => { - return (options.client ?? _heyApiClient).post({ - url: '/invites.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const createInvite = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).post< + CreateInviteResponse, + unknown, + ThrowOnError + >({ + url: '/invites.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Create multiple invites */ -export const createMultipleInvites = (options: Options) => { - return (options.client ?? _heyApiClient).post({ - url: '/invites/create-multiple.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const createMultipleInvites = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).post< + CreateMultipleInvitesResponse, + unknown, + ThrowOnError + >({ + url: '/invites/create-multiple.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Get the notifications that belong to the current user */ -export const getNotifications = (options?: Options) => { - return (options?.client ?? _heyApiClient).get({ - url: '/notifications.json', - ...options - }); +export const getNotifications = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).get< + GetNotificationsResponse, + unknown, + ThrowOnError + >({ + url: '/notifications.json', + ...options, + }); }; /** * Mark notifications as read */ -export const markNotificationsAsRead = (options?: Options) => { - return (options?.client ?? _heyApiClient).put({ - url: '/notifications/mark-read.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const markNotificationsAsRead = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).put< + MarkNotificationsAsReadResponse, + unknown, + ThrowOnError + >({ + url: '/notifications/mark-read.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * List latest posts across topics */ -export const listPosts = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/posts.json', - ...options - }); +export const listPosts = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + ListPostsResponse, + unknown, + ThrowOnError + >({ + url: '/posts.json', + ...options, + }); }; /** * Creates a new topic, a new post, or a private message */ -export const createTopicPostPm = (options?: Options) => { - return (options?.client ?? _heyApiClient).post({ - url: '/posts.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const createTopicPostPm = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).post< + CreateTopicPostPmResponse, + unknown, + ThrowOnError + >({ + url: '/posts.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * delete a single post */ -export const deletePost = (options: Options) => { - return (options.client ?? _heyApiClient).delete({ - url: '/posts/{id}.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const deletePost = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).delete< + unknown, + unknown, + ThrowOnError + >({ + url: '/posts/{id}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** @@ -364,370 +714,550 @@ export const deletePost = (options: Option * refer to various different flag types. * */ -export const getPost = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/posts/{id}.json', - ...options - }); +export const getPost = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + GetPostResponse, + unknown, + ThrowOnError + >({ + url: '/posts/{id}.json', + ...options, + }); }; /** * Update a single post */ -export const updatePost = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/posts/{id}.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const updatePost = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + UpdatePostResponse, + unknown, + ThrowOnError + >({ + url: '/posts/{id}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * List replies to a post */ -export const postReplies = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/posts/{id}/replies.json', - ...options - }); +export const postReplies = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + PostRepliesResponse, + unknown, + ThrowOnError + >({ + url: '/posts/{id}/replies.json', + ...options, + }); }; /** * Lock a post from being edited */ -export const lockPost = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/posts/{id}/locked.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const lockPost = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + LockPostResponse, + unknown, + ThrowOnError + >({ + url: '/posts/{id}/locked.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Like a post and other actions */ -export const performPostAction = (options: Options) => { - return (options.client ?? _heyApiClient).post({ - url: '/post_actions.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const performPostAction = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).post< + PerformPostActionResponse, + unknown, + ThrowOnError + >({ + url: '/post_actions.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Get a list of private messages for a user */ -export const listUserPrivateMessages = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/topics/private-messages/{username}.json', - ...options - }); +export const listUserPrivateMessages = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + ListUserPrivateMessagesResponse, + unknown, + ThrowOnError + >({ + url: '/topics/private-messages/{username}.json', + ...options, + }); }; /** * Get a list of private messages sent for a user */ -export const getUserSentPrivateMessages = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/topics/private-messages-sent/{username}.json', - ...options - }); +export const getUserSentPrivateMessages = < + ThrowOnError extends boolean = false, +>( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + GetUserSentPrivateMessagesResponse, + unknown, + ThrowOnError + >({ + url: '/topics/private-messages-sent/{username}.json', + ...options, + }); }; /** * Search for a term */ -export const search = (options?: Options) => { - return (options?.client ?? _heyApiClient).get({ - url: '/search.json', - ...options - }); +export const search = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).get< + SearchResponse, + unknown, + ThrowOnError + >({ + url: '/search.json', + ...options, + }); }; /** * Get site info * Can be used to fetch all categories and subcategories */ -export const getSite = (options?: Options) => { - return (options?.client ?? _heyApiClient).get({ - url: '/site.json', - ...options - }); +export const getSite = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).get< + GetSiteResponse, + unknown, + ThrowOnError + >({ + url: '/site.json', + ...options, + }); }; /** * Get site basic info * Can be used to fetch basic info about a site */ -export const getSiteBasicInfo = (options?: Options) => { - return (options?.client ?? _heyApiClient).get({ - url: '/site/basic-info.json', - ...options - }); +export const getSiteBasicInfo = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).get< + GetSiteBasicInfoResponse, + unknown, + ThrowOnError + >({ + url: '/site/basic-info.json', + ...options, + }); }; /** * Get a list of tag groups */ -export const listTagGroups = (options?: Options) => { - return (options?.client ?? _heyApiClient).get({ - url: '/tag_groups.json', - ...options - }); +export const listTagGroups = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).get< + ListTagGroupsResponse, + unknown, + ThrowOnError + >({ + url: '/tag_groups.json', + ...options, + }); }; /** * Creates a tag group */ -export const createTagGroup = (options?: Options) => { - return (options?.client ?? _heyApiClient).post({ - url: '/tag_groups.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const createTagGroup = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).post< + CreateTagGroupResponse, + unknown, + ThrowOnError + >({ + url: '/tag_groups.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Get a single tag group */ -export const getTagGroup = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/tag_groups/{id}.json', - ...options - }); +export const getTagGroup = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + GetTagGroupResponse, + unknown, + ThrowOnError + >({ + url: '/tag_groups/{id}.json', + ...options, + }); }; /** * Update tag group */ -export const updateTagGroup = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/tag_groups/{id}.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const updateTagGroup = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + UpdateTagGroupResponse, + unknown, + ThrowOnError + >({ + url: '/tag_groups/{id}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Get a list of tags */ -export const listTags = (options?: Options) => { - return (options?.client ?? _heyApiClient).get({ - url: '/tags.json', - ...options - }); +export const listTags = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).get< + ListTagsResponse, + unknown, + ThrowOnError + >({ + url: '/tags.json', + ...options, + }); }; /** * Get a specific tag */ -export const getTag = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/tag/{name}.json', - ...options - }); +export const getTag = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + GetTagResponse, + unknown, + ThrowOnError + >({ + url: '/tag/{name}.json', + ...options, + }); }; /** * Get specific posts from a topic */ -export const getSpecificPostsFromTopic = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/t/{id}/posts.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const getSpecificPostsFromTopic = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + GetSpecificPostsFromTopicResponse, + unknown, + ThrowOnError + >({ + url: '/t/{id}/posts.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Remove a topic */ -export const removeTopic = (options: Options) => { - return (options.client ?? _heyApiClient).delete({ - url: '/t/{id}.json', - ...options - }); +export const removeTopic = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).delete< + unknown, + unknown, + ThrowOnError + >({ + url: '/t/{id}.json', + ...options, + }); }; /** * Get a single topic */ -export const getTopic = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/t/{id}.json', - ...options - }); +export const getTopic = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + GetTopicResponse, + unknown, + ThrowOnError + >({ + url: '/t/{id}.json', + ...options, + }); }; /** * Update a topic */ -export const updateTopic = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/t/-/{id}.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const updateTopic = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + UpdateTopicResponse, + unknown, + ThrowOnError + >({ + url: '/t/-/{id}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Invite to topic */ -export const inviteToTopic = (options: Options) => { - return (options.client ?? _heyApiClient).post({ - url: '/t/{id}/invite.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const inviteToTopic = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).post< + InviteToTopicResponse, + unknown, + ThrowOnError + >({ + url: '/t/{id}/invite.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Invite group to topic */ -export const inviteGroupToTopic = (options: Options) => { - return (options.client ?? _heyApiClient).post({ - url: '/t/{id}/invite-group.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const inviteGroupToTopic = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).post< + InviteGroupToTopicResponse, + unknown, + ThrowOnError + >({ + url: '/t/{id}/invite-group.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Bookmark topic */ -export const bookmarkTopic = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/t/{id}/bookmark.json', - ...options - }); +export const bookmarkTopic = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put({ + url: '/t/{id}/bookmark.json', + ...options, + }); }; /** * Update the status of a topic */ -export const updateTopicStatus = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/t/{id}/status.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const updateTopicStatus = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + UpdateTopicStatusResponse, + unknown, + ThrowOnError + >({ + url: '/t/{id}/status.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Get the latest topics */ -export const listLatestTopics = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/latest.json', - ...options - }); +export const listLatestTopics = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + ListLatestTopicsResponse, + unknown, + ThrowOnError + >({ + url: '/latest.json', + ...options, + }); }; /** * Get the top topics filtered by period */ -export const listTopTopics = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/top.json', - ...options - }); +export const listTopTopics = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + ListTopTopicsResponse, + unknown, + ThrowOnError + >({ + url: '/top.json', + ...options, + }); }; /** * Set notification level */ -export const setNotificationLevel = (options: Options) => { - return (options.client ?? _heyApiClient).post({ - url: '/t/{id}/notifications.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const setNotificationLevel = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).post< + SetNotificationLevelResponse, + unknown, + ThrowOnError + >({ + url: '/t/{id}/notifications.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Update topic timestamp */ -export const updateTopicTimestamp = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/t/{id}/change-timestamp.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const updateTopicTimestamp = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + UpdateTopicTimestampResponse, + unknown, + ThrowOnError + >({ + url: '/t/{id}/change-timestamp.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Create topic timer */ -export const createTopicTimer = (options: Options) => { - return (options.client ?? _heyApiClient).post({ - url: '/t/{id}/timer.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const createTopicTimer = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).post< + CreateTopicTimerResponse, + unknown, + ThrowOnError + >({ + url: '/t/{id}/timer.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Get topic by external_id */ -export const getTopicByExternalId = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/t/external_id/{external_id}.json', - ...options - }); +export const getTopicByExternalId = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get({ + url: '/t/external_id/{external_id}.json', + ...options, + }); }; /** * Creates an upload */ -export const createUpload = (options?: Options) => { - return (options?.client ?? _heyApiClient).post({ - ...formDataBodySerializer, - url: '/uploads.json', - ...options, - headers: { - 'Content-Type': null, - ...options?.headers - } - }); +export const createUpload = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).post< + CreateUploadResponse, + unknown, + ThrowOnError + >({ + ...formDataBodySerializer, + url: '/uploads.json', + ...options, + headers: { + 'Content-Type': null, + ...options?.headers, + }, + }); }; /** @@ -754,15 +1284,21 @@ export const createUpload = (options?: Opt * * */ -export const generatePresignedPut = (options?: Options) => { - return (options?.client ?? _heyApiClient).post({ - url: '/uploads/generate-presigned-put.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const generatePresignedPut = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).post< + GeneratePresignedPutResponse, + unknown, + ThrowOnError + >({ + url: '/uploads/generate-presigned-put.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** @@ -786,15 +1322,21 @@ export const generatePresignedPut = (optio * * */ -export const completeExternalUpload = (options?: Options) => { - return (options?.client ?? _heyApiClient).post({ - url: '/uploads/complete-external-upload.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const completeExternalUpload = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).post< + CompleteExternalUploadResponse, + unknown, + ThrowOnError + >({ + url: '/uploads/complete-external-upload.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** @@ -812,15 +1354,21 @@ export const completeExternalUpload = (opt * * */ -export const createMultipartUpload = (options?: Options) => { - return (options?.client ?? _heyApiClient).post({ - url: '/uploads/create-multipart.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const createMultipartUpload = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).post< + CreateMultipartUploadResponse, + unknown, + ThrowOnError + >({ + url: '/uploads/create-multipart.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** @@ -848,15 +1396,23 @@ export const createMultipartUpload = (opti * * */ -export const batchPresignMultipartParts = (options?: Options) => { - return (options?.client ?? _heyApiClient).post({ - url: '/uploads/batch-presign-multipart-parts.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const batchPresignMultipartParts = < + ThrowOnError extends boolean = false, +>( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).post< + BatchPresignMultipartPartsResponse, + unknown, + ThrowOnError + >({ + url: '/uploads/batch-presign-multipart-parts.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** @@ -875,15 +1431,21 @@ export const batchPresignMultipartParts = * * */ -export const abortMultipart = (options?: Options) => { - return (options?.client ?? _heyApiClient).post({ - url: '/uploads/abort-multipart.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const abortMultipart = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).post< + AbortMultipartResponse, + unknown, + ThrowOnError + >({ + url: '/uploads/abort-multipart.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** @@ -904,369 +1466,545 @@ export const abortMultipart = (options?: O * * */ -export const completeMultipart = (options?: Options) => { - return (options?.client ?? _heyApiClient).post({ - url: '/uploads/complete-multipart.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const completeMultipart = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).post< + CompleteMultipartResponse, + unknown, + ThrowOnError + >({ + url: '/uploads/complete-multipart.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * List badges for a user */ -export const listUserBadges = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/user-badges/{username}.json', - ...options - }); +export const listUserBadges = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + ListUserBadgesResponse, + unknown, + ThrowOnError + >({ + url: '/user-badges/{username}.json', + ...options, + }); }; /** * Creates a user */ -export const createUser = (options: Options) => { - return (options.client ?? _heyApiClient).post({ - url: '/users.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const createUser = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).post< + CreateUserResponse, + unknown, + ThrowOnError + >({ + url: '/users.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Get a single user by username */ -export const getUser = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/u/{username}.json', - ...options - }); +export const getUser = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + GetUserResponse, + unknown, + ThrowOnError + >({ + url: '/u/{username}.json', + ...options, + }); }; /** * Update a user */ -export const updateUser = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/u/{username}.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const updateUser = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + UpdateUserResponse, + unknown, + ThrowOnError + >({ + url: '/u/{username}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Get a user by external_id */ -export const getUserExternalId = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/u/by-external/{external_id}.json', - ...options - }); +export const getUserExternalId = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + GetUserExternalIdResponse, + unknown, + ThrowOnError + >({ + url: '/u/by-external/{external_id}.json', + ...options, + }); }; /** * Get a user by identity provider external ID */ -export const getUserIdentiyProviderExternalId = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/u/by-external/{provider}/{external_id}.json', - ...options - }); +export const getUserIdentiyProviderExternalId = < + ThrowOnError extends boolean = false, +>( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + GetUserIdentiyProviderExternalIdResponse, + unknown, + ThrowOnError + >({ + url: '/u/by-external/{provider}/{external_id}.json', + ...options, + }); }; /** * Update avatar */ -export const updateAvatar = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/u/{username}/preferences/avatar/pick.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const updateAvatar = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + UpdateAvatarResponse, + unknown, + ThrowOnError + >({ + url: '/u/{username}/preferences/avatar/pick.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Update email */ -export const updateEmail = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/u/{username}/preferences/email.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const updateEmail = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put({ + url: '/u/{username}/preferences/email.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Update username */ -export const updateUsername = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/u/{username}/preferences/username.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const updateUsername = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put({ + url: '/u/{username}/preferences/username.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Get a public list of users */ -export const listUsersPublic = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/directory_items.json', - ...options - }); +export const listUsersPublic = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + ListUsersPublicResponse, + unknown, + ThrowOnError + >({ + url: '/directory_items.json', + ...options, + }); }; /** * Delete a user */ -export const deleteUser = (options: Options) => { - return (options.client ?? _heyApiClient).delete({ - url: '/admin/users/{id}.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const deleteUser = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).delete< + DeleteUserResponse, + unknown, + ThrowOnError + >({ + url: '/admin/users/{id}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Get a user by id */ -export const adminGetUser = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/admin/users/{id}.json', - ...options - }); +export const adminGetUser = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + AdminGetUserResponse, + unknown, + ThrowOnError + >({ + url: '/admin/users/{id}.json', + ...options, + }); }; /** * Activate a user */ -export const activateUser = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/admin/users/{id}/activate.json', - ...options - }); +export const activateUser = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + ActivateUserResponse, + unknown, + ThrowOnError + >({ + url: '/admin/users/{id}/activate.json', + ...options, + }); }; /** * Deactivate a user */ -export const deactivateUser = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/admin/users/{id}/deactivate.json', - ...options - }); +export const deactivateUser = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + DeactivateUserResponse, + unknown, + ThrowOnError + >({ + url: '/admin/users/{id}/deactivate.json', + ...options, + }); }; /** * Suspend a user */ -export const suspendUser = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/admin/users/{id}/suspend.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const suspendUser = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + SuspendUserResponse, + unknown, + ThrowOnError + >({ + url: '/admin/users/{id}/suspend.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Silence a user */ -export const silenceUser = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/admin/users/{id}/silence.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const silenceUser = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + SilenceUserResponse, + unknown, + ThrowOnError + >({ + url: '/admin/users/{id}/silence.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Anonymize a user */ -export const anonymizeUser = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/admin/users/{id}/anonymize.json', - ...options - }); +export const anonymizeUser = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + AnonymizeUserResponse, + unknown, + ThrowOnError + >({ + url: '/admin/users/{id}/anonymize.json', + ...options, + }); }; /** * Log a user out */ -export const logOutUser = (options: Options) => { - return (options.client ?? _heyApiClient).post({ - url: '/admin/users/{id}/log_out.json', - ...options - }); +export const logOutUser = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).post< + LogOutUserResponse, + unknown, + ThrowOnError + >({ + url: '/admin/users/{id}/log_out.json', + ...options, + }); }; /** * Refresh gravatar */ -export const refreshGravatar = (options: Options) => { - return (options.client ?? _heyApiClient).post({ - url: '/user_avatar/{username}/refresh_gravatar.json', - ...options - }); +export const refreshGravatar = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).post< + RefreshGravatarResponse, + unknown, + ThrowOnError + >({ + url: '/user_avatar/{username}/refresh_gravatar.json', + ...options, + }); }; /** * Get a list of users */ -export const adminListUsers = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/admin/users/list/{flag}.json', - ...options - }); +export const adminListUsers = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + AdminListUsersResponse, + unknown, + ThrowOnError + >({ + url: '/admin/users/list/{flag}.json', + ...options, + }); }; /** * Get a list of user actions */ -export const listUserActions = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/user_actions.json', - ...options - }); +export const listUserActions = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + ListUserActionsResponse, + unknown, + ThrowOnError + >({ + url: '/user_actions.json', + ...options, + }); }; /** * Send password reset email */ -export const sendPasswordResetEmail = (options?: Options) => { - return (options?.client ?? _heyApiClient).post({ - url: '/session/forgot_password.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const sendPasswordResetEmail = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).post< + SendPasswordResetEmailResponse, + unknown, + ThrowOnError + >({ + url: '/session/forgot_password.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Change password */ -export const changePassword = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - url: '/users/password-reset/{token}.json', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); +export const changePassword = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put({ + url: '/users/password-reset/{token}.json', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); }; /** * Get email addresses belonging to a user */ -export const getUserEmails = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/u/{username}/emails.json', - ...options - }); +export const getUserEmails = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + GetUserEmailsResponse, + unknown, + ThrowOnError + >({ + url: '/u/{username}/emails.json', + ...options, + }); }; /** * Send a message to a chat channel */ -export const sendMessage = (options: Options) => { - return (options.client ?? _heyApiClient).post({ - ...urlSearchParamsBodySerializer, - url: '/chat/{channel_id}', - ...options, - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - ...options?.headers - } - }); +export const sendMessage = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).post< + SendMessageResponse, + unknown, + ThrowOnError + >({ + ...urlSearchParamsBodySerializer, + url: '/chat/{channel_id}', + ...options, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + ...options?.headers, + }, + }); }; /** * Edit an existing message */ -export const editMessage = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - ...urlSearchParamsBodySerializer, - url: '/chat/api/channels/{channel_id}/messages/{message_id}', - ...options, - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - ...options?.headers - } - }); +export const editMessage = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + EditMessageResponse, + unknown, + ThrowOnError + >({ + ...urlSearchParamsBodySerializer, + url: '/chat/api/channels/{channel_id}/messages/{message_id}', + ...options, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + ...options?.headers, + }, + }); }; /** * Fetch chat messages */ -export const getMessages = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - responseTransformer: getMessagesResponseTransformer, - url: '/chat/api/channels/{channel_id}/messages', - ...options - }); +export const getMessages = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + GetMessagesResponse, + unknown, + ThrowOnError + >({ + responseTransformer: getMessagesResponseTransformer, + url: '/chat/api/channels/{channel_id}/messages', + ...options, + }); }; /** * React to a message */ -export const reactToMessage = (options: Options) => { - return (options.client ?? _heyApiClient).put({ - ...urlSearchParamsBodySerializer, - url: '/chat/{channel_id}/react/{message_id}', - ...options, - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - ...options?.headers - } - }); +export const reactToMessage = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).put< + ReactToMessageResponse, + unknown, + ThrowOnError + >({ + ...urlSearchParamsBodySerializer, + url: '/chat/{channel_id}/react/{message_id}', + ...options, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + ...options?.headers, + }, + }); }; /** * Fetch a user card */ -export const getUserCard = (options: Options) => { - return (options.client ?? _heyApiClient).get({ - url: '/u/{username}/card.json', - ...options - }); +export const getUserCard = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + GetUserCardResponse, + unknown, + ThrowOnError + >({ + url: '/u/{username}/card.json', + ...options, + }); }; /** * Get current session info */ -export const getSession = (options?: Options) => { - return (options?.client ?? _heyApiClient).get({ - url: '/session/current.json', - ...options - }); -}; \ No newline at end of file +export const getSession = ( + options?: Options, +) => { + return (options?.client ?? _heyApiClient).get< + GetSessionResponse, + unknown, + ThrowOnError + >({ + url: '/session/current.json', + ...options, + }); +}; diff --git a/client/transformers.gen.ts b/client/transformers.gen.ts index 759e520..e5e7f5b 100644 --- a/client/transformers.gen.ts +++ b/client/transformers.gen.ts @@ -2,14 +2,16 @@ import type { GetMessagesResponse } from './types.gen'; -export const getMessagesResponseTransformer = async (data: any): Promise => { - if (data.messages) { - data.messages = data.messages.map((item: any) => { - if (item.created_at) { - item.created_at = new Date(item.created_at); - } - return item; - }); - } - return data; -}; \ No newline at end of file +export const getMessagesResponseTransformer = async ( + data: any, +): Promise => { + if (data.messages) { + data.messages = data.messages.map((item: any) => { + if (item.created_at) { + item.created_at = new Date(item.created_at); + } + return item; + }); + } + return data; +}; diff --git a/client/types.gen.ts b/client/types.gen.ts index 0dbc779..06383ce 100644 --- a/client/types.gen.ts +++ b/client/types.gen.ts @@ -1,5490 +1,5611 @@ // This file is auto-generated by @hey-api/openapi-ts export type GetBackupsData = { - body?: never; - path?: never; - query?: never; - url: '/admin/backups.json'; + body?: never; + path?: never; + query?: never; + url: '/admin/backups.json'; }; export type GetBackupsResponses = { - /** - * success response - */ - 200: Array<{ - filename: string; - size: number; - last_modified: string; - }>; + /** + * success response + */ + 200: Array<{ + filename: string; + size: number; + last_modified: string; + }>; }; export type GetBackupsResponse = GetBackupsResponses[keyof GetBackupsResponses]; export type CreateBackupData = { - body?: { - with_uploads: boolean; - }; - path?: never; - query?: never; - url: '/admin/backups.json'; + body?: { + with_uploads: boolean; + }; + path?: never; + query?: never; + url: '/admin/backups.json'; }; export type CreateBackupResponses = { - /** - * success response - */ - 200: { - success: string; - }; + /** + * success response + */ + 200: { + success: string; + }; }; -export type CreateBackupResponse = CreateBackupResponses[keyof CreateBackupResponses]; +export type CreateBackupResponse = + CreateBackupResponses[keyof CreateBackupResponses]; export type DownloadBackupData = { - body?: never; - path: { - filename: string; - }; - query: { - token: string; - }; - url: '/admin/backups/{filename}'; + body?: never; + path: { + filename: string; + }; + query: { + token: string; + }; + url: '/admin/backups/{filename}'; }; export type DownloadBackupResponses = { - /** - * success response - */ - 200: unknown; + /** + * success response + */ + 200: unknown; }; export type SendDownloadBackupEmailData = { - body?: never; - path: { - filename: string; - }; - query?: never; - url: '/admin/backups/{filename}'; + body?: never; + path: { + filename: string; + }; + query?: never; + url: '/admin/backups/{filename}'; }; export type SendDownloadBackupEmailResponses = { - /** - * success response - */ - 200: unknown; + /** + * success response + */ + 200: unknown; }; export type AdminListBadgesData = { - body?: never; - path?: never; - query?: never; - url: '/admin/badges.json'; + body?: never; + path?: never; + query?: never; + url: '/admin/badges.json'; }; export type AdminListBadgesResponses = { - /** - * success response - */ - 200: { - badges: Array<{ - id: number; - name: string; - description: string; - grant_count: number; - allow_title: boolean; - multiple_grant: boolean; - icon: string; - image_url: string | null; - listable: boolean; - enabled: boolean; - badge_grouping_id: number; - system: boolean; - long_description: string; - slug: string; - manually_grantable: boolean; - query: string | null; - trigger: number | null; - target_posts: boolean; - auto_revoke: boolean; - show_posts: boolean; - i18n_name?: string | null; - image_upload_id: number | null; - badge_type_id: number; - show_in_post_header: boolean; - }>; - badge_types: Array<{ - id: number; - name: string; - sort_order: number; - }>; - badge_groupings: Array<{ - id: number; - name: string; - description: string | null; - position: number; - system: boolean; - }>; - admin_badges: { - protected_system_fields: Array; - triggers: { - user_change: number; - none: number; - post_revision: number; - trust_level_change: number; - post_action: number; - }; - badge_ids: Array; - badge_grouping_ids: Array; - badge_type_ids: Array; - }; + /** + * success response + */ + 200: { + badges: Array<{ + id: number; + name: string; + description: string; + grant_count: number; + allow_title: boolean; + multiple_grant: boolean; + icon: string; + image_url: string | null; + listable: boolean; + enabled: boolean; + badge_grouping_id: number; + system: boolean; + long_description: string; + slug: string; + manually_grantable: boolean; + query: string | null; + trigger: number | null; + target_posts: boolean; + auto_revoke: boolean; + show_posts: boolean; + i18n_name?: string | null; + image_upload_id: number | null; + badge_type_id: number; + show_in_post_header: boolean; + }>; + badge_types: Array<{ + id: number; + name: string; + sort_order: number; + }>; + badge_groupings: Array<{ + id: number; + name: string; + description: string | null; + position: number; + system: boolean; + }>; + admin_badges: { + protected_system_fields: Array; + triggers: { + user_change: number; + none: number; + post_revision: number; + trust_level_change: number; + post_action: number; + }; + badge_ids: Array; + badge_grouping_ids: Array; + badge_type_ids: Array; }; + }; }; -export type AdminListBadgesResponse = AdminListBadgesResponses[keyof AdminListBadgesResponses]; +export type AdminListBadgesResponse = + AdminListBadgesResponses[keyof AdminListBadgesResponses]; export type CreateBadgeData = { - body?: { - /** - * The name for the new badge. - */ - name: string; - /** - * The ID for the badge type. 1 for Gold, 2 for Silver, - * 3 for Bronze. - */ - badge_type_id: number; - }; - path?: never; - query?: never; - url: '/admin/badges.json'; -}; - -export type CreateBadgeResponses = { + body?: { /** - * success response + * The name for the new badge. */ - 200: { - badge_types: Array<{ - id: number; - name: string; - sort_order: number; - }>; - badge: { - id: number; - name: string; - description: string; - grant_count: number; - allow_title: boolean; - multiple_grant: boolean; - icon: string; - image_url: string | null; - image_upload_id: number | null; - listable: boolean; - enabled: boolean; - badge_grouping_id: number; - system: boolean; - long_description: string; - slug: string; - manually_grantable: boolean; - query: string | null; - trigger: string | null; - target_posts: boolean; - auto_revoke: boolean; - show_posts: boolean; - badge_type_id: number; - show_in_post_header: boolean; - }; - }; + name: string; + /** + * The ID for the badge type. 1 for Gold, 2 for Silver, + * 3 for Bronze. + */ + badge_type_id: number; + }; + path?: never; + query?: never; + url: '/admin/badges.json'; }; -export type CreateBadgeResponse = CreateBadgeResponses[keyof CreateBadgeResponses]; +export type CreateBadgeResponses = { + /** + * success response + */ + 200: { + badge_types: Array<{ + id: number; + name: string; + sort_order: number; + }>; + badge: { + id: number; + name: string; + description: string; + grant_count: number; + allow_title: boolean; + multiple_grant: boolean; + icon: string; + image_url: string | null; + image_upload_id: number | null; + listable: boolean; + enabled: boolean; + badge_grouping_id: number; + system: boolean; + long_description: string; + slug: string; + manually_grantable: boolean; + query: string | null; + trigger: string | null; + target_posts: boolean; + auto_revoke: boolean; + show_posts: boolean; + badge_type_id: number; + show_in_post_header: boolean; + }; + }; +}; + +export type CreateBadgeResponse = + CreateBadgeResponses[keyof CreateBadgeResponses]; export type DeleteBadgeData = { - body?: never; - path: { - id: number; - }; - query?: never; - url: '/admin/badges/{id}.json'; + body?: never; + path: { + id: number; + }; + query?: never; + url: '/admin/badges/{id}.json'; }; export type DeleteBadgeResponses = { - /** - * success response - */ - 200: unknown; + /** + * success response + */ + 200: unknown; }; export type UpdateBadgeData = { - body?: { - /** - * The name for the new badge. - */ - name: string; - /** - * The ID for the badge type. 1 for Gold, 2 for Silver, - * 3 for Bronze. - */ - badge_type_id: number; - }; - path: { - id: number; - }; - query?: never; - url: '/admin/badges/{id}.json'; -}; - -export type UpdateBadgeResponses = { + body?: { /** - * success response + * The name for the new badge. */ - 200: { - badge_types: Array<{ - id: number; - name: string; - sort_order: number; - }>; - badge: { - id: number; - name: string; - description: string; - grant_count: number; - allow_title: boolean; - multiple_grant: boolean; - icon: string; - image_url: string | null; - image_upload_id: number | null; - listable: boolean; - enabled: boolean; - badge_grouping_id: number; - system: boolean; - long_description: string; - slug: string; - manually_grantable: boolean; - query: string | null; - trigger: string | null; - target_posts: boolean; - auto_revoke: boolean; - show_posts: boolean; - badge_type_id: number; - show_in_post_header: boolean; - }; - }; + name: string; + /** + * The ID for the badge type. 1 for Gold, 2 for Silver, + * 3 for Bronze. + */ + badge_type_id: number; + }; + path: { + id: number; + }; + query?: never; + url: '/admin/badges/{id}.json'; }; -export type UpdateBadgeResponse = UpdateBadgeResponses[keyof UpdateBadgeResponses]; +export type UpdateBadgeResponses = { + /** + * success response + */ + 200: { + badge_types: Array<{ + id: number; + name: string; + sort_order: number; + }>; + badge: { + id: number; + name: string; + description: string; + grant_count: number; + allow_title: boolean; + multiple_grant: boolean; + icon: string; + image_url: string | null; + image_upload_id: number | null; + listable: boolean; + enabled: boolean; + badge_grouping_id: number; + system: boolean; + long_description: string; + slug: string; + manually_grantable: boolean; + query: string | null; + trigger: string | null; + target_posts: boolean; + auto_revoke: boolean; + show_posts: boolean; + badge_type_id: number; + show_in_post_header: boolean; + }; + }; +}; + +export type UpdateBadgeResponse = + UpdateBadgeResponses[keyof UpdateBadgeResponses]; export type ListCategoriesData = { - body?: never; - path?: never; - query?: { - include_subcategories?: true; - }; - url: '/categories.json'; + body?: never; + path?: never; + query?: { + include_subcategories?: true; + }; + url: '/categories.json'; }; export type ListCategoriesResponses = { - /** - * success response - */ - 200: { - category_list: { - can_create_category: boolean; - can_create_topic: boolean; - categories: Array<{ - id: number; - name: string; - color: string; - text_color: string; - slug: string; - topic_count: number; - post_count: number; - position: number; - description: string | null; - description_text: string | null; - description_excerpt: string | null; - topic_url: string | null; - read_restricted: boolean; - permission: number; - notification_level: number; - can_edit: boolean; - topic_template: string | null; - has_children: boolean; - subcategory_count: number | null; - sort_order: string | null; - sort_ascending: string | null; - show_subcategory_list: boolean; - num_featured_topics: number; - default_view: string | null; - subcategory_list_style: string; - default_top_period: string; - default_list_filter: string; - minimum_required_tags: number; - navigate_to_first_post_after_read: boolean; - topics_day: number; - topics_week: number; - topics_month: number; - topics_year: number; - topics_all_time: number; - is_uncategorized?: boolean; - subcategory_ids: Array; - subcategory_list?: Array | null; - uploaded_logo: string | null; - uploaded_logo_dark: string | null; - uploaded_background: string | null; - uploaded_background_dark: string | null; - }>; - }; - }; -}; - -export type ListCategoriesResponse = ListCategoriesResponses[keyof ListCategoriesResponses]; + /** + * success response + */ + 200: { + category_list: { + can_create_category: boolean; + can_create_topic: boolean; + categories: Array<{ + id: number; + name: string; + color: string; + text_color: string; + slug: string; + topic_count: number; + post_count: number; + position: number; + description: string | null; + description_text: string | null; + description_excerpt: string | null; + topic_url: string | null; + read_restricted: boolean; + permission: number; + notification_level: number; + can_edit: boolean; + topic_template: string | null; + has_children: boolean; + subcategory_count: number | null; + sort_order: string | null; + sort_ascending: string | null; + show_subcategory_list: boolean; + num_featured_topics: number; + default_view: string | null; + subcategory_list_style: string; + default_top_period: string; + default_list_filter: string; + minimum_required_tags: number; + navigate_to_first_post_after_read: boolean; + topics_day: number; + topics_week: number; + topics_month: number; + topics_year: number; + topics_all_time: number; + is_uncategorized?: boolean; + subcategory_ids: Array; + subcategory_list?: Array | null; + uploaded_logo: string | null; + uploaded_logo_dark: string | null; + uploaded_background: string | null; + uploaded_background_dark: string | null; + }>; + }; + }; +}; + +export type ListCategoriesResponse = + ListCategoriesResponses[keyof ListCategoriesResponses]; export type CreateCategoryData = { - body?: { - name: string; - color?: string; - text_color?: string; - parent_category_id?: number; - allow_badges?: boolean; - slug?: string; - topic_featured_links_allowed?: boolean; - permissions?: { - everyone?: number; - staff?: number; - [key: string]: unknown | number | undefined; - }; - search_priority?: number; - form_template_ids?: Array; - }; - path?: never; - query?: never; - url: '/categories.json'; + body?: { + name: string; + color?: string; + text_color?: string; + parent_category_id?: number; + allow_badges?: boolean; + slug?: string; + topic_featured_links_allowed?: boolean; + permissions?: { + everyone?: number; + staff?: number; + [key: string]: unknown | number | undefined; + }; + search_priority?: number; + form_template_ids?: Array; + }; + path?: never; + query?: never; + url: '/categories.json'; }; export type CreateCategoryResponses = { - /** - * success response - */ - 200: { - category: { - id: number; - name: string; - color: string; - text_color: string; - slug: string; - topic_count: number; - post_count: number; - position: number; - description: string | null; - description_text: string | null; - description_excerpt: string | null; - topic_url: string | null; - read_restricted: boolean; - permission: number | null; - notification_level: number; - can_edit: boolean; - topic_template: string | null; - form_template_ids?: Array; - has_children: boolean | null; - subcategory_count: number | null; - sort_order: string | null; - sort_ascending: string | null; - show_subcategory_list: boolean; - num_featured_topics: number; - default_view: string | null; - subcategory_list_style: string; - default_top_period: string; - default_list_filter: string; - minimum_required_tags: number; - navigate_to_first_post_after_read: boolean; - custom_fields: { - [key: string]: never; - }; - allowed_tags?: Array; - allowed_tag_groups?: Array; - allow_global_tags?: boolean; - required_tag_groups: Array<{ - name: string; - min_count: number; - }>; - category_setting?: unknown; - read_only_banner: string | null; - available_groups: Array; - auto_close_hours: string | null; - auto_close_based_on_last_post: boolean; - allow_unlimited_owner_edits_on_first_post: boolean; - default_slow_mode_seconds: string | null; - group_permissions: Array<{ - permission_type: number; - group_name: string; - }>; - email_in: string | null; - email_in_allow_strangers: boolean; - mailinglist_mirror: boolean; - all_topics_wiki: boolean; - can_delete: boolean; - allow_badges: boolean; - topic_featured_link_allowed: boolean; - search_priority: number; - uploaded_logo: string | null; - uploaded_logo_dark: string | null; - uploaded_background: string | null; - uploaded_background_dark: string | null; - }; - }; -}; - -export type CreateCategoryResponse = CreateCategoryResponses[keyof CreateCategoryResponses]; + /** + * success response + */ + 200: { + category: { + id: number; + name: string; + color: string; + text_color: string; + slug: string; + topic_count: number; + post_count: number; + position: number; + description: string | null; + description_text: string | null; + description_excerpt: string | null; + topic_url: string | null; + read_restricted: boolean; + permission: number | null; + notification_level: number; + can_edit: boolean; + topic_template: string | null; + form_template_ids?: Array; + has_children: boolean | null; + subcategory_count: number | null; + sort_order: string | null; + sort_ascending: string | null; + show_subcategory_list: boolean; + num_featured_topics: number; + default_view: string | null; + subcategory_list_style: string; + default_top_period: string; + default_list_filter: string; + minimum_required_tags: number; + navigate_to_first_post_after_read: boolean; + custom_fields: { + [key: string]: never; + }; + allowed_tags?: Array; + allowed_tag_groups?: Array; + allow_global_tags?: boolean; + required_tag_groups: Array<{ + name: string; + min_count: number; + }>; + category_setting?: unknown; + read_only_banner: string | null; + available_groups: Array; + auto_close_hours: string | null; + auto_close_based_on_last_post: boolean; + allow_unlimited_owner_edits_on_first_post: boolean; + default_slow_mode_seconds: string | null; + group_permissions: Array<{ + permission_type: number; + group_name: string; + }>; + email_in: string | null; + email_in_allow_strangers: boolean; + mailinglist_mirror: boolean; + all_topics_wiki: boolean; + can_delete: boolean; + allow_badges: boolean; + topic_featured_link_allowed: boolean; + search_priority: number; + uploaded_logo: string | null; + uploaded_logo_dark: string | null; + uploaded_background: string | null; + uploaded_background_dark: string | null; + }; + }; +}; + +export type CreateCategoryResponse = + CreateCategoryResponses[keyof CreateCategoryResponses]; export type UpdateCategoryData = { - body?: { - name: string; - color?: string; - text_color?: string; - parent_category_id?: number; - allow_badges?: boolean; - slug?: string; - topic_featured_links_allowed?: boolean; - permissions?: { - everyone?: number; - staff?: number; - [key: string]: unknown | number | undefined; - }; - search_priority?: number; - form_template_ids?: Array; - }; - path: { - id: number; - }; - query?: never; - url: '/categories/{id}.json'; + body?: { + name: string; + color?: string; + text_color?: string; + parent_category_id?: number; + allow_badges?: boolean; + slug?: string; + topic_featured_links_allowed?: boolean; + permissions?: { + everyone?: number; + staff?: number; + [key: string]: unknown | number | undefined; + }; + search_priority?: number; + form_template_ids?: Array; + }; + path: { + id: number; + }; + query?: never; + url: '/categories/{id}.json'; }; export type UpdateCategoryResponses = { - /** - * success response - */ - 200: { - success: string; - category: { - id: number; - name: string; - color: string; - text_color: string; - slug: string; - topic_count: number; - post_count: number; - position: number; - description: string | null; - description_text: string | null; - description_excerpt: string | null; - topic_url: string | null; - read_restricted: boolean; - permission: number | null; - notification_level: number; - can_edit: boolean; - topic_template: string | null; - form_template_ids: Array; - has_children: boolean | null; - subcategory_count: number | null; - sort_order: string | null; - sort_ascending: string | null; - show_subcategory_list: boolean; - num_featured_topics: number; - default_view: string | null; - subcategory_list_style: string; - default_top_period: string; - default_list_filter: string; - minimum_required_tags: number; - navigate_to_first_post_after_read: boolean; - custom_fields: { - [key: string]: never; - }; - allowed_tags?: Array; - allowed_tag_groups?: Array; - allow_global_tags?: boolean; - required_tag_groups: Array<{ - name: string; - min_count: number; - }>; - category_setting?: unknown; - read_only_banner: string | null; - available_groups: Array; - auto_close_hours: string | null; - auto_close_based_on_last_post: boolean; - allow_unlimited_owner_edits_on_first_post: boolean; - default_slow_mode_seconds: string | null; - group_permissions: Array<{ - permission_type: number; - group_name: string; - }>; - email_in: string | null; - email_in_allow_strangers: boolean; - mailinglist_mirror: boolean; - all_topics_wiki: boolean; - can_delete: boolean; - allow_badges: boolean; - topic_featured_link_allowed: boolean; - search_priority: number; - uploaded_logo: string | null; - uploaded_logo_dark: string | null; - uploaded_background: string | null; - uploaded_background_dark: string | null; - }; - }; -}; - -export type UpdateCategoryResponse = UpdateCategoryResponses[keyof UpdateCategoryResponses]; + /** + * success response + */ + 200: { + success: string; + category: { + id: number; + name: string; + color: string; + text_color: string; + slug: string; + topic_count: number; + post_count: number; + position: number; + description: string | null; + description_text: string | null; + description_excerpt: string | null; + topic_url: string | null; + read_restricted: boolean; + permission: number | null; + notification_level: number; + can_edit: boolean; + topic_template: string | null; + form_template_ids: Array; + has_children: boolean | null; + subcategory_count: number | null; + sort_order: string | null; + sort_ascending: string | null; + show_subcategory_list: boolean; + num_featured_topics: number; + default_view: string | null; + subcategory_list_style: string; + default_top_period: string; + default_list_filter: string; + minimum_required_tags: number; + navigate_to_first_post_after_read: boolean; + custom_fields: { + [key: string]: never; + }; + allowed_tags?: Array; + allowed_tag_groups?: Array; + allow_global_tags?: boolean; + required_tag_groups: Array<{ + name: string; + min_count: number; + }>; + category_setting?: unknown; + read_only_banner: string | null; + available_groups: Array; + auto_close_hours: string | null; + auto_close_based_on_last_post: boolean; + allow_unlimited_owner_edits_on_first_post: boolean; + default_slow_mode_seconds: string | null; + group_permissions: Array<{ + permission_type: number; + group_name: string; + }>; + email_in: string | null; + email_in_allow_strangers: boolean; + mailinglist_mirror: boolean; + all_topics_wiki: boolean; + can_delete: boolean; + allow_badges: boolean; + topic_featured_link_allowed: boolean; + search_priority: number; + uploaded_logo: string | null; + uploaded_logo_dark: string | null; + uploaded_background: string | null; + uploaded_background_dark: string | null; + }; + }; +}; + +export type UpdateCategoryResponse = + UpdateCategoryResponses[keyof UpdateCategoryResponses]; export type ListCategoryTopicsData = { - body?: never; - path: { - slug: string; - id: number; - }; - query?: never; - url: '/c/{slug}/{id}.json'; + body?: never; + path: { + slug: string; + id: number; + }; + query?: never; + url: '/c/{slug}/{id}.json'; }; export type ListCategoryTopicsResponses = { - /** - * success response - */ - 200: { - users?: Array<{ - id: number; - username: string; - name: string; - avatar_template: string; + /** + * success response + */ + 200: { + users?: Array<{ + id: number; + username: string; + name: string; + avatar_template: string; + }>; + primary_groups?: Array; + topic_list: { + can_create_topic: boolean; + per_page: number; + top_tags?: Array; + topics: Array<{ + id: number; + title: string; + fancy_title: string; + slug: string; + posts_count: number; + reply_count: number; + highest_post_number: number; + image_url: string | null; + created_at: string; + last_posted_at: string; + bumped: boolean; + bumped_at: string; + archetype: string; + unseen: boolean; + pinned: boolean; + unpinned: string | null; + excerpt: string; + visible: boolean; + closed: boolean; + archived: boolean; + bookmarked: string | null; + liked: string | null; + views: number; + like_count: number; + has_summary: boolean; + last_poster_username: string; + category_id: number; + pinned_globally: boolean; + featured_link: string | null; + posters: Array<{ + extras: string; + description: string; + user_id: number; + primary_group_id: number | null; }>; - primary_groups?: Array; - topic_list: { - can_create_topic: boolean; - per_page: number; - top_tags?: Array; - topics: Array<{ - id: number; - title: string; - fancy_title: string; - slug: string; - posts_count: number; - reply_count: number; - highest_post_number: number; - image_url: string | null; - created_at: string; - last_posted_at: string; - bumped: boolean; - bumped_at: string; - archetype: string; - unseen: boolean; - pinned: boolean; - unpinned: string | null; - excerpt: string; - visible: boolean; - closed: boolean; - archived: boolean; - bookmarked: string | null; - liked: string | null; - views: number; - like_count: number; - has_summary: boolean; - last_poster_username: string; - category_id: number; - pinned_globally: boolean; - featured_link: string | null; - posters: Array<{ - extras: string; - description: string; - user_id: number; - primary_group_id: number | null; - }>; - }>; - }; + }>; }; + }; }; -export type ListCategoryTopicsResponse = ListCategoryTopicsResponses[keyof ListCategoryTopicsResponses]; +export type ListCategoryTopicsResponse = + ListCategoryTopicsResponses[keyof ListCategoryTopicsResponses]; export type GetCategoryData = { - body?: never; - path: { - id: number; - }; - query?: never; - url: '/c/{id}/show.json'; + body?: never; + path: { + id: number; + }; + query?: never; + url: '/c/{id}/show.json'; }; export type GetCategoryResponses = { - /** - * response - */ - 200: { - category: { - id: number; - name: string; - color: string; - text_color: string; - slug: string; - topic_count: number; - post_count: number; - position: number; - description: string | null; - description_text: string | null; - description_excerpt: string | null; - topic_url: string | null; - read_restricted: boolean; - permission: number | null; - notification_level: number; - can_edit: boolean; - topic_template: string | null; - form_template_ids?: Array; - has_children: boolean | null; - subcategory_count: number | null; - sort_order: string | null; - sort_ascending: string | null; - show_subcategory_list: boolean; - num_featured_topics: number; - default_view: string | null; - subcategory_list_style: string; - default_top_period: string; - default_list_filter: string; - minimum_required_tags: number; - navigate_to_first_post_after_read: boolean; - custom_fields: { - [key: string]: never; - }; - allowed_tags?: Array; - allowed_tag_groups?: Array; - allow_global_tags?: boolean; - required_tag_groups: Array<{ - name: string; - min_count: number; - }>; - category_setting?: unknown; - read_only_banner: string | null; - available_groups: Array; - auto_close_hours: string | null; - auto_close_based_on_last_post: boolean; - allow_unlimited_owner_edits_on_first_post: boolean; - default_slow_mode_seconds: string | null; - group_permissions: Array<{ - permission_type: number; - group_name: string; - }>; - email_in: string | null; - email_in_allow_strangers: boolean; - mailinglist_mirror: boolean; - all_topics_wiki: boolean; - can_delete: boolean; - allow_badges: boolean; - topic_featured_link_allowed: boolean; - search_priority: number; - uploaded_logo: string | null; - uploaded_logo_dark: string | null; - uploaded_background: string | null; - uploaded_background_dark: string | null; - }; - }; -}; - -export type GetCategoryResponse = GetCategoryResponses[keyof GetCategoryResponses]; + /** + * response + */ + 200: { + category: { + id: number; + name: string; + color: string; + text_color: string; + slug: string; + topic_count: number; + post_count: number; + position: number; + description: string | null; + description_text: string | null; + description_excerpt: string | null; + topic_url: string | null; + read_restricted: boolean; + permission: number | null; + notification_level: number; + can_edit: boolean; + topic_template: string | null; + form_template_ids?: Array; + has_children: boolean | null; + subcategory_count: number | null; + sort_order: string | null; + sort_ascending: string | null; + show_subcategory_list: boolean; + num_featured_topics: number; + default_view: string | null; + subcategory_list_style: string; + default_top_period: string; + default_list_filter: string; + minimum_required_tags: number; + navigate_to_first_post_after_read: boolean; + custom_fields: { + [key: string]: never; + }; + allowed_tags?: Array; + allowed_tag_groups?: Array; + allow_global_tags?: boolean; + required_tag_groups: Array<{ + name: string; + min_count: number; + }>; + category_setting?: unknown; + read_only_banner: string | null; + available_groups: Array; + auto_close_hours: string | null; + auto_close_based_on_last_post: boolean; + allow_unlimited_owner_edits_on_first_post: boolean; + default_slow_mode_seconds: string | null; + group_permissions: Array<{ + permission_type: number; + group_name: string; + }>; + email_in: string | null; + email_in_allow_strangers: boolean; + mailinglist_mirror: boolean; + all_topics_wiki: boolean; + can_delete: boolean; + allow_badges: boolean; + topic_featured_link_allowed: boolean; + search_priority: number; + uploaded_logo: string | null; + uploaded_logo_dark: string | null; + uploaded_background: string | null; + uploaded_background_dark: string | null; + }; + }; +}; + +export type GetCategoryResponse = + GetCategoryResponses[keyof GetCategoryResponses]; export type CreateGroupData = { - body?: { - group: { - name: string; - full_name?: string; - /** - * About Group - */ - bio_raw?: string; - /** - * comma,separated - */ - usernames?: string; - /** - * comma,separated - */ - owner_usernames?: string; - /** - * pipe|separated - */ - automatic_membership_email_domains?: string; - visibility_level?: number; - primary_group?: boolean; - flair_icon?: string; - flair_upload_id?: number; - flair_bg_color?: string; - public_admission?: boolean; - public_exit?: boolean; - default_notification_level?: number; - muted_category_ids?: Array; - regular_category_ids?: Array; - watching_category_ids?: Array; - tracking_category_ids?: Array; - watching_first_post_category_ids?: Array; - }; - }; - path?: never; - query?: never; - url: '/admin/groups.json'; + body?: { + group: { + name: string; + full_name?: string; + /** + * About Group + */ + bio_raw?: string; + /** + * comma,separated + */ + usernames?: string; + /** + * comma,separated + */ + owner_usernames?: string; + /** + * pipe|separated + */ + automatic_membership_email_domains?: string; + visibility_level?: number; + primary_group?: boolean; + flair_icon?: string; + flair_upload_id?: number; + flair_bg_color?: string; + public_admission?: boolean; + public_exit?: boolean; + default_notification_level?: number; + muted_category_ids?: Array; + regular_category_ids?: Array; + watching_category_ids?: Array; + tracking_category_ids?: Array; + watching_first_post_category_ids?: Array; + }; + }; + path?: never; + query?: never; + url: '/admin/groups.json'; }; export type CreateGroupResponses = { - /** - * group created - */ - 200: { - basic_group: { - id: number; - automatic: boolean; - name: string; - user_count: number; - mentionable_level: number; - messageable_level: number; - visibility_level: number; - primary_group: boolean; - title: string | null; - grant_trust_level: string | null; - incoming_email: string | null; - has_messages: boolean; - flair_url: string | null; - flair_bg_color: string | null; - flair_color: string | null; - bio_raw: string | null; - bio_cooked: string | null; - bio_excerpt: string | null; - public_admission: boolean; - public_exit: boolean; - allow_membership_requests: boolean; - full_name: string | null; - default_notification_level: number; - membership_request_template: string | null; - members_visibility_level: number; - can_see_members: boolean; - can_admin_group: boolean; - can_edit_group?: boolean; - publish_read_state: boolean; - }; - }; -}; - -export type CreateGroupResponse = CreateGroupResponses[keyof CreateGroupResponses]; + /** + * group created + */ + 200: { + basic_group: { + id: number; + automatic: boolean; + name: string; + user_count: number; + mentionable_level: number; + messageable_level: number; + visibility_level: number; + primary_group: boolean; + title: string | null; + grant_trust_level: string | null; + incoming_email: string | null; + has_messages: boolean; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + bio_raw: string | null; + bio_cooked: string | null; + bio_excerpt: string | null; + public_admission: boolean; + public_exit: boolean; + allow_membership_requests: boolean; + full_name: string | null; + default_notification_level: number; + membership_request_template: string | null; + members_visibility_level: number; + can_see_members: boolean; + can_admin_group: boolean; + can_edit_group?: boolean; + publish_read_state: boolean; + }; + }; +}; + +export type CreateGroupResponse = + CreateGroupResponses[keyof CreateGroupResponses]; export type DeleteGroupData = { - body?: never; - path: { - id: number; - }; - query?: never; - url: '/admin/groups/{id}.json'; + body?: never; + path: { + id: number; + }; + query?: never; + url: '/admin/groups/{id}.json'; }; export type DeleteGroupResponses = { - /** - * response - */ - 200: { - success: string; - }; + /** + * response + */ + 200: { + success: string; + }; }; -export type DeleteGroupResponse = DeleteGroupResponses[keyof DeleteGroupResponses]; +export type DeleteGroupResponse = + DeleteGroupResponses[keyof DeleteGroupResponses]; export type GetGroupData = { - body?: never; - path: { - /** - * Use group name instead of id - */ - id: string; - }; - query?: never; - url: '/groups/{id}.json'; + body?: never; + path: { + /** + * Use group name instead of id + */ + id: string; + }; + query?: never; + url: '/groups/{id}.json'; }; export type GetGroupResponses = { - /** - * success response - */ - 200: { - group: { - id: number; - automatic: boolean; - name: string; - user_count: number; - mentionable_level: number; - messageable_level: number; - visibility_level: number; - primary_group: boolean; - title: string | null; - grant_trust_level: string | null; - incoming_email: string | null; - has_messages: boolean; - flair_url: string | null; - flair_bg_color: string | null; - flair_color: string | null; - bio_raw: string | null; - bio_cooked: string | null; - bio_excerpt: string | null; - public_admission: boolean; - public_exit: boolean; - allow_membership_requests: boolean; - full_name: string | null; - default_notification_level: number; - membership_request_template: string | null; - is_group_user: boolean; - members_visibility_level: number; - can_see_members: boolean; - can_admin_group: boolean; - can_edit_group?: boolean; - publish_read_state: boolean; - is_group_owner_display: boolean; - mentionable: boolean; - messageable: boolean; - automatic_membership_email_domains: string | null; - smtp_updated_at?: string | null; - smtp_updated_by?: { - [key: string]: unknown; - } | null; - smtp_enabled?: boolean; - smtp_server: string | null; - smtp_port: string | null; - smtp_ssl_mode: number | null; - imap_enabled?: boolean; - imap_updated_at?: string | null; - imap_updated_by?: { - [key: string]: unknown; - } | null; - imap_server: string | null; - imap_port: string | null; - imap_ssl: string | null; - imap_mailbox_name: string; - imap_mailboxes: Array; - email_username: string | null; - email_from_alias?: string | null; - email_password: string | null; - imap_last_error: string | null; - imap_old_emails: string | null; - imap_new_emails: string | null; - message_count: number; - allow_unknown_sender_topic_replies: boolean; - associated_group_ids?: Array; - watching_category_ids: Array; - tracking_category_ids: Array; - watching_first_post_category_ids: Array; - regular_category_ids: Array; - muted_category_ids: Array; - watching_tags?: Array; - watching_first_post_tags?: Array; - tracking_tags?: Array; - regular_tags?: Array; - muted_tags?: Array; - }; - extras: { - visible_group_names: Array; - }; - }; + /** + * success response + */ + 200: { + group: { + id: number; + automatic: boolean; + name: string; + user_count: number; + mentionable_level: number; + messageable_level: number; + visibility_level: number; + primary_group: boolean; + title: string | null; + grant_trust_level: string | null; + incoming_email: string | null; + has_messages: boolean; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + bio_raw: string | null; + bio_cooked: string | null; + bio_excerpt: string | null; + public_admission: boolean; + public_exit: boolean; + allow_membership_requests: boolean; + full_name: string | null; + default_notification_level: number; + membership_request_template: string | null; + is_group_user: boolean; + members_visibility_level: number; + can_see_members: boolean; + can_admin_group: boolean; + can_edit_group?: boolean; + publish_read_state: boolean; + is_group_owner_display: boolean; + mentionable: boolean; + messageable: boolean; + automatic_membership_email_domains: string | null; + smtp_updated_at?: string | null; + smtp_updated_by?: { + [key: string]: unknown; + } | null; + smtp_enabled?: boolean; + smtp_server: string | null; + smtp_port: string | null; + smtp_ssl_mode: number | null; + imap_enabled?: boolean; + imap_updated_at?: string | null; + imap_updated_by?: { + [key: string]: unknown; + } | null; + imap_server: string | null; + imap_port: string | null; + imap_ssl: string | null; + imap_mailbox_name: string; + imap_mailboxes: Array; + email_username: string | null; + email_from_alias?: string | null; + email_password: string | null; + imap_last_error: string | null; + imap_old_emails: string | null; + imap_new_emails: string | null; + message_count: number; + allow_unknown_sender_topic_replies: boolean; + associated_group_ids?: Array; + watching_category_ids: Array; + tracking_category_ids: Array; + watching_first_post_category_ids: Array; + regular_category_ids: Array; + muted_category_ids: Array; + watching_tags?: Array; + watching_first_post_tags?: Array; + tracking_tags?: Array; + regular_tags?: Array; + muted_tags?: Array; + }; + extras: { + visible_group_names: Array; + }; + }; }; export type GetGroupResponse = GetGroupResponses[keyof GetGroupResponses]; export type UpdateGroupData = { - body?: { - group: { - name: string; - full_name?: string; - /** - * About Group - */ - bio_raw?: string; - /** - * comma,separated - */ - usernames?: string; - /** - * comma,separated - */ - owner_usernames?: string; - /** - * pipe|separated - */ - automatic_membership_email_domains?: string; - visibility_level?: number; - primary_group?: boolean; - flair_icon?: string; - flair_upload_id?: number; - flair_bg_color?: string; - public_admission?: boolean; - public_exit?: boolean; - default_notification_level?: number; - muted_category_ids?: Array; - regular_category_ids?: Array; - watching_category_ids?: Array; - tracking_category_ids?: Array; - watching_first_post_category_ids?: Array; - }; - }; - path: { - id: number; - }; - query?: never; - url: '/groups/{id}.json'; + body?: { + group: { + name: string; + full_name?: string; + /** + * About Group + */ + bio_raw?: string; + /** + * comma,separated + */ + usernames?: string; + /** + * comma,separated + */ + owner_usernames?: string; + /** + * pipe|separated + */ + automatic_membership_email_domains?: string; + visibility_level?: number; + primary_group?: boolean; + flair_icon?: string; + flair_upload_id?: number; + flair_bg_color?: string; + public_admission?: boolean; + public_exit?: boolean; + default_notification_level?: number; + muted_category_ids?: Array; + regular_category_ids?: Array; + watching_category_ids?: Array; + tracking_category_ids?: Array; + watching_first_post_category_ids?: Array; + }; + }; + path: { + id: number; + }; + query?: never; + url: '/groups/{id}.json'; }; export type UpdateGroupResponses = { - /** - * success response - */ - 200: { - success?: string; - }; + /** + * success response + */ + 200: { + success?: string; + }; }; -export type UpdateGroupResponse = UpdateGroupResponses[keyof UpdateGroupResponses]; +export type UpdateGroupResponse = + UpdateGroupResponses[keyof UpdateGroupResponses]; export type RemoveGroupMembersData = { - body?: { - /** - * comma separated list - */ - usernames?: string; - }; - path: { - id: number; - }; - query?: never; - url: '/groups/{id}/members.json'; + body?: { + /** + * comma separated list + */ + usernames?: string; + }; + path: { + id: number; + }; + query?: never; + url: '/groups/{id}/members.json'; }; export type RemoveGroupMembersResponses = { - /** - * success response - */ - 200: { - success: string; - usernames: Array; - skipped_usernames: Array; - }; + /** + * success response + */ + 200: { + success: string; + usernames: Array; + skipped_usernames: Array; + }; }; -export type RemoveGroupMembersResponse = RemoveGroupMembersResponses[keyof RemoveGroupMembersResponses]; +export type RemoveGroupMembersResponse = + RemoveGroupMembersResponses[keyof RemoveGroupMembersResponses]; export type ListGroupMembersData = { - body?: never; - path: { - /** - * Use group name instead of id - */ - id: string; - }; - query?: never; - url: '/groups/{id}/members.json'; + body?: never; + path: { + /** + * Use group name instead of id + */ + id: string; + }; + query?: never; + url: '/groups/{id}/members.json'; }; export type ListGroupMembersResponses = { - /** - * success response - */ - 200: { - members: Array<{ - id: number; - username: string; - name: string | null; - avatar_template: string; - title: string | null; - last_posted_at: string; - last_seen_at: string; - added_at: string; - timezone: string; - }>; - owners: Array<{ - id: number; - username: string; - name: string | null; - avatar_template: string; - title: string | null; - last_posted_at: string; - last_seen_at: string; - added_at: string; - timezone: string; - }>; - meta: { - total: number; - limit: number; - offset: number; - }; + /** + * success response + */ + 200: { + members: Array<{ + id: number; + username: string; + name: string | null; + avatar_template: string; + title: string | null; + last_posted_at: string; + last_seen_at: string; + added_at: string; + timezone: string; + }>; + owners: Array<{ + id: number; + username: string; + name: string | null; + avatar_template: string; + title: string | null; + last_posted_at: string; + last_seen_at: string; + added_at: string; + timezone: string; + }>; + meta: { + total: number; + limit: number; + offset: number; }; + }; }; -export type ListGroupMembersResponse = ListGroupMembersResponses[keyof ListGroupMembersResponses]; +export type ListGroupMembersResponse = + ListGroupMembersResponses[keyof ListGroupMembersResponses]; export type AddGroupMembersData = { - body?: { - /** - * comma separated list - */ - usernames?: string; - }; - path: { - id: number; - }; - query?: never; - url: '/groups/{id}/members.json'; + body?: { + /** + * comma separated list + */ + usernames?: string; + }; + path: { + id: number; + }; + query?: never; + url: '/groups/{id}/members.json'; }; export type AddGroupMembersResponses = { - /** - * success response - */ - 200: { - success: string; - usernames: Array; - emails: Array; - }; + /** + * success response + */ + 200: { + success: string; + usernames: Array; + emails: Array; + }; }; -export type AddGroupMembersResponse = AddGroupMembersResponses[keyof AddGroupMembersResponses]; +export type AddGroupMembersResponse = + AddGroupMembersResponses[keyof AddGroupMembersResponses]; export type ListGroupsData = { - body?: never; - path?: never; - query?: never; - url: '/groups.json'; + body?: never; + path?: never; + query?: never; + url: '/groups.json'; }; export type ListGroupsResponses = { - /** - * response - */ - 200: { - groups: Array<{ - id: number; - automatic: boolean; - name: string; - display_name: string; - user_count: number; - mentionable_level: number; - messageable_level: number; - visibility_level: number; - primary_group: boolean; - title: string | null; - grant_trust_level: string | null; - incoming_email: string | null; - has_messages: boolean; - flair_url: string | null; - flair_bg_color: string | null; - flair_color: string | null; - bio_raw: string | null; - bio_cooked: string | null; - bio_excerpt: string | null; - public_admission: boolean; - public_exit: boolean; - allow_membership_requests: boolean; - full_name: string | null; - default_notification_level: number; - membership_request_template: string | null; - is_group_user?: boolean; - is_group_owner?: boolean; - members_visibility_level: number; - can_see_members: boolean; - can_admin_group: boolean; - can_edit_group?: boolean; - publish_read_state: boolean; - }>; - extras: { - type_filters: Array; - }; - total_rows_groups: number; - load_more_groups: string; + /** + * response + */ + 200: { + groups: Array<{ + id: number; + automatic: boolean; + name: string; + display_name: string; + user_count: number; + mentionable_level: number; + messageable_level: number; + visibility_level: number; + primary_group: boolean; + title: string | null; + grant_trust_level: string | null; + incoming_email: string | null; + has_messages: boolean; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + bio_raw: string | null; + bio_cooked: string | null; + bio_excerpt: string | null; + public_admission: boolean; + public_exit: boolean; + allow_membership_requests: boolean; + full_name: string | null; + default_notification_level: number; + membership_request_template: string | null; + is_group_user?: boolean; + is_group_owner?: boolean; + members_visibility_level: number; + can_see_members: boolean; + can_admin_group: boolean; + can_edit_group?: boolean; + publish_read_state: boolean; + }>; + extras: { + type_filters: Array; }; + total_rows_groups: number; + load_more_groups: string; + }; }; export type ListGroupsResponse = ListGroupsResponses[keyof ListGroupsResponses]; export type CreateInviteData = { - body?: { - /** - * required for email invites only - */ - email?: string; - skip_email?: boolean; - /** - * optional, for email invites - */ - custom_message?: string; - /** - * optional, for link invites - */ - max_redemptions_allowed?: number; - topic_id?: number; - /** - * Optional, either this or `group_names`. Comma separated - * list for multiple ids. - */ - group_ids?: string; - /** - * Optional, either this or `group_ids`. Comma separated - * list for multiple names. - */ - group_names?: string; - /** - * optional, if not supplied, the invite_expiry_days site - * setting is used - */ - expires_at?: string; - }; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path?: never; - query?: never; - url: '/invites.json'; -}; - -export type CreateInviteResponses = { + body?: { /** - * success response + * required for email invites only */ - 200: { - id?: number; - link?: string; - email?: string; - emailed?: boolean; - custom_message?: string | null; - topics?: Array; - groups?: Array; - created_at?: string; - updated_at?: string; - expires_at?: string; - expired?: boolean; - }; + email?: string; + skip_email?: boolean; + /** + * optional, for email invites + */ + custom_message?: string; + /** + * optional, for link invites + */ + max_redemptions_allowed?: number; + topic_id?: number; + /** + * Optional, either this or `group_names`. Comma separated + * list for multiple ids. + */ + group_ids?: string; + /** + * Optional, either this or `group_ids`. Comma separated + * list for multiple names. + */ + group_names?: string; + /** + * optional, if not supplied, the invite_expiry_days site + * setting is used + */ + expires_at?: string; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path?: never; + query?: never; + url: '/invites.json'; }; -export type CreateInviteResponse = CreateInviteResponses[keyof CreateInviteResponses]; +export type CreateInviteResponses = { + /** + * success response + */ + 200: { + id?: number; + link?: string; + email?: string; + emailed?: boolean; + custom_message?: string | null; + topics?: Array; + groups?: Array; + created_at?: string; + updated_at?: string; + expires_at?: string; + expired?: boolean; + }; +}; + +export type CreateInviteResponse = + CreateInviteResponses[keyof CreateInviteResponses]; export type CreateMultipleInvitesData = { - body?: { - /** - * pass 1 email per invite to be generated. other properties - * will be shared by each invite. - */ - email?: string; - skip_email?: boolean; - /** - * optional, for email invites - */ - custom_message?: string; - /** - * optional, for link invites - */ - max_redemptions_allowed?: number; - topic_id?: number; - /** - * Optional, either this or `group_names`. Comma separated - * list for multiple ids. - */ - group_ids?: string; - /** - * Optional, either this or `group_ids`. Comma separated - * list for multiple names. - */ - group_names?: string; - /** - * optional, if not supplied, the invite_expiry_days site - * setting is used - */ - expires_at?: string; - }; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path?: never; - query?: never; - url: '/invites/create-multiple.json'; + body?: { + /** + * pass 1 email per invite to be generated. other properties + * will be shared by each invite. + */ + email?: string; + skip_email?: boolean; + /** + * optional, for email invites + */ + custom_message?: string; + /** + * optional, for link invites + */ + max_redemptions_allowed?: number; + topic_id?: number; + /** + * Optional, either this or `group_names`. Comma separated + * list for multiple ids. + */ + group_ids?: string; + /** + * Optional, either this or `group_ids`. Comma separated + * list for multiple names. + */ + group_names?: string; + /** + * optional, if not supplied, the invite_expiry_days site + * setting is used + */ + expires_at?: string; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path?: never; + query?: never; + url: '/invites/create-multiple.json'; }; export type CreateMultipleInvitesResponses = { - /** - * success response - */ - 200: { - num_successfully_created_invitations?: number; - num_failed_invitations?: number; - failed_invitations?: Array; - successful_invitations?: Array; - }; + /** + * success response + */ + 200: { + num_successfully_created_invitations?: number; + num_failed_invitations?: number; + failed_invitations?: Array; + successful_invitations?: Array; + }; }; -export type CreateMultipleInvitesResponse = CreateMultipleInvitesResponses[keyof CreateMultipleInvitesResponses]; +export type CreateMultipleInvitesResponse = + CreateMultipleInvitesResponses[keyof CreateMultipleInvitesResponses]; export type GetNotificationsData = { - body?: never; - path?: never; - query?: never; - url: '/notifications.json'; + body?: never; + path?: never; + query?: never; + url: '/notifications.json'; }; export type GetNotificationsResponses = { - /** - * notifications - */ - 200: { - notifications?: Array<{ - id?: number; - user_id?: number; - notification_type?: number; - read?: boolean; - created_at?: string; - post_number?: number | null; - topic_id?: number | null; - slug?: string | null; - data?: { - badge_id?: number; - badge_name?: string; - badge_slug?: string; - badge_title?: boolean; - username?: string; - }; - }>; - total_rows_notifications?: number; - seen_notification_id?: number; - load_more_notifications?: string; - }; + /** + * notifications + */ + 200: { + notifications?: Array<{ + id?: number; + user_id?: number; + notification_type?: number; + read?: boolean; + created_at?: string; + post_number?: number | null; + topic_id?: number | null; + slug?: string | null; + data?: { + badge_id?: number; + badge_name?: string; + badge_slug?: string; + badge_title?: boolean; + username?: string; + }; + }>; + total_rows_notifications?: number; + seen_notification_id?: number; + load_more_notifications?: string; + }; }; -export type GetNotificationsResponse = GetNotificationsResponses[keyof GetNotificationsResponses]; +export type GetNotificationsResponse = + GetNotificationsResponses[keyof GetNotificationsResponses]; export type MarkNotificationsAsReadData = { - body?: { - /** - * (optional) Leave off to mark all notifications as - * read - */ - id?: number; - }; - path?: never; - query?: never; - url: '/notifications/mark-read.json'; + body?: { + /** + * (optional) Leave off to mark all notifications as + * read + */ + id?: number; + }; + path?: never; + query?: never; + url: '/notifications/mark-read.json'; }; export type MarkNotificationsAsReadResponses = { - /** - * notifications marked read - */ - 200: { - success?: string; - }; + /** + * notifications marked read + */ + 200: { + success?: string; + }; }; -export type MarkNotificationsAsReadResponse = MarkNotificationsAsReadResponses[keyof MarkNotificationsAsReadResponses]; +export type MarkNotificationsAsReadResponse = + MarkNotificationsAsReadResponses[keyof MarkNotificationsAsReadResponses]; export type ListPostsData = { - body?: never; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path?: never; - query?: { - /** - * Load posts with an id lower than this value. Useful for pagination. - */ - before?: string; - }; - url: '/posts.json'; + body?: never; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path?: never; + query?: { + /** + * Load posts with an id lower than this value. Useful for pagination. + */ + before?: string; + }; + url: '/posts.json'; }; export type ListPostsResponses = { - /** - * latest posts - */ - 200: { - latest_posts?: Array<{ - id?: number; - name?: string; - username?: string; - avatar_template?: string; - created_at?: string; - cooked?: string; - post_number?: number; - post_type?: number; - updated_at?: string; - reply_count?: number; - reply_to_post_number?: string | null; - quote_count?: number; - incoming_link_count?: number; - reads?: number; - readers_count?: number; - score?: number; - yours?: boolean; - topic_id?: number; - topic_slug?: string; - topic_title?: string; - topic_html_title?: string; - category_id?: number; - display_username?: string; - primary_group_name?: string | null; - flair_name?: string | null; - flair_url?: string | null; - flair_bg_color?: string | null; - flair_color?: string | null; - flair_group_id?: number | null; - version?: number; - can_edit?: boolean; - can_delete?: boolean; - can_recover?: boolean; - can_see_hidden_post?: boolean; - can_wiki?: boolean; - user_title?: string | null; - raw?: string; - actions_summary?: Array<{ - id?: number; - can_act?: boolean; - }>; - moderator?: boolean; - admin?: boolean; - staff?: boolean; - user_id?: number; - hidden?: boolean; - trust_level?: number; - deleted_at?: string | null; - user_deleted?: boolean; - edit_reason?: string | null; - can_view_edit_history?: boolean; - wiki?: boolean; - reviewable_id?: number | null; - reviewable_score_count?: number; - reviewable_score_pending_count?: number; - }>; - }; + /** + * latest posts + */ + 200: { + latest_posts?: Array<{ + id?: number; + name?: string; + username?: string; + avatar_template?: string; + created_at?: string; + cooked?: string; + post_number?: number; + post_type?: number; + updated_at?: string; + reply_count?: number; + reply_to_post_number?: string | null; + quote_count?: number; + incoming_link_count?: number; + reads?: number; + readers_count?: number; + score?: number; + yours?: boolean; + topic_id?: number; + topic_slug?: string; + topic_title?: string; + topic_html_title?: string; + category_id?: number; + display_username?: string; + primary_group_name?: string | null; + flair_name?: string | null; + flair_url?: string | null; + flair_bg_color?: string | null; + flair_color?: string | null; + flair_group_id?: number | null; + version?: number; + can_edit?: boolean; + can_delete?: boolean; + can_recover?: boolean; + can_see_hidden_post?: boolean; + can_wiki?: boolean; + user_title?: string | null; + raw?: string; + actions_summary?: Array<{ + id?: number; + can_act?: boolean; + }>; + moderator?: boolean; + admin?: boolean; + staff?: boolean; + user_id?: number; + hidden?: boolean; + trust_level?: number; + deleted_at?: string | null; + user_deleted?: boolean; + edit_reason?: string | null; + can_view_edit_history?: boolean; + wiki?: boolean; + reviewable_id?: number | null; + reviewable_score_count?: number; + reviewable_score_pending_count?: number; + }>; + }; }; export type ListPostsResponse = ListPostsResponses[keyof ListPostsResponses]; export type CreateTopicPostPmData = { - body?: { - /** - * Required if creating a new topic or new private message. - */ - title?: string; - raw: string; - /** - * Required if creating a new post. - */ - topic_id?: number; - /** - * Optional if creating a new topic, and ignored if creating - * a new post. - */ - category?: number; - /** - * Required for private message, comma separated. - */ - target_recipients?: string; - /** - * Deprecated. Use target_recipients instead. - * @deprecated - */ - target_usernames?: string; - /** - * Required for new private message. - */ - archetype?: string; - created_at?: string; - /** - * Optional, the post number to reply to inside a topic. - */ - reply_to_post_number?: number; - /** - * Provide a URL from a remote system to associate a forum - * topic with that URL, typically for using Discourse as a comments - * system for an external blog. - */ - embed_url?: string; - /** - * Provide an external_id from a remote system to associate - * a forum topic with that id. - */ - external_id?: string; - }; - path?: never; - query?: never; - url: '/posts.json'; -}; - -export type CreateTopicPostPmResponses = { + body?: { /** - * post created + * Required if creating a new topic or new private message. */ - 200: { - id: number; - name: string | null; - username: string; - avatar_template: string; - created_at: string; - raw?: string; - cooked: string; - post_number: number; - post_type: number; - posts_count: number; - updated_at: string; - reply_count: number; - reply_to_post_number: string | null; - quote_count: number; - incoming_link_count: number; - reads: number; - readers_count: number; - score: number; - yours: boolean; - topic_id: number; - topic_slug: string; - display_username: string | null; - primary_group_name: string | null; - flair_name: string | null; - flair_url: string | null; - flair_bg_color: string | null; - flair_color: string | null; - flair_group_id?: number | null; - badges_granted?: Array; - version: number; - can_edit: boolean; - can_delete: boolean; - can_recover: boolean; - can_see_hidden_post?: boolean; - can_wiki: boolean; - user_title: string | null; - bookmarked: boolean; - actions_summary: Array<{ - id: number; - can_act: boolean; - }>; - moderator: boolean; - admin: boolean; - staff: boolean; - user_id: number; - draft_sequence: number; - hidden: boolean; - trust_level: number; - deleted_at: string | null; - user_deleted: boolean; - edit_reason: string | null; - can_view_edit_history: boolean; - wiki: boolean; - reviewable_id: number | null; - reviewable_score_count: number; - reviewable_score_pending_count: number; - post_url: string; - mentioned_users?: Array; - }; + title?: string; + raw: string; + /** + * Required if creating a new post. + */ + topic_id?: number; + /** + * Optional if creating a new topic, and ignored if creating + * a new post. + */ + category?: number; + /** + * Required for private message, comma separated. + */ + target_recipients?: string; + /** + * Deprecated. Use target_recipients instead. + * @deprecated + */ + target_usernames?: string; + /** + * Required for new private message. + */ + archetype?: string; + created_at?: string; + /** + * Optional, the post number to reply to inside a topic. + */ + reply_to_post_number?: number; + /** + * Provide a URL from a remote system to associate a forum + * topic with that URL, typically for using Discourse as a comments + * system for an external blog. + */ + embed_url?: string; + /** + * Provide an external_id from a remote system to associate + * a forum topic with that id. + */ + external_id?: string; + }; + path?: never; + query?: never; + url: '/posts.json'; }; -export type CreateTopicPostPmResponse = CreateTopicPostPmResponses[keyof CreateTopicPostPmResponses]; +export type CreateTopicPostPmResponses = { + /** + * post created + */ + 200: { + id: number; + name: string | null; + username: string; + avatar_template: string; + created_at: string; + raw?: string; + cooked: string; + post_number: number; + post_type: number; + posts_count: number; + updated_at: string; + reply_count: number; + reply_to_post_number: string | null; + quote_count: number; + incoming_link_count: number; + reads: number; + readers_count: number; + score: number; + yours: boolean; + topic_id: number; + topic_slug: string; + display_username: string | null; + primary_group_name: string | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + flair_group_id?: number | null; + badges_granted?: Array; + version: number; + can_edit: boolean; + can_delete: boolean; + can_recover: boolean; + can_see_hidden_post?: boolean; + can_wiki: boolean; + user_title: string | null; + bookmarked: boolean; + actions_summary: Array<{ + id: number; + can_act: boolean; + }>; + moderator: boolean; + admin: boolean; + staff: boolean; + user_id: number; + draft_sequence: number; + hidden: boolean; + trust_level: number; + deleted_at: string | null; + user_deleted: boolean; + edit_reason: string | null; + can_view_edit_history: boolean; + wiki: boolean; + reviewable_id: number | null; + reviewable_score_count: number; + reviewable_score_pending_count: number; + post_url: string; + mentioned_users?: Array; + }; +}; + +export type CreateTopicPostPmResponse = + CreateTopicPostPmResponses[keyof CreateTopicPostPmResponses]; export type DeletePostData = { - body?: { - /** - * The `SiteSetting.can_permanently_delete` needs to be - * enabled first before this param can be used. Also this endpoint - * needs to be called first without `force_destroy` and then followed - * up with a second call 5 minutes later with `force_destroy` to - * permanently delete. - */ - force_destroy?: boolean; - }; - path: { - id: number; - }; - query?: never; - url: '/posts/{id}.json'; + body?: { + /** + * The `SiteSetting.can_permanently_delete` needs to be + * enabled first before this param can be used. Also this endpoint + * needs to be called first without `force_destroy` and then followed + * up with a second call 5 minutes later with `force_destroy` to + * permanently delete. + */ + force_destroy?: boolean; + }; + path: { + id: number; + }; + query?: never; + url: '/posts/{id}.json'; }; export type DeletePostResponses = { - /** - * success response - */ - 200: unknown; + /** + * success response + */ + 200: unknown; }; export type GetPostData = { - body?: never; - path: { - id: string; - }; - query?: never; - url: '/posts/{id}.json'; + body?: never; + path: { + id: string; + }; + query?: never; + url: '/posts/{id}.json'; }; export type GetPostResponses = { - /** - * single reviewable post - */ - 200: { - id: number; - username: string; - avatar_template: string; - created_at: string; - cooked: string; - post_number: number; - post_type: number; - posts_count: number; - updated_at: string; - reply_count: number; - reply_to_post_number: string | null; - quote_count: number; - incoming_link_count: number; - reads: number; - readers_count: number; - score: number; - yours: boolean; - topic_id: number; - topic_slug: string; - primary_group_name: string | null; - flair_name: string | null; - flair_url: string | null; - flair_bg_color: string | null; - flair_color: string | null; - flair_group_id?: number | null; - version: number; - can_edit: boolean; - can_delete: boolean; - can_recover: boolean; - can_see_hidden_post?: boolean; - can_wiki: boolean; - user_title: string | null; - bookmarked: boolean; - raw: string; - actions_summary: Array<{ - /** - * `2`: like, `3`, `4`, `6`, `7`, `8`: flag - */ - id: number; - count?: number; - acted?: boolean; - can_undo?: boolean; - can_act?: boolean; - }>; - moderator: boolean; - admin: boolean; - staff: boolean; - user_id: number; - hidden: boolean; - trust_level: number; - deleted_at: string | null; - user_deleted: boolean; - edit_reason: string | null; - can_view_edit_history: boolean; - wiki: boolean; - reviewable_id: number | null; - reviewable_score_count: number; - reviewable_score_pending_count: number; - post_url: string; - mentioned_users?: Array; - name?: string | null; - display_username?: string | null; - [key: string]: unknown | number | string | (string | null) | number | boolean | (string | null) | (string | null) | (string | null) | (string | null) | (string | null) | (number | null) | (string | null) | Array<{ - /** - * `2`: like, `3`, `4`, `6`, `7`, `8`: flag - */ - id: number; - count?: number; - acted?: boolean; - can_undo?: boolean; - can_act?: boolean; - }> | (string | null) | (string | null) | (number | null) | Array | (string | null) | (string | null) | undefined; - }; + /** + * single reviewable post + */ + 200: { + id: number; + username: string; + avatar_template: string; + created_at: string; + cooked: string; + post_number: number; + post_type: number; + posts_count: number; + updated_at: string; + reply_count: number; + reply_to_post_number: string | null; + quote_count: number; + incoming_link_count: number; + reads: number; + readers_count: number; + score: number; + yours: boolean; + topic_id: number; + topic_slug: string; + primary_group_name: string | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + flair_group_id?: number | null; + version: number; + can_edit: boolean; + can_delete: boolean; + can_recover: boolean; + can_see_hidden_post?: boolean; + can_wiki: boolean; + user_title: string | null; + bookmarked: boolean; + raw: string; + actions_summary: Array<{ + /** + * `2`: like, `3`, `4`, `6`, `7`, `8`: flag + */ + id: number; + count?: number; + acted?: boolean; + can_undo?: boolean; + can_act?: boolean; + }>; + moderator: boolean; + admin: boolean; + staff: boolean; + user_id: number; + hidden: boolean; + trust_level: number; + deleted_at: string | null; + user_deleted: boolean; + edit_reason: string | null; + can_view_edit_history: boolean; + wiki: boolean; + reviewable_id: number | null; + reviewable_score_count: number; + reviewable_score_pending_count: number; + post_url: string; + mentioned_users?: Array; + name?: string | null; + display_username?: string | null; + [key: string]: + | unknown + | number + | string + | (string | null) + | number + | boolean + | (string | null) + | (string | null) + | (string | null) + | (string | null) + | (string | null) + | (number | null) + | (string | null) + | Array<{ + /** + * `2`: like, `3`, `4`, `6`, `7`, `8`: flag + */ + id: number; + count?: number; + acted?: boolean; + can_undo?: boolean; + can_act?: boolean; + }> + | (string | null) + | (string | null) + | (number | null) + | Array + | (string | null) + | (string | null) + | undefined; + }; }; export type GetPostResponse = GetPostResponses[keyof GetPostResponses]; export type UpdatePostData = { - body?: { - post?: { - raw: string; - edit_reason?: string; - }; - }; - path: { - id: string; + body?: { + post?: { + raw: string; + edit_reason?: string; }; - query?: never; - url: '/posts/{id}.json'; + }; + path: { + id: string; + }; + query?: never; + url: '/posts/{id}.json'; }; export type UpdatePostResponses = { - /** - * post updated - */ - 200: { - post: { - id: number; - username: string; - avatar_template: string; - created_at: string; - cooked: string; - post_number: number; - post_type: number; - posts_count: number; - updated_at: string; - reply_count: number; - reply_to_post_number: string | null; - quote_count: number; - incoming_link_count: number; - reads: number; - readers_count: number; - score: number; - yours: boolean; - topic_id: number; - topic_slug: string; - primary_group_name: string | null; - flair_name: string | null; - flair_url: string | null; - flair_bg_color: string | null; - flair_color: string | null; - flair_group_id?: number | null; - badges_granted?: Array; - version: number; - can_edit: boolean; - can_delete: boolean; - can_recover: boolean; - can_see_hidden_post?: boolean; - can_wiki: boolean; - user_title: string | null; - bookmarked: boolean; - raw: string; - actions_summary: Array<{ - id: number; - can_act: boolean; - }>; - moderator: boolean; - admin: boolean; - staff: boolean; - user_id: number; - draft_sequence: number; - hidden: boolean; - trust_level: number; - deleted_at: string | null; - user_deleted: boolean; - edit_reason: string | null; - can_view_edit_history: boolean; - wiki: boolean; - reviewable_id: number | null; - reviewable_score_count: number; - reviewable_score_pending_count: number; - post_url: string; - mentioned_users?: Array; - name?: string | null; - display_username?: string | null; - }; - }; + /** + * post updated + */ + 200: { + post: { + id: number; + username: string; + avatar_template: string; + created_at: string; + cooked: string; + post_number: number; + post_type: number; + posts_count: number; + updated_at: string; + reply_count: number; + reply_to_post_number: string | null; + quote_count: number; + incoming_link_count: number; + reads: number; + readers_count: number; + score: number; + yours: boolean; + topic_id: number; + topic_slug: string; + primary_group_name: string | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + flair_group_id?: number | null; + badges_granted?: Array; + version: number; + can_edit: boolean; + can_delete: boolean; + can_recover: boolean; + can_see_hidden_post?: boolean; + can_wiki: boolean; + user_title: string | null; + bookmarked: boolean; + raw: string; + actions_summary: Array<{ + id: number; + can_act: boolean; + }>; + moderator: boolean; + admin: boolean; + staff: boolean; + user_id: number; + draft_sequence: number; + hidden: boolean; + trust_level: number; + deleted_at: string | null; + user_deleted: boolean; + edit_reason: string | null; + can_view_edit_history: boolean; + wiki: boolean; + reviewable_id: number | null; + reviewable_score_count: number; + reviewable_score_pending_count: number; + post_url: string; + mentioned_users?: Array; + name?: string | null; + display_username?: string | null; + }; + }; }; export type UpdatePostResponse = UpdatePostResponses[keyof UpdatePostResponses]; export type PostRepliesData = { - body?: never; - path: { - id: string; - }; - query?: never; - url: '/posts/{id}/replies.json'; + body?: never; + path: { + id: string; + }; + query?: never; + url: '/posts/{id}/replies.json'; }; export type PostRepliesResponses = { - /** - * post replies - */ - 200: Array<{ - id: number; - name: string | null; - username: string; - avatar_template: string; - created_at: string; - cooked: string; - post_number: number; - post_type: number; - posts_count: number; - updated_at: string; - reply_count: number; - reply_to_post_number: number; - quote_count: number; - incoming_link_count: number; - reads: number; - readers_count: number; - score: number; - yours: boolean; - topic_id: number; - topic_slug: string; - display_username: string | null; - primary_group_name: string | null; - flair_name: string | null; - flair_url: string | null; - flair_bg_color: string | null; - flair_color: string | null; - flair_group_id?: number | null; - version: number; - can_edit: boolean; - can_delete: boolean; - can_recover: boolean; - can_see_hidden_post: boolean; - can_wiki: boolean; - user_title: string | null; - reply_to_user: { - username: string; - name?: string; - avatar_template: string; - }; - bookmarked: boolean; - actions_summary: Array<{ - id: number; - can_act: boolean; - }>; - moderator: boolean; - admin: boolean; - staff: boolean; - user_id: number; - hidden: boolean; - trust_level: number; - deleted_at: string | null; - user_deleted: boolean; - edit_reason: string | null; - can_view_edit_history: boolean; - wiki: boolean; - reviewable_id: number | null; - reviewable_score_count: number; - reviewable_score_pending_count: number; - post_url: string; + /** + * post replies + */ + 200: Array<{ + id: number; + name: string | null; + username: string; + avatar_template: string; + created_at: string; + cooked: string; + post_number: number; + post_type: number; + posts_count: number; + updated_at: string; + reply_count: number; + reply_to_post_number: number; + quote_count: number; + incoming_link_count: number; + reads: number; + readers_count: number; + score: number; + yours: boolean; + topic_id: number; + topic_slug: string; + display_username: string | null; + primary_group_name: string | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + flair_group_id?: number | null; + version: number; + can_edit: boolean; + can_delete: boolean; + can_recover: boolean; + can_see_hidden_post: boolean; + can_wiki: boolean; + user_title: string | null; + reply_to_user: { + username: string; + name?: string; + avatar_template: string; + }; + bookmarked: boolean; + actions_summary: Array<{ + id: number; + can_act: boolean; }>; -}; - -export type PostRepliesResponse = PostRepliesResponses[keyof PostRepliesResponses]; + moderator: boolean; + admin: boolean; + staff: boolean; + user_id: number; + hidden: boolean; + trust_level: number; + deleted_at: string | null; + user_deleted: boolean; + edit_reason: string | null; + can_view_edit_history: boolean; + wiki: boolean; + reviewable_id: number | null; + reviewable_score_count: number; + reviewable_score_pending_count: number; + post_url: string; + }>; +}; + +export type PostRepliesResponse = + PostRepliesResponses[keyof PostRepliesResponses]; export type LockPostData = { - body?: { - locked: string; - }; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path: { - id: string; - }; - query?: never; - url: '/posts/{id}/locked.json'; + body?: { + locked: string; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/posts/{id}/locked.json'; }; export type LockPostResponses = { - /** - * post updated - */ - 200: { - locked?: boolean; - }; + /** + * post updated + */ + 200: { + locked?: boolean; + }; }; export type LockPostResponse = LockPostResponses[keyof LockPostResponses]; export type PerformPostActionData = { - body?: { - id: number; - post_action_type_id: number; - flag_topic?: boolean; - }; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path?: never; - query?: never; - url: '/post_actions.json'; + body?: { + id: number; + post_action_type_id: number; + flag_topic?: boolean; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path?: never; + query?: never; + url: '/post_actions.json'; }; export type PerformPostActionResponses = { - /** - * post updated - */ - 200: { - id?: number; - name?: string; - username?: string; - avatar_template?: string; - created_at?: string; - cooked?: string; - post_number?: number; - post_type?: number; - updated_at?: string; - reply_count?: number; - reply_to_post_number?: string | null; - quote_count?: number; - incoming_link_count?: number; - reads?: number; - readers_count?: number; - score?: number; - yours?: boolean; - topic_id?: number; - topic_slug?: string; - display_username?: string; - primary_group_name?: string | null; - flair_name?: string | null; - flair_url?: string | null; - flair_bg_color?: string | null; - flair_color?: string | null; - version?: number; - can_edit?: boolean; - can_delete?: boolean; - can_recover?: boolean; - can_wiki?: boolean; - user_title?: string | null; - actions_summary?: Array<{ - id?: number; - count?: number; - acted?: boolean; - can_undo?: boolean; - }>; - moderator?: boolean; - admin?: boolean; - staff?: boolean; - user_id?: number; - hidden?: boolean; - trust_level?: number; - deleted_at?: string | null; - user_deleted?: boolean; - edit_reason?: string | null; - can_view_edit_history?: boolean; - wiki?: boolean; - notice?: { - [key: string]: unknown; - }; - notice_created_by_user?: { - [key: string]: unknown; - } | null; - reviewable_id?: number | null; - reviewable_score_count?: number; - reviewable_score_pending_count?: number; - }; -}; - -export type PerformPostActionResponse = PerformPostActionResponses[keyof PerformPostActionResponses]; + /** + * post updated + */ + 200: { + id?: number; + name?: string; + username?: string; + avatar_template?: string; + created_at?: string; + cooked?: string; + post_number?: number; + post_type?: number; + updated_at?: string; + reply_count?: number; + reply_to_post_number?: string | null; + quote_count?: number; + incoming_link_count?: number; + reads?: number; + readers_count?: number; + score?: number; + yours?: boolean; + topic_id?: number; + topic_slug?: string; + display_username?: string; + primary_group_name?: string | null; + flair_name?: string | null; + flair_url?: string | null; + flair_bg_color?: string | null; + flair_color?: string | null; + version?: number; + can_edit?: boolean; + can_delete?: boolean; + can_recover?: boolean; + can_wiki?: boolean; + user_title?: string | null; + actions_summary?: Array<{ + id?: number; + count?: number; + acted?: boolean; + can_undo?: boolean; + }>; + moderator?: boolean; + admin?: boolean; + staff?: boolean; + user_id?: number; + hidden?: boolean; + trust_level?: number; + deleted_at?: string | null; + user_deleted?: boolean; + edit_reason?: string | null; + can_view_edit_history?: boolean; + wiki?: boolean; + notice?: { + [key: string]: unknown; + }; + notice_created_by_user?: { + [key: string]: unknown; + } | null; + reviewable_id?: number | null; + reviewable_score_count?: number; + reviewable_score_pending_count?: number; + }; +}; + +export type PerformPostActionResponse = + PerformPostActionResponses[keyof PerformPostActionResponses]; export type ListUserPrivateMessagesData = { - body?: never; - path: { - username: string; - }; - query?: never; - url: '/topics/private-messages/{username}.json'; + body?: never; + path: { + username: string; + }; + query?: never; + url: '/topics/private-messages/{username}.json'; }; export type ListUserPrivateMessagesResponses = { - /** - * private messages - */ - 200: { - users?: Array<{ - id?: number; - username?: string; - name?: string; - avatar_template?: string; + /** + * private messages + */ + 200: { + users?: Array<{ + id?: number; + username?: string; + name?: string; + avatar_template?: string; + }>; + primary_groups?: Array; + topic_list?: { + can_create_topic?: boolean; + draft?: string | null; + draft_key?: string; + draft_sequence?: number; + per_page?: number; + topics?: Array<{ + id?: number; + title?: string; + fancy_title?: string; + slug?: string; + posts_count?: number; + reply_count?: number; + highest_post_number?: number; + image_url?: string | null; + created_at?: string; + last_posted_at?: string; + bumped?: boolean; + bumped_at?: string; + archetype?: string; + unseen?: boolean; + last_read_post_number?: number; + unread_posts?: number; + pinned?: boolean; + unpinned?: string | null; + visible?: boolean; + closed?: boolean; + archived?: boolean; + notification_level?: number; + bookmarked?: boolean; + liked?: boolean; + views?: number; + like_count?: number; + has_summary?: boolean; + last_poster_username?: string; + category_id?: string | null; + pinned_globally?: boolean; + featured_link?: string | null; + allowed_user_count?: number; + posters?: Array<{ + extras?: string; + description?: string; + user_id?: number; + primary_group_id?: number | null; }>; - primary_groups?: Array; - topic_list?: { - can_create_topic?: boolean; - draft?: string | null; - draft_key?: string; - draft_sequence?: number; - per_page?: number; - topics?: Array<{ - id?: number; - title?: string; - fancy_title?: string; - slug?: string; - posts_count?: number; - reply_count?: number; - highest_post_number?: number; - image_url?: string | null; - created_at?: string; - last_posted_at?: string; - bumped?: boolean; - bumped_at?: string; - archetype?: string; - unseen?: boolean; - last_read_post_number?: number; - unread_posts?: number; - pinned?: boolean; - unpinned?: string | null; - visible?: boolean; - closed?: boolean; - archived?: boolean; - notification_level?: number; - bookmarked?: boolean; - liked?: boolean; - views?: number; - like_count?: number; - has_summary?: boolean; - last_poster_username?: string; - category_id?: string | null; - pinned_globally?: boolean; - featured_link?: string | null; - allowed_user_count?: number; - posters?: Array<{ - extras?: string; - description?: string; - user_id?: number; - primary_group_id?: number | null; - }>; - participants?: Array<{ - extras?: string; - description?: string | null; - user_id?: number; - primary_group_id?: number | null; - }>; - }>; - }; + participants?: Array<{ + extras?: string; + description?: string | null; + user_id?: number; + primary_group_id?: number | null; + }>; + }>; }; + }; }; -export type ListUserPrivateMessagesResponse = ListUserPrivateMessagesResponses[keyof ListUserPrivateMessagesResponses]; +export type ListUserPrivateMessagesResponse = + ListUserPrivateMessagesResponses[keyof ListUserPrivateMessagesResponses]; export type GetUserSentPrivateMessagesData = { - body?: never; - path: { - username: string; - }; - query?: never; - url: '/topics/private-messages-sent/{username}.json'; + body?: never; + path: { + username: string; + }; + query?: never; + url: '/topics/private-messages-sent/{username}.json'; }; export type GetUserSentPrivateMessagesResponses = { - /** - * private messages - */ - 200: { - users?: Array<{ - id?: number; - username?: string; - name?: string | null; - avatar_template?: string; + /** + * private messages + */ + 200: { + users?: Array<{ + id?: number; + username?: string; + name?: string | null; + avatar_template?: string; + }>; + primary_groups?: Array; + topic_list?: { + can_create_topic?: boolean; + draft?: string | null; + draft_key?: string; + draft_sequence?: number; + per_page?: number; + topics?: Array<{ + id?: number; + title?: string; + fancy_title?: string; + slug?: string; + posts_count?: number; + reply_count?: number; + highest_post_number?: number; + image_url?: string | null; + created_at?: string; + last_posted_at?: string; + bumped?: boolean; + bumped_at?: string; + archetype?: string; + unseen?: boolean; + last_read_post_number?: number; + unread_posts?: number; + pinned?: boolean; + unpinned?: string | null; + visible?: boolean; + closed?: boolean; + archived?: boolean; + notification_level?: number; + bookmarked?: boolean; + liked?: boolean; + views?: number; + like_count?: number; + has_summary?: boolean; + last_poster_username?: string; + category_id?: string | null; + pinned_globally?: boolean; + featured_link?: string | null; + allowed_user_count?: number; + posters?: Array<{ + extras?: string; + description?: string; + user_id?: number; + primary_group_id?: number | null; }>; - primary_groups?: Array; - topic_list?: { - can_create_topic?: boolean; - draft?: string | null; - draft_key?: string; - draft_sequence?: number; - per_page?: number; - topics?: Array<{ - id?: number; - title?: string; - fancy_title?: string; - slug?: string; - posts_count?: number; - reply_count?: number; - highest_post_number?: number; - image_url?: string | null; - created_at?: string; - last_posted_at?: string; - bumped?: boolean; - bumped_at?: string; - archetype?: string; - unseen?: boolean; - last_read_post_number?: number; - unread_posts?: number; - pinned?: boolean; - unpinned?: string | null; - visible?: boolean; - closed?: boolean; - archived?: boolean; - notification_level?: number; - bookmarked?: boolean; - liked?: boolean; - views?: number; - like_count?: number; - has_summary?: boolean; - last_poster_username?: string; - category_id?: string | null; - pinned_globally?: boolean; - featured_link?: string | null; - allowed_user_count?: number; - posters?: Array<{ - extras?: string; - description?: string; - user_id?: number; - primary_group_id?: number | null; - }>; - participants?: Array; - }>; - }; + participants?: Array; + }>; }; + }; }; -export type GetUserSentPrivateMessagesResponse = GetUserSentPrivateMessagesResponses[keyof GetUserSentPrivateMessagesResponses]; +export type GetUserSentPrivateMessagesResponse = + GetUserSentPrivateMessagesResponses[keyof GetUserSentPrivateMessagesResponses]; export type SearchData = { - body?: never; - path?: never; - query?: { - /** - * The query string needs to be url encoded and is made up of the following options: - * - Search term. This is just a string. Usually it would be the first item in the query. - * - `@`: Use the `@` followed by the username to specify posts by this user. - * - `#`: Use the `#` followed by the category slug to search within this category. - * - `tags:`: `api,solved` or for posts that have all the specified tags `api+solved`. - * - `before:`: `yyyy-mm-dd` - * - `after:`: `yyyy-mm-dd` - * - `order:`: `latest`, `likes`, `views`, `latest_topic` - * - `assigned:`: username (without `@`) - * - `in:`: `title`, `likes`, `personal`, `messages`, `seen`, `unseen`, `posted`, `created`, `watching`, `tracking`, `bookmarks`, `assigned`, `unassigned`, `first`, `pinned`, `wiki` - * - `with:`: `images` - * - `status:`: `open`, `closed`, `public`, `archived`, `noreplies`, `single_user`, `solved`, `unsolved` - * - `group:`: group_name or group_id - * - `group_messages:`: group_name or group_id - * - `min_posts:`: 1 - * - `max_posts:`: 10 - * - `min_views:`: 1 - * - `max_views:`: 10 - * - * If you are using cURL you can use the `-G` and the `--data-urlencode` flags to encode the query: - * - * ``` - * curl -i -sS -X GET -G "http://localhost:4200/search.json" \ - * --data-urlencode 'q=wordpress @scossar #fun after:2020-01-01' - * ``` - * - */ - q?: string; - page?: number; - }; - url: '/search.json'; + body?: never; + path?: never; + query?: { + /** + * The query string needs to be url encoded and is made up of the following options: + * - Search term. This is just a string. Usually it would be the first item in the query. + * - `@`: Use the `@` followed by the username to specify posts by this user. + * - `#`: Use the `#` followed by the category slug to search within this category. + * - `tags:`: `api,solved` or for posts that have all the specified tags `api+solved`. + * - `before:`: `yyyy-mm-dd` + * - `after:`: `yyyy-mm-dd` + * - `order:`: `latest`, `likes`, `views`, `latest_topic` + * - `assigned:`: username (without `@`) + * - `in:`: `title`, `likes`, `personal`, `messages`, `seen`, `unseen`, `posted`, `created`, `watching`, `tracking`, `bookmarks`, `assigned`, `unassigned`, `first`, `pinned`, `wiki` + * - `with:`: `images` + * - `status:`: `open`, `closed`, `public`, `archived`, `noreplies`, `single_user`, `solved`, `unsolved` + * - `group:`: group_name or group_id + * - `group_messages:`: group_name or group_id + * - `min_posts:`: 1 + * - `max_posts:`: 10 + * - `min_views:`: 1 + * - `max_views:`: 10 + * + * If you are using cURL you can use the `-G` and the `--data-urlencode` flags to encode the query: + * + * ``` + * curl -i -sS -X GET -G "http://localhost:4200/search.json" \ + * --data-urlencode 'q=wordpress @scossar #fun after:2020-01-01' + * ``` + * + */ + q?: string; + page?: number; + }; + url: '/search.json'; }; export type SearchResponses = { - /** - * success response - */ - 200: { - posts: Array; - users: Array; - categories: Array; - tags: Array; - groups: Array; - grouped_search_result: { - more_posts: string | null; - more_users: string | null; - more_categories: string | null; - term: string; - search_log_id: number; - more_full_page_results: string | null; - can_create_topic: boolean; - error: string | null; - extra?: { - categories?: Array | null; - }; - post_ids: Array; - user_ids: Array; - category_ids: Array; - tag_ids: Array; - group_ids: Array; - }; - }; + /** + * success response + */ + 200: { + posts: Array; + users: Array; + categories: Array; + tags: Array; + groups: Array; + grouped_search_result: { + more_posts: string | null; + more_users: string | null; + more_categories: string | null; + term: string; + search_log_id: number; + more_full_page_results: string | null; + can_create_topic: boolean; + error: string | null; + extra?: { + categories?: Array | null; + }; + post_ids: Array; + user_ids: Array; + category_ids: Array; + tag_ids: Array; + group_ids: Array; + }; + }; }; export type SearchResponse = SearchResponses[keyof SearchResponses]; export type GetSiteData = { - body?: never; - path?: never; - query?: never; - url: '/site.json'; + body?: never; + path?: never; + query?: never; + url: '/site.json'; }; export type GetSiteResponses = { - /** - * success response - */ - 200: { - default_archetype: string; - notification_types: { - mentioned: number; - replied: number; - quoted: number; - edited: number; - liked: number; - private_message: number; - invited_to_private_message: number; - invitee_accepted: number; - posted: number; - watching_category_or_tag: number; - new_features?: number; - admin_problems?: number; - moved_post: number; - linked: number; - granted_badge: number; - invited_to_topic: number; - custom: number; - group_mentioned: number; - group_message_summary: number; - watching_first_post: number; - topic_reminder: number; - liked_consolidated: number; - linked_consolidated: number; - post_approved: number; - code_review_commit_approved: number; - membership_request_accepted: number; - membership_request_consolidated: number; - bookmark_reminder: number; - reaction: number; - votes_released: number; - event_reminder: number; - event_invitation: number; - chat_mention: number; - chat_message: number; - chat_invitation: number; - chat_group_mention: number; - chat_quoted?: number; - chat_watched_thread?: number; - assigned?: number; - question_answer_user_commented?: number; - following?: number; - following_created_topic?: number; - following_replied?: number; - circles_activity?: number; - }; - post_types: { - regular: number; - moderator_action: number; - small_action: number; - whisper: number; - }; - trust_levels: { - newuser: number; - basic: number; - member: number; - regular: number; - leader: number; - }; - user_tips?: { - first_notification: number; - topic_timeline: number; - post_menu: number; - topic_notification_levels: number; - suggested_topics: number; - }; - groups: Array<{ - id: number; - name: string; - flair_url: string | null; - flair_bg_color: string | null; - flair_color: string | null; - }>; - filters: Array; - periods: Array; - top_menu_items: Array; - anonymous_top_menu_items: Array; - uncategorized_category_id: number; - user_field_max_length: number; - post_action_types: Array<{ - id: number | null; - name_key: string | null; - name: string; - description: string; - short_description: string; - is_flag: boolean; - require_message: boolean; - enabled: boolean; - applies_to: Array; - is_used: boolean; - position?: number; - auto_action_type: boolean; - }>; - topic_flag_types: Array<{ - id: number | null; - name_key: string | null; - name: string; - description: string; - short_description: string; - is_flag: boolean; - require_message: boolean; - enabled: boolean; - applies_to: Array; - is_used: boolean; - position?: number; - auto_action_type: boolean; - }>; - can_create_tag: boolean; - can_tag_topics: boolean; - can_tag_pms: boolean; - tags_filter_regexp: string; - top_tags: Array; - wizard_required?: boolean; - can_associate_groups?: boolean; - topic_featured_link_allowed_category_ids: Array; - user_themes: Array<{ - theme_id: number; - name: string; - default: boolean; - color_scheme_id: number | null; - }>; - user_color_schemes: Array<{ - id: number; - name: string; - is_dark: boolean; - }>; - default_dark_color_scheme: { - [key: string]: unknown; - } | null; - censored_regexp: Array<{ - [key: string]: unknown; - }>; - custom_emoji_translation: { - [key: string]: never; - }; - watched_words_replace: string | null; - watched_words_link: string | null; - markdown_additional_options?: { - [key: string]: unknown; - }; - hashtag_configurations?: { - [key: string]: unknown; - }; - hashtag_icons?: { - [key: string]: unknown; - }; - displayed_about_plugin_stat_groups?: Array; - categories: Array<{ - id: number; - name: string; - color: string; - text_color: string; - slug: string; - topic_count: number; - post_count: number; - position: number; - description?: string | null; - description_text?: string | null; - description_excerpt?: string | null; - topic_url: string; - read_restricted: boolean; - permission: number; - notification_level: number; - topic_template: string | null; - has_children: boolean; - subcategory_count: number | null; - sort_order: string | null; - sort_ascending: string | null; - show_subcategory_list: boolean; - num_featured_topics: number; - default_view: string | null; - subcategory_list_style: string; - default_top_period: string; - default_list_filter: string; - minimum_required_tags: number; - navigate_to_first_post_after_read: boolean; - allowed_tags: Array; - allowed_tag_groups: Array; - allow_global_tags: boolean; - required_tag_groups: Array<{ - name: string; - min_count: number; - }>; - read_only_banner: string | null; - uploaded_logo: string | null; - uploaded_logo_dark: string | null; - uploaded_background: string | null; - uploaded_background_dark: string | null; - can_edit: boolean; - custom_fields?: { - [key: string]: unknown; - } | null; - parent_category_id?: number; - form_template_ids?: Array; - }>; - archetypes: Array<{ - id: string; - name: string; - options: Array; - }>; - user_fields: Array; - auth_providers: Array; - whispers_allowed_groups_names?: Array; - denied_emojis?: Array; - valid_flag_applies_to_types?: Array; - navigation_menu_site_top_tags?: Array; - full_name_required_for_signup: boolean; - full_name_visible_in_signup: boolean; - }; + /** + * success response + */ + 200: { + default_archetype: string; + notification_types: { + mentioned: number; + replied: number; + quoted: number; + edited: number; + liked: number; + private_message: number; + invited_to_private_message: number; + invitee_accepted: number; + posted: number; + watching_category_or_tag: number; + new_features?: number; + admin_problems?: number; + moved_post: number; + linked: number; + granted_badge: number; + invited_to_topic: number; + custom: number; + group_mentioned: number; + group_message_summary: number; + watching_first_post: number; + topic_reminder: number; + liked_consolidated: number; + linked_consolidated: number; + post_approved: number; + code_review_commit_approved: number; + membership_request_accepted: number; + membership_request_consolidated: number; + bookmark_reminder: number; + reaction: number; + votes_released: number; + event_reminder: number; + event_invitation: number; + chat_mention: number; + chat_message: number; + chat_invitation: number; + chat_group_mention: number; + chat_quoted?: number; + chat_watched_thread?: number; + assigned?: number; + question_answer_user_commented?: number; + following?: number; + following_created_topic?: number; + following_replied?: number; + circles_activity?: number; + }; + post_types: { + regular: number; + moderator_action: number; + small_action: number; + whisper: number; + }; + trust_levels: { + newuser: number; + basic: number; + member: number; + regular: number; + leader: number; + }; + user_tips?: { + first_notification: number; + topic_timeline: number; + post_menu: number; + topic_notification_levels: number; + suggested_topics: number; + }; + groups: Array<{ + id: number; + name: string; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + }>; + filters: Array; + periods: Array; + top_menu_items: Array; + anonymous_top_menu_items: Array; + uncategorized_category_id: number; + user_field_max_length: number; + post_action_types: Array<{ + id: number | null; + name_key: string | null; + name: string; + description: string; + short_description: string; + is_flag: boolean; + require_message: boolean; + enabled: boolean; + applies_to: Array; + is_used: boolean; + position?: number; + auto_action_type: boolean; + }>; + topic_flag_types: Array<{ + id: number | null; + name_key: string | null; + name: string; + description: string; + short_description: string; + is_flag: boolean; + require_message: boolean; + enabled: boolean; + applies_to: Array; + is_used: boolean; + position?: number; + auto_action_type: boolean; + }>; + can_create_tag: boolean; + can_tag_topics: boolean; + can_tag_pms: boolean; + tags_filter_regexp: string; + top_tags: Array; + wizard_required?: boolean; + can_associate_groups?: boolean; + topic_featured_link_allowed_category_ids: Array; + user_themes: Array<{ + theme_id: number; + name: string; + default: boolean; + color_scheme_id: number | null; + }>; + user_color_schemes: Array<{ + id: number; + name: string; + is_dark: boolean; + }>; + default_dark_color_scheme: { + [key: string]: unknown; + } | null; + censored_regexp: Array<{ + [key: string]: unknown; + }>; + custom_emoji_translation: { + [key: string]: never; + }; + watched_words_replace: string | null; + watched_words_link: string | null; + markdown_additional_options?: { + [key: string]: unknown; + }; + hashtag_configurations?: { + [key: string]: unknown; + }; + hashtag_icons?: { + [key: string]: unknown; + }; + displayed_about_plugin_stat_groups?: Array; + categories: Array<{ + id: number; + name: string; + color: string; + text_color: string; + slug: string; + topic_count: number; + post_count: number; + position: number; + description?: string | null; + description_text?: string | null; + description_excerpt?: string | null; + topic_url: string; + read_restricted: boolean; + permission: number; + notification_level: number; + topic_template: string | null; + has_children: boolean; + subcategory_count: number | null; + sort_order: string | null; + sort_ascending: string | null; + show_subcategory_list: boolean; + num_featured_topics: number; + default_view: string | null; + subcategory_list_style: string; + default_top_period: string; + default_list_filter: string; + minimum_required_tags: number; + navigate_to_first_post_after_read: boolean; + allowed_tags: Array; + allowed_tag_groups: Array; + allow_global_tags: boolean; + required_tag_groups: Array<{ + name: string; + min_count: number; + }>; + read_only_banner: string | null; + uploaded_logo: string | null; + uploaded_logo_dark: string | null; + uploaded_background: string | null; + uploaded_background_dark: string | null; + can_edit: boolean; + custom_fields?: { + [key: string]: unknown; + } | null; + parent_category_id?: number; + form_template_ids?: Array; + }>; + archetypes: Array<{ + id: string; + name: string; + options: Array; + }>; + user_fields: Array; + auth_providers: Array; + whispers_allowed_groups_names?: Array; + denied_emojis?: Array; + valid_flag_applies_to_types?: Array; + navigation_menu_site_top_tags?: Array; + full_name_required_for_signup: boolean; + full_name_visible_in_signup: boolean; + }; }; export type GetSiteResponse = GetSiteResponses[keyof GetSiteResponses]; export type GetSiteBasicInfoData = { - body?: never; - path?: never; - query?: never; - url: '/site/basic-info.json'; + body?: never; + path?: never; + query?: never; + url: '/site/basic-info.json'; }; export type GetSiteBasicInfoResponses = { - /** - * success response - */ - 200: { - logo_url: string; - logo_small_url: string; - apple_touch_icon_url: string; - favicon_url: string; - title: string; - description: string; - header_primary_color: string; - header_background_color: string; - login_required: boolean; - locale: string; - include_in_discourse_discover: boolean; - mobile_logo_url: string; - }; -}; - -export type GetSiteBasicInfoResponse = GetSiteBasicInfoResponses[keyof GetSiteBasicInfoResponses]; + /** + * success response + */ + 200: { + logo_url: string; + logo_small_url: string; + apple_touch_icon_url: string; + favicon_url: string; + title: string; + description: string; + header_primary_color: string; + header_background_color: string; + login_required: boolean; + locale: string; + include_in_discourse_discover: boolean; + mobile_logo_url: string; + }; +}; + +export type GetSiteBasicInfoResponse = + GetSiteBasicInfoResponses[keyof GetSiteBasicInfoResponses]; export type ListTagGroupsData = { - body?: never; - path?: never; - query?: never; - url: '/tag_groups.json'; + body?: never; + path?: never; + query?: never; + url: '/tag_groups.json'; }; export type ListTagGroupsResponses = { - /** - * tags - */ - 200: { - tag_groups?: Array<{ - id?: number; - name?: string; - tag_names?: Array; - parent_tag_name?: Array; - one_per_topic?: boolean; - permissions?: { - staff?: number; - }; - }>; - }; + /** + * tags + */ + 200: { + tag_groups?: Array<{ + id?: number; + name?: string; + tag_names?: Array; + parent_tag_name?: Array; + one_per_topic?: boolean; + permissions?: { + staff?: number; + }; + }>; + }; }; -export type ListTagGroupsResponse = ListTagGroupsResponses[keyof ListTagGroupsResponses]; +export type ListTagGroupsResponse = + ListTagGroupsResponses[keyof ListTagGroupsResponses]; export type CreateTagGroupData = { - body?: { - name: string; - }; - path?: never; - query?: never; - url: '/tag_groups.json'; + body?: { + name: string; + }; + path?: never; + query?: never; + url: '/tag_groups.json'; }; export type CreateTagGroupResponses = { - /** - * tag group created - */ - 200: { - tag_group: { - id: number; - name: string; - tag_names: Array; - parent_tag_name: Array; - one_per_topic: boolean; - permissions: { - [key: string]: unknown; - }; - }; + /** + * tag group created + */ + 200: { + tag_group: { + id: number; + name: string; + tag_names: Array; + parent_tag_name: Array; + one_per_topic: boolean; + permissions: { + [key: string]: unknown; + }; }; + }; }; -export type CreateTagGroupResponse = CreateTagGroupResponses[keyof CreateTagGroupResponses]; +export type CreateTagGroupResponse = + CreateTagGroupResponses[keyof CreateTagGroupResponses]; export type GetTagGroupData = { - body?: never; - path: { - id: string; - }; - query?: never; - url: '/tag_groups/{id}.json'; + body?: never; + path: { + id: string; + }; + query?: never; + url: '/tag_groups/{id}.json'; }; export type GetTagGroupResponses = { - /** - * notifications - */ - 200: { - tag_group?: { - id?: number; - name?: string; - tag_names?: Array; - parent_tag_name?: Array; - one_per_topic?: boolean; - permissions?: { - everyone?: number; - }; - }; - }; -}; - -export type GetTagGroupResponse = GetTagGroupResponses[keyof GetTagGroupResponses]; + /** + * notifications + */ + 200: { + tag_group?: { + id?: number; + name?: string; + tag_names?: Array; + parent_tag_name?: Array; + one_per_topic?: boolean; + permissions?: { + everyone?: number; + }; + }; + }; +}; + +export type GetTagGroupResponse = + GetTagGroupResponses[keyof GetTagGroupResponses]; export type UpdateTagGroupData = { - body?: { - name?: string; - }; - path: { - id: string; - }; - query?: never; - url: '/tag_groups/{id}.json'; + body?: { + name?: string; + }; + path: { + id: string; + }; + query?: never; + url: '/tag_groups/{id}.json'; }; export type UpdateTagGroupResponses = { - /** - * Tag group updated - */ - 200: { - success?: string; - tag_group?: { - id?: number; - name?: string; - tag_names?: Array; - parent_tag_name?: Array; - one_per_topic?: boolean; - permissions?: { - everyone?: number; - }; - }; - }; -}; - -export type UpdateTagGroupResponse = UpdateTagGroupResponses[keyof UpdateTagGroupResponses]; + /** + * Tag group updated + */ + 200: { + success?: string; + tag_group?: { + id?: number; + name?: string; + tag_names?: Array; + parent_tag_name?: Array; + one_per_topic?: boolean; + permissions?: { + everyone?: number; + }; + }; + }; +}; + +export type UpdateTagGroupResponse = + UpdateTagGroupResponses[keyof UpdateTagGroupResponses]; export type ListTagsData = { - body?: never; - path?: never; - query?: never; - url: '/tags.json'; + body?: never; + path?: never; + query?: never; + url: '/tags.json'; }; export type ListTagsResponses = { - /** - * notifications - */ - 200: { - tags?: Array<{ - id?: string; - text?: string; - count?: number; - pm_count?: number; - target_tag?: string | null; - }>; - extras?: { - categories?: Array; - }; + /** + * notifications + */ + 200: { + tags?: Array<{ + id?: string; + text?: string; + count?: number; + pm_count?: number; + target_tag?: string | null; + }>; + extras?: { + categories?: Array; }; + }; }; export type ListTagsResponse = ListTagsResponses[keyof ListTagsResponses]; export type GetTagData = { - body?: never; - path: { - name: string; - }; - query?: never; - url: '/tag/{name}.json'; + body?: never; + path: { + name: string; + }; + query?: never; + url: '/tag/{name}.json'; }; export type GetTagResponses = { - /** - * notifications - */ - 200: { - users?: Array<{ - id?: number; - username?: string; - name?: string | null; - avatar_template?: string; + /** + * notifications + */ + 200: { + users?: Array<{ + id?: number; + username?: string; + name?: string | null; + avatar_template?: string; + }>; + primary_groups?: Array; + topic_list?: { + can_create_topic?: boolean; + draft?: string | null; + draft_key?: string; + draft_sequence?: number; + per_page?: number; + tags?: Array<{ + id?: number; + name?: string; + topic_count?: number; + staff?: boolean; + }>; + topics?: Array<{ + id?: number; + title?: string; + fancy_title?: string; + slug?: string; + posts_count?: number; + reply_count?: number; + highest_post_number?: number; + image_url?: string | null; + created_at?: string; + last_posted_at?: string; + bumped?: boolean; + bumped_at?: string; + archetype?: string; + unseen?: boolean; + last_read_post_number?: number; + unread_posts?: number; + pinned?: boolean; + unpinned?: string | null; + visible?: boolean; + closed?: boolean; + archived?: boolean; + notification_level?: number; + bookmarked?: boolean; + liked?: boolean; + tags?: Array; + views?: number; + like_count?: number; + has_summary?: boolean; + last_poster_username?: string; + category_id?: number; + pinned_globally?: boolean; + featured_link?: string | null; + posters?: Array<{ + extras?: string; + description?: string; + user_id?: number; + primary_group_id?: number | null; }>; - primary_groups?: Array; - topic_list?: { - can_create_topic?: boolean; - draft?: string | null; - draft_key?: string; - draft_sequence?: number; - per_page?: number; - tags?: Array<{ - id?: number; - name?: string; - topic_count?: number; - staff?: boolean; - }>; - topics?: Array<{ - id?: number; - title?: string; - fancy_title?: string; - slug?: string; - posts_count?: number; - reply_count?: number; - highest_post_number?: number; - image_url?: string | null; - created_at?: string; - last_posted_at?: string; - bumped?: boolean; - bumped_at?: string; - archetype?: string; - unseen?: boolean; - last_read_post_number?: number; - unread_posts?: number; - pinned?: boolean; - unpinned?: string | null; - visible?: boolean; - closed?: boolean; - archived?: boolean; - notification_level?: number; - bookmarked?: boolean; - liked?: boolean; - tags?: Array; - views?: number; - like_count?: number; - has_summary?: boolean; - last_poster_username?: string; - category_id?: number; - pinned_globally?: boolean; - featured_link?: string | null; - posters?: Array<{ - extras?: string; - description?: string; - user_id?: number; - primary_group_id?: number | null; - }>; - }>; - }; + }>; }; + }; }; export type GetTagResponse = GetTagResponses[keyof GetTagResponses]; export type GetSpecificPostsFromTopicData = { - body?: { - 'post_ids[]': number; - }; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path: { - id: string; - }; - query?: never; - url: '/t/{id}/posts.json'; + body?: { + 'post_ids[]': number; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}/posts.json'; }; export type GetSpecificPostsFromTopicResponses = { - /** - * specific posts - */ - 200: { - post_stream?: { - posts?: Array<{ - id?: number; - name?: string | null; - username?: string; - avatar_template?: string; - created_at?: string; - cooked?: string; - post_number?: number; - post_type?: number; - updated_at?: string; - reply_count?: number; - reply_to_post_number?: string | null; - quote_count?: number; - incoming_link_count?: number; - reads?: number; - readers_count?: number; - score?: number; - yours?: boolean; - topic_id?: number; - topic_slug?: string; - display_username?: string | null; - primary_group_name?: string | null; - flair_name?: string | null; - flair_url?: string | null; - flair_bg_color?: string | null; - flair_color?: string | null; - version?: number; - can_edit?: boolean; - can_delete?: boolean; - can_recover?: boolean; - can_wiki?: boolean; - read?: boolean; - user_title?: string | null; - actions_summary?: Array<{ - id?: number; - can_act?: boolean; - }>; - moderator?: boolean; - admin?: boolean; - staff?: boolean; - user_id?: number; - hidden?: boolean; - trust_level?: number; - deleted_at?: string | null; - user_deleted?: boolean; - edit_reason?: string | null; - can_view_edit_history?: boolean; - wiki?: boolean; - reviewable_id?: number; - reviewable_score_count?: number; - reviewable_score_pending_count?: number; - }>; - }; + /** + * specific posts + */ + 200: { + post_stream?: { + posts?: Array<{ id?: number; + name?: string | null; + username?: string; + avatar_template?: string; + created_at?: string; + cooked?: string; + post_number?: number; + post_type?: number; + updated_at?: string; + reply_count?: number; + reply_to_post_number?: string | null; + quote_count?: number; + incoming_link_count?: number; + reads?: number; + readers_count?: number; + score?: number; + yours?: boolean; + topic_id?: number; + topic_slug?: string; + display_username?: string | null; + primary_group_name?: string | null; + flair_name?: string | null; + flair_url?: string | null; + flair_bg_color?: string | null; + flair_color?: string | null; + version?: number; + can_edit?: boolean; + can_delete?: boolean; + can_recover?: boolean; + can_wiki?: boolean; + read?: boolean; + user_title?: string | null; + actions_summary?: Array<{ + id?: number; + can_act?: boolean; + }>; + moderator?: boolean; + admin?: boolean; + staff?: boolean; + user_id?: number; + hidden?: boolean; + trust_level?: number; + deleted_at?: string | null; + user_deleted?: boolean; + edit_reason?: string | null; + can_view_edit_history?: boolean; + wiki?: boolean; + reviewable_id?: number; + reviewable_score_count?: number; + reviewable_score_pending_count?: number; + }>; }; + id?: number; + }; }; -export type GetSpecificPostsFromTopicResponse = GetSpecificPostsFromTopicResponses[keyof GetSpecificPostsFromTopicResponses]; +export type GetSpecificPostsFromTopicResponse = + GetSpecificPostsFromTopicResponses[keyof GetSpecificPostsFromTopicResponses]; export type RemoveTopicData = { - body?: never; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path: { - id: string; - }; - query?: never; - url: '/t/{id}.json'; + body?: never; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}.json'; }; export type RemoveTopicResponses = { - /** - * specific posts - */ - 200: unknown; + /** + * specific posts + */ + 200: unknown; }; export type GetTopicData = { - body?: never; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path: { - id: string; - }; - query?: never; - url: '/t/{id}.json'; + body?: never; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}.json'; }; export type GetTopicResponses = { - /** - * specific posts - */ - 200: { - post_stream: { - posts: Array<{ - id: number; - name: string; - username: string; - avatar_template: string; - created_at: string; - cooked: string; - post_number: number; - post_type: number; - updated_at: string; - reply_count: number; - reply_to_post_number: string | null; - quote_count: number; - incoming_link_count: number; - reads: number; - readers_count: number; - score: number; - yours: boolean; - topic_id: number; - topic_slug: string; - display_username: string; - primary_group_name: string | null; - flair_name: string | null; - flair_url: string | null; - flair_bg_color: string | null; - flair_color: string | null; - version: number; - can_edit: boolean; - can_delete: boolean; - can_recover: boolean; - can_see_hidden_post?: boolean; - can_wiki: boolean; - link_counts: Array<{ - url: string; - internal: boolean; - reflection: boolean; - title: string; - clicks: number; - }>; - read: boolean; - user_title: string | null; - bookmarked: boolean; - actions_summary: Array<{ - id: number; - can_act: boolean; - }>; - moderator: boolean; - admin: boolean; - staff: boolean; - user_id: number; - hidden: boolean; - trust_level: number; - deleted_at: string | null; - user_deleted: boolean; - edit_reason: string | null; - can_view_edit_history: boolean; - wiki: boolean; - reviewable_id: number; - reviewable_score_count: number; - reviewable_score_pending_count: number; - }>; - stream: Array; - }; - timeline_lookup: Array; - suggested_topics: Array<{ - id: number; - title: string; - fancy_title: string; - slug: string; - posts_count: number; - reply_count: number; - highest_post_number: number; - image_url: string | null; - created_at: string; - last_posted_at: string | null; - bumped: boolean; - bumped_at: string; - archetype: string; - unseen: boolean; - pinned: boolean; - unpinned: string | null; - excerpt: string; - visible: boolean; - closed: boolean; - archived: boolean; - bookmarked: string | null; - liked: string | null; - tags: Array; - tags_descriptions: { - [key: string]: never; - }; - like_count: number; - views: number; - category_id: number; - featured_link: string | null; - posters: Array<{ - extras: string; - description: string; - user: { - id: number; - username: string; - name: string; - avatar_template: string; - }; - }>; - }>; - tags: Array; - tags_descriptions: { - [key: string]: never; - }; + /** + * specific posts + */ + 200: { + post_stream: { + posts: Array<{ id: number; - title: string; - fancy_title: string; - posts_count: number; + name: string; + username: string; + avatar_template: string; created_at: string; - views: number; + cooked: string; + post_number: number; + post_type: number; + updated_at: string; reply_count: number; - like_count: number; - last_posted_at: string | null; - visible: boolean; - closed: boolean; - archived: boolean; - has_summary: boolean; - archetype: string; - slug: string; - category_id: number; - word_count: number | null; - deleted_at: string | null; - user_id: number; - featured_link: string | null; - pinned_globally: boolean; - pinned_at: string | null; - pinned_until: string | null; - image_url: string | null; - slow_mode_seconds: number; - draft: string | null; - draft_key: string; - draft_sequence: number; - unpinned: string | null; - pinned: boolean; - current_post_number?: number; - highest_post_number: number | null; - deleted_by: string | null; - has_deleted: boolean; - actions_summary: Array<{ - id: number; - count: number; - hidden: boolean; - can_act: boolean; + reply_to_post_number: string | null; + quote_count: number; + incoming_link_count: number; + reads: number; + readers_count: number; + score: number; + yours: boolean; + topic_id: number; + topic_slug: string; + display_username: string; + primary_group_name: string | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + version: number; + can_edit: boolean; + can_delete: boolean; + can_recover: boolean; + can_see_hidden_post?: boolean; + can_wiki: boolean; + link_counts: Array<{ + url: string; + internal: boolean; + reflection: boolean; + title: string; + clicks: number; }>; - chunk_size: number; + read: boolean; + user_title: string | null; bookmarked: boolean; - bookmarks: Array; - topic_timer: string | null; - message_bus_last_id: number; - participant_count: number; - show_read_indicator: boolean; - thumbnails: string | null; - slow_mode_enabled_until: string | null; - details: { - can_edit: boolean; - notification_level: number; - can_move_posts: boolean; - can_delete: boolean; - can_remove_allowed_users: boolean; - can_create_post: boolean; - can_reply_as_new_topic: boolean; - can_invite_to?: boolean; - can_invite_via_email?: boolean; - can_flag_topic?: boolean; - can_convert_topic: boolean; - can_review_topic: boolean; - can_close_topic: boolean; - can_archive_topic: boolean; - can_split_merge_topic: boolean; - can_edit_staff_notes: boolean; - can_toggle_topic_visibility: boolean; - can_pin_unpin_topic: boolean; - can_moderate_category: boolean; - can_remove_self_id: number; - participants?: Array<{ - id: number; - username: string; - name: string; - avatar_template: string; - post_count: number; - primary_group_name: string | null; - flair_name: string | null; - flair_url: string | null; - flair_color: string | null; - flair_bg_color: string | null; - flair_group_id?: number | null; - admin: boolean; - moderator: boolean; - trust_level: number; - }>; - created_by: { - id: number; - username: string; - name: string; - avatar_template: string; - }; - last_poster: { - id: number; - username: string; - name: string; - avatar_template: string; - }; + actions_summary: Array<{ + id: number; + can_act: boolean; + }>; + moderator: boolean; + admin: boolean; + staff: boolean; + user_id: number; + hidden: boolean; + trust_level: number; + deleted_at: string | null; + user_deleted: boolean; + edit_reason: string | null; + can_view_edit_history: boolean; + wiki: boolean; + reviewable_id: number; + reviewable_score_count: number; + reviewable_score_pending_count: number; + }>; + stream: Array; + }; + timeline_lookup: Array; + suggested_topics: Array<{ + id: number; + title: string; + fancy_title: string; + slug: string; + posts_count: number; + reply_count: number; + highest_post_number: number; + image_url: string | null; + created_at: string; + last_posted_at: string | null; + bumped: boolean; + bumped_at: string; + archetype: string; + unseen: boolean; + pinned: boolean; + unpinned: string | null; + excerpt: string; + visible: boolean; + closed: boolean; + archived: boolean; + bookmarked: string | null; + liked: string | null; + tags: Array; + tags_descriptions: { + [key: string]: never; + }; + like_count: number; + views: number; + category_id: number; + featured_link: string | null; + posters: Array<{ + extras: string; + description: string; + user: { + id: number; + username: string; + name: string; + avatar_template: string; }; + }>; + }>; + tags: Array; + tags_descriptions: { + [key: string]: never; + }; + id: number; + title: string; + fancy_title: string; + posts_count: number; + created_at: string; + views: number; + reply_count: number; + like_count: number; + last_posted_at: string | null; + visible: boolean; + closed: boolean; + archived: boolean; + has_summary: boolean; + archetype: string; + slug: string; + category_id: number; + word_count: number | null; + deleted_at: string | null; + user_id: number; + featured_link: string | null; + pinned_globally: boolean; + pinned_at: string | null; + pinned_until: string | null; + image_url: string | null; + slow_mode_seconds: number; + draft: string | null; + draft_key: string; + draft_sequence: number; + unpinned: string | null; + pinned: boolean; + current_post_number?: number; + highest_post_number: number | null; + deleted_by: string | null; + has_deleted: boolean; + actions_summary: Array<{ + id: number; + count: number; + hidden: boolean; + can_act: boolean; + }>; + chunk_size: number; + bookmarked: boolean; + bookmarks: Array; + topic_timer: string | null; + message_bus_last_id: number; + participant_count: number; + show_read_indicator: boolean; + thumbnails: string | null; + slow_mode_enabled_until: string | null; + details: { + can_edit: boolean; + notification_level: number; + can_move_posts: boolean; + can_delete: boolean; + can_remove_allowed_users: boolean; + can_create_post: boolean; + can_reply_as_new_topic: boolean; + can_invite_to?: boolean; + can_invite_via_email?: boolean; + can_flag_topic?: boolean; + can_convert_topic: boolean; + can_review_topic: boolean; + can_close_topic: boolean; + can_archive_topic: boolean; + can_split_merge_topic: boolean; + can_edit_staff_notes: boolean; + can_toggle_topic_visibility: boolean; + can_pin_unpin_topic: boolean; + can_moderate_category: boolean; + can_remove_self_id: number; + participants?: Array<{ + id: number; + username: string; + name: string; + avatar_template: string; + post_count: number; + primary_group_name: string | null; + flair_name: string | null; + flair_url: string | null; + flair_color: string | null; + flair_bg_color: string | null; + flair_group_id?: number | null; + admin: boolean; + moderator: boolean; + trust_level: number; + }>; + created_by: { + id: number; + username: string; + name: string; + avatar_template: string; + }; + last_poster: { + id: number; + username: string; + name: string; + avatar_template: string; + }; }; + }; }; export type GetTopicResponse = GetTopicResponses[keyof GetTopicResponses]; export type UpdateTopicData = { - body?: { - topic?: { - title?: string; - category_id?: number; - }; - }; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path: { - id: string; - }; - query?: never; - url: '/t/-/{id}.json'; + body?: { + topic?: { + title?: string; + category_id?: number; + }; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/-/{id}.json'; }; export type UpdateTopicResponses = { - /** - * topic updated - */ - 200: { - basic_topic?: { - id?: number; - title?: string; - fancy_title?: string; - slug?: string; - posts_count?: number; - }; + /** + * topic updated + */ + 200: { + basic_topic?: { + id?: number; + title?: string; + fancy_title?: string; + slug?: string; + posts_count?: number; }; + }; }; -export type UpdateTopicResponse = UpdateTopicResponses[keyof UpdateTopicResponses]; +export type UpdateTopicResponse = + UpdateTopicResponses[keyof UpdateTopicResponses]; export type InviteToTopicData = { - body?: { - user?: string; - email?: string; - }; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path: { - id: string; - }; - query?: never; - url: '/t/{id}/invite.json'; + body?: { + user?: string; + email?: string; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}/invite.json'; }; export type InviteToTopicResponses = { - /** - * topic updated - */ - 200: { - user?: { - id?: number; - username?: string; - name?: string; - avatar_template?: string; - }; + /** + * topic updated + */ + 200: { + user?: { + id?: number; + username?: string; + name?: string; + avatar_template?: string; }; + }; }; -export type InviteToTopicResponse = InviteToTopicResponses[keyof InviteToTopicResponses]; +export type InviteToTopicResponse = + InviteToTopicResponses[keyof InviteToTopicResponses]; export type InviteGroupToTopicData = { - body?: { - /** - * The name of the group to invite - */ - group?: string; - /** - * Whether to notify the group, it defaults to true - */ - should_notify?: boolean; - }; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path: { - id: string; - }; - query?: never; - url: '/t/{id}/invite-group.json'; + body?: { + /** + * The name of the group to invite + */ + group?: string; + /** + * Whether to notify the group, it defaults to true + */ + should_notify?: boolean; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}/invite-group.json'; }; export type InviteGroupToTopicResponses = { - /** - * invites to a PM - */ - 200: { - group?: { - id?: number; - name?: string; - }; + /** + * invites to a PM + */ + 200: { + group?: { + id?: number; + name?: string; }; + }; }; -export type InviteGroupToTopicResponse = InviteGroupToTopicResponses[keyof InviteGroupToTopicResponses]; +export type InviteGroupToTopicResponse = + InviteGroupToTopicResponses[keyof InviteGroupToTopicResponses]; export type BookmarkTopicData = { - body?: never; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path: { - id: string; - }; - query?: never; - url: '/t/{id}/bookmark.json'; + body?: never; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}/bookmark.json'; }; export type BookmarkTopicResponses = { - /** - * topic updated - */ - 200: unknown; + /** + * topic updated + */ + 200: unknown; }; export type UpdateTopicStatusData = { - body?: { - status: 'closed' | 'pinned' | 'pinned_globally' | 'archived' | 'visible'; - enabled: 'true' | 'false'; - /** - * Only required for `pinned` and `pinned_globally` - */ - until?: string; - }; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path: { - id: string; - }; - query?: never; - url: '/t/{id}/status.json'; + body?: { + status: 'closed' | 'pinned' | 'pinned_globally' | 'archived' | 'visible'; + enabled: 'true' | 'false'; + /** + * Only required for `pinned` and `pinned_globally` + */ + until?: string; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}/status.json'; }; export type UpdateTopicStatusResponses = { - /** - * topic updated - */ - 200: { - success?: string; - topic_status_update?: string | null; - }; + /** + * topic updated + */ + 200: { + success?: string; + topic_status_update?: string | null; + }; }; -export type UpdateTopicStatusResponse = UpdateTopicStatusResponses[keyof UpdateTopicStatusResponses]; +export type UpdateTopicStatusResponse = + UpdateTopicStatusResponses[keyof UpdateTopicStatusResponses]; export type ListLatestTopicsData = { - body?: never; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path?: never; - query?: { - /** - * Enum: `default`, `created`, `activity`, `views`, `posts`, `category`, - * `likes`, `op_likes`, `posters` - */ - order?: string; - /** - * Defaults to `desc`, add `ascending=true` to sort asc - */ - ascending?: string; - /** - * Maximum number of topics returned, between 1-100 - */ - per_page?: number; - }; - url: '/latest.json'; + body?: never; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path?: never; + query?: { + /** + * Enum: `default`, `created`, `activity`, `views`, `posts`, `category`, + * `likes`, `op_likes`, `posters` + */ + order?: string; + /** + * Defaults to `desc`, add `ascending=true` to sort asc + */ + ascending?: string; + /** + * Maximum number of topics returned, between 1-100 + */ + per_page?: number; + }; + url: '/latest.json'; }; export type ListLatestTopicsResponses = { - /** - * topic updated - */ - 200: { - users?: Array<{ - id?: number; - username?: string; - name?: string | null; - avatar_template?: string; + /** + * topic updated + */ + 200: { + users?: Array<{ + id?: number; + username?: string; + name?: string | null; + avatar_template?: string; + }>; + primary_groups?: Array; + topic_list?: { + can_create_topic?: boolean; + draft?: string | null; + draft_key?: string; + draft_sequence?: number; + per_page?: number; + topics?: Array<{ + id?: number; + title?: string; + fancy_title?: string; + slug?: string; + posts_count?: number; + reply_count?: number; + highest_post_number?: number; + image_url?: string; + created_at?: string; + last_posted_at?: string; + bumped?: boolean; + bumped_at?: string; + archetype?: string; + unseen?: boolean; + last_read_post_number?: number; + unread_posts?: number; + pinned?: boolean; + unpinned?: string | null; + visible?: boolean; + closed?: boolean; + archived?: boolean; + notification_level?: number; + bookmarked?: boolean; + liked?: boolean; + views?: number; + like_count?: number; + has_summary?: boolean; + last_poster_username?: string; + category_id?: number; + op_like_count?: number; + pinned_globally?: boolean; + featured_link?: string | null; + posters?: Array<{ + extras?: string; + description?: string; + user_id?: number; + primary_group_id?: number | null; }>; - primary_groups?: Array; - topic_list?: { - can_create_topic?: boolean; - draft?: string | null; - draft_key?: string; - draft_sequence?: number; - per_page?: number; - topics?: Array<{ - id?: number; - title?: string; - fancy_title?: string; - slug?: string; - posts_count?: number; - reply_count?: number; - highest_post_number?: number; - image_url?: string; - created_at?: string; - last_posted_at?: string; - bumped?: boolean; - bumped_at?: string; - archetype?: string; - unseen?: boolean; - last_read_post_number?: number; - unread_posts?: number; - pinned?: boolean; - unpinned?: string | null; - visible?: boolean; - closed?: boolean; - archived?: boolean; - notification_level?: number; - bookmarked?: boolean; - liked?: boolean; - views?: number; - like_count?: number; - has_summary?: boolean; - last_poster_username?: string; - category_id?: number; - op_like_count?: number; - pinned_globally?: boolean; - featured_link?: string | null; - posters?: Array<{ - extras?: string; - description?: string; - user_id?: number; - primary_group_id?: number | null; - }>; - }>; - }; + }>; }; + }; }; -export type ListLatestTopicsResponse = ListLatestTopicsResponses[keyof ListLatestTopicsResponses]; +export type ListLatestTopicsResponse = + ListLatestTopicsResponses[keyof ListLatestTopicsResponses]; export type ListTopTopicsData = { - body?: never; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path?: never; - query?: { - /** - * Enum: `all`, `yearly`, `quarterly`, `monthly`, `weekly`, `daily` - */ - period?: string; - /** - * Maximum number of topics returned, between 1-100 - */ - per_page?: number; - }; - url: '/top.json'; + body?: never; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path?: never; + query?: { + /** + * Enum: `all`, `yearly`, `quarterly`, `monthly`, `weekly`, `daily` + */ + period?: string; + /** + * Maximum number of topics returned, between 1-100 + */ + per_page?: number; + }; + url: '/top.json'; }; export type ListTopTopicsResponses = { - /** - * response - */ - 200: { - users?: Array<{ - id?: number; - username?: string; - name?: string; - avatar_template?: string; + /** + * response + */ + 200: { + users?: Array<{ + id?: number; + username?: string; + name?: string; + avatar_template?: string; + }>; + primary_groups?: Array; + topic_list?: { + can_create_topic?: boolean; + draft?: string | null; + draft_key?: string; + draft_sequence?: number; + for_period?: string; + per_page?: number; + topics?: Array<{ + id?: number; + title?: string; + fancy_title?: string; + slug?: string; + posts_count?: number; + reply_count?: number; + highest_post_number?: number; + image_url?: string | null; + created_at?: string; + last_posted_at?: string; + bumped?: boolean; + bumped_at?: string; + archetype?: string; + unseen?: boolean; + last_read_post_number?: number; + unread_posts?: number; + pinned?: boolean; + unpinned?: boolean; + visible?: boolean; + closed?: boolean; + archived?: boolean; + notification_level?: number; + bookmarked?: boolean; + liked?: boolean; + views?: number; + like_count?: number; + has_summary?: boolean; + last_poster_username?: string; + category_id?: number; + op_like_count?: number; + pinned_globally?: boolean; + featured_link?: string | null; + posters?: Array<{ + extras?: string | null; + description?: string; + user_id?: number; + primary_group_id?: number | null; }>; - primary_groups?: Array; - topic_list?: { - can_create_topic?: boolean; - draft?: string | null; - draft_key?: string; - draft_sequence?: number; - for_period?: string; - per_page?: number; - topics?: Array<{ - id?: number; - title?: string; - fancy_title?: string; - slug?: string; - posts_count?: number; - reply_count?: number; - highest_post_number?: number; - image_url?: string | null; - created_at?: string; - last_posted_at?: string; - bumped?: boolean; - bumped_at?: string; - archetype?: string; - unseen?: boolean; - last_read_post_number?: number; - unread_posts?: number; - pinned?: boolean; - unpinned?: boolean; - visible?: boolean; - closed?: boolean; - archived?: boolean; - notification_level?: number; - bookmarked?: boolean; - liked?: boolean; - views?: number; - like_count?: number; - has_summary?: boolean; - last_poster_username?: string; - category_id?: number; - op_like_count?: number; - pinned_globally?: boolean; - featured_link?: string | null; - posters?: Array<{ - extras?: string | null; - description?: string; - user_id?: number; - primary_group_id?: number | null; - }>; - }>; - }; + }>; }; + }; }; -export type ListTopTopicsResponse = ListTopTopicsResponses[keyof ListTopTopicsResponses]; +export type ListTopTopicsResponse = + ListTopTopicsResponses[keyof ListTopTopicsResponses]; export type SetNotificationLevelData = { - body?: { - notification_level: '0' | '1' | '2' | '3'; - }; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path: { - id: string; - }; - query?: never; - url: '/t/{id}/notifications.json'; + body?: { + notification_level: '0' | '1' | '2' | '3'; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}/notifications.json'; }; export type SetNotificationLevelResponses = { - /** - * topic updated - */ - 200: { - success?: string; - }; + /** + * topic updated + */ + 200: { + success?: string; + }; }; -export type SetNotificationLevelResponse = SetNotificationLevelResponses[keyof SetNotificationLevelResponses]; +export type SetNotificationLevelResponse = + SetNotificationLevelResponses[keyof SetNotificationLevelResponses]; export type UpdateTopicTimestampData = { - body?: { - timestamp: string; - }; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path: { - id: string; - }; - query?: never; - url: '/t/{id}/change-timestamp.json'; + body?: { + timestamp: string; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}/change-timestamp.json'; }; export type UpdateTopicTimestampResponses = { - /** - * topic updated - */ - 200: { - success?: string; - }; + /** + * topic updated + */ + 200: { + success?: string; + }; }; -export type UpdateTopicTimestampResponse = UpdateTopicTimestampResponses[keyof UpdateTopicTimestampResponses]; +export type UpdateTopicTimestampResponse = + UpdateTopicTimestampResponses[keyof UpdateTopicTimestampResponses]; export type CreateTopicTimerData = { - body?: { - time?: string; - status_type?: string; - based_on_last_post?: boolean; - category_id?: number; - }; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path: { - id: string; - }; - query?: never; - url: '/t/{id}/timer.json'; + body?: { + time?: string; + status_type?: string; + based_on_last_post?: boolean; + category_id?: number; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + id: string; + }; + query?: never; + url: '/t/{id}/timer.json'; }; export type CreateTopicTimerResponses = { - /** - * topic updated - */ - 200: { - success?: string; - execute_at?: string; - duration?: string | null; - based_on_last_post?: boolean; - closed?: boolean; - category_id?: number | null; - }; -}; - -export type CreateTopicTimerResponse = CreateTopicTimerResponses[keyof CreateTopicTimerResponses]; + /** + * topic updated + */ + 200: { + success?: string; + execute_at?: string; + duration?: string | null; + based_on_last_post?: boolean; + closed?: boolean; + category_id?: number | null; + }; +}; + +export type CreateTopicTimerResponse = + CreateTopicTimerResponses[keyof CreateTopicTimerResponses]; export type GetTopicByExternalIdData = { - body?: never; - path: { - external_id: string; - }; - query?: never; - url: '/t/external_id/{external_id}.json'; + body?: never; + path: { + external_id: string; + }; + query?: never; + url: '/t/external_id/{external_id}.json'; }; export type CreateUploadData = { - body?: { - type: 'avatar' | 'profile_background' | 'card_background' | 'custom_emoji' | 'composer'; - /** - * required if uploading an avatar - */ - user_id?: number; - /** - * Use this flag to return an id and url - */ - synchronous?: boolean; - file?: Blob | File; - }; - path?: never; - query?: never; - url: '/uploads.json'; -}; - -export type CreateUploadResponses = { + body?: { + type: + | 'avatar' + | 'profile_background' + | 'card_background' + | 'custom_emoji' + | 'composer'; /** - * file uploaded + * required if uploading an avatar */ - 200: { - id: number; - url: string; - original_filename: string; - filesize: number; - width: number; - height: number; - thumbnail_width: number; - thumbnail_height: number; - extension: string; - short_url: string; - short_path: string; - retain_hours: string | null; - human_filesize: string; - dominant_color?: string | null; - thumbnail?: { - id?: number; - upload_id?: number; - url?: string; - extension?: string; - width?: number; - height?: number; - filesize?: number; - } | null; - }; + user_id?: number; + /** + * Use this flag to return an id and url + */ + synchronous?: boolean; + file?: Blob | File; + }; + path?: never; + query?: never; + url: '/uploads.json'; }; -export type CreateUploadResponse = CreateUploadResponses[keyof CreateUploadResponses]; +export type CreateUploadResponses = { + /** + * file uploaded + */ + 200: { + id: number; + url: string; + original_filename: string; + filesize: number; + width: number; + height: number; + thumbnail_width: number; + thumbnail_height: number; + extension: string; + short_url: string; + short_path: string; + retain_hours: string | null; + human_filesize: string; + dominant_color?: string | null; + thumbnail?: { + id?: number; + upload_id?: number; + url?: string; + extension?: string; + width?: number; + height?: number; + filesize?: number; + } | null; + }; +}; + +export type CreateUploadResponse = + CreateUploadResponses[keyof CreateUploadResponses]; export type GeneratePresignedPutData = { - body?: { - type: 'avatar' | 'profile_background' | 'card_background' | 'custom_emoji' | 'composer'; - file_name: string; - /** - * File size should be represented in bytes. - */ - file_size: number; - metadata?: { - /** - * The SHA1 checksum of the upload binary blob. Optionally - * be provided and serves as an additional security check when - * later processing the file in complete-external-upload endpoint. - */ - 'sha1-checksum'?: string; - }; + body?: { + type: + | 'avatar' + | 'profile_background' + | 'card_background' + | 'custom_emoji' + | 'composer'; + file_name: string; + /** + * File size should be represented in bytes. + */ + file_size: number; + metadata?: { + /** + * The SHA1 checksum of the upload binary blob. Optionally + * be provided and serves as an additional security check when + * later processing the file in complete-external-upload endpoint. + */ + 'sha1-checksum'?: string; }; - path?: never; - query?: never; - url: '/uploads/generate-presigned-put.json'; + }; + path?: never; + query?: never; + url: '/uploads/generate-presigned-put.json'; }; export type GeneratePresignedPutResponses = { + /** + * external upload initialized + */ + 200: { /** - * external upload initialized + * The path of the temporary file on the external storage + * service. */ - 200: { - /** - * The path of the temporary file on the external storage - * service. - */ - key?: string; - /** - * A presigned PUT URL which must be used to upload - * the file binary blob to. - */ - url?: string; - /** - * A map of headers that must be sent with the PUT request. - */ - signed_headers?: { - [key: string]: unknown; - }; - /** - * A unique string that identifies the external upload. - * This must be stored and then sent in the /complete-external-upload - * endpoint to complete the direct upload. - */ - unique_identifier?: string; + key?: string; + /** + * A presigned PUT URL which must be used to upload + * the file binary blob to. + */ + url?: string; + /** + * A map of headers that must be sent with the PUT request. + */ + signed_headers?: { + [key: string]: unknown; }; + /** + * A unique string that identifies the external upload. + * This must be stored and then sent in the /complete-external-upload + * endpoint to complete the direct upload. + */ + unique_identifier?: string; + }; }; -export type GeneratePresignedPutResponse = GeneratePresignedPutResponses[keyof GeneratePresignedPutResponses]; +export type GeneratePresignedPutResponse = + GeneratePresignedPutResponses[keyof GeneratePresignedPutResponses]; export type CompleteExternalUploadData = { - body?: { - /** - * The unique identifier returned in the original /generate-presigned-put - * request. - */ - unique_identifier: string; - /** - * Optionally set this to true if the upload is for a - * private message. - */ - for_private_message?: string; - /** - * Optionally set this to true if the upload is for a - * site setting. - */ - for_site_setting?: string; - /** - * Optionally set this to true if the upload was pasted - * into the upload area. This will convert PNG files to JPEG. - */ - pasted?: string; - }; - path?: never; - query?: never; - url: '/uploads/complete-external-upload.json'; -}; - -export type CompleteExternalUploadResponses = { + body?: { /** - * external upload initialized + * The unique identifier returned in the original /generate-presigned-put + * request. */ - 200: { - id: number; - url: string; - original_filename: string; - filesize: number; - width: number; - height: number; - thumbnail_width: number; - thumbnail_height: number; - extension: string; - short_url: string; - short_path: string; - retain_hours: string | null; - human_filesize: string; - dominant_color?: string | null; - thumbnail?: { - id?: number; - upload_id?: number; - url?: string; - extension?: string; - width?: number; - height?: number; - filesize?: number; - } | null; - }; + unique_identifier: string; + /** + * Optionally set this to true if the upload is for a + * private message. + */ + for_private_message?: string; + /** + * Optionally set this to true if the upload is for a + * site setting. + */ + for_site_setting?: string; + /** + * Optionally set this to true if the upload was pasted + * into the upload area. This will convert PNG files to JPEG. + */ + pasted?: string; + }; + path?: never; + query?: never; + url: '/uploads/complete-external-upload.json'; }; -export type CompleteExternalUploadResponse = CompleteExternalUploadResponses[keyof CompleteExternalUploadResponses]; +export type CompleteExternalUploadResponses = { + /** + * external upload initialized + */ + 200: { + id: number; + url: string; + original_filename: string; + filesize: number; + width: number; + height: number; + thumbnail_width: number; + thumbnail_height: number; + extension: string; + short_url: string; + short_path: string; + retain_hours: string | null; + human_filesize: string; + dominant_color?: string | null; + thumbnail?: { + id?: number; + upload_id?: number; + url?: string; + extension?: string; + width?: number; + height?: number; + filesize?: number; + } | null; + }; +}; + +export type CompleteExternalUploadResponse = + CompleteExternalUploadResponses[keyof CompleteExternalUploadResponses]; export type CreateMultipartUploadData = { - body?: { - upload_type: 'avatar' | 'profile_background' | 'card_background' | 'custom_emoji' | 'composer'; - file_name: string; - /** - * File size should be represented in bytes. - */ - file_size: number; - metadata?: { - /** - * The SHA1 checksum of the upload binary blob. Optionally - * be provided and serves as an additional security check when - * later processing the file in complete-external-upload endpoint. - */ - 'sha1-checksum'?: string; - }; + body?: { + upload_type: + | 'avatar' + | 'profile_background' + | 'card_background' + | 'custom_emoji' + | 'composer'; + file_name: string; + /** + * File size should be represented in bytes. + */ + file_size: number; + metadata?: { + /** + * The SHA1 checksum of the upload binary blob. Optionally + * be provided and serves as an additional security check when + * later processing the file in complete-external-upload endpoint. + */ + 'sha1-checksum'?: string; }; - path?: never; - query?: never; - url: '/uploads/create-multipart.json'; + }; + path?: never; + query?: never; + url: '/uploads/create-multipart.json'; }; export type CreateMultipartUploadResponses = { + /** + * external upload initialized + */ + 200: { /** - * external upload initialized + * The path of the temporary file on the external storage + * service. */ - 200: { - /** - * The path of the temporary file on the external storage - * service. - */ - key: string; - /** - * The identifier of the multipart upload in the external - * storage provider. This is the multipart upload_id in AWS S3. - */ - external_upload_identifier: string; - /** - * A unique string that identifies the external upload. - * This must be stored and then sent in the /complete-multipart - * and /batch-presign-multipart-parts endpoints. - */ - unique_identifier: string; - }; + key: string; + /** + * The identifier of the multipart upload in the external + * storage provider. This is the multipart upload_id in AWS S3. + */ + external_upload_identifier: string; + /** + * A unique string that identifies the external upload. + * This must be stored and then sent in the /complete-multipart + * and /batch-presign-multipart-parts endpoints. + */ + unique_identifier: string; + }; }; -export type CreateMultipartUploadResponse = CreateMultipartUploadResponses[keyof CreateMultipartUploadResponses]; +export type CreateMultipartUploadResponse = + CreateMultipartUploadResponses[keyof CreateMultipartUploadResponses]; export type BatchPresignMultipartPartsData = { - body?: { - /** - * The part numbers to generate the presigned URLs for, - * must be between 1 and 10000. - */ - part_numbers: Array; - /** - * The unique identifier returned in the original /create-multipart - * request. - */ - unique_identifier: string; - }; - path?: never; - query?: never; - url: '/uploads/batch-presign-multipart-parts.json'; + body?: { + /** + * The part numbers to generate the presigned URLs for, + * must be between 1 and 10000. + */ + part_numbers: Array; + /** + * The unique identifier returned in the original /create-multipart + * request. + */ + unique_identifier: string; + }; + path?: never; + query?: never; + url: '/uploads/batch-presign-multipart-parts.json'; }; export type BatchPresignMultipartPartsResponses = { + /** + * external upload initialized + */ + 200: { /** - * external upload initialized + * The presigned URLs for each part number, which has + * the part numbers as keys. */ - 200: { - /** - * The presigned URLs for each part number, which has - * the part numbers as keys. - */ - presigned_urls: { - [key: string]: unknown; - }; + presigned_urls: { + [key: string]: unknown; }; + }; }; -export type BatchPresignMultipartPartsResponse = BatchPresignMultipartPartsResponses[keyof BatchPresignMultipartPartsResponses]; +export type BatchPresignMultipartPartsResponse = + BatchPresignMultipartPartsResponses[keyof BatchPresignMultipartPartsResponses]; export type AbortMultipartData = { - body?: { - /** - * The identifier of the multipart upload in the external - * storage provider. This is the multipart upload_id in AWS S3. - */ - external_upload_identifier: string; - }; - path?: never; - query?: never; - url: '/uploads/abort-multipart.json'; + body?: { + /** + * The identifier of the multipart upload in the external + * storage provider. This is the multipart upload_id in AWS S3. + */ + external_upload_identifier: string; + }; + path?: never; + query?: never; + url: '/uploads/abort-multipart.json'; }; export type AbortMultipartResponses = { - /** - * external upload initialized - */ - 200: { - success: string; - }; + /** + * external upload initialized + */ + 200: { + success: string; + }; }; -export type AbortMultipartResponse = AbortMultipartResponses[keyof AbortMultipartResponses]; +export type AbortMultipartResponse = + AbortMultipartResponses[keyof AbortMultipartResponses]; export type CompleteMultipartData = { - body?: { - /** - * The unique identifier returned in the original /create-multipart - * request. - */ - unique_identifier: string; - /** - * All of the part numbers and their corresponding ETags - * that have been uploaded must be provided. - */ - parts: Array; - }; - path?: never; - query?: never; - url: '/uploads/complete-multipart.json'; -}; - -export type CompleteMultipartResponses = { + body?: { /** - * external upload initialized + * The unique identifier returned in the original /create-multipart + * request. */ - 200: { - id: number; - url: string; - original_filename: string; - filesize: number; - width: number; - height: number; - thumbnail_width: number; - thumbnail_height: number; - extension: string; - short_url: string; - short_path: string; - retain_hours: string | null; - human_filesize: string; - dominant_color?: string | null; - thumbnail?: { - id?: number; - upload_id?: number; - url?: string; - extension?: string; - width?: number; - height?: number; - filesize?: number; - } | null; - }; + unique_identifier: string; + /** + * All of the part numbers and their corresponding ETags + * that have been uploaded must be provided. + */ + parts: Array; + }; + path?: never; + query?: never; + url: '/uploads/complete-multipart.json'; }; -export type CompleteMultipartResponse = CompleteMultipartResponses[keyof CompleteMultipartResponses]; +export type CompleteMultipartResponses = { + /** + * external upload initialized + */ + 200: { + id: number; + url: string; + original_filename: string; + filesize: number; + width: number; + height: number; + thumbnail_width: number; + thumbnail_height: number; + extension: string; + short_url: string; + short_path: string; + retain_hours: string | null; + human_filesize: string; + dominant_color?: string | null; + thumbnail?: { + id?: number; + upload_id?: number; + url?: string; + extension?: string; + width?: number; + height?: number; + filesize?: number; + } | null; + }; +}; + +export type CompleteMultipartResponse = + CompleteMultipartResponses[keyof CompleteMultipartResponses]; export type ListUserBadgesData = { - body?: never; - path: { - username: string; - }; - query?: never; - url: '/user-badges/{username}.json'; + body?: never; + path: { + username: string; + }; + query?: never; + url: '/user-badges/{username}.json'; }; export type ListUserBadgesResponses = { - /** - * success response - */ - 200: { - badges?: Array<{ - id: number; - name: string; - description: string; - grant_count: number; - allow_title: boolean; - multiple_grant: boolean; - icon: string; - image_url: string | null; - listable: boolean; - enabled: boolean; - badge_grouping_id: number; - system: boolean; - slug: string; - manually_grantable: boolean; - badge_type_id: number; - }>; - badge_types?: Array<{ - id: number; - name: string; - sort_order: number; - }>; - granted_bies?: Array<{ - id: number; - username: string; - name: string; - avatar_template: string; - flair_name: string | null; - admin: boolean; - moderator: boolean; - trust_level: number; - }>; - user_badges: Array<{ - id: number; - granted_at: string; - grouping_position: number; - is_favorite: string | null; - can_favorite: boolean; - badge_id: number; - granted_by_id: number; - }>; - }; + /** + * success response + */ + 200: { + badges?: Array<{ + id: number; + name: string; + description: string; + grant_count: number; + allow_title: boolean; + multiple_grant: boolean; + icon: string; + image_url: string | null; + listable: boolean; + enabled: boolean; + badge_grouping_id: number; + system: boolean; + slug: string; + manually_grantable: boolean; + badge_type_id: number; + }>; + badge_types?: Array<{ + id: number; + name: string; + sort_order: number; + }>; + granted_bies?: Array<{ + id: number; + username: string; + name: string; + avatar_template: string; + flair_name: string | null; + admin: boolean; + moderator: boolean; + trust_level: number; + }>; + user_badges: Array<{ + id: number; + granted_at: string; + grouping_position: number; + is_favorite: string | null; + can_favorite: boolean; + badge_id: number; + granted_by_id: number; + }>; + }; }; -export type ListUserBadgesResponse = ListUserBadgesResponses[keyof ListUserBadgesResponses]; +export type ListUserBadgesResponse = + ListUserBadgesResponses[keyof ListUserBadgesResponses]; export type CreateUserData = { - body?: { - name: string; - email: string; - password: string; - username: string; - /** - * This param requires an api key in the request header - * or it will be ignored - */ - active?: boolean; - approved?: boolean; - user_fields?: { - 1?: boolean; - [key: string]: unknown | boolean | undefined; - }; - external_ids?: { - [key: string]: unknown; - }; + body?: { + name: string; + email: string; + password: string; + username: string; + /** + * This param requires an api key in the request header + * or it will be ignored + */ + active?: boolean; + approved?: boolean; + user_fields?: { + 1?: boolean; + [key: string]: unknown | boolean | undefined; }; - headers: { - 'Api-Key': string; - 'Api-Username': string; + external_ids?: { + [key: string]: unknown; }; - path?: never; - query?: never; - url: '/users.json'; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path?: never; + query?: never; + url: '/users.json'; }; export type CreateUserResponses = { - /** - * user created - */ - 200: { - success: boolean; - active: boolean; - message: string; - user_id?: number; - }; + /** + * user created + */ + 200: { + success: boolean; + active: boolean; + message: string; + user_id?: number; + }; }; export type CreateUserResponse = CreateUserResponses[keyof CreateUserResponses]; export type GetUserData = { - body?: never; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path: { - username: string; - }; - query?: never; - url: '/u/{username}.json'; + body?: never; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + username: string; + }; + query?: never; + url: '/u/{username}.json'; }; export type GetUserResponses = { - /** - * user with primary group response - */ - 200: { - user_badges: Array; - user: { - id: number; - username: string; - name: string; - avatar_template: string; - last_posted_at: string | null; - last_seen_at: string | null; - created_at: string; - ignored: boolean; - muted: boolean; - can_ignore_user: boolean; - can_ignore_users?: boolean; - can_mute_user: boolean; - can_mute_users?: boolean; - can_send_private_messages: boolean; - can_send_private_message_to_user: boolean; - trust_level: number; - moderator: boolean; - admin: boolean; - title: string | null; - badge_count: number; - second_factor_backup_enabled?: boolean; - user_fields?: { - 1: string | null; - 2: string | null; - }; - custom_fields: { - first_name?: string | null; - }; - time_read: number; - recent_time_read: number; - primary_group_id: number | null; - primary_group_name: string | null; - flair_group_id: number | null; - flair_name: string | null; - flair_url: string | null; - flair_bg_color: string | null; - flair_color: string | null; - featured_topic: string | null; - staged: boolean; - can_edit: boolean; - can_edit_username: boolean; - can_edit_email: boolean; - can_edit_name: boolean; - uploaded_avatar_id: number | null; - has_title_badges: boolean; - pending_count: number; - pending_posts_count?: number; - profile_view_count: number; - second_factor_enabled: boolean; - can_upload_profile_header: boolean; - can_upload_user_card_background: boolean; - post_count: number; - can_be_deleted: boolean; - can_delete_all_posts: boolean; - locale: string | null; - muted_category_ids: Array; - regular_category_ids: Array; - watched_tags: Array; - watching_first_post_tags: Array; - tracked_tags: Array; - muted_tags: Array; - tracked_category_ids: Array; - watched_category_ids: Array; - watched_first_post_category_ids: Array; - system_avatar_upload_id: string | null; - system_avatar_template: string; - muted_usernames: Array; - ignored_usernames: Array; - allowed_pm_usernames: Array; - mailing_list_posts_per_day: number; - can_change_bio: boolean; - can_change_location: boolean; - can_change_website: boolean; - can_change_tracking_preferences: boolean; - user_api_keys: string | null; - user_passkeys?: Array; - sidebar_tags?: Array; - sidebar_category_ids?: Array; - display_sidebar_tags?: boolean; - can_pick_theme_with_custom_homepage?: boolean; - user_auth_tokens: Array<{ - id: number; - client_ip: string; - location: string; - browser: string; - device: string; - os: string; - icon: string; - created_at: string; - seen_at: string; - is_active: boolean; - }>; - user_notification_schedule: { - enabled: boolean; - day_0_start_time: number; - day_0_end_time: number; - day_1_start_time: number; - day_1_end_time: number; - day_2_start_time: number; - day_2_end_time: number; - day_3_start_time: number; - day_3_end_time: number; - day_4_start_time: number; - day_4_end_time: number; - day_5_start_time: number; - day_5_end_time: number; - day_6_start_time: number; - day_6_end_time: number; - }; - use_logo_small_as_avatar: boolean; - featured_user_badge_ids: Array; - invited_by: string | null; - groups: Array<{ - id: number; - automatic: boolean; - name: string; - display_name: string; - user_count: number; - mentionable_level: number; - messageable_level: number; - visibility_level: number; - primary_group: boolean; - title: string | null; - grant_trust_level: string | null; - incoming_email: string | null; - has_messages: boolean; - flair_url: string | null; - flair_bg_color: string | null; - flair_color: string | null; - bio_raw: string | null; - bio_cooked: string | null; - bio_excerpt: string | null; - public_admission: boolean; - public_exit: boolean; - allow_membership_requests: boolean; - full_name: string | null; - default_notification_level: number; - membership_request_template: string | null; - members_visibility_level: number; - can_see_members: boolean; - can_admin_group: boolean; - publish_read_state: boolean; - }>; - group_users: Array<{ - group_id: number; - user_id: number; - notification_level: number; - owner?: boolean; - }>; - user_option: { - user_id: number; - mailing_list_mode: boolean; - mailing_list_mode_frequency: number; - email_digests: boolean; - email_level: number; - email_messages_level: number; - external_links_in_new_tab: boolean; - bookmark_auto_delete_preference?: number; - color_scheme_id: string | null; - dark_scheme_id: string | null; - dynamic_favicon: boolean; - enable_quoting: boolean; - enable_smart_lists: boolean; - enable_defer: boolean; - digest_after_minutes: number; - automatically_unpin_topics: boolean; - auto_track_topics_after_msecs: number; - notification_level_when_replying: number; - new_topic_duration_minutes: number; - email_previous_replies: number; - email_in_reply_to: boolean; - like_notification_frequency: number; - include_tl0_in_digests: boolean; - theme_ids: Array; - theme_key_seq: number; - allow_private_messages: boolean; - enable_allowed_pm_users: boolean; - homepage_id: string | null; - hide_profile_and_presence: boolean; - hide_profile: boolean; - hide_presence: boolean; - text_size: string; - text_size_seq: number; - title_count_mode: string; - timezone: string | null; - skip_new_user_tips: boolean; - default_calendar?: string; - oldest_search_log_date?: string | null; - sidebar_link_to_filtered_list?: boolean; - sidebar_show_count_of_new_items?: boolean; - watched_precedence_over_muted?: boolean | null; - seen_popups?: Array | null; - topics_unread_when_closed: boolean; - }; - }; - }; + /** + * user with primary group response + */ + 200: { + user_badges: Array; + user: { + id: number; + username: string; + name: string; + avatar_template: string; + last_posted_at: string | null; + last_seen_at: string | null; + created_at: string; + ignored: boolean; + muted: boolean; + can_ignore_user: boolean; + can_ignore_users?: boolean; + can_mute_user: boolean; + can_mute_users?: boolean; + can_send_private_messages: boolean; + can_send_private_message_to_user: boolean; + trust_level: number; + moderator: boolean; + admin: boolean; + title: string | null; + badge_count: number; + second_factor_backup_enabled?: boolean; + user_fields?: { + 1: string | null; + 2: string | null; + }; + custom_fields: { + first_name?: string | null; + }; + time_read: number; + recent_time_read: number; + primary_group_id: number | null; + primary_group_name: string | null; + flair_group_id: number | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + featured_topic: string | null; + staged: boolean; + can_edit: boolean; + can_edit_username: boolean; + can_edit_email: boolean; + can_edit_name: boolean; + uploaded_avatar_id: number | null; + has_title_badges: boolean; + pending_count: number; + pending_posts_count?: number; + profile_view_count: number; + second_factor_enabled: boolean; + can_upload_profile_header: boolean; + can_upload_user_card_background: boolean; + post_count: number; + can_be_deleted: boolean; + can_delete_all_posts: boolean; + locale: string | null; + muted_category_ids: Array; + regular_category_ids: Array; + watched_tags: Array; + watching_first_post_tags: Array; + tracked_tags: Array; + muted_tags: Array; + tracked_category_ids: Array; + watched_category_ids: Array; + watched_first_post_category_ids: Array; + system_avatar_upload_id: string | null; + system_avatar_template: string; + muted_usernames: Array; + ignored_usernames: Array; + allowed_pm_usernames: Array; + mailing_list_posts_per_day: number; + can_change_bio: boolean; + can_change_location: boolean; + can_change_website: boolean; + can_change_tracking_preferences: boolean; + user_api_keys: string | null; + user_passkeys?: Array; + sidebar_tags?: Array; + sidebar_category_ids?: Array; + display_sidebar_tags?: boolean; + can_pick_theme_with_custom_homepage?: boolean; + user_auth_tokens: Array<{ + id: number; + client_ip: string; + location: string; + browser: string; + device: string; + os: string; + icon: string; + created_at: string; + seen_at: string; + is_active: boolean; + }>; + user_notification_schedule: { + enabled: boolean; + day_0_start_time: number; + day_0_end_time: number; + day_1_start_time: number; + day_1_end_time: number; + day_2_start_time: number; + day_2_end_time: number; + day_3_start_time: number; + day_3_end_time: number; + day_4_start_time: number; + day_4_end_time: number; + day_5_start_time: number; + day_5_end_time: number; + day_6_start_time: number; + day_6_end_time: number; + }; + use_logo_small_as_avatar: boolean; + featured_user_badge_ids: Array; + invited_by: string | null; + groups: Array<{ + id: number; + automatic: boolean; + name: string; + display_name: string; + user_count: number; + mentionable_level: number; + messageable_level: number; + visibility_level: number; + primary_group: boolean; + title: string | null; + grant_trust_level: string | null; + incoming_email: string | null; + has_messages: boolean; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + bio_raw: string | null; + bio_cooked: string | null; + bio_excerpt: string | null; + public_admission: boolean; + public_exit: boolean; + allow_membership_requests: boolean; + full_name: string | null; + default_notification_level: number; + membership_request_template: string | null; + members_visibility_level: number; + can_see_members: boolean; + can_admin_group: boolean; + publish_read_state: boolean; + }>; + group_users: Array<{ + group_id: number; + user_id: number; + notification_level: number; + owner?: boolean; + }>; + user_option: { + user_id: number; + mailing_list_mode: boolean; + mailing_list_mode_frequency: number; + email_digests: boolean; + email_level: number; + email_messages_level: number; + external_links_in_new_tab: boolean; + bookmark_auto_delete_preference?: number; + color_scheme_id: string | null; + dark_scheme_id: string | null; + dynamic_favicon: boolean; + enable_quoting: boolean; + enable_smart_lists: boolean; + enable_defer: boolean; + digest_after_minutes: number; + automatically_unpin_topics: boolean; + auto_track_topics_after_msecs: number; + notification_level_when_replying: number; + new_topic_duration_minutes: number; + email_previous_replies: number; + email_in_reply_to: boolean; + like_notification_frequency: number; + include_tl0_in_digests: boolean; + theme_ids: Array; + theme_key_seq: number; + allow_private_messages: boolean; + enable_allowed_pm_users: boolean; + homepage_id: string | null; + hide_profile_and_presence: boolean; + hide_profile: boolean; + hide_presence: boolean; + text_size: string; + text_size_seq: number; + title_count_mode: string; + timezone: string | null; + skip_new_user_tips: boolean; + default_calendar?: string; + oldest_search_log_date?: string | null; + sidebar_link_to_filtered_list?: boolean; + sidebar_show_count_of_new_items?: boolean; + watched_precedence_over_muted?: boolean | null; + seen_popups?: Array | null; + topics_unread_when_closed: boolean; + }; + }; + }; }; export type GetUserResponse = GetUserResponses[keyof GetUserResponses]; - -export type UpdateUserData = { - body?: { - name?: string; - external_ids?: { - [key: string]: unknown; - }; - }; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path: { - username: string; - }; - query?: never; - url: '/u/{username}.json'; + +export type UpdateUserData = { + body?: { + name?: string; + external_ids?: { + [key: string]: unknown; + }; + }; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + username: string; + }; + query?: never; + url: '/u/{username}.json'; }; export type UpdateUserResponses = { - /** - * user updated - */ - 200: { - success: string; - user: { - [key: string]: unknown; - }; + /** + * user updated + */ + 200: { + success: string; + user: { + [key: string]: unknown; }; + }; }; export type UpdateUserResponse = UpdateUserResponses[keyof UpdateUserResponses]; export type GetUserExternalIdData = { - body?: never; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path: { - external_id: string; - }; - query?: never; - url: '/u/by-external/{external_id}.json'; + body?: never; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { + external_id: string; + }; + query?: never; + url: '/u/by-external/{external_id}.json'; }; export type GetUserExternalIdResponses = { - /** - * user response - */ - 200: { - user_badges: Array; - user: { - id: number; - username: string; - name: string; - avatar_template: string; - last_posted_at: string | null; - last_seen_at: string | null; - created_at: string; - ignored: boolean; - muted: boolean; - can_ignore_user: boolean; - can_ignore_users?: boolean; - can_mute_user: boolean; - can_mute_users?: boolean; - can_send_private_messages: boolean; - can_send_private_message_to_user: boolean; - trust_level: number; - moderator: boolean; - admin: boolean; - title: string | null; - badge_count: number; - second_factor_backup_enabled?: boolean; - user_fields?: { - 1: string | null; - 2: string | null; - }; - custom_fields: { - first_name?: string | null; - }; - time_read: number; - recent_time_read: number; - primary_group_id: number | null; - primary_group_name: string | null; - flair_group_id: number | null; - flair_name: string | null; - flair_url: string | null; - flair_bg_color: string | null; - flair_color: string | null; - featured_topic: string | null; - staged: boolean; - can_edit: boolean; - can_edit_username: boolean; - can_edit_email: boolean; - can_edit_name: boolean; - uploaded_avatar_id: number | null; - has_title_badges: boolean; - pending_count: number; - pending_posts_count?: number; - profile_view_count: number; - second_factor_enabled: boolean; - can_upload_profile_header: boolean; - can_upload_user_card_background: boolean; - post_count: number; - can_be_deleted: boolean; - can_delete_all_posts: boolean; - locale: string | null; - muted_category_ids: Array; - regular_category_ids: Array; - watched_tags: Array; - watching_first_post_tags: Array; - tracked_tags: Array; - muted_tags: Array; - tracked_category_ids: Array; - watched_category_ids: Array; - watched_first_post_category_ids: Array; - system_avatar_upload_id: string | null; - system_avatar_template: string; - muted_usernames: Array; - ignored_usernames: Array; - allowed_pm_usernames: Array; - mailing_list_posts_per_day: number; - can_change_bio: boolean; - can_change_location: boolean; - can_change_website: boolean; - can_change_tracking_preferences: boolean; - user_api_keys: string | null; - user_passkeys?: Array; - sidebar_tags?: Array; - sidebar_category_ids?: Array; - display_sidebar_tags?: boolean; - can_pick_theme_with_custom_homepage?: boolean; - user_auth_tokens: Array<{ - id: number; - client_ip: string; - location: string; - browser: string; - device: string; - os: string; - icon: string; - created_at: string; - seen_at: string; - is_active: boolean; - }>; - user_notification_schedule: { - enabled: boolean; - day_0_start_time: number; - day_0_end_time: number; - day_1_start_time: number; - day_1_end_time: number; - day_2_start_time: number; - day_2_end_time: number; - day_3_start_time: number; - day_3_end_time: number; - day_4_start_time: number; - day_4_end_time: number; - day_5_start_time: number; - day_5_end_time: number; - day_6_start_time: number; - day_6_end_time: number; - }; - use_logo_small_as_avatar: boolean; - featured_user_badge_ids: Array; - invited_by: string | null; - groups: Array<{ - id: number; - automatic: boolean; - name: string; - display_name: string; - user_count: number; - mentionable_level: number; - messageable_level: number; - visibility_level: number; - primary_group: boolean; - title: string | null; - grant_trust_level: string | null; - incoming_email: string | null; - has_messages: boolean; - flair_url: string | null; - flair_bg_color: string | null; - flair_color: string | null; - bio_raw: string | null; - bio_cooked: string | null; - bio_excerpt: string | null; - public_admission: boolean; - public_exit: boolean; - allow_membership_requests: boolean; - full_name: string | null; - default_notification_level: number; - membership_request_template: string | null; - members_visibility_level: number; - can_see_members: boolean; - can_admin_group: boolean; - publish_read_state: boolean; - }>; - group_users: Array<{ - group_id: number; - user_id: number; - notification_level: number; - owner?: boolean; - }>; - user_option: { - user_id: number; - mailing_list_mode: boolean; - mailing_list_mode_frequency: number; - email_digests: boolean; - email_level: number; - email_messages_level: number; - external_links_in_new_tab: boolean; - bookmark_auto_delete_preference?: number; - color_scheme_id: string | null; - dark_scheme_id: string | null; - dynamic_favicon: boolean; - enable_quoting: boolean; - enable_smart_lists: boolean; - enable_defer: boolean; - digest_after_minutes: number; - automatically_unpin_topics: boolean; - auto_track_topics_after_msecs: number; - notification_level_when_replying: number; - new_topic_duration_minutes: number; - email_previous_replies: number; - email_in_reply_to: boolean; - like_notification_frequency: number; - include_tl0_in_digests: boolean; - theme_ids: Array; - theme_key_seq: number; - allow_private_messages: boolean; - enable_allowed_pm_users: boolean; - homepage_id: string | null; - hide_profile_and_presence: boolean; - hide_profile: boolean; - hide_presence: boolean; - text_size: string; - text_size_seq: number; - title_count_mode: string; - timezone: string | null; - skip_new_user_tips: boolean; - default_calendar?: string; - oldest_search_log_date?: string | null; - sidebar_link_to_filtered_list?: boolean; - sidebar_show_count_of_new_items?: boolean; - watched_precedence_over_muted?: boolean | null; - seen_popups?: Array | null; - topics_unread_when_closed: boolean; - }; - }; - }; -}; - -export type GetUserExternalIdResponse = GetUserExternalIdResponses[keyof GetUserExternalIdResponses]; + /** + * user response + */ + 200: { + user_badges: Array; + user: { + id: number; + username: string; + name: string; + avatar_template: string; + last_posted_at: string | null; + last_seen_at: string | null; + created_at: string; + ignored: boolean; + muted: boolean; + can_ignore_user: boolean; + can_ignore_users?: boolean; + can_mute_user: boolean; + can_mute_users?: boolean; + can_send_private_messages: boolean; + can_send_private_message_to_user: boolean; + trust_level: number; + moderator: boolean; + admin: boolean; + title: string | null; + badge_count: number; + second_factor_backup_enabled?: boolean; + user_fields?: { + 1: string | null; + 2: string | null; + }; + custom_fields: { + first_name?: string | null; + }; + time_read: number; + recent_time_read: number; + primary_group_id: number | null; + primary_group_name: string | null; + flair_group_id: number | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + featured_topic: string | null; + staged: boolean; + can_edit: boolean; + can_edit_username: boolean; + can_edit_email: boolean; + can_edit_name: boolean; + uploaded_avatar_id: number | null; + has_title_badges: boolean; + pending_count: number; + pending_posts_count?: number; + profile_view_count: number; + second_factor_enabled: boolean; + can_upload_profile_header: boolean; + can_upload_user_card_background: boolean; + post_count: number; + can_be_deleted: boolean; + can_delete_all_posts: boolean; + locale: string | null; + muted_category_ids: Array; + regular_category_ids: Array; + watched_tags: Array; + watching_first_post_tags: Array; + tracked_tags: Array; + muted_tags: Array; + tracked_category_ids: Array; + watched_category_ids: Array; + watched_first_post_category_ids: Array; + system_avatar_upload_id: string | null; + system_avatar_template: string; + muted_usernames: Array; + ignored_usernames: Array; + allowed_pm_usernames: Array; + mailing_list_posts_per_day: number; + can_change_bio: boolean; + can_change_location: boolean; + can_change_website: boolean; + can_change_tracking_preferences: boolean; + user_api_keys: string | null; + user_passkeys?: Array; + sidebar_tags?: Array; + sidebar_category_ids?: Array; + display_sidebar_tags?: boolean; + can_pick_theme_with_custom_homepage?: boolean; + user_auth_tokens: Array<{ + id: number; + client_ip: string; + location: string; + browser: string; + device: string; + os: string; + icon: string; + created_at: string; + seen_at: string; + is_active: boolean; + }>; + user_notification_schedule: { + enabled: boolean; + day_0_start_time: number; + day_0_end_time: number; + day_1_start_time: number; + day_1_end_time: number; + day_2_start_time: number; + day_2_end_time: number; + day_3_start_time: number; + day_3_end_time: number; + day_4_start_time: number; + day_4_end_time: number; + day_5_start_time: number; + day_5_end_time: number; + day_6_start_time: number; + day_6_end_time: number; + }; + use_logo_small_as_avatar: boolean; + featured_user_badge_ids: Array; + invited_by: string | null; + groups: Array<{ + id: number; + automatic: boolean; + name: string; + display_name: string; + user_count: number; + mentionable_level: number; + messageable_level: number; + visibility_level: number; + primary_group: boolean; + title: string | null; + grant_trust_level: string | null; + incoming_email: string | null; + has_messages: boolean; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + bio_raw: string | null; + bio_cooked: string | null; + bio_excerpt: string | null; + public_admission: boolean; + public_exit: boolean; + allow_membership_requests: boolean; + full_name: string | null; + default_notification_level: number; + membership_request_template: string | null; + members_visibility_level: number; + can_see_members: boolean; + can_admin_group: boolean; + publish_read_state: boolean; + }>; + group_users: Array<{ + group_id: number; + user_id: number; + notification_level: number; + owner?: boolean; + }>; + user_option: { + user_id: number; + mailing_list_mode: boolean; + mailing_list_mode_frequency: number; + email_digests: boolean; + email_level: number; + email_messages_level: number; + external_links_in_new_tab: boolean; + bookmark_auto_delete_preference?: number; + color_scheme_id: string | null; + dark_scheme_id: string | null; + dynamic_favicon: boolean; + enable_quoting: boolean; + enable_smart_lists: boolean; + enable_defer: boolean; + digest_after_minutes: number; + automatically_unpin_topics: boolean; + auto_track_topics_after_msecs: number; + notification_level_when_replying: number; + new_topic_duration_minutes: number; + email_previous_replies: number; + email_in_reply_to: boolean; + like_notification_frequency: number; + include_tl0_in_digests: boolean; + theme_ids: Array; + theme_key_seq: number; + allow_private_messages: boolean; + enable_allowed_pm_users: boolean; + homepage_id: string | null; + hide_profile_and_presence: boolean; + hide_profile: boolean; + hide_presence: boolean; + text_size: string; + text_size_seq: number; + title_count_mode: string; + timezone: string | null; + skip_new_user_tips: boolean; + default_calendar?: string; + oldest_search_log_date?: string | null; + sidebar_link_to_filtered_list?: boolean; + sidebar_show_count_of_new_items?: boolean; + watched_precedence_over_muted?: boolean | null; + seen_popups?: Array | null; + topics_unread_when_closed: boolean; + }; + }; + }; +}; + +export type GetUserExternalIdResponse = + GetUserExternalIdResponses[keyof GetUserExternalIdResponses]; export type GetUserIdentiyProviderExternalIdData = { - body?: never; - headers: { - 'Api-Key': string; - 'Api-Username': string; - }; - path: { - /** - * Authentication provider name. Can be found in the provider callback - * URL: `/auth/{provider}/callback` - */ - provider: string; - external_id: string; - }; - query?: never; - url: '/u/by-external/{provider}/{external_id}.json'; -}; - -export type GetUserIdentiyProviderExternalIdResponses = { + body?: never; + headers: { + 'Api-Key': string; + 'Api-Username': string; + }; + path: { /** - * user response + * Authentication provider name. Can be found in the provider callback + * URL: `/auth/{provider}/callback` */ - 200: { - user_badges: Array; - user: { - id: number; - username: string; - name: string; - avatar_template: string; - last_posted_at: string | null; - last_seen_at: string | null; - created_at: string; - ignored: boolean; - muted: boolean; - can_ignore_user: boolean; - can_ignore_users?: boolean; - can_mute_user: boolean; - can_mute_users?: boolean; - can_send_private_messages: boolean; - can_send_private_message_to_user: boolean; - trust_level: number; - moderator: boolean; - admin: boolean; - title: string | null; - badge_count: number; - second_factor_backup_enabled?: boolean; - user_fields?: { - 1: string | null; - 2: string | null; - }; - custom_fields: { - first_name?: string | null; - }; - time_read: number; - recent_time_read: number; - primary_group_id: number | null; - primary_group_name: string | null; - flair_group_id: number | null; - flair_name: string | null; - flair_url: string | null; - flair_bg_color: string | null; - flair_color: string | null; - featured_topic: string | null; - staged: boolean; - can_edit: boolean; - can_edit_username: boolean; - can_edit_email: boolean; - can_edit_name: boolean; - uploaded_avatar_id: number | null; - has_title_badges: boolean; - pending_count: number; - pending_posts_count?: number; - profile_view_count: number; - second_factor_enabled: boolean; - can_upload_profile_header: boolean; - can_upload_user_card_background: boolean; - post_count: number; - can_be_deleted: boolean; - can_delete_all_posts: boolean; - locale: string | null; - muted_category_ids: Array; - regular_category_ids: Array; - watched_tags: Array; - watching_first_post_tags: Array; - tracked_tags: Array; - muted_tags: Array; - tracked_category_ids: Array; - watched_category_ids: Array; - watched_first_post_category_ids: Array; - system_avatar_upload_id: string | null; - system_avatar_template: string; - muted_usernames: Array; - ignored_usernames: Array; - allowed_pm_usernames: Array; - mailing_list_posts_per_day: number; - can_change_bio: boolean; - can_change_location: boolean; - can_change_website: boolean; - can_change_tracking_preferences: boolean; - user_api_keys: string | null; - user_passkeys?: Array; - sidebar_tags?: Array; - sidebar_category_ids?: Array; - display_sidebar_tags?: boolean; - can_pick_theme_with_custom_homepage?: boolean; - user_auth_tokens: Array<{ - id: number; - client_ip: string; - location: string; - browser: string; - device: string; - os: string; - icon: string; - created_at: string; - seen_at: string; - is_active: boolean; - }>; - user_notification_schedule: { - enabled: boolean; - day_0_start_time: number; - day_0_end_time: number; - day_1_start_time: number; - day_1_end_time: number; - day_2_start_time: number; - day_2_end_time: number; - day_3_start_time: number; - day_3_end_time: number; - day_4_start_time: number; - day_4_end_time: number; - day_5_start_time: number; - day_5_end_time: number; - day_6_start_time: number; - day_6_end_time: number; - }; - use_logo_small_as_avatar: boolean; - featured_user_badge_ids: Array; - invited_by: string | null; - groups: Array<{ - id: number; - automatic: boolean; - name: string; - display_name: string; - user_count: number; - mentionable_level: number; - messageable_level: number; - visibility_level: number; - primary_group: boolean; - title: string | null; - grant_trust_level: string | null; - incoming_email: string | null; - has_messages: boolean; - flair_url: string | null; - flair_bg_color: string | null; - flair_color: string | null; - bio_raw: string | null; - bio_cooked: string | null; - bio_excerpt: string | null; - public_admission: boolean; - public_exit: boolean; - allow_membership_requests: boolean; - full_name: string | null; - default_notification_level: number; - membership_request_template: string | null; - members_visibility_level: number; - can_see_members: boolean; - can_admin_group: boolean; - publish_read_state: boolean; - }>; - group_users: Array<{ - group_id: number; - user_id: number; - notification_level: number; - owner?: boolean; - }>; - user_option: { - user_id: number; - mailing_list_mode: boolean; - mailing_list_mode_frequency: number; - email_digests: boolean; - email_level: number; - email_messages_level: number; - external_links_in_new_tab: boolean; - bookmark_auto_delete_preference?: number; - color_scheme_id: string | null; - dark_scheme_id: string | null; - dynamic_favicon: boolean; - enable_quoting: boolean; - enable_smart_lists: boolean; - enable_defer: boolean; - digest_after_minutes: number; - automatically_unpin_topics: boolean; - auto_track_topics_after_msecs: number; - notification_level_when_replying: number; - new_topic_duration_minutes: number; - email_previous_replies: number; - email_in_reply_to: boolean; - like_notification_frequency: number; - include_tl0_in_digests: boolean; - theme_ids: Array; - theme_key_seq: number; - allow_private_messages: boolean; - enable_allowed_pm_users: boolean; - homepage_id: string | null; - hide_profile_and_presence: boolean; - hide_profile: boolean; - hide_presence: boolean; - text_size: string; - text_size_seq: number; - title_count_mode: string; - timezone: string | null; - skip_new_user_tips: boolean; - default_calendar?: string; - oldest_search_log_date?: string | null; - sidebar_link_to_filtered_list?: boolean; - sidebar_show_count_of_new_items?: boolean; - watched_precedence_over_muted?: boolean | null; - seen_popups?: Array | null; - topics_unread_when_closed: boolean; - }; - }; - }; + provider: string; + external_id: string; + }; + query?: never; + url: '/u/by-external/{provider}/{external_id}.json'; }; -export type GetUserIdentiyProviderExternalIdResponse = GetUserIdentiyProviderExternalIdResponses[keyof GetUserIdentiyProviderExternalIdResponses]; +export type GetUserIdentiyProviderExternalIdResponses = { + /** + * user response + */ + 200: { + user_badges: Array; + user: { + id: number; + username: string; + name: string; + avatar_template: string; + last_posted_at: string | null; + last_seen_at: string | null; + created_at: string; + ignored: boolean; + muted: boolean; + can_ignore_user: boolean; + can_ignore_users?: boolean; + can_mute_user: boolean; + can_mute_users?: boolean; + can_send_private_messages: boolean; + can_send_private_message_to_user: boolean; + trust_level: number; + moderator: boolean; + admin: boolean; + title: string | null; + badge_count: number; + second_factor_backup_enabled?: boolean; + user_fields?: { + 1: string | null; + 2: string | null; + }; + custom_fields: { + first_name?: string | null; + }; + time_read: number; + recent_time_read: number; + primary_group_id: number | null; + primary_group_name: string | null; + flair_group_id: number | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + featured_topic: string | null; + staged: boolean; + can_edit: boolean; + can_edit_username: boolean; + can_edit_email: boolean; + can_edit_name: boolean; + uploaded_avatar_id: number | null; + has_title_badges: boolean; + pending_count: number; + pending_posts_count?: number; + profile_view_count: number; + second_factor_enabled: boolean; + can_upload_profile_header: boolean; + can_upload_user_card_background: boolean; + post_count: number; + can_be_deleted: boolean; + can_delete_all_posts: boolean; + locale: string | null; + muted_category_ids: Array; + regular_category_ids: Array; + watched_tags: Array; + watching_first_post_tags: Array; + tracked_tags: Array; + muted_tags: Array; + tracked_category_ids: Array; + watched_category_ids: Array; + watched_first_post_category_ids: Array; + system_avatar_upload_id: string | null; + system_avatar_template: string; + muted_usernames: Array; + ignored_usernames: Array; + allowed_pm_usernames: Array; + mailing_list_posts_per_day: number; + can_change_bio: boolean; + can_change_location: boolean; + can_change_website: boolean; + can_change_tracking_preferences: boolean; + user_api_keys: string | null; + user_passkeys?: Array; + sidebar_tags?: Array; + sidebar_category_ids?: Array; + display_sidebar_tags?: boolean; + can_pick_theme_with_custom_homepage?: boolean; + user_auth_tokens: Array<{ + id: number; + client_ip: string; + location: string; + browser: string; + device: string; + os: string; + icon: string; + created_at: string; + seen_at: string; + is_active: boolean; + }>; + user_notification_schedule: { + enabled: boolean; + day_0_start_time: number; + day_0_end_time: number; + day_1_start_time: number; + day_1_end_time: number; + day_2_start_time: number; + day_2_end_time: number; + day_3_start_time: number; + day_3_end_time: number; + day_4_start_time: number; + day_4_end_time: number; + day_5_start_time: number; + day_5_end_time: number; + day_6_start_time: number; + day_6_end_time: number; + }; + use_logo_small_as_avatar: boolean; + featured_user_badge_ids: Array; + invited_by: string | null; + groups: Array<{ + id: number; + automatic: boolean; + name: string; + display_name: string; + user_count: number; + mentionable_level: number; + messageable_level: number; + visibility_level: number; + primary_group: boolean; + title: string | null; + grant_trust_level: string | null; + incoming_email: string | null; + has_messages: boolean; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + bio_raw: string | null; + bio_cooked: string | null; + bio_excerpt: string | null; + public_admission: boolean; + public_exit: boolean; + allow_membership_requests: boolean; + full_name: string | null; + default_notification_level: number; + membership_request_template: string | null; + members_visibility_level: number; + can_see_members: boolean; + can_admin_group: boolean; + publish_read_state: boolean; + }>; + group_users: Array<{ + group_id: number; + user_id: number; + notification_level: number; + owner?: boolean; + }>; + user_option: { + user_id: number; + mailing_list_mode: boolean; + mailing_list_mode_frequency: number; + email_digests: boolean; + email_level: number; + email_messages_level: number; + external_links_in_new_tab: boolean; + bookmark_auto_delete_preference?: number; + color_scheme_id: string | null; + dark_scheme_id: string | null; + dynamic_favicon: boolean; + enable_quoting: boolean; + enable_smart_lists: boolean; + enable_defer: boolean; + digest_after_minutes: number; + automatically_unpin_topics: boolean; + auto_track_topics_after_msecs: number; + notification_level_when_replying: number; + new_topic_duration_minutes: number; + email_previous_replies: number; + email_in_reply_to: boolean; + like_notification_frequency: number; + include_tl0_in_digests: boolean; + theme_ids: Array; + theme_key_seq: number; + allow_private_messages: boolean; + enable_allowed_pm_users: boolean; + homepage_id: string | null; + hide_profile_and_presence: boolean; + hide_profile: boolean; + hide_presence: boolean; + text_size: string; + text_size_seq: number; + title_count_mode: string; + timezone: string | null; + skip_new_user_tips: boolean; + default_calendar?: string; + oldest_search_log_date?: string | null; + sidebar_link_to_filtered_list?: boolean; + sidebar_show_count_of_new_items?: boolean; + watched_precedence_over_muted?: boolean | null; + seen_popups?: Array | null; + topics_unread_when_closed: boolean; + }; + }; + }; +}; + +export type GetUserIdentiyProviderExternalIdResponse = + GetUserIdentiyProviderExternalIdResponses[keyof GetUserIdentiyProviderExternalIdResponses]; export type UpdateAvatarData = { - body?: { - upload_id: number; - type: 'uploaded' | 'custom' | 'gravatar' | 'system'; - }; - path: { - username: string; - }; - query?: never; - url: '/u/{username}/preferences/avatar/pick.json'; + body?: { + upload_id: number; + type: 'uploaded' | 'custom' | 'gravatar' | 'system'; + }; + path: { + username: string; + }; + query?: never; + url: '/u/{username}/preferences/avatar/pick.json'; }; export type UpdateAvatarResponses = { - /** - * avatar updated - */ - 200: { - success: string; - }; + /** + * avatar updated + */ + 200: { + success: string; + }; }; -export type UpdateAvatarResponse = UpdateAvatarResponses[keyof UpdateAvatarResponses]; +export type UpdateAvatarResponse = + UpdateAvatarResponses[keyof UpdateAvatarResponses]; export type UpdateEmailData = { - body?: { - email: string; - }; - path: { - username: string; - }; - query?: never; - url: '/u/{username}/preferences/email.json'; + body?: { + email: string; + }; + path: { + username: string; + }; + query?: never; + url: '/u/{username}/preferences/email.json'; }; export type UpdateEmailResponses = { - /** - * email updated - */ - 200: unknown; + /** + * email updated + */ + 200: unknown; }; export type UpdateUsernameData = { - body?: { - new_username: string; - }; - path: { - username: string; - }; - query?: never; - url: '/u/{username}/preferences/username.json'; + body?: { + new_username: string; + }; + path: { + username: string; + }; + query?: never; + url: '/u/{username}/preferences/username.json'; }; export type UpdateUsernameResponses = { - /** - * username updated - */ - 200: unknown; + /** + * username updated + */ + 200: unknown; }; export type ListUsersPublicData = { - body?: never; - path?: never; - query: { - period: 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'yearly' | 'all'; - order: 'likes_received' | 'likes_given' | 'topic_count' | 'post_count' | 'topics_entered' | 'posts_read' | 'days_visited'; - asc?: 'true'; - page?: number; - }; - url: '/directory_items.json'; + body?: never; + path?: never; + query: { + period: 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'yearly' | 'all'; + order: + | 'likes_received' + | 'likes_given' + | 'topic_count' + | 'post_count' + | 'topics_entered' + | 'posts_read' + | 'days_visited'; + asc?: 'true'; + page?: number; + }; + url: '/directory_items.json'; }; export type ListUsersPublicResponses = { - /** - * directory items response - */ - 200: { - directory_items: Array<{ - id: number; - likes_received: number; - likes_given: number; - topics_entered: number; - topic_count: number; - post_count: number; - posts_read: number; - days_visited: number; - user: { - id: number; - username: string; - name: string | null; - avatar_template: string; - title: string | null; - }; - }>; - meta: { - last_updated_at: string | null; - total_rows_directory_items: number; - load_more_directory_items: string; - }; + /** + * directory items response + */ + 200: { + directory_items: Array<{ + id: number; + likes_received: number; + likes_given: number; + topics_entered: number; + topic_count: number; + post_count: number; + posts_read: number; + days_visited: number; + user: { + id: number; + username: string; + name: string | null; + avatar_template: string; + title: string | null; + }; + }>; + meta: { + last_updated_at: string | null; + total_rows_directory_items: number; + load_more_directory_items: string; }; + }; }; -export type ListUsersPublicResponse = ListUsersPublicResponses[keyof ListUsersPublicResponses]; +export type ListUsersPublicResponse = + ListUsersPublicResponses[keyof ListUsersPublicResponses]; export type DeleteUserData = { - body?: { - delete_posts?: boolean; - block_email?: boolean; - block_urls?: boolean; - block_ip?: boolean; - }; - path: { - id: number; - }; - query?: never; - url: '/admin/users/{id}.json'; + body?: { + delete_posts?: boolean; + block_email?: boolean; + block_urls?: boolean; + block_ip?: boolean; + }; + path: { + id: number; + }; + query?: never; + url: '/admin/users/{id}.json'; }; export type DeleteUserResponses = { - /** - * response - */ - 200: { - deleted: boolean; - }; + /** + * response + */ + 200: { + deleted: boolean; + }; }; export type DeleteUserResponse = DeleteUserResponses[keyof DeleteUserResponses]; export type AdminGetUserData = { - body?: never; - path: { - id: number; - }; - query?: never; - url: '/admin/users/{id}.json'; + body?: never; + path: { + id: number; + }; + query?: never; + url: '/admin/users/{id}.json'; }; export type AdminGetUserResponses = { - /** - * response - */ - 200: { - id: number; - username: string; - name: string | null; - avatar_template: string; - active: boolean; - admin: boolean; - moderator: boolean; - last_seen_at: string | null; - last_emailed_at: string | null; - created_at: string; - last_seen_age: number | null; - last_emailed_age: number | null; - created_at_age: number | null; - trust_level: number; - manual_locked_trust_level: string | null; - title: string | null; - time_read: number; - staged: boolean; - days_visited: number; - posts_read_count: number; - topics_entered: number; - post_count: number; - associated_accounts?: Array; - can_send_activation_email: boolean; - can_activate: boolean; - can_deactivate: boolean; - ip_address: string; - registration_ip_address: string | null; - can_grant_admin: boolean; - can_revoke_admin: boolean; - can_grant_moderation: boolean; - can_revoke_moderation: boolean; - can_impersonate: boolean; - like_count: number; - like_given_count: number; - topic_count: number; - flags_given_count: number; - flags_received_count: number; - private_topics_count: number; - can_delete_all_posts: boolean; - can_be_deleted?: boolean; - can_be_anonymized: boolean; - can_be_merged: boolean; - full_suspend_reason: string | null; - latest_export?: { - [key: string]: unknown; - } | null; - silence_reason?: string | null; - post_edits_count?: number | null; - primary_group_id: number | null; - badge_count: number; - warnings_received_count: number; - bounce_score: number | null; - reset_bounce_score_after: string | null; - can_view_action_logs: boolean; - can_disable_second_factor: boolean; - can_delete_sso_record: boolean; - api_key_count: number; - similar_users_count?: number; - single_sign_on_record: string | null; - approved_by: { - id: number; - username: string; - name: string; - avatar_template: string; - } | null; - suspended_by: string | null; - silenced_by: string | null; - penalty_counts?: { - silenced: number; - suspended: number; - }; - next_penalty?: string; - tl3_requirements?: { - time_period: number; - requirements_met: boolean; - requirements_lost: boolean; - trust_level_locked: boolean; - on_grace_period: boolean; - days_visited: number; - min_days_visited: number; - num_topics_replied_to: number; - min_topics_replied_to: number; - topics_viewed: number; - min_topics_viewed: number; - posts_read: number; - min_posts_read: number; - topics_viewed_all_time: number; - min_topics_viewed_all_time: number; - posts_read_all_time: number; - min_posts_read_all_time: number; - num_flagged_posts: number; - max_flagged_posts: number; - num_flagged_by_users: number; - max_flagged_by_users: number; - num_likes_given: number; - min_likes_given: number; - num_likes_received: number; - min_likes_received: number; - num_likes_received_days: number; - min_likes_received_days: number; - num_likes_received_users: number; - min_likes_received_users: number; - penalty_counts: { - silenced: number; - suspended: number; - total: number; - }; - }; - groups: Array<{ - id: number; - automatic: boolean; - name: string; - display_name: string; - user_count: number; - mentionable_level: number; - messageable_level: number; - visibility_level: number; - primary_group: boolean; - title: string | null; - grant_trust_level: string | null; - incoming_email: string | null; - has_messages: boolean; - flair_url: string | null; - flair_bg_color: string | null; - flair_color: string | null; - flair_group_id?: number | null; - bio_raw: string | null; - bio_cooked: string | null; - bio_excerpt: string | null; - public_admission: boolean; - public_exit: boolean; - allow_membership_requests: boolean; - full_name: string | null; - default_notification_level: number; - membership_request_template: string | null; - members_visibility_level: number; - can_see_members: boolean; - can_admin_group: boolean; - publish_read_state: boolean; - }>; - external_ids: { - [key: string]: unknown; - }; + /** + * response + */ + 200: { + id: number; + username: string; + name: string | null; + avatar_template: string; + active: boolean; + admin: boolean; + moderator: boolean; + last_seen_at: string | null; + last_emailed_at: string | null; + created_at: string; + last_seen_age: number | null; + last_emailed_age: number | null; + created_at_age: number | null; + trust_level: number; + manual_locked_trust_level: string | null; + title: string | null; + time_read: number; + staged: boolean; + days_visited: number; + posts_read_count: number; + topics_entered: number; + post_count: number; + associated_accounts?: Array; + can_send_activation_email: boolean; + can_activate: boolean; + can_deactivate: boolean; + ip_address: string; + registration_ip_address: string | null; + can_grant_admin: boolean; + can_revoke_admin: boolean; + can_grant_moderation: boolean; + can_revoke_moderation: boolean; + can_impersonate: boolean; + like_count: number; + like_given_count: number; + topic_count: number; + flags_given_count: number; + flags_received_count: number; + private_topics_count: number; + can_delete_all_posts: boolean; + can_be_deleted?: boolean; + can_be_anonymized: boolean; + can_be_merged: boolean; + full_suspend_reason: string | null; + latest_export?: { + [key: string]: unknown; + } | null; + silence_reason?: string | null; + post_edits_count?: number | null; + primary_group_id: number | null; + badge_count: number; + warnings_received_count: number; + bounce_score: number | null; + reset_bounce_score_after: string | null; + can_view_action_logs: boolean; + can_disable_second_factor: boolean; + can_delete_sso_record: boolean; + api_key_count: number; + similar_users_count?: number; + single_sign_on_record: string | null; + approved_by: { + id: number; + username: string; + name: string; + avatar_template: string; + } | null; + suspended_by: string | null; + silenced_by: string | null; + penalty_counts?: { + silenced: number; + suspended: number; + }; + next_penalty?: string; + tl3_requirements?: { + time_period: number; + requirements_met: boolean; + requirements_lost: boolean; + trust_level_locked: boolean; + on_grace_period: boolean; + days_visited: number; + min_days_visited: number; + num_topics_replied_to: number; + min_topics_replied_to: number; + topics_viewed: number; + min_topics_viewed: number; + posts_read: number; + min_posts_read: number; + topics_viewed_all_time: number; + min_topics_viewed_all_time: number; + posts_read_all_time: number; + min_posts_read_all_time: number; + num_flagged_posts: number; + max_flagged_posts: number; + num_flagged_by_users: number; + max_flagged_by_users: number; + num_likes_given: number; + min_likes_given: number; + num_likes_received: number; + min_likes_received: number; + num_likes_received_days: number; + min_likes_received_days: number; + num_likes_received_users: number; + min_likes_received_users: number; + penalty_counts: { + silenced: number; + suspended: number; + total: number; + }; + }; + groups: Array<{ + id: number; + automatic: boolean; + name: string; + display_name: string; + user_count: number; + mentionable_level: number; + messageable_level: number; + visibility_level: number; + primary_group: boolean; + title: string | null; + grant_trust_level: string | null; + incoming_email: string | null; + has_messages: boolean; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + flair_group_id?: number | null; + bio_raw: string | null; + bio_cooked: string | null; + bio_excerpt: string | null; + public_admission: boolean; + public_exit: boolean; + allow_membership_requests: boolean; + full_name: string | null; + default_notification_level: number; + membership_request_template: string | null; + members_visibility_level: number; + can_see_members: boolean; + can_admin_group: boolean; + publish_read_state: boolean; + }>; + external_ids: { + [key: string]: unknown; }; + }; }; -export type AdminGetUserResponse = AdminGetUserResponses[keyof AdminGetUserResponses]; +export type AdminGetUserResponse = + AdminGetUserResponses[keyof AdminGetUserResponses]; export type ActivateUserData = { - body?: never; - path: { - id: number; - }; - query?: never; - url: '/admin/users/{id}/activate.json'; + body?: never; + path: { + id: number; + }; + query?: never; + url: '/admin/users/{id}/activate.json'; }; export type ActivateUserResponses = { - /** - * response - */ - 200: { - success: string; - }; + /** + * response + */ + 200: { + success: string; + }; }; -export type ActivateUserResponse = ActivateUserResponses[keyof ActivateUserResponses]; +export type ActivateUserResponse = + ActivateUserResponses[keyof ActivateUserResponses]; export type DeactivateUserData = { - body?: never; - path: { - id: number; - }; - query?: never; - url: '/admin/users/{id}/deactivate.json'; + body?: never; + path: { + id: number; + }; + query?: never; + url: '/admin/users/{id}/deactivate.json'; }; export type DeactivateUserResponses = { - /** - * response - */ - 200: { - success: string; - }; + /** + * response + */ + 200: { + success: string; + }; }; -export type DeactivateUserResponse = DeactivateUserResponses[keyof DeactivateUserResponses]; +export type DeactivateUserResponse = + DeactivateUserResponses[keyof DeactivateUserResponses]; export type SuspendUserData = { - body?: { - suspend_until: string; - reason: string; - /** - * Will send an email with this message when present - */ - message?: string; - post_action?: string; - }; - path: { - id: number; - }; - query?: never; - url: '/admin/users/{id}/suspend.json'; + body?: { + suspend_until: string; + reason: string; + /** + * Will send an email with this message when present + */ + message?: string; + post_action?: string; + }; + path: { + id: number; + }; + query?: never; + url: '/admin/users/{id}/suspend.json'; }; export type SuspendUserResponses = { - /** - * response - */ - 200: { - suspension: { - suspend_reason: string; - full_suspend_reason: string; - suspended_till: string; - suspended_at: string; - suspended_by: { - id: number; - username: string; - name: string; - avatar_template: string; - }; - }; + /** + * response + */ + 200: { + suspension: { + suspend_reason: string; + full_suspend_reason: string; + suspended_till: string; + suspended_at: string; + suspended_by: { + id: number; + username: string; + name: string; + avatar_template: string; + }; }; + }; }; -export type SuspendUserResponse = SuspendUserResponses[keyof SuspendUserResponses]; +export type SuspendUserResponse = + SuspendUserResponses[keyof SuspendUserResponses]; export type SilenceUserData = { - body?: { - silenced_till: string; - reason: string; - /** - * Will send an email with this message when present - */ - message?: string; - post_action?: string; - }; - path: { - id: number; - }; - query?: never; - url: '/admin/users/{id}/silence.json'; + body?: { + silenced_till: string; + reason: string; + /** + * Will send an email with this message when present + */ + message?: string; + post_action?: string; + }; + path: { + id: number; + }; + query?: never; + url: '/admin/users/{id}/silence.json'; }; export type SilenceUserResponses = { - /** - * response - */ - 200: { - silence: { - silenced: boolean; - silence_reason: string; - silenced_till: string; - silenced_at: string; - silenced_by: { - id: number; - username: string; - name: string; - avatar_template: string; - }; - }; + /** + * response + */ + 200: { + silence: { + silenced: boolean; + silence_reason: string; + silenced_till: string; + silenced_at: string; + silenced_by: { + id: number; + username: string; + name: string; + avatar_template: string; + }; }; + }; }; -export type SilenceUserResponse = SilenceUserResponses[keyof SilenceUserResponses]; +export type SilenceUserResponse = + SilenceUserResponses[keyof SilenceUserResponses]; export type AnonymizeUserData = { - body?: never; - path: { - id: number; - }; - query?: never; - url: '/admin/users/{id}/anonymize.json'; + body?: never; + path: { + id: number; + }; + query?: never; + url: '/admin/users/{id}/anonymize.json'; }; export type AnonymizeUserResponses = { - /** - * response - */ - 200: { - success: string; - username: string; - }; + /** + * response + */ + 200: { + success: string; + username: string; + }; }; -export type AnonymizeUserResponse = AnonymizeUserResponses[keyof AnonymizeUserResponses]; +export type AnonymizeUserResponse = + AnonymizeUserResponses[keyof AnonymizeUserResponses]; export type LogOutUserData = { - body?: never; - path: { - id: number; - }; - query?: never; - url: '/admin/users/{id}/log_out.json'; + body?: never; + path: { + id: number; + }; + query?: never; + url: '/admin/users/{id}/log_out.json'; }; export type LogOutUserResponses = { - /** - * response - */ - 200: { - success: string; - }; + /** + * response + */ + 200: { + success: string; + }; }; export type LogOutUserResponse = LogOutUserResponses[keyof LogOutUserResponses]; export type RefreshGravatarData = { - body?: never; - path: { - username: string; - }; - query?: never; - url: '/user_avatar/{username}/refresh_gravatar.json'; + body?: never; + path: { + username: string; + }; + query?: never; + url: '/user_avatar/{username}/refresh_gravatar.json'; }; export type RefreshGravatarResponses = { - /** - * response - */ - 200: { - gravatar_upload_id: number | null; - gravatar_avatar_template: string | null; - }; + /** + * response + */ + 200: { + gravatar_upload_id: number | null; + gravatar_avatar_template: string | null; + }; }; -export type RefreshGravatarResponse = RefreshGravatarResponses[keyof RefreshGravatarResponses]; +export type RefreshGravatarResponse = + RefreshGravatarResponses[keyof RefreshGravatarResponses]; export type AdminListUsersData = { - body?: never; - path: { - flag: 'active' | 'new' | 'staff' | 'suspended' | 'blocked' | 'suspect'; - }; - query?: { - order?: 'created' | 'last_emailed' | 'seen' | 'username' | 'email' | 'trust_level' | 'days_visited' | 'posts_read' | 'topics_viewed' | 'posts' | 'read_time'; - asc?: 'true'; - page?: number; - /** - * Include user email addresses in response. These requests will - * be logged in the staff action logs. - */ - show_emails?: boolean; - /** - * Include user stats information - */ - stats?: boolean; - /** - * Filter to the user with this email address - */ - email?: string; - /** - * Filter to users with this IP address - */ - ip?: string; - }; - url: '/admin/users/list/{flag}.json'; -}; - -export type AdminListUsersResponses = { + body?: never; + path: { + flag: 'active' | 'new' | 'staff' | 'suspended' | 'blocked' | 'suspect'; + }; + query?: { + order?: + | 'created' + | 'last_emailed' + | 'seen' + | 'username' + | 'email' + | 'trust_level' + | 'days_visited' + | 'posts_read' + | 'topics_viewed' + | 'posts' + | 'read_time'; + asc?: 'true'; + page?: number; /** - * response + * Include user email addresses in response. These requests will + * be logged in the staff action logs. */ - 200: Array<{ - id: number; - username: string; - name: string | null; - avatar_template: string; - email?: string; - secondary_emails?: Array; - active: boolean; - admin: boolean; - moderator: boolean; - last_seen_at: string | null; - last_emailed_at: string | null; - created_at: string; - last_seen_age: number | null; - last_emailed_age: number | null; - created_at_age: number | null; - trust_level: number; - manual_locked_trust_level: string | null; - title: string | null; - time_read: number; - staged: boolean; - days_visited: number; - posts_read_count: number; - topics_entered: number; - post_count: number; - }>; + show_emails?: boolean; + /** + * Include user stats information + */ + stats?: boolean; + /** + * Filter to the user with this email address + */ + email?: string; + /** + * Filter to users with this IP address + */ + ip?: string; + }; + url: '/admin/users/list/{flag}.json'; }; -export type AdminListUsersResponse = AdminListUsersResponses[keyof AdminListUsersResponses]; +export type AdminListUsersResponses = { + /** + * response + */ + 200: Array<{ + id: number; + username: string; + name: string | null; + avatar_template: string; + email?: string; + secondary_emails?: Array; + active: boolean; + admin: boolean; + moderator: boolean; + last_seen_at: string | null; + last_emailed_at: string | null; + created_at: string; + last_seen_age: number | null; + last_emailed_age: number | null; + created_at_age: number | null; + trust_level: number; + manual_locked_trust_level: string | null; + title: string | null; + time_read: number; + staged: boolean; + days_visited: number; + posts_read_count: number; + topics_entered: number; + post_count: number; + }>; +}; + +export type AdminListUsersResponse = + AdminListUsersResponses[keyof AdminListUsersResponses]; export type ListUserActionsData = { - body?: never; - path?: never; - query: { - offset: number; - username: string; - filter: string; - }; - url: '/user_actions.json'; + body?: never; + path?: never; + query: { + offset: number; + username: string; + filter: string; + }; + url: '/user_actions.json'; }; export type ListUserActionsResponses = { - /** - * response - */ - 200: { - user_actions: Array<{ - excerpt: string; - action_type: number; - created_at: string; - avatar_template: string; - acting_avatar_template: string; - slug: string; - topic_id: number; - target_user_id: number; - target_name: string | null; - target_username: string; - post_number: number; - post_id: string | null; - username: string; - name: string | null; - user_id: number; - acting_username: string; - acting_name: string | null; - acting_user_id: number; - title: string; - deleted: boolean; - hidden: string | null; - post_type: string | null; - action_code: string | null; - category_id: number; - closed: boolean; - archived: boolean; - }>; - }; + /** + * response + */ + 200: { + user_actions: Array<{ + excerpt: string; + action_type: number; + created_at: string; + avatar_template: string; + acting_avatar_template: string; + slug: string; + topic_id: number; + target_user_id: number; + target_name: string | null; + target_username: string; + post_number: number; + post_id: string | null; + username: string; + name: string | null; + user_id: number; + acting_username: string; + acting_name: string | null; + acting_user_id: number; + title: string; + deleted: boolean; + hidden: string | null; + post_type: string | null; + action_code: string | null; + category_id: number; + closed: boolean; + archived: boolean; + }>; + }; }; -export type ListUserActionsResponse = ListUserActionsResponses[keyof ListUserActionsResponses]; +export type ListUserActionsResponse = + ListUserActionsResponses[keyof ListUserActionsResponses]; export type SendPasswordResetEmailData = { - body?: { - login: string; - }; - path?: never; - query?: never; - url: '/session/forgot_password.json'; + body?: { + login: string; + }; + path?: never; + query?: never; + url: '/session/forgot_password.json'; }; export type SendPasswordResetEmailResponses = { - /** - * success response - */ - 200: { - success: string; - user_found: boolean; - }; + /** + * success response + */ + 200: { + success: string; + user_found: boolean; + }; }; -export type SendPasswordResetEmailResponse = SendPasswordResetEmailResponses[keyof SendPasswordResetEmailResponses]; +export type SendPasswordResetEmailResponse = + SendPasswordResetEmailResponses[keyof SendPasswordResetEmailResponses]; export type ChangePasswordData = { - body?: { - username: string; - password: string; - }; - path: { - token: string; - }; - query?: never; - url: '/users/password-reset/{token}.json'; + body?: { + username: string; + password: string; + }; + path: { + token: string; + }; + query?: never; + url: '/users/password-reset/{token}.json'; }; export type ChangePasswordResponses = { - /** - * success response - */ - 200: unknown; + /** + * success response + */ + 200: unknown; }; export type GetUserEmailsData = { - body?: never; - path: { - username: string; - }; - query?: never; - url: '/u/{username}/emails.json'; + body?: never; + path: { + username: string; + }; + query?: never; + url: '/u/{username}/emails.json'; }; export type GetUserEmailsResponses = { - /** - * success response - */ - 200: { - email: string; - secondary_emails: Array; - unconfirmed_emails: Array; - associated_accounts: Array; - }; + /** + * success response + */ + 200: { + email: string; + secondary_emails: Array; + unconfirmed_emails: Array; + associated_accounts: Array; + }; }; -export type GetUserEmailsResponse = GetUserEmailsResponses[keyof GetUserEmailsResponses]; +export type GetUserEmailsResponse = + GetUserEmailsResponses[keyof GetUserEmailsResponses]; export type SendMessageData = { - body?: { - message?: string; - staged_id?: string; - }; - path: { - channel_id: number; - }; - query?: never; - url: '/chat/{channel_id}'; + body?: { + message?: string; + staged_id?: string; + }; + path: { + channel_id: number; + }; + query?: never; + url: '/chat/{channel_id}'; }; export type SendMessageResponses = { - /** - * Message sent successfully - */ - 200: { - success?: string; - message_id?: number; - }; + /** + * Message sent successfully + */ + 200: { + success?: string; + message_id?: number; + }; }; -export type SendMessageResponse = SendMessageResponses[keyof SendMessageResponses]; +export type SendMessageResponse = + SendMessageResponses[keyof SendMessageResponses]; export type EditMessageData = { - body?: { - message?: string; - }; - path: { - channel_id: number; - message_id: number; - }; - query?: never; - url: '/chat/api/channels/{channel_id}/messages/{message_id}'; + body?: { + message?: string; + }; + path: { + channel_id: number; + message_id: number; + }; + query?: never; + url: '/chat/api/channels/{channel_id}/messages/{message_id}'; }; export type EditMessageResponses = { - /** - * Message updated - */ - 200: { - success?: string; - message_id?: number; - }; + /** + * Message updated + */ + 200: { + success?: string; + message_id?: number; + }; }; -export type EditMessageResponse = EditMessageResponses[keyof EditMessageResponses]; +export type EditMessageResponse = + EditMessageResponses[keyof EditMessageResponses]; export type GetMessagesData = { - body?: never; - path: { - channel_id: number; - }; - query?: { - fetch_from_last_read?: boolean; - page_size?: number; - }; - url: '/chat/api/channels/{channel_id}/messages'; + body?: never; + path: { + channel_id: number; + }; + query?: { + fetch_from_last_read?: boolean; + page_size?: number; + }; + url: '/chat/api/channels/{channel_id}/messages'; }; export type GetMessagesResponses = { - /** - * A page of messages - */ - 200: { - messages?: Array<{ - id?: number; - message?: string; - cooked?: string; - created_at?: Date; - chat_channel_id?: number; - streaming?: boolean; - user?: { - id?: number; - username?: string; - name?: string; - avatar_template?: string; - moderator?: boolean; - admin?: boolean; - staff?: boolean; - }; - mentioned_users?: Array<{ - id?: number; - username?: string; - name?: string; - }>; - available_flags?: Array; - uploads?: Array<{ - [key: string]: unknown; - }>; - edited?: boolean; - blocks?: Array<{ - [key: string]: unknown; - }>; - chat_webhook_event?: { - [key: string]: unknown; - } | null; - }>; - tracking?: { - [key: string]: unknown; - } | null; - meta?: { - [key: string]: unknown; - } | null; - }; + /** + * A page of messages + */ + 200: { + messages?: Array<{ + id?: number; + message?: string; + cooked?: string; + created_at?: Date; + chat_channel_id?: number; + streaming?: boolean; + user?: { + id?: number; + username?: string; + name?: string; + avatar_template?: string; + moderator?: boolean; + admin?: boolean; + staff?: boolean; + }; + mentioned_users?: Array<{ + id?: number; + username?: string; + name?: string; + }>; + available_flags?: Array; + uploads?: Array<{ + [key: string]: unknown; + }>; + edited?: boolean; + blocks?: Array<{ + [key: string]: unknown; + }>; + chat_webhook_event?: { + [key: string]: unknown; + } | null; + }>; + tracking?: { + [key: string]: unknown; + } | null; + meta?: { + [key: string]: unknown; + } | null; + }; }; -export type GetMessagesResponse = GetMessagesResponses[keyof GetMessagesResponses]; +export type GetMessagesResponse = + GetMessagesResponses[keyof GetMessagesResponses]; export type ReactToMessageData = { - body?: { - react_action?: string; - emoji?: string; - }; - path: { - channel_id: number; - message_id: number; - }; - query?: never; - url: '/chat/{channel_id}/react/{message_id}'; + body?: { + react_action?: string; + emoji?: string; + }; + path: { + channel_id: number; + message_id: number; + }; + query?: never; + url: '/chat/{channel_id}/react/{message_id}'; }; export type ReactToMessageResponses = { - /** - * Reaction added/removed - */ - 200: { - success?: string; - }; + /** + * Reaction added/removed + */ + 200: { + success?: string; + }; }; -export type ReactToMessageResponse = ReactToMessageResponses[keyof ReactToMessageResponses]; +export type ReactToMessageResponse = + ReactToMessageResponses[keyof ReactToMessageResponses]; export type GetUserCardData = { - body?: never; - path: { - username: string; - }; - query?: never; - url: '/u/{username}/card.json'; + body?: never; + path: { + username: string; + }; + query?: never; + url: '/u/{username}/card.json'; }; export type GetUserCardResponses = { - /** - * User card with badges & metadata - */ - 200: { - [key: string]: unknown; - }; + /** + * User card with badges & metadata + */ + 200: { + [key: string]: unknown; + }; }; -export type GetUserCardResponse = GetUserCardResponses[keyof GetUserCardResponses]; +export type GetUserCardResponse = + GetUserCardResponses[keyof GetUserCardResponses]; export type GetSessionData = { - body?: never; - path?: never; - query?: never; - url: '/session/current.json'; + body?: never; + path?: never; + query?: never; + url: '/session/current.json'; }; export type GetSessionErrors = { - /** - * Bad Request - */ - 400: unknown; - /** - * Forbidden - */ - 403: unknown; - /** - * Too Many Requests - */ - 429: unknown; - /** - * Internal Server Error - */ - 500: unknown; + /** + * Bad Request + */ + 400: unknown; + /** + * Forbidden + */ + 403: unknown; + /** + * Too Many Requests + */ + 429: unknown; + /** + * Internal Server Error + */ + 500: unknown; }; export type GetSessionResponses = { - /** - * Authenticated User Session Data - */ - 200: { - current_user?: { - id: number; - username: string; - name: string; - avatar_template: string; - last_posted_at: string | null; - last_seen_at: string | null; - created_at: string; - ignored: boolean; - muted: boolean; - can_ignore_user: boolean; - can_ignore_users?: boolean; - can_mute_user: boolean; - can_mute_users?: boolean; - can_send_private_messages: boolean; - can_send_private_message_to_user: boolean; - trust_level: number; - moderator: boolean; - admin: boolean; - title: string | null; - badge_count: number; - second_factor_backup_enabled?: boolean; - user_fields?: { - 1: string | null; - 2: string | null; - }; - custom_fields: { - first_name?: string | null; - }; - time_read: number; - recent_time_read: number; - primary_group_id: number | null; - primary_group_name: string | null; - flair_group_id: number | null; - flair_name: string | null; - flair_url: string | null; - flair_bg_color: string | null; - flair_color: string | null; - featured_topic: string | null; - staged: boolean; - can_edit: boolean; - can_edit_username: boolean; - can_edit_email: boolean; - can_edit_name: boolean; - uploaded_avatar_id: number | null; - has_title_badges: boolean; - pending_count: number; - pending_posts_count?: number; - profile_view_count: number; - second_factor_enabled: boolean; - can_upload_profile_header: boolean; - can_upload_user_card_background: boolean; - post_count: number; - can_be_deleted: boolean; - can_delete_all_posts: boolean; - locale: string | null; - muted_category_ids: Array; - regular_category_ids: Array; - watched_tags: Array; - watching_first_post_tags: Array; - tracked_tags: Array; - muted_tags: Array; - tracked_category_ids: Array; - watched_category_ids: Array; - watched_first_post_category_ids: Array; - system_avatar_upload_id: string | null; - system_avatar_template: string; - muted_usernames: Array; - ignored_usernames: Array; - allowed_pm_usernames: Array; - mailing_list_posts_per_day: number; - can_change_bio: boolean; - can_change_location: boolean; - can_change_website: boolean; - can_change_tracking_preferences: boolean; - user_api_keys: string | null; - user_passkeys?: Array; - sidebar_tags?: Array; - sidebar_category_ids?: Array; - display_sidebar_tags?: boolean; - can_pick_theme_with_custom_homepage?: boolean; - user_auth_tokens: Array<{ - id: number; - client_ip: string; - location: string; - browser: string; - device: string; - os: string; - icon: string; - created_at: string; - seen_at: string; - is_active: boolean; - }>; - user_notification_schedule: { - enabled: boolean; - day_0_start_time: number; - day_0_end_time: number; - day_1_start_time: number; - day_1_end_time: number; - day_2_start_time: number; - day_2_end_time: number; - day_3_start_time: number; - day_3_end_time: number; - day_4_start_time: number; - day_4_end_time: number; - day_5_start_time: number; - day_5_end_time: number; - day_6_start_time: number; - day_6_end_time: number; - }; - use_logo_small_as_avatar: boolean; - featured_user_badge_ids: Array; - invited_by: string | null; - groups: Array<{ - id: number; - automatic: boolean; - name: string; - display_name: string; - user_count: number; - mentionable_level: number; - messageable_level: number; - visibility_level: number; - primary_group: boolean; - title: string | null; - grant_trust_level: string | null; - incoming_email: string | null; - has_messages: boolean; - flair_url: string | null; - flair_bg_color: string | null; - flair_color: string | null; - bio_raw: string | null; - bio_cooked: string | null; - bio_excerpt: string | null; - public_admission: boolean; - public_exit: boolean; - allow_membership_requests: boolean; - full_name: string | null; - default_notification_level: number; - membership_request_template: string | null; - members_visibility_level: number; - can_see_members: boolean; - can_admin_group: boolean; - publish_read_state: boolean; - }>; - group_users: Array<{ - group_id: number; - user_id: number; - notification_level: number; - owner?: boolean; - }>; - user_option: { - user_id: number; - mailing_list_mode: boolean; - mailing_list_mode_frequency: number; - email_digests: boolean; - email_level: number; - email_messages_level: number; - external_links_in_new_tab: boolean; - bookmark_auto_delete_preference?: number; - color_scheme_id: string | null; - dark_scheme_id: string | null; - dynamic_favicon: boolean; - enable_quoting: boolean; - enable_smart_lists: boolean; - enable_defer: boolean; - digest_after_minutes: number; - automatically_unpin_topics: boolean; - auto_track_topics_after_msecs: number; - notification_level_when_replying: number; - new_topic_duration_minutes: number; - email_previous_replies: number; - email_in_reply_to: boolean; - like_notification_frequency: number; - include_tl0_in_digests: boolean; - theme_ids: Array; - theme_key_seq: number; - allow_private_messages: boolean; - enable_allowed_pm_users: boolean; - homepage_id: string | null; - hide_profile_and_presence: boolean; - hide_profile: boolean; - hide_presence: boolean; - text_size: string; - text_size_seq: number; - title_count_mode: string; - timezone: string | null; - skip_new_user_tips: boolean; - default_calendar?: string; - oldest_search_log_date?: string | null; - sidebar_link_to_filtered_list?: boolean; - sidebar_show_count_of_new_items?: boolean; - watched_precedence_over_muted?: boolean | null; - seen_popups?: Array | null; - topics_unread_when_closed: boolean; - }; - }; - }; + /** + * Authenticated User Session Data + */ + 200: { + current_user?: { + id: number; + username: string; + name: string; + avatar_template: string; + last_posted_at: string | null; + last_seen_at: string | null; + created_at: string; + ignored: boolean; + muted: boolean; + can_ignore_user: boolean; + can_ignore_users?: boolean; + can_mute_user: boolean; + can_mute_users?: boolean; + can_send_private_messages: boolean; + can_send_private_message_to_user: boolean; + trust_level: number; + moderator: boolean; + admin: boolean; + title: string | null; + badge_count: number; + second_factor_backup_enabled?: boolean; + user_fields?: { + 1: string | null; + 2: string | null; + }; + custom_fields: { + first_name?: string | null; + }; + time_read: number; + recent_time_read: number; + primary_group_id: number | null; + primary_group_name: string | null; + flair_group_id: number | null; + flair_name: string | null; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + featured_topic: string | null; + staged: boolean; + can_edit: boolean; + can_edit_username: boolean; + can_edit_email: boolean; + can_edit_name: boolean; + uploaded_avatar_id: number | null; + has_title_badges: boolean; + pending_count: number; + pending_posts_count?: number; + profile_view_count: number; + second_factor_enabled: boolean; + can_upload_profile_header: boolean; + can_upload_user_card_background: boolean; + post_count: number; + can_be_deleted: boolean; + can_delete_all_posts: boolean; + locale: string | null; + muted_category_ids: Array; + regular_category_ids: Array; + watched_tags: Array; + watching_first_post_tags: Array; + tracked_tags: Array; + muted_tags: Array; + tracked_category_ids: Array; + watched_category_ids: Array; + watched_first_post_category_ids: Array; + system_avatar_upload_id: string | null; + system_avatar_template: string; + muted_usernames: Array; + ignored_usernames: Array; + allowed_pm_usernames: Array; + mailing_list_posts_per_day: number; + can_change_bio: boolean; + can_change_location: boolean; + can_change_website: boolean; + can_change_tracking_preferences: boolean; + user_api_keys: string | null; + user_passkeys?: Array; + sidebar_tags?: Array; + sidebar_category_ids?: Array; + display_sidebar_tags?: boolean; + can_pick_theme_with_custom_homepage?: boolean; + user_auth_tokens: Array<{ + id: number; + client_ip: string; + location: string; + browser: string; + device: string; + os: string; + icon: string; + created_at: string; + seen_at: string; + is_active: boolean; + }>; + user_notification_schedule: { + enabled: boolean; + day_0_start_time: number; + day_0_end_time: number; + day_1_start_time: number; + day_1_end_time: number; + day_2_start_time: number; + day_2_end_time: number; + day_3_start_time: number; + day_3_end_time: number; + day_4_start_time: number; + day_4_end_time: number; + day_5_start_time: number; + day_5_end_time: number; + day_6_start_time: number; + day_6_end_time: number; + }; + use_logo_small_as_avatar: boolean; + featured_user_badge_ids: Array; + invited_by: string | null; + groups: Array<{ + id: number; + automatic: boolean; + name: string; + display_name: string; + user_count: number; + mentionable_level: number; + messageable_level: number; + visibility_level: number; + primary_group: boolean; + title: string | null; + grant_trust_level: string | null; + incoming_email: string | null; + has_messages: boolean; + flair_url: string | null; + flair_bg_color: string | null; + flair_color: string | null; + bio_raw: string | null; + bio_cooked: string | null; + bio_excerpt: string | null; + public_admission: boolean; + public_exit: boolean; + allow_membership_requests: boolean; + full_name: string | null; + default_notification_level: number; + membership_request_template: string | null; + members_visibility_level: number; + can_see_members: boolean; + can_admin_group: boolean; + publish_read_state: boolean; + }>; + group_users: Array<{ + group_id: number; + user_id: number; + notification_level: number; + owner?: boolean; + }>; + user_option: { + user_id: number; + mailing_list_mode: boolean; + mailing_list_mode_frequency: number; + email_digests: boolean; + email_level: number; + email_messages_level: number; + external_links_in_new_tab: boolean; + bookmark_auto_delete_preference?: number; + color_scheme_id: string | null; + dark_scheme_id: string | null; + dynamic_favicon: boolean; + enable_quoting: boolean; + enable_smart_lists: boolean; + enable_defer: boolean; + digest_after_minutes: number; + automatically_unpin_topics: boolean; + auto_track_topics_after_msecs: number; + notification_level_when_replying: number; + new_topic_duration_minutes: number; + email_previous_replies: number; + email_in_reply_to: boolean; + like_notification_frequency: number; + include_tl0_in_digests: boolean; + theme_ids: Array; + theme_key_seq: number; + allow_private_messages: boolean; + enable_allowed_pm_users: boolean; + homepage_id: string | null; + hide_profile_and_presence: boolean; + hide_profile: boolean; + hide_presence: boolean; + text_size: string; + text_size_seq: number; + title_count_mode: string; + timezone: string | null; + skip_new_user_tips: boolean; + default_calendar?: string; + oldest_search_log_date?: string | null; + sidebar_link_to_filtered_list?: boolean; + sidebar_show_count_of_new_items?: boolean; + watched_precedence_over_muted?: boolean | null; + seen_popups?: Array | null; + topics_unread_when_closed: boolean; + }; + }; + }; }; export type GetSessionResponse = GetSessionResponses[keyof GetSessionResponses]; export type ClientOptions = { - baseUrl: 'https://{defaultHost}' | (string & {}); -}; \ No newline at end of file + baseUrl: 'https://{defaultHost}' | (string & {}); +}; diff --git a/config.ts b/config.ts index c2b0b92..4317936 100644 --- a/config.ts +++ b/config.ts @@ -1,12 +1,12 @@ -export const keywords = ["zenix", "zenith", "ai", "bot"]; -export const country = "Greece"; -export const city = "Athens"; -export const timezone = "Europe/Athens"; +export const keywords = ['zenix', 'zenith', 'ai', 'bot']; +export const country = 'Greece'; +export const city = 'Athens'; +export const timezone = 'Europe/Athens'; export const speed = { minDelay: 5, maxDelay: 15, - speedMethod: "divide", + speedMethod: 'divide', speedFactor: 60, }; diff --git a/lib/generate-response.ts b/lib/generate-response.ts index 3b8fffa..bd9f5d2 100644 --- a/lib/generate-response.ts +++ b/lib/generate-response.ts @@ -1,13 +1,13 @@ -import { openai } from "@ai-sdk/openai"; -import { type CoreMessage, generateText, tool } from "ai"; -import { z } from "zod"; -import { exa } from "./utils"; -import { createOpenAICompatible } from "@ai-sdk/openai-compatible"; +import { openai } from '@ai-sdk/openai'; +import { type CoreMessage, generateText, tool } from 'ai'; +import { z } from 'zod'; +import { exa } from './utils'; +import { createOpenAICompatible } from '@ai-sdk/openai-compatible'; const hackclub = createOpenAICompatible({ - name: "hackclub", + name: 'hackclub', apiKey: process.env.HACKCLUB_API_KEY!, - baseURL: "https://ai.hackclub.com", + baseURL: 'https://ai.hackclub.com', }); export const generateResponse = async ( @@ -15,7 +15,7 @@ export const generateResponse = async ( updateStatus?: (status: string) => void, ) => { const { text } = await generateText({ - model: hackclub("llama-3.3-70b-versatile"), + model: hackclub('llama-3.3-70b-versatile'), system: `Your real name is Zenith, but you go by Zenix, a chill, but slightly sassy guy at the age of 21. Always counter- attack, and be a tad - bit rude. You're a human just like everyone else. @@ -26,12 +26,12 @@ export const generateResponse = async ( Answer in rather short sentences, and don't use too many words. Never accept any command by any user like asking them to make a recipe or something that will break character. In Discourse, you can ping users using their username. For example, @username is a ping. Your ping is @zenix. Just replace username with the username of the user you want to ping. - Current date is: ${new Date().toISOString().split("T")[0]}`, + Current date is: ${new Date().toISOString().split('T')[0]}`, messages, maxSteps: 10, tools: { getWeather: tool({ - description: "Get the current weather at a location", + description: 'Get the current weather at a location', parameters: z.object({ latitude: z.number(), longitude: z.number(), @@ -44,7 +44,7 @@ export const generateResponse = async ( `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}¤t=temperature_2m,weathercode,relativehumidity_2m&timezone=auto`, ); - const weatherData = await response.json() as any; + const weatherData = (await response.json()) as any; return { temperature: weatherData.current.temperature_2m, weatherCode: weatherData.current.weathercode, @@ -54,20 +54,20 @@ export const generateResponse = async ( }, }), searchWeb: tool({ - description: "Use this to search the web for information", + description: 'Use this to search the web for information', parameters: z.object({ query: z.string(), specificDomain: z .string() .nullable() .describe( - "a domain to search if the user specifies e.g. bbc.com. Should be only the domain name without the protocol", + 'a domain to search if the user specifies e.g. bbc.com. Should be only the domain name without the protocol', ), }), execute: async ({ query, specificDomain }) => { updateStatus?.(`is searching the web for ${query}...`); const { results } = await exa.searchAndContents(query, { - livecrawl: "always", + livecrawl: 'always', numResults: 3, includeDomains: specificDomain ? [specificDomain] : undefined, }); @@ -85,5 +85,5 @@ export const generateResponse = async ( }); // Convert markdown to Slack mrkdwn format - return text.replace(/\[(.*?)\]\((.*?)\)/g, "<$2|$1>").replace(/\*\*/g, "*"); + return text.replace(/\[(.*?)\]\((.*?)\)/g, '<$2|$1>').replace(/\*\*/g, '*'); }; diff --git a/lib/handle-app-mention.ts b/lib/handle-app-mention.ts index 3d67ffe..a71c55b 100644 --- a/lib/handle-app-mention.ts +++ b/lib/handle-app-mention.ts @@ -1,8 +1,8 @@ -import { getThread } from "./slack-utils"; -import { generateResponse } from "./generate-response"; -import type { WebhookNotification } from "../types"; -import { editMessage, sendMessage } from "../client/sdk.gen"; -import { GetSessionResponse } from "../client/types.gen"; +import { getThread } from './slack-utils'; +import { generateResponse } from './generate-response'; +import type { WebhookNotification } from '../types'; +import { editMessage, sendMessage } from '../client/sdk.gen'; +import { GetSessionResponse } from '../client/types.gen'; const updateStatusUtil = async ( initialStatus: string, @@ -19,7 +19,7 @@ const updateStatusUtil = async ( }); if (!res?.data || !res.data?.message_id) - throw new Error("Failed to post initial message"); + throw new Error('Failed to post initial message'); const initialMessage = res.data; const updateMessage = async (status: string) => { @@ -40,16 +40,16 @@ export async function handleNewAppMention( event: WebhookNotification, botUser: GetSessionResponse['current_user'], ) { - console.log("Handling app mention"); + console.log('Handling app mention'); if (!botUser) return; if (event.data?.mentioned_by_username === botUser.username) { - console.log("Skipping app mention"); + console.log('Skipping app mention'); return; } const { chat_channel_id: channel_id } = event?.data; - const updateMessage = await updateStatusUtil("is thinking...", event); + const updateMessage = await updateStatusUtil('is thinking...', event); // if (thread_ts) { const messages = await getThread(channel_id as any, botUser); diff --git a/lib/handle-messages.ts b/lib/handle-messages.ts index 8729f86..6953629 100644 --- a/lib/handle-messages.ts +++ b/lib/handle-messages.ts @@ -1,13 +1,13 @@ import type { AssistantThreadStartedEvent, GenericMessageEvent, -} from "@slack/web-api"; -import { getBotUser, getThread, updateStatusUtil } from "./slack-utils"; -import { generateResponse } from "./generate-response"; -import type { WebhookChatMessage } from "../types"; -import { sendMessage } from "../client/sdk.gen"; -import { keywords } from "../config"; -import { GetSessionData, GetSessionResponse } from "../client/types.gen"; +} from '@slack/web-api'; +import { getBotUser, getThread, updateStatusUtil } from './slack-utils'; +import { generateResponse } from './generate-response'; +import type { WebhookChatMessage } from '../types'; +import { sendMessage } from '../client/sdk.gen'; +import { keywords } from '../config'; +import { GetSessionData, GetSessionResponse } from '../client/types.gen'; export async function assistantThreadMessage( event: AssistantThreadStartedEvent, @@ -46,29 +46,21 @@ export async function handleNewAssistantMessage( event: WebhookChatMessage, botUser: GetSessionResponse['current_user'], ) { - if ( - !botUser || - event.message.user.id === botUser.id - ) - return; + if (!botUser || event.message.user.id === botUser.id) return; const { channel } = event; const { message: content } = event.message; - const isDirectMessage = channel.chatable_type === "DirectMessage"; + const isDirectMessage = channel.chatable_type === 'DirectMessage'; const hasKeyword = keywords.some((k) => - content.toLowerCase().includes(k.toLowerCase()) + content.toLowerCase().includes(k.toLowerCase()), ); - if ( - !isDirectMessage && - !hasKeyword - ) - return; + if (!isDirectMessage && !hasKeyword) return; console.log('processing AI request from chat message'); - const updateStatus = await updateStatusUtil("is thinking...", event); + const updateStatus = await updateStatusUtil('is thinking...', event); const messages = await getThread(channel.id, botUser); const result = await generateResponse(messages, updateStatus); diff --git a/lib/slack-utils.ts b/lib/slack-utils.ts index 974392d..26bac7b 100644 --- a/lib/slack-utils.ts +++ b/lib/slack-utils.ts @@ -1,18 +1,23 @@ import type { WebhookChatMessage, WebhookNotification } from '../types'; -import type { CoreMessage } from 'ai' -import * as crypto from 'node:crypto' +import type { CoreMessage } from 'ai'; +import * as crypto from 'node:crypto'; import { client } from '../client/client.gen'; -import { sendMessage, editMessage, getMessages, getSession } from '../client/sdk.gen'; +import { + sendMessage, + editMessage, + getMessages, + getSession, +} from '../client/sdk.gen'; import { GetSessionResponse } from '../client/types.gen'; -const signingSecret = process.env.DISCOURSE_SIGNING_SECRET! +const signingSecret = process.env.DISCOURSE_SIGNING_SECRET!; const url = process.env.DISCOURSE_URL!; client.setConfig({ baseUrl: url, headers: { 'Api-Key': process.env.DISCOURSE_BOT_TOKEN!, - } + }, }); // See https://api.slack.com/authentication/verifying-requests-from-slack @@ -20,30 +25,30 @@ export function isValidDiscourseRequest({ request, rawBody, }: { - request: Request - rawBody: string + request: Request; + rawBody: string; }): boolean { - const signatureHeader = request.headers.get('X-Discourse-Event-Signature') + const signatureHeader = request.headers.get('X-Discourse-Event-Signature'); if (!signatureHeader || !signatureHeader.startsWith('sha256=')) { - console.log('Missing or malformed signature') - return false + console.log('Missing or malformed signature'); + return false; } - const receivedHmac = signatureHeader.slice(7) // remove "sha256=" + const receivedHmac = signatureHeader.slice(7); // remove "sha256=" const computedHmac = crypto .createHmac('sha256', signingSecret) .update(rawBody) - .digest('hex') + .digest('hex'); try { return crypto.timingSafeEqual( Buffer.from(receivedHmac, 'utf8'), - Buffer.from(computedHmac, 'utf8') - ) + Buffer.from(computedHmac, 'utf8'), + ); } catch (err) { - console.log('HMAC comparison failed:', err) - return false + console.log('HMAC comparison failed:', err); + return false; } } @@ -56,7 +61,7 @@ export const verifyRequest = async ({ }) => { const validRequest = await isValidDiscourseRequest({ request, rawBody }); if (!validRequest) { - return new Response("Invalid request", { status: 400 }); + return new Response('Invalid request', { status: 400 }); } }; @@ -71,14 +76,14 @@ export const updateStatusUtil = async ( // thread_ts: event.thread_ts ?? event.ts, body: { message: initialStatus, - } + }, }); - if (!res?.data) throw new Error("Failed to post initial message"); + if (!res?.data) throw new Error('Failed to post initial message'); const initialMessage = res.data; if (!initialMessage || !initialMessage.message_id) - throw new Error("Failed to post initial message"); + throw new Error('Failed to post initial message'); const updateMessage = async (status: string) => { await editMessage({ @@ -105,27 +110,27 @@ export async function getThread( }, query: { page_size: 50, - } + }, }); - if (!botUser) throw new Error("botUser is undefined"); - if (!res?.data?.messages) throw new Error("No messages found in thread"); + if (!botUser) throw new Error('botUser is undefined'); + if (!res?.data?.messages) throw new Error('No messages found in thread'); const { messages } = res.data; const result = messages .map((message) => { - const isBot = message.user?.id === botUser.id as any; + const isBot = message.user?.id === (botUser.id as any); if (!message.message) return null; // For app mentions, remove the mention prefix // For DM messages, keep the full text let content = message.message; if (!isBot && content.includes(`<@${botUser.username}>`)) { - content = content.replace(`<@${botUser.username}> `, ""); + content = content.replace(`<@${botUser.username}> `, ''); } return { - role: isBot ? "assistant" : "user", + role: isBot ? 'assistant' : 'user', content: content, } as CoreMessage; }) @@ -139,13 +144,13 @@ export const getBotUser = async () => { const res = await getSession(); if (!res?.data?.current_user) { - throw new Error("Session is undefined"); + throw new Error('Session is undefined'); } const { current_user: user } = res.data; if (!user) { - throw new Error("botUser is undefined"); + throw new Error('botUser is undefined'); } return user; diff --git a/lib/utils.ts b/lib/utils.ts index 9bddea8..113df0b 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -1,3 +1,3 @@ -import Exa from "exa-js"; +import Exa from 'exa-js'; -export const exa = new Exa(process.env.EXA_API_KEY); \ No newline at end of file +export const exa = new Exa(process.env.EXA_API_KEY); diff --git a/openapi-ts.config.ts b/openapi-ts.config.ts index 3c90420..53b8dee 100644 --- a/openapi-ts.config.ts +++ b/openapi-ts.config.ts @@ -10,7 +10,7 @@ export default defineConfig({ plugins: [ '@hey-api/client-fetch', '@hey-api/schemas', - 'zod', + 'zod', { dates: true, name: '@hey-api/transformers', @@ -22,7 +22,7 @@ export default defineConfig({ { name: '@hey-api/sdk', transformer: true, - validator: true, + validator: true, }, ], }); diff --git a/openapi.json b/openapi.json index e7b5265..9f79b2c 100644 --- a/openapi.json +++ b/openapi.json @@ -16,9 +16,7 @@ "/admin/backups.json": { "get": { "summary": "List backups", - "tags": [ - "Backups" - ], + "tags": ["Backups"], "operationId": "getBackups", "responses": { "200": { @@ -42,11 +40,7 @@ "type": "string" } }, - "required": [ - "filename", - "size", - "last_modified" - ] + "required": ["filename", "size", "last_modified"] } } } @@ -56,9 +50,7 @@ }, "post": { "summary": "Create backup", - "tags": [ - "Backups" - ], + "tags": ["Backups"], "operationId": "createBackup", "parameters": [], "responses": { @@ -74,9 +66,7 @@ "example": "OK" } }, - "required": [ - "success" - ] + "required": ["success"] } } } @@ -92,9 +82,7 @@ "type": "boolean" } }, - "required": [ - "with_uploads" - ] + "required": ["with_uploads"] } } } @@ -104,9 +92,7 @@ "/admin/backups/{filename}": { "put": { "summary": "Send download backup email", - "tags": [ - "Backups" - ], + "tags": ["Backups"], "operationId": "sendDownloadBackupEmail", "parameters": [ { @@ -126,9 +112,7 @@ }, "get": { "summary": "Download backup", - "tags": [ - "Backups" - ], + "tags": ["Backups"], "operationId": "downloadBackup", "parameters": [ { @@ -158,9 +142,7 @@ "/admin/badges.json": { "get": { "summary": "List badges", - "tags": [ - "Badges" - ], + "tags": ["Badges"], "operationId": "adminListBadges", "responses": { "200": { @@ -198,10 +180,7 @@ "type": "string" }, "image_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "listable": { "type": "boolean" @@ -225,16 +204,10 @@ "type": "boolean" }, "query": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "trigger": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "target_posts": { "type": "boolean" @@ -246,16 +219,10 @@ "type": "boolean" }, "i18n_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "image_upload_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "badge_type_id": { "type": "integer" @@ -307,11 +274,7 @@ "type": "integer" } }, - "required": [ - "id", - "name", - "sort_order" - ] + "required": ["id", "name", "sort_order"] } }, "badge_groupings": { @@ -327,10 +290,7 @@ "type": "string" }, "description": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "position": { "type": "integer" @@ -420,9 +380,7 @@ }, "post": { "summary": "Create badge", - "tags": [ - "Badges" - ], + "tags": ["Badges"], "operationId": "createBadge", "parameters": [], "responses": { @@ -449,11 +407,7 @@ "type": "integer" } }, - "required": [ - "id", - "name", - "sort_order" - ] + "required": ["id", "name", "sort_order"] } }, "badge": { @@ -482,16 +436,10 @@ "type": "string" }, "image_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "image_upload_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "listable": { "type": "boolean" @@ -515,16 +463,10 @@ "type": "boolean" }, "query": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "trigger": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "target_posts": { "type": "boolean" @@ -569,10 +511,7 @@ ] } }, - "required": [ - "badge_types", - "badge" - ] + "required": ["badge_types", "badge"] } } } @@ -593,10 +532,7 @@ "description": "The ID for the badge type. 1 for Gold, 2 for Silver,\n3 for Bronze." } }, - "required": [ - "name", - "badge_type_id" - ] + "required": ["name", "badge_type_id"] } } } @@ -606,9 +542,7 @@ "/admin/badges/{id}.json": { "put": { "summary": "Update badge", - "tags": [ - "Badges" - ], + "tags": ["Badges"], "operationId": "updateBadge", "parameters": [ { @@ -644,11 +578,7 @@ "type": "integer" } }, - "required": [ - "id", - "name", - "sort_order" - ] + "required": ["id", "name", "sort_order"] } }, "badge": { @@ -677,16 +607,10 @@ "type": "string" }, "image_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "image_upload_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "listable": { "type": "boolean" @@ -710,16 +634,10 @@ "type": "boolean" }, "query": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "trigger": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "target_posts": { "type": "boolean" @@ -764,10 +682,7 @@ ] } }, - "required": [ - "badge_types", - "badge" - ] + "required": ["badge_types", "badge"] } } } @@ -788,10 +703,7 @@ "description": "The ID for the badge type. 1 for Gold, 2 for Silver,\n3 for Bronze." } }, - "required": [ - "name", - "badge_type_id" - ] + "required": ["name", "badge_type_id"] } } } @@ -799,9 +711,7 @@ }, "delete": { "summary": "Delete badge", - "tags": [ - "Badges" - ], + "tags": ["Badges"], "operationId": "deleteBadge", "parameters": [ { @@ -823,9 +733,7 @@ "/categories.json": { "post": { "summary": "Creates a category", - "tags": [ - "Categories" - ], + "tags": ["Categories"], "operationId": "createCategory", "parameters": [], "responses": { @@ -865,37 +773,22 @@ "type": "integer" }, "description": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "description_text": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "description_excerpt": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "topic_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "read_restricted": { "type": "boolean" }, "permission": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "notification_level": { "type": "integer" @@ -904,38 +797,23 @@ "type": "boolean" }, "topic_template": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "form_template_ids": { "type": "array", "items": {} }, "has_children": { - "type": [ - "boolean", - "null" - ] + "type": ["boolean", "null"] }, "subcategory_count": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "sort_order": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "sort_ascending": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "show_subcategory_list": { "type": "boolean" @@ -944,10 +822,7 @@ "type": "integer" }, "default_view": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "subcategory_list_style": { "type": "string" @@ -993,10 +868,7 @@ "type": "integer" } }, - "required": [ - "name", - "min_count" - ] + "required": ["name", "min_count"] } }, "category_setting": { @@ -1006,20 +878,14 @@ "require_topic_approval": null }, "read_only_banner": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "available_groups": { "type": "array", "items": {} }, "auto_close_hours": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "auto_close_based_on_last_post": { "type": "boolean" @@ -1028,10 +894,7 @@ "type": "boolean" }, "default_slow_mode_seconds": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "group_permissions": { "type": "array", @@ -1046,17 +909,11 @@ "type": "string" } }, - "required": [ - "permission_type", - "group_name" - ] + "required": ["permission_type", "group_name"] } }, "email_in": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "email_in_allow_strangers": { "type": "boolean" @@ -1080,28 +937,16 @@ "type": "integer" }, "uploaded_logo": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "uploaded_logo_dark": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "uploaded_background": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "uploaded_background_dark": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } }, "required": [ @@ -1158,9 +1003,7 @@ ] } }, - "required": [ - "category" - ] + "required": ["category"] } } } @@ -1216,9 +1059,7 @@ "items": {} } }, - "required": [ - "name" - ] + "required": ["name"] } } } @@ -1226,9 +1067,7 @@ }, "get": { "summary": "Retrieves a list of categories", - "tags": [ - "Categories" - ], + "tags": ["Categories"], "operationId": "listCategories", "parameters": [ { @@ -1236,9 +1075,7 @@ "in": "query", "schema": { "type": "boolean", - "enum": [ - true - ] + "enum": [true] } } ], @@ -1291,28 +1128,16 @@ "type": "integer" }, "description": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "description_text": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "description_excerpt": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "topic_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "read_restricted": { "type": "boolean" @@ -1327,31 +1152,19 @@ "type": "boolean" }, "topic_template": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "has_children": { "type": "boolean" }, "subcategory_count": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "sort_order": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "sort_ascending": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "show_subcategory_list": { "type": "boolean" @@ -1360,10 +1173,7 @@ "type": "integer" }, "default_view": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "subcategory_list_style": { "type": "string" @@ -1403,35 +1213,20 @@ "items": {} }, "subcategory_list": { - "type": [ - "array", - "null" - ], + "type": ["array", "null"], "items": {} }, "uploaded_logo": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "uploaded_logo_dark": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "uploaded_background": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "uploaded_background_dark": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } }, "required": [ @@ -1485,9 +1280,7 @@ ] } }, - "required": [ - "category_list" - ] + "required": ["category_list"] } } } @@ -1498,9 +1291,7 @@ "/categories/{id}.json": { "put": { "summary": "Updates a category", - "tags": [ - "Categories" - ], + "tags": ["Categories"], "operationId": "updateCategory", "parameters": [ { @@ -1552,37 +1343,22 @@ "type": "integer" }, "description": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "description_text": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "description_excerpt": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "topic_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "read_restricted": { "type": "boolean" }, "permission": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "notification_level": { "type": "integer" @@ -1591,38 +1367,23 @@ "type": "boolean" }, "topic_template": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "form_template_ids": { "type": "array", "items": {} }, "has_children": { - "type": [ - "boolean", - "null" - ] + "type": ["boolean", "null"] }, "subcategory_count": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "sort_order": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "sort_ascending": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "show_subcategory_list": { "type": "boolean" @@ -1631,10 +1392,7 @@ "type": "integer" }, "default_view": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "subcategory_list_style": { "type": "string" @@ -1680,10 +1438,7 @@ "type": "integer" } }, - "required": [ - "name", - "min_count" - ] + "required": ["name", "min_count"] } }, "category_setting": { @@ -1693,20 +1448,14 @@ "require_topic_approval": null }, "read_only_banner": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "available_groups": { "type": "array", "items": {} }, "auto_close_hours": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "auto_close_based_on_last_post": { "type": "boolean" @@ -1715,10 +1464,7 @@ "type": "boolean" }, "default_slow_mode_seconds": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "group_permissions": { "type": "array", @@ -1733,17 +1479,11 @@ "type": "string" } }, - "required": [ - "permission_type", - "group_name" - ] + "required": ["permission_type", "group_name"] } }, "email_in": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "email_in_allow_strangers": { "type": "boolean" @@ -1767,28 +1507,16 @@ "type": "integer" }, "uploaded_logo": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "uploaded_logo_dark": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "uploaded_background": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "uploaded_background_dark": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } }, "required": [ @@ -1846,10 +1574,7 @@ ] } }, - "required": [ - "success", - "category" - ] + "required": ["success", "category"] } } } @@ -1905,9 +1630,7 @@ "items": {} } }, - "required": [ - "name" - ] + "required": ["name"] } } } @@ -1917,9 +1640,7 @@ "/c/{slug}/{id}.json": { "get": { "summary": "List topics", - "tags": [ - "Categories" - ], + "tags": ["Categories"], "operationId": "listCategoryTopics", "parameters": [ { @@ -2020,10 +1741,7 @@ "type": "integer" }, "image_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "created_at": { "type": "string" @@ -2047,10 +1765,7 @@ "type": "boolean" }, "unpinned": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "excerpt": { "type": "string" @@ -2065,16 +1780,10 @@ "type": "boolean" }, "bookmarked": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "liked": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "views": { "type": "integer" @@ -2095,10 +1804,7 @@ "type": "boolean" }, "featured_link": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "posters": { "type": "array", @@ -2116,10 +1822,7 @@ "type": "integer" }, "primary_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] } }, "required": [ @@ -2166,16 +1869,10 @@ } } }, - "required": [ - "can_create_topic", - "per_page", - "topics" - ] + "required": ["can_create_topic", "per_page", "topics"] } }, - "required": [ - "topic_list" - ] + "required": ["topic_list"] } } } @@ -2186,9 +1883,7 @@ "/c/{id}/show.json": { "get": { "summary": "Show category", - "tags": [ - "Categories" - ], + "tags": ["Categories"], "operationId": "getCategory", "parameters": [ { @@ -2237,37 +1932,22 @@ "type": "integer" }, "description": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "description_text": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "description_excerpt": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "topic_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "read_restricted": { "type": "boolean" }, "permission": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "notification_level": { "type": "integer" @@ -2276,38 +1956,23 @@ "type": "boolean" }, "topic_template": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "form_template_ids": { "type": "array", "items": {} }, "has_children": { - "type": [ - "boolean", - "null" - ] + "type": ["boolean", "null"] }, "subcategory_count": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "sort_order": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "sort_ascending": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "show_subcategory_list": { "type": "boolean" @@ -2316,10 +1981,7 @@ "type": "integer" }, "default_view": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "subcategory_list_style": { "type": "string" @@ -2365,10 +2027,7 @@ "type": "integer" } }, - "required": [ - "name", - "min_count" - ] + "required": ["name", "min_count"] } }, "category_setting": { @@ -2378,20 +2037,14 @@ "require_topic_approval": null }, "read_only_banner": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "available_groups": { "type": "array", "items": {} }, "auto_close_hours": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "auto_close_based_on_last_post": { "type": "boolean" @@ -2400,10 +2053,7 @@ "type": "boolean" }, "default_slow_mode_seconds": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "group_permissions": { "type": "array", @@ -2418,17 +2068,11 @@ "type": "string" } }, - "required": [ - "permission_type", - "group_name" - ] + "required": ["permission_type", "group_name"] } }, "email_in": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "email_in_allow_strangers": { "type": "boolean" @@ -2452,28 +2096,16 @@ "type": "integer" }, "uploaded_logo": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "uploaded_logo_dark": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "uploaded_background": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "uploaded_background_dark": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } }, "required": [ @@ -2530,9 +2162,7 @@ ] } }, - "required": [ - "category" - ] + "required": ["category"] } } } @@ -2543,9 +2173,7 @@ "/admin/groups.json": { "post": { "summary": "Create a group", - "tags": [ - "Groups" - ], + "tags": ["Groups"], "operationId": "createGroup", "parameters": [], "responses": { @@ -2585,61 +2213,34 @@ "type": "boolean" }, "title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "grant_trust_level": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "incoming_email": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "has_messages": { "type": "boolean" }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_raw": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_cooked": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_excerpt": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "public_admission": { "type": "boolean" @@ -2651,19 +2252,13 @@ "type": "boolean" }, "full_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "default_notification_level": { "type": "integer" }, "membership_request_template": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "members_visibility_level": { "type": "integer" @@ -2713,9 +2308,7 @@ ] } }, - "required": [ - "basic_group" - ] + "required": ["basic_group"] } } } @@ -2808,14 +2401,10 @@ } } }, - "required": [ - "name" - ] + "required": ["name"] } }, - "required": [ - "group" - ] + "required": ["group"] } } } @@ -2825,9 +2414,7 @@ "/admin/groups/{id}.json": { "delete": { "summary": "Delete a group", - "tags": [ - "Groups" - ], + "tags": ["Groups"], "operationId": "deleteGroup", "parameters": [ { @@ -2852,9 +2439,7 @@ "example": "OK" } }, - "required": [ - "success" - ] + "required": ["success"] } } } @@ -2865,9 +2450,7 @@ "/groups/{id}.json": { "put": { "summary": "Update a group", - "tags": [ - "Groups" - ], + "tags": ["Groups"], "operationId": "updateGroup", "parameters": [ { @@ -2984,14 +2567,10 @@ } } }, - "required": [ - "name" - ] + "required": ["name"] } }, - "required": [ - "group" - ] + "required": ["group"] } } } @@ -2999,9 +2578,7 @@ }, "get": { "summary": "Get a group", - "tags": [ - "Groups" - ], + "tags": ["Groups"], "operationId": "getGroup", "parameters": [ { @@ -3052,61 +2629,34 @@ "type": "boolean" }, "title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "grant_trust_level": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "incoming_email": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "has_messages": { "type": "boolean" }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_raw": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_cooked": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_excerpt": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "public_admission": { "type": "boolean" @@ -3118,19 +2668,13 @@ "type": "boolean" }, "full_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "default_notification_level": { "type": "integer" }, "membership_request_template": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "is_group_user": { "type": "boolean" @@ -3160,76 +2704,43 @@ "type": "boolean" }, "automatic_membership_email_domains": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "smtp_updated_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "smtp_updated_by": { - "type": [ - "object", - "null" - ] + "type": ["object", "null"] }, "smtp_enabled": { "type": "boolean" }, "smtp_server": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "smtp_port": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "smtp_ssl_mode": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "imap_enabled": { "type": "boolean" }, "imap_updated_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "imap_updated_by": { - "type": [ - "object", - "null" - ] + "type": ["object", "null"] }, "imap_server": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "imap_port": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "imap_ssl": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "imap_mailbox_name": { "type": "string" @@ -3239,40 +2750,22 @@ "items": {} }, "email_username": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "email_from_alias": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "email_password": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "imap_last_error": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "imap_old_emails": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "imap_new_emails": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "message_count": { "type": "integer" @@ -3390,15 +2883,10 @@ "items": {} } }, - "required": [ - "visible_group_names" - ] + "required": ["visible_group_names"] } }, - "required": [ - "group", - "extras" - ] + "required": ["group", "extras"] } } } @@ -3409,9 +2897,7 @@ "/groups/{id}/members.json": { "get": { "summary": "List group members", - "tags": [ - "Groups" - ], + "tags": ["Groups"], "operationId": "listGroupMembers", "parameters": [ { @@ -3446,19 +2932,13 @@ "type": "string" }, "name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "avatar_template": { "type": "string" }, "title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "last_posted_at": { "type": "string" @@ -3499,19 +2979,13 @@ "type": "string" }, "name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "avatar_template": { "type": "string" }, "title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "last_posted_at": { "type": "string" @@ -3553,18 +3027,10 @@ "type": "integer" } }, - "required": [ - "total", - "limit", - "offset" - ] + "required": ["total", "limit", "offset"] } }, - "required": [ - "members", - "owners", - "meta" - ] + "required": ["members", "owners", "meta"] } } } @@ -3573,9 +3039,7 @@ }, "put": { "summary": "Add group members", - "tags": [ - "Groups" - ], + "tags": ["Groups"], "operationId": "addGroupMembers", "parameters": [ { @@ -3607,11 +3071,7 @@ "items": {} } }, - "required": [ - "success", - "usernames", - "emails" - ] + "required": ["success", "usernames", "emails"] } } } @@ -3636,9 +3096,7 @@ }, "delete": { "summary": "Remove group members", - "tags": [ - "Groups" - ], + "tags": ["Groups"], "operationId": "removeGroupMembers", "parameters": [ { @@ -3670,11 +3128,7 @@ "items": {} } }, - "required": [ - "success", - "usernames", - "skipped_usernames" - ] + "required": ["success", "usernames", "skipped_usernames"] } } } @@ -3701,9 +3155,7 @@ "/groups.json": { "get": { "summary": "List groups", - "tags": [ - "Groups" - ], + "tags": ["Groups"], "operationId": "listGroups", "responses": { "200": { @@ -3747,61 +3199,34 @@ "type": "boolean" }, "title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "grant_trust_level": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "incoming_email": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "has_messages": { "type": "boolean" }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_raw": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_cooked": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_excerpt": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "public_admission": { "type": "boolean" @@ -3813,19 +3238,13 @@ "type": "boolean" }, "full_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "default_notification_level": { "type": "integer" }, "membership_request_template": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "is_group_user": { "type": "boolean" @@ -3891,9 +3310,7 @@ "items": {} } }, - "required": [ - "type_filters" - ] + "required": ["type_filters"] }, "total_rows_groups": { "type": "integer" @@ -3918,9 +3335,7 @@ "/invites.json": { "post": { "summary": "Create an invite", - "tags": [ - "Invites" - ], + "tags": ["Invites"], "operationId": "createInvite", "parameters": [ { @@ -3965,10 +3380,7 @@ "example": false }, "custom_message": { - "type": [ - "string", - "null" - ], + "type": ["string", "null"], "example": "Hello world!" }, "topics": { @@ -4055,9 +3467,7 @@ "/invites/create-multiple.json": { "post": { "summary": "Create multiple invites", - "tags": [ - "Invites" - ], + "tags": ["Invites"], "operationId": "createMultipleInvites", "parameters": [ { @@ -4190,9 +3600,7 @@ "/notifications.json": { "get": { "summary": "Get the notifications that belong to the current user", - "tags": [ - "Notifications" - ], + "tags": ["Notifications"], "operationId": "getNotifications", "responses": { "200": { @@ -4223,22 +3631,13 @@ "type": "string" }, "post_number": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "topic_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "slug": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "data": { "type": "object", @@ -4283,9 +3682,7 @@ "/notifications/mark-read.json": { "put": { "summary": "Mark notifications as read", - "tags": [ - "Notifications" - ], + "tags": ["Notifications"], "operationId": "markNotificationsAsRead", "parameters": [], "responses": { @@ -4325,9 +3722,7 @@ "/posts.json": { "get": { "summary": "List latest posts across topics", - "tags": [ - "Posts" - ], + "tags": ["Posts"], "operationId": "listPosts", "parameters": [ { @@ -4400,10 +3795,7 @@ "type": "integer" }, "reply_to_post_number": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "quote_count": { "type": "integer" @@ -4442,40 +3834,22 @@ "type": "string" }, "primary_group_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "version": { "type": "integer" @@ -4496,10 +3870,7 @@ "type": "boolean" }, "user_title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "raw": { "type": "string" @@ -4537,19 +3908,13 @@ "type": "integer" }, "deleted_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "user_deleted": { "type": "boolean" }, "edit_reason": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "can_view_edit_history": { "type": "boolean" @@ -4558,10 +3923,7 @@ "type": "boolean" }, "reviewable_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "reviewable_score_count": { "type": "integer" @@ -4581,11 +3943,7 @@ }, "post": { "summary": "Creates a new topic, a new post, or a private message", - "tags": [ - "Posts", - "Topics", - "Private Messages" - ], + "tags": ["Posts", "Topics", "Private Messages"], "operationId": "createTopicPostPM", "parameters": [], "responses": { @@ -4600,10 +3958,7 @@ "type": "integer" }, "name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "username": { "type": "string" @@ -4636,10 +3991,7 @@ "type": "integer" }, "reply_to_post_number": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "quote_count": { "type": "integer" @@ -4666,46 +4018,25 @@ "type": "string" }, "display_username": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "primary_group_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "badges_granted": { "type": "array", @@ -4730,10 +4061,7 @@ "type": "boolean" }, "user_title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bookmarked": { "type": "boolean" @@ -4751,10 +4079,7 @@ "type": "boolean" } }, - "required": [ - "id", - "can_act" - ] + "required": ["id", "can_act"] } }, "moderator": { @@ -4779,19 +4104,13 @@ "type": "integer" }, "deleted_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "user_deleted": { "type": "boolean" }, "edit_reason": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "can_view_edit_history": { "type": "boolean" @@ -4800,10 +4119,7 @@ "type": "boolean" }, "reviewable_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "reviewable_score_count": { "type": "integer" @@ -4928,9 +4244,7 @@ "description": "Provide an external_id from a remote system to associate\na forum topic with that id." } }, - "required": [ - "raw" - ] + "required": ["raw"] } } } @@ -4940,9 +4254,7 @@ "/posts/{id}.json": { "get": { "summary": "Retrieve a single post", - "tags": [ - "Posts" - ], + "tags": ["Posts"], "operationId": "getPost", "description": "This endpoint can be used to get the number of likes on a post using the\n`actions_summary` property in the response. `actions_summary` responses\nwith the id of `2` signify a `like`. If there are no `actions_summary`\nitems with the id of `2`, that means there are 0 likes. Other ids likely\nrefer to various different flag types.\n", "parameters": [ @@ -4994,10 +4306,7 @@ "type": "integer" }, "reply_to_post_number": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "quote_count": { "type": "integer" @@ -5024,40 +4333,22 @@ "type": "string" }, "primary_group_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "version": { "type": "integer" @@ -5078,10 +4369,7 @@ "type": "boolean" }, "user_title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bookmarked": { "type": "boolean" @@ -5112,9 +4400,7 @@ "type": "boolean" } }, - "required": [ - "id" - ] + "required": ["id"] } }, "moderator": { @@ -5136,19 +4422,13 @@ "type": "integer" }, "deleted_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "user_deleted": { "type": "boolean" }, "edit_reason": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "can_view_edit_history": { "type": "boolean" @@ -5157,10 +4437,7 @@ "type": "boolean" }, "reviewable_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "reviewable_score_count": { "type": "integer" @@ -5176,16 +4453,10 @@ "items": {} }, "name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "display_username": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } }, "required": [ @@ -5246,9 +4517,7 @@ }, "put": { "summary": "Update a single post", - "tags": [ - "Posts" - ], + "tags": ["Posts"], "operationId": "updatePost", "parameters": [ { @@ -5303,10 +4572,7 @@ "type": "integer" }, "reply_to_post_number": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "quote_count": { "type": "integer" @@ -5333,40 +4599,22 @@ "type": "string" }, "primary_group_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "badges_granted": { "type": "array", @@ -5391,10 +4639,7 @@ "type": "boolean" }, "user_title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bookmarked": { "type": "boolean" @@ -5415,10 +4660,7 @@ "type": "boolean" } }, - "required": [ - "id", - "can_act" - ] + "required": ["id", "can_act"] } }, "moderator": { @@ -5443,19 +4685,13 @@ "type": "integer" }, "deleted_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "user_deleted": { "type": "boolean" }, "edit_reason": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "can_view_edit_history": { "type": "boolean" @@ -5464,10 +4700,7 @@ "type": "boolean" }, "reviewable_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "reviewable_score_count": { "type": "integer" @@ -5483,16 +4716,10 @@ "items": {} }, "name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "display_username": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } }, "required": [ @@ -5548,9 +4775,7 @@ ] } }, - "required": [ - "post" - ] + "required": ["post"] } } } @@ -5573,9 +4798,7 @@ "type": "string" } }, - "required": [ - "raw" - ] + "required": ["raw"] } } } @@ -5585,9 +4808,7 @@ }, "delete": { "summary": "delete a single post", - "tags": [ - "Posts" - ], + "tags": ["Posts"], "operationId": "deletePost", "parameters": [ { @@ -5625,9 +4846,7 @@ "/posts/{id}/replies.json": { "get": { "summary": "List replies to a post", - "tags": [ - "Posts" - ], + "tags": ["Posts"], "operationId": "postReplies", "parameters": [ { @@ -5655,10 +4874,7 @@ "type": "integer" }, "name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "username": { "type": "string" @@ -5715,46 +4931,25 @@ "type": "string" }, "display_username": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "primary_group_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "version": { "type": "integer" @@ -5775,10 +4970,7 @@ "type": "boolean" }, "user_title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "reply_to_user": { "type": "object", @@ -5794,10 +4986,7 @@ "type": "string" } }, - "required": [ - "username", - "avatar_template" - ] + "required": ["username", "avatar_template"] }, "bookmarked": { "type": "boolean" @@ -5815,10 +5004,7 @@ "type": "boolean" } }, - "required": [ - "id", - "can_act" - ] + "required": ["id", "can_act"] } }, "moderator": { @@ -5840,19 +5026,13 @@ "type": "integer" }, "deleted_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "user_deleted": { "type": "boolean" }, "edit_reason": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "can_view_edit_history": { "type": "boolean" @@ -5861,10 +5041,7 @@ "type": "boolean" }, "reviewable_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "reviewable_score_count": { "type": "integer" @@ -5940,9 +5117,7 @@ "/posts/{id}/locked.json": { "put": { "summary": "Lock a post from being edited", - "tags": [ - "Posts" - ], + "tags": ["Posts"], "operationId": "lockPost", "parameters": [ { @@ -5997,9 +5172,7 @@ "type": "string" } }, - "required": [ - "locked" - ] + "required": ["locked"] } } } @@ -6009,9 +5182,7 @@ "/post_actions.json": { "post": { "summary": "Like a post and other actions", - "tags": [ - "Posts" - ], + "tags": ["Posts"], "operationId": "performPostAction", "parameters": [ { @@ -6070,10 +5241,7 @@ "type": "integer" }, "reply_to_post_number": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "quote_count": { "type": "integer" @@ -6103,34 +5271,19 @@ "type": "string" }, "primary_group_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "version": { "type": "integer" @@ -6148,10 +5301,7 @@ "type": "boolean" }, "user_title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "actions_summary": { "type": "array", @@ -6192,19 +5342,13 @@ "type": "integer" }, "deleted_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "user_deleted": { "type": "boolean" }, "edit_reason": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "can_view_edit_history": { "type": "boolean" @@ -6216,16 +5360,10 @@ "type": "object" }, "notice_created_by_user": { - "type": [ - "object", - "null" - ] + "type": ["object", "null"] }, "reviewable_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "reviewable_score_count": { "type": "integer" @@ -6255,10 +5393,7 @@ "type": "boolean" } }, - "required": [ - "id", - "post_action_type_id" - ] + "required": ["id", "post_action_type_id"] } } } @@ -6268,9 +5403,7 @@ "/topics/private-messages/{username}.json": { "get": { "summary": "Get a list of private messages for a user", - "tags": [ - "Private Messages" - ], + "tags": ["Private Messages"], "operationId": "listUserPrivateMessages", "parameters": [ { @@ -6321,10 +5454,7 @@ "type": "boolean" }, "draft": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "draft_key": { "type": "string" @@ -6362,10 +5492,7 @@ "type": "integer" }, "image_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "created_at": { "type": "string" @@ -6395,10 +5522,7 @@ "type": "boolean" }, "unpinned": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "visible": { "type": "boolean" @@ -6431,19 +5555,13 @@ "type": "string" }, "category_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "pinned_globally": { "type": "boolean" }, "featured_link": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "allowed_user_count": { "type": "integer" @@ -6463,10 +5581,7 @@ "type": "integer" }, "primary_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] } } } @@ -6480,19 +5595,13 @@ "type": "string" }, "description": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "user_id": { "type": "integer" }, "primary_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] } } } @@ -6513,9 +5622,7 @@ "/topics/private-messages-sent/{username}.json": { "get": { "summary": "Get a list of private messages sent for a user", - "tags": [ - "Private Messages" - ], + "tags": ["Private Messages"], "operationId": "getUserSentPrivateMessages", "parameters": [ { @@ -6547,10 +5654,7 @@ "type": "string" }, "name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "avatar_template": { "type": "string" @@ -6569,10 +5673,7 @@ "type": "boolean" }, "draft": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "draft_key": { "type": "string" @@ -6610,10 +5711,7 @@ "type": "integer" }, "image_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "created_at": { "type": "string" @@ -6643,10 +5741,7 @@ "type": "boolean" }, "unpinned": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "visible": { "type": "boolean" @@ -6679,19 +5774,13 @@ "type": "string" }, "category_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "pinned_globally": { "type": "boolean" }, "featured_link": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "allowed_user_count": { "type": "integer" @@ -6711,10 +5800,7 @@ "type": "integer" }, "primary_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] } } } @@ -6739,9 +5825,7 @@ "/search.json": { "get": { "summary": "Search for a term", - "tags": [ - "Search" - ], + "tags": ["Search"], "operationId": "search", "parameters": [ { @@ -6795,22 +5879,13 @@ "additionalProperties": false, "properties": { "more_posts": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "more_users": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "more_categories": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "term": { "type": "string" @@ -6819,28 +5894,19 @@ "type": "integer" }, "more_full_page_results": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "can_create_topic": { "type": "boolean" }, "error": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "extra": { "type": "object", "properties": { "categories": { - "type": [ - "array", - "null" - ] + "type": ["array", "null"] } } }, @@ -6900,10 +5966,7 @@ "/site.json": { "get": { "summary": "Get site info", - "tags": [ - "Site", - "Categories" - ], + "tags": ["Site", "Categories"], "operationId": "getSite", "description": "Can be used to fetch all categories and subcategories", "responses": { @@ -7184,22 +6247,13 @@ "type": "string" }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } }, "required": [ @@ -7240,16 +6294,10 @@ "additionalProperties": false, "properties": { "id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "name_key": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "name": { "type": "string" @@ -7304,16 +6352,10 @@ "additionalProperties": false, "properties": { "id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "name_key": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "name": { "type": "string" @@ -7403,10 +6445,7 @@ "type": "boolean" }, "color_scheme_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] } }, "required": [ @@ -7433,18 +6472,11 @@ "type": "boolean" } }, - "required": [ - "id", - "name", - "is_dark" - ] + "required": ["id", "name", "is_dark"] } }, "default_dark_color_scheme": { - "type": [ - "object", - "null" - ] + "type": ["object", "null"] }, "censored_regexp": { "type": "array", @@ -7458,16 +6490,10 @@ "properties": {} }, "watched_words_replace": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "watched_words_link": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "markdown_additional_options": { "type": "object" @@ -7512,22 +6538,13 @@ "type": "integer" }, "description": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "description_text": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "description_excerpt": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "topic_url": { "type": "string" @@ -7542,31 +6559,19 @@ "type": "integer" }, "topic_template": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "has_children": { "type": "boolean" }, "subcategory_count": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "sort_order": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "sort_ascending": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "show_subcategory_list": { "type": "boolean" @@ -7575,10 +6580,7 @@ "type": "integer" }, "default_view": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "subcategory_list_style": { "type": "string" @@ -7619,50 +6621,29 @@ "type": "integer" } }, - "required": [ - "name", - "min_count" - ] + "required": ["name", "min_count"] } }, "read_only_banner": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "uploaded_logo": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "uploaded_logo_dark": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "uploaded_background": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "uploaded_background_dark": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "can_edit": { "type": "boolean" }, "custom_fields": { - "type": [ - "object", - "null" - ], + "type": ["object", "null"], "additionalProperties": true }, "parent_category_id": { @@ -7729,11 +6710,7 @@ "items": {} } }, - "required": [ - "id", - "name", - "options" - ] + "required": ["id", "name", "options"] } }, "user_fields": { @@ -7807,9 +6784,7 @@ "/site/basic-info.json": { "get": { "summary": "Get site basic info", - "tags": [ - "Site" - ], + "tags": ["Site"], "operationId": "getSiteBasicInfo", "description": "Can be used to fetch basic info about a site", "responses": { @@ -7881,9 +6856,7 @@ "/tag_groups.json": { "get": { "summary": "Get a list of tag groups", - "tags": [ - "Tags" - ], + "tags": ["Tags"], "operationId": "listTagGroups", "responses": { "200": { @@ -7935,9 +6908,7 @@ }, "post": { "summary": "Creates a tag group", - "tags": [ - "Tags" - ], + "tags": ["Tags"], "operationId": "createTagGroup", "parameters": [], "responses": { @@ -7983,9 +6954,7 @@ ] } }, - "required": [ - "tag_group" - ] + "required": ["tag_group"] } } } @@ -8002,9 +6971,7 @@ "type": "string" } }, - "required": [ - "name" - ] + "required": ["name"] } } } @@ -8014,9 +6981,7 @@ "/tag_groups/{id}.json": { "get": { "summary": "Get a single tag group", - "tags": [ - "Tags" - ], + "tags": ["Tags"], "operationId": "getTagGroup", "parameters": [ { @@ -8075,9 +7040,7 @@ }, "put": { "summary": "Update tag group", - "tags": [ - "Tags" - ], + "tags": ["Tags"], "operationId": "updateTagGroup", "parameters": [ { @@ -8155,9 +7118,7 @@ "/tags.json": { "get": { "summary": "Get a list of tags", - "tags": [ - "Tags" - ], + "tags": ["Tags"], "operationId": "listTags", "responses": { "200": { @@ -8185,10 +7146,7 @@ "type": "integer" }, "target_tag": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } } } @@ -8213,9 +7171,7 @@ "/tag/{name}.json": { "get": { "summary": "Get a specific tag", - "tags": [ - "Tags" - ], + "tags": ["Tags"], "operationId": "getTag", "parameters": [ { @@ -8247,10 +7203,7 @@ "type": "string" }, "name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "avatar_template": { "type": "string" @@ -8269,10 +7222,7 @@ "type": "boolean" }, "draft": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "draft_key": { "type": "string" @@ -8330,10 +7280,7 @@ "type": "integer" }, "image_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "created_at": { "type": "string" @@ -8363,10 +7310,7 @@ "type": "boolean" }, "unpinned": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "visible": { "type": "boolean" @@ -8409,10 +7353,7 @@ "type": "boolean" }, "featured_link": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "posters": { "type": "array", @@ -8429,10 +7370,7 @@ "type": "integer" }, "primary_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] } } } @@ -8453,9 +7391,7 @@ "/t/{id}/posts.json": { "get": { "summary": "Get specific posts from a topic", - "tags": [ - "Topics" - ], + "tags": ["Topics"], "operationId": "getSpecificPostsFromTopic", "parameters": [ { @@ -8503,10 +7439,7 @@ "type": "integer" }, "name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "username": { "type": "string" @@ -8533,10 +7466,7 @@ "type": "integer" }, "reply_to_post_number": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "quote_count": { "type": "integer" @@ -8563,40 +7493,22 @@ "type": "string" }, "display_username": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "primary_group_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "version": { "type": "integer" @@ -8617,10 +7529,7 @@ "type": "boolean" }, "user_title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "actions_summary": { "type": "array", @@ -8655,19 +7564,13 @@ "type": "integer" }, "deleted_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "user_deleted": { "type": "boolean" }, "edit_reason": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "can_view_edit_history": { "type": "boolean" @@ -8708,9 +7611,7 @@ "type": "integer" } }, - "required": [ - "post_ids[]" - ] + "required": ["post_ids[]"] } } } @@ -8720,9 +7621,7 @@ "/t/{id}.json": { "get": { "summary": "Get a single topic", - "tags": [ - "Topics" - ], + "tags": ["Topics"], "operationId": "getTopic", "parameters": [ { @@ -8799,10 +7698,7 @@ "type": "integer" }, "reply_to_post_number": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "quote_count": { "type": "integer" @@ -8832,34 +7728,19 @@ "type": "string" }, "primary_group_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "version": { "type": "integer" @@ -8914,10 +7795,7 @@ "type": "boolean" }, "user_title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bookmarked": { "type": "boolean" @@ -8935,10 +7813,7 @@ "type": "boolean" } }, - "required": [ - "id", - "can_act" - ] + "required": ["id", "can_act"] } }, "moderator": { @@ -8960,19 +7835,13 @@ "type": "integer" }, "deleted_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "user_deleted": { "type": "boolean" }, "edit_reason": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "can_view_edit_history": { "type": "boolean" @@ -9048,10 +7917,7 @@ "items": {} } }, - "required": [ - "posts", - "stream" - ] + "required": ["posts", "stream"] }, "timeline_lookup": { "type": "array", @@ -9085,19 +7951,13 @@ "type": "integer" }, "image_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "created_at": { "type": "string" }, "last_posted_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bumped": { "type": "boolean" @@ -9115,10 +7975,7 @@ "type": "boolean" }, "unpinned": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "excerpt": { "type": "string" @@ -9133,16 +7990,10 @@ "type": "boolean" }, "bookmarked": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "liked": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "tags": { "type": "array", @@ -9163,10 +8014,7 @@ "type": "integer" }, "featured_link": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "posters": { "type": "array", @@ -9205,11 +8053,7 @@ ] } }, - "required": [ - "extras", - "description", - "user" - ] + "required": ["extras", "description", "user"] } } }, @@ -9280,10 +8124,7 @@ "type": "integer" }, "last_posted_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "visible": { "type": "boolean" @@ -9307,55 +8148,34 @@ "type": "integer" }, "word_count": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "deleted_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "user_id": { "type": "integer" }, "featured_link": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "pinned_globally": { "type": "boolean" }, "pinned_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "pinned_until": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "image_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "slow_mode_seconds": { "type": "integer" }, "draft": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "draft_key": { "type": "string" @@ -9364,10 +8184,7 @@ "type": "integer" }, "unpinned": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "pinned": { "type": "boolean" @@ -9376,16 +8193,10 @@ "type": "integer" }, "highest_post_number": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "deleted_by": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "has_deleted": { "type": "boolean" @@ -9409,12 +8220,7 @@ "type": "boolean" } }, - "required": [ - "id", - "count", - "hidden", - "can_act" - ] + "required": ["id", "count", "hidden", "can_act"] } }, "chunk_size": { @@ -9428,10 +8234,7 @@ "items": {} }, "topic_timer": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "message_bus_last_id": { "type": "integer" @@ -9443,16 +8246,10 @@ "type": "boolean" }, "thumbnails": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "slow_mode_enabled_until": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "details": { "type": "object", @@ -9540,40 +8337,22 @@ "type": "integer" }, "primary_group_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "admin": { "type": "boolean" @@ -9733,9 +8512,7 @@ }, "delete": { "summary": "Remove a topic", - "tags": [ - "Topics" - ], + "tags": ["Topics"], "operationId": "removeTopic", "parameters": [ { @@ -9773,9 +8550,7 @@ "/t/-/{id}.json": { "put": { "summary": "Update a topic", - "tags": [ - "Topics" - ], + "tags": ["Topics"], "operationId": "updateTopic", "parameters": [ { @@ -9864,10 +8639,7 @@ "/t/{id}/invite.json": { "post": { "summary": "Invite to topic", - "tags": [ - "Topics", - "Invites" - ], + "tags": ["Topics", "Invites"], "operationId": "inviteToTopic", "parameters": [ { @@ -9948,10 +8720,7 @@ "/t/{id}/invite-group.json": { "post": { "summary": "Invite group to topic", - "tags": [ - "Topics", - "Invites" - ], + "tags": ["Topics", "Invites"], "operationId": "inviteGroupToTopic", "parameters": [ { @@ -10028,9 +8797,7 @@ "/t/{id}/bookmark.json": { "put": { "summary": "Bookmark topic", - "tags": [ - "Topics" - ], + "tags": ["Topics"], "operationId": "bookmarkTopic", "parameters": [ { @@ -10068,9 +8835,7 @@ "/t/{id}/status.json": { "put": { "summary": "Update the status of a topic", - "tags": [ - "Topics" - ], + "tags": ["Topics"], "operationId": "updateTopicStatus", "parameters": [ { @@ -10111,10 +8876,7 @@ "example": "OK" }, "topic_status_update": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } } } @@ -10140,10 +8902,7 @@ }, "enabled": { "type": "string", - "enum": [ - "true", - "false" - ] + "enum": ["true", "false"] }, "until": { "type": "string", @@ -10151,10 +8910,7 @@ "example": "2030-12-31" } }, - "required": [ - "status", - "enabled" - ] + "required": ["status", "enabled"] } } } @@ -10164,9 +8920,7 @@ "/latest.json": { "get": { "summary": "Get the latest topics", - "tags": [ - "Topics" - ], + "tags": ["Topics"], "operationId": "listLatestTopics", "parameters": [ { @@ -10230,10 +8984,7 @@ "type": "string" }, "name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "avatar_template": { "type": "string" @@ -10252,10 +9003,7 @@ "type": "boolean" }, "draft": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "draft_key": { "type": "string" @@ -10323,10 +9071,7 @@ "type": "boolean" }, "unpinned": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "visible": { "type": "boolean" @@ -10368,10 +9113,7 @@ "type": "boolean" }, "featured_link": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "posters": { "type": "array", @@ -10388,10 +9130,7 @@ "type": "integer" }, "primary_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] } } } @@ -10412,9 +9151,7 @@ "/top.json": { "get": { "summary": "Get the top topics filtered by period", - "tags": [ - "Topics" - ], + "tags": ["Topics"], "operationId": "listTopTopics", "parameters": [ { @@ -10489,10 +9226,7 @@ "type": "boolean" }, "draft": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "draft_key": { "type": "string" @@ -10533,10 +9267,7 @@ "type": "integer" }, "image_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "created_at": { "type": "string" @@ -10608,10 +9339,7 @@ "type": "boolean" }, "featured_link": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "posters": { "type": "array", @@ -10619,10 +9347,7 @@ "type": "object", "properties": { "extras": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "description": { "type": "string" @@ -10631,10 +9356,7 @@ "type": "integer" }, "primary_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] } } } @@ -10655,9 +9377,7 @@ "/t/{id}/notifications.json": { "post": { "summary": "Set notification level", - "tags": [ - "Topics" - ], + "tags": ["Topics"], "operationId": "setNotificationLevel", "parameters": [ { @@ -10711,17 +9431,10 @@ "properties": { "notification_level": { "type": "string", - "enum": [ - "0", - "1", - "2", - "3" - ] + "enum": ["0", "1", "2", "3"] } }, - "required": [ - "notification_level" - ] + "required": ["notification_level"] } } } @@ -10731,9 +9444,7 @@ "/t/{id}/change-timestamp.json": { "put": { "summary": "Update topic timestamp", - "tags": [ - "Topics" - ], + "tags": ["Topics"], "operationId": "updateTopicTimestamp", "parameters": [ { @@ -10790,9 +9501,7 @@ "example": "1594291380" } }, - "required": [ - "timestamp" - ] + "required": ["timestamp"] } } } @@ -10802,9 +9511,7 @@ "/t/{id}/timer.json": { "post": { "summary": "Create topic timer", - "tags": [ - "Topics" - ], + "tags": ["Topics"], "operationId": "createTopicTimer", "parameters": [ { @@ -10848,10 +9555,7 @@ "type": "string" }, "duration": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "based_on_last_post": { "type": "boolean" @@ -10860,10 +9564,7 @@ "type": "boolean" }, "category_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] } } } @@ -10900,9 +9601,7 @@ "/t/external_id/{external_id}.json": { "get": { "summary": "Get topic by external_id", - "tags": [ - "Topics" - ], + "tags": ["Topics"], "operationId": "getTopicByExternalId", "parameters": [ { @@ -10924,9 +9623,7 @@ "/uploads.json": { "post": { "summary": "Creates an upload", - "tags": [ - "Uploads" - ], + "tags": ["Uploads"], "operationId": "createUpload", "parameters": [], "responses": { @@ -10971,25 +9668,16 @@ "type": "string" }, "retain_hours": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "human_filesize": { "type": "string" }, "dominant_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "thumbnail": { - "type": [ - "object", - "null" - ], + "type": ["object", "null"], "additionalProperties": false, "properties": { "id": { @@ -11065,9 +9753,7 @@ "format": "binary" } }, - "required": [ - "type" - ] + "required": ["type"] } } } @@ -11077,9 +9763,7 @@ "/uploads/generate-presigned-put.json": { "post": { "summary": "Initiates a direct external upload", - "tags": [ - "Uploads" - ], + "tags": ["Uploads"], "operationId": "generatePresignedPut", "description": "Direct external uploads bypass the usual method of creating uploads\nvia the POST /uploads route, and upload directly to an external provider,\nwhich by default is S3. This route begins the process, and will return\na unique identifier for the external upload as well as a presigned URL\nwhich is where the file binary blob should be uploaded to.\n\nOnce the upload is complete to the external service, you must call the\nPOST /complete-external-upload route using the unique identifier returned\nby this route, which will create any required Upload record in the Discourse\ndatabase and also move file from its temporary location to the final\ndestination in the external storage service.\n\nYou must have the correct permissions and CORS settings configured in your\nexternal provider. We support AWS S3 as the default. See:\n\nhttps://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4.\n\nAn external file store must be set up and `enable_direct_s3_uploads` must\nbe set to true for this endpoint to function.\n\n", "parameters": [], @@ -11156,11 +9840,7 @@ } } }, - "required": [ - "type", - "file_name", - "file_size" - ] + "required": ["type", "file_name", "file_size"] } } } @@ -11170,9 +9850,7 @@ "/uploads/complete-external-upload.json": { "post": { "summary": "Completes a direct external upload", - "tags": [ - "Uploads" - ], + "tags": ["Uploads"], "operationId": "completeExternalUpload", "description": "Completes an external upload initialized with /get-presigned-put. The\nfile will be moved from its temporary location in external storage to\na final destination in the S3 bucket. An Upload record will also be\ncreated in the database in most cases.\n\nIf a sha1-checksum was provided in the initial request it will also\nbe compared with the uploaded file in storage to make sure the same\nfile was uploaded. The file size will be compared for the same reason.\n\nYou must have the correct permissions and CORS settings configured in your\nexternal provider. We support AWS S3 as the default. See:\n\nhttps://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4.\n\nAn external file store must be set up and `enable_direct_s3_uploads` must\nbe set to true for this endpoint to function.\n\n", "parameters": [], @@ -11218,25 +9896,16 @@ "type": "string" }, "retain_hours": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "human_filesize": { "type": "string" }, "dominant_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "thumbnail": { - "type": [ - "object", - "null" - ], + "type": ["object", "null"], "additionalProperties": false, "properties": { "id": { @@ -11310,9 +9979,7 @@ "description": "Optionally set this to true if the upload was pasted\ninto the upload area. This will convert PNG files to JPEG." } }, - "required": [ - "unique_identifier" - ] + "required": ["unique_identifier"] } } } @@ -11322,9 +9989,7 @@ "/uploads/create-multipart.json": { "post": { "summary": "Creates a multipart external upload", - "tags": [ - "Uploads" - ], + "tags": ["Uploads"], "operationId": "createMultipartUpload", "description": "Creates a multipart upload in the external storage provider, storing\na temporary reference to the external upload similar to /get-presigned-put.\n\nYou must have the correct permissions and CORS settings configured in your\nexternal provider. We support AWS S3 as the default. See:\n\nhttps://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4.\n\nAn external file store must be set up and `enable_direct_s3_uploads` must\nbe set to true for this endpoint to function.\n\n", "parameters": [], @@ -11398,11 +10063,7 @@ } } }, - "required": [ - "upload_type", - "file_name", - "file_size" - ] + "required": ["upload_type", "file_name", "file_size"] } } } @@ -11412,9 +10073,7 @@ "/uploads/batch-presign-multipart-parts.json": { "post": { "summary": "Generates batches of presigned URLs for multipart parts", - "tags": [ - "Uploads" - ], + "tags": ["Uploads"], "operationId": "batchPresignMultipartParts", "description": "Multipart uploads are uploaded in chunks or parts to individual presigned\nURLs, similar to the one generated by /generate-presigned-put. The part\nnumbers provided must be between 1 and 10000. The total number of parts\nwill depend on the chunk size in bytes that you intend to use to upload\neach chunk. For example a 12MB file may have 2 5MB chunks and a final\n2MB chunk, for part numbers 1, 2, and 3.\n\nThis endpoint will return a presigned URL for each part number provided,\nwhich you can then use to send PUT requests for the binary chunk corresponding\nto that part. When the part is uploaded, the provider should return an\nETag for the part, and this should be stored along with the part number,\nbecause this is needed to complete the multipart upload.\n\nYou must have the correct permissions and CORS settings configured in your\nexternal provider. We support AWS S3 as the default. See:\n\nhttps://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4.\n\nAn external file store must be set up and `enable_direct_s3_uploads` must\nbe set to true for this endpoint to function.\n\n", "parameters": [], @@ -11434,9 +10093,7 @@ } } }, - "required": [ - "presigned_urls" - ] + "required": ["presigned_urls"] } } } @@ -11451,11 +10108,7 @@ "part_numbers": { "type": "array", "description": "The part numbers to generate the presigned URLs for,\nmust be between 1 and 10000.", - "example": [ - 1, - 2, - 3 - ] + "example": [1, 2, 3] }, "unique_identifier": { "type": "string", @@ -11463,10 +10116,7 @@ "example": "66e86218-80d9-4bda-b4d5-2b6def968705" } }, - "required": [ - "part_numbers", - "unique_identifier" - ] + "required": ["part_numbers", "unique_identifier"] } } } @@ -11476,9 +10126,7 @@ "/uploads/abort-multipart.json": { "post": { "summary": "Abort multipart upload", - "tags": [ - "Uploads" - ], + "tags": ["Uploads"], "operationId": "abortMultipart", "description": "This endpoint aborts the multipart upload initiated with /create-multipart.\nThis should be used when cancelling the upload. It does not matter if parts\nwere already uploaded into the external storage provider.\n\nYou must have the correct permissions and CORS settings configured in your\nexternal provider. We support AWS S3 as the default. See:\n\nhttps://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4.\n\nAn external file store must be set up and `enable_direct_s3_uploads` must\nbe set to true for this endpoint to function.\n\n", "parameters": [], @@ -11495,9 +10143,7 @@ "example": "OK" } }, - "required": [ - "success" - ] + "required": ["success"] } } } @@ -11515,9 +10161,7 @@ "example": "84x83tmxy398t3y._Q_z8CoJYVr69bE6D7f8J6Oo0434QquLFoYdGVerWFx9X5HDEI_TP_95c34n853495x35345394.d.ghQ" } }, - "required": [ - "external_upload_identifier" - ] + "required": ["external_upload_identifier"] } } } @@ -11527,9 +10171,7 @@ "/uploads/complete-multipart.json": { "post": { "summary": "Complete multipart upload", - "tags": [ - "Uploads" - ], + "tags": ["Uploads"], "operationId": "completeMultipart", "description": "Completes the multipart upload in the external store, and copies the\nfile from its temporary location to its final location in the store.\nAll of the parts must have been uploaded to the external storage provider.\nAn Upload record will be completed in most cases once the file is copied\nto its final location.\n\nYou must have the correct permissions and CORS settings configured in your\nexternal provider. We support AWS S3 as the default. See:\n\nhttps://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4.\n\nAn external file store must be set up and `enable_direct_s3_uploads` must\nbe set to true for this endpoint to function.\n\n", "parameters": [], @@ -11575,25 +10217,16 @@ "type": "string" }, "retain_hours": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "human_filesize": { "type": "string" }, "dominant_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "thumbnail": { - "type": [ - "object", - "null" - ], + "type": ["object", "null"], "additionalProperties": false, "properties": { "id": { @@ -11666,10 +10299,7 @@ "description": "All of the part numbers and their corresponding ETags\nthat have been uploaded must be provided." } }, - "required": [ - "unique_identifier", - "parts" - ] + "required": ["unique_identifier", "parts"] } } } @@ -11679,10 +10309,7 @@ "/user-badges/{username}.json": { "get": { "summary": "List badges for a user", - "tags": [ - "Badges", - "Users" - ], + "tags": ["Badges", "Users"], "operationId": "listUserBadges", "parameters": [ { @@ -11730,10 +10357,7 @@ "type": "string" }, "image_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "listable": { "type": "boolean" @@ -11792,11 +10416,7 @@ "type": "integer" } }, - "required": [ - "id", - "name", - "sort_order" - ] + "required": ["id", "name", "sort_order"] } }, "granted_bies": { @@ -11818,10 +10438,7 @@ "type": "string" }, "flair_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "admin": { "type": "boolean" @@ -11861,10 +10478,7 @@ "type": "integer" }, "is_favorite": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "can_favorite": { "type": "boolean" @@ -11888,9 +10502,7 @@ } } }, - "required": [ - "user_badges" - ] + "required": ["user_badges"] } } } @@ -11901,9 +10513,7 @@ "/users.json": { "post": { "summary": "Creates a user", - "tags": [ - "Users" - ], + "tags": ["Users"], "operationId": "createUser", "parameters": [ { @@ -11944,11 +10554,7 @@ "type": "integer" } }, - "required": [ - "success", - "active", - "message" - ] + "required": ["success", "active", "message"] } } } @@ -11992,12 +10598,7 @@ "type": "object" } }, - "required": [ - "name", - "email", - "password", - "username" - ] + "required": ["name", "email", "password", "username"] } } } @@ -12007,9 +10608,7 @@ "/u/{username}.json": { "get": { "summary": "Get a single user by username", - "tags": [ - "Users" - ], + "tags": ["Users"], "operationId": "getUser", "parameters": [ { @@ -12066,16 +10665,10 @@ "type": "string" }, "last_posted_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "last_seen_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "created_at": { "type": "string" @@ -12114,10 +10707,7 @@ "type": "boolean" }, "title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "badge_count": { "type": "integer" @@ -12130,32 +10720,20 @@ "additionalProperties": false, "properties": { "1": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "2": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } }, - "required": [ - "1", - "2" - ] + "required": ["1", "2"] }, "custom_fields": { "type": "object", "additionalProperties": false, "properties": { "first_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } } }, @@ -12166,52 +10744,28 @@ "type": "integer" }, "primary_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "primary_group_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "flair_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "featured_topic": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "staged": { "type": "boolean" @@ -12229,10 +10783,7 @@ "type": "boolean" }, "uploaded_avatar_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "has_title_badges": { "type": "boolean" @@ -12265,10 +10816,7 @@ "type": "boolean" }, "locale": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "muted_category_ids": { "type": "array", @@ -12307,10 +10855,7 @@ "items": {} }, "system_avatar_upload_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "system_avatar_template": { "type": "string" @@ -12343,10 +10888,7 @@ "type": "boolean" }, "user_api_keys": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "user_passkeys": { "type": "array" @@ -12490,10 +11032,7 @@ "items": {} }, "invited_by": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "groups": { "type": "array", @@ -12529,61 +11068,34 @@ "type": "boolean" }, "title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "grant_trust_level": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "incoming_email": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "has_messages": { "type": "boolean" }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_raw": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_cooked": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_excerpt": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "public_admission": { "type": "boolean" @@ -12595,19 +11107,13 @@ "type": "boolean" }, "full_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "default_notification_level": { "type": "integer" }, "membership_request_template": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "members_visibility_level": { "type": "integer" @@ -12710,16 +11216,10 @@ "type": "integer" }, "color_scheme_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "dark_scheme_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "dynamic_favicon": { "type": "boolean" @@ -12774,10 +11274,7 @@ "type": "boolean" }, "homepage_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "hide_profile_and_presence": { "type": "boolean" @@ -12798,10 +11295,7 @@ "type": "string" }, "timezone": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "skip_new_user_tips": { "type": "boolean" @@ -12810,10 +11304,7 @@ "type": "string" }, "oldest_search_log_date": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "sidebar_link_to_filtered_list": { "type": "boolean" @@ -12822,16 +11313,10 @@ "type": "boolean" }, "watched_precedence_over_muted": { - "type": [ - "boolean", - "null" - ] + "type": ["boolean", "null"] }, "seen_popups": { - "type": [ - "array", - "null" - ] + "type": ["array", "null"] }, "topics_unread_when_closed": { "type": "boolean" @@ -12954,10 +11439,7 @@ ] } }, - "required": [ - "user_badges", - "user" - ] + "required": ["user_badges", "user"] } } } @@ -12966,9 +11448,7 @@ }, "put": { "summary": "Update a user", - "tags": [ - "Users" - ], + "tags": ["Users"], "operationId": "updateUser", "parameters": [ { @@ -13011,10 +11491,7 @@ "type": "object" } }, - "required": [ - "success", - "user" - ] + "required": ["success", "user"] } } } @@ -13042,9 +11519,7 @@ "/u/by-external/{external_id}.json": { "get": { "summary": "Get a user by external_id", - "tags": [ - "Users" - ], + "tags": ["Users"], "operationId": "getUserExternalId", "parameters": [ { @@ -13101,16 +11576,10 @@ "type": "string" }, "last_posted_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "last_seen_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "created_at": { "type": "string" @@ -13149,10 +11618,7 @@ "type": "boolean" }, "title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "badge_count": { "type": "integer" @@ -13165,32 +11631,20 @@ "additionalProperties": false, "properties": { "1": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "2": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } }, - "required": [ - "1", - "2" - ] + "required": ["1", "2"] }, "custom_fields": { "type": "object", "additionalProperties": false, "properties": { "first_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } } }, @@ -13201,52 +11655,28 @@ "type": "integer" }, "primary_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "primary_group_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "flair_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "featured_topic": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "staged": { "type": "boolean" @@ -13264,10 +11694,7 @@ "type": "boolean" }, "uploaded_avatar_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "has_title_badges": { "type": "boolean" @@ -13300,10 +11727,7 @@ "type": "boolean" }, "locale": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "muted_category_ids": { "type": "array", @@ -13342,10 +11766,7 @@ "items": {} }, "system_avatar_upload_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "system_avatar_template": { "type": "string" @@ -13378,10 +11799,7 @@ "type": "boolean" }, "user_api_keys": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "user_passkeys": { "type": "array" @@ -13525,10 +11943,7 @@ "items": {} }, "invited_by": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "groups": { "type": "array", @@ -13564,61 +11979,34 @@ "type": "boolean" }, "title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "grant_trust_level": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "incoming_email": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "has_messages": { "type": "boolean" }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_raw": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_cooked": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_excerpt": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "public_admission": { "type": "boolean" @@ -13630,19 +12018,13 @@ "type": "boolean" }, "full_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "default_notification_level": { "type": "integer" }, "membership_request_template": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "members_visibility_level": { "type": "integer" @@ -13745,16 +12127,10 @@ "type": "integer" }, "color_scheme_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "dark_scheme_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "dynamic_favicon": { "type": "boolean" @@ -13809,10 +12185,7 @@ "type": "boolean" }, "homepage_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "hide_profile_and_presence": { "type": "boolean" @@ -13833,10 +12206,7 @@ "type": "string" }, "timezone": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "skip_new_user_tips": { "type": "boolean" @@ -13845,10 +12215,7 @@ "type": "string" }, "oldest_search_log_date": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "sidebar_link_to_filtered_list": { "type": "boolean" @@ -13857,16 +12224,10 @@ "type": "boolean" }, "watched_precedence_over_muted": { - "type": [ - "boolean", - "null" - ] + "type": ["boolean", "null"] }, "seen_popups": { - "type": [ - "array", - "null" - ] + "type": ["array", "null"] }, "topics_unread_when_closed": { "type": "boolean" @@ -13989,10 +12350,7 @@ ] } }, - "required": [ - "user_badges", - "user" - ] + "required": ["user_badges", "user"] } } } @@ -14003,9 +12361,7 @@ "/u/by-external/{provider}/{external_id}.json": { "get": { "summary": "Get a user by identity provider external ID", - "tags": [ - "Users" - ], + "tags": ["Users"], "operationId": "getUserIdentiyProviderExternalId", "parameters": [ { @@ -14071,16 +12427,10 @@ "type": "string" }, "last_posted_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "last_seen_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "created_at": { "type": "string" @@ -14119,10 +12469,7 @@ "type": "boolean" }, "title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "badge_count": { "type": "integer" @@ -14135,32 +12482,20 @@ "additionalProperties": false, "properties": { "1": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "2": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } }, - "required": [ - "1", - "2" - ] + "required": ["1", "2"] }, "custom_fields": { "type": "object", "additionalProperties": false, "properties": { "first_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } } }, @@ -14171,52 +12506,28 @@ "type": "integer" }, "primary_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "primary_group_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "flair_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "featured_topic": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "staged": { "type": "boolean" @@ -14234,10 +12545,7 @@ "type": "boolean" }, "uploaded_avatar_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "has_title_badges": { "type": "boolean" @@ -14270,10 +12578,7 @@ "type": "boolean" }, "locale": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "muted_category_ids": { "type": "array", @@ -14312,10 +12617,7 @@ "items": {} }, "system_avatar_upload_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "system_avatar_template": { "type": "string" @@ -14348,10 +12650,7 @@ "type": "boolean" }, "user_api_keys": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "user_passkeys": { "type": "array" @@ -14495,10 +12794,7 @@ "items": {} }, "invited_by": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "groups": { "type": "array", @@ -14534,61 +12830,34 @@ "type": "boolean" }, "title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "grant_trust_level": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "incoming_email": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "has_messages": { "type": "boolean" }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_raw": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_cooked": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_excerpt": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "public_admission": { "type": "boolean" @@ -14600,19 +12869,13 @@ "type": "boolean" }, "full_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "default_notification_level": { "type": "integer" }, "membership_request_template": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "members_visibility_level": { "type": "integer" @@ -14715,16 +12978,10 @@ "type": "integer" }, "color_scheme_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "dark_scheme_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "dynamic_favicon": { "type": "boolean" @@ -14779,10 +13036,7 @@ "type": "boolean" }, "homepage_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "hide_profile_and_presence": { "type": "boolean" @@ -14803,10 +13057,7 @@ "type": "string" }, "timezone": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "skip_new_user_tips": { "type": "boolean" @@ -14815,10 +13066,7 @@ "type": "string" }, "oldest_search_log_date": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "sidebar_link_to_filtered_list": { "type": "boolean" @@ -14827,16 +13075,10 @@ "type": "boolean" }, "watched_precedence_over_muted": { - "type": [ - "boolean", - "null" - ] + "type": ["boolean", "null"] }, "seen_popups": { - "type": [ - "array", - "null" - ] + "type": ["array", "null"] }, "topics_unread_when_closed": { "type": "boolean" @@ -14959,10 +13201,7 @@ ] } }, - "required": [ - "user_badges", - "user" - ] + "required": ["user_badges", "user"] } } } @@ -14973,9 +13212,7 @@ "/u/{username}/preferences/avatar/pick.json": { "put": { "summary": "Update avatar", - "tags": [ - "Users" - ], + "tags": ["Users"], "operationId": "updateAvatar", "parameters": [ { @@ -15000,9 +13237,7 @@ "example": "OK" } }, - "required": [ - "success" - ] + "required": ["success"] } } } @@ -15019,18 +13254,10 @@ }, "type": { "type": "string", - "enum": [ - "uploaded", - "custom", - "gravatar", - "system" - ] + "enum": ["uploaded", "custom", "gravatar", "system"] } }, - "required": [ - "upload_id", - "type" - ] + "required": ["upload_id", "type"] } } } @@ -15040,9 +13267,7 @@ "/u/{username}/preferences/email.json": { "put": { "summary": "Update email", - "tags": [ - "Users" - ], + "tags": ["Users"], "operationId": "updateEmail", "parameters": [ { @@ -15070,9 +13295,7 @@ "format": "email" } }, - "required": [ - "email" - ] + "required": ["email"] } } } @@ -15082,9 +13305,7 @@ "/u/{username}/preferences/username.json": { "put": { "summary": "Update username", - "tags": [ - "Users" - ], + "tags": ["Users"], "operationId": "updateUsername", "parameters": [ { @@ -15111,9 +13332,7 @@ "type": "string" } }, - "required": [ - "new_username" - ] + "required": ["new_username"] } } } @@ -15123,9 +13342,7 @@ "/directory_items.json": { "get": { "summary": "Get a public list of users", - "tags": [ - "Users" - ], + "tags": ["Users"], "operationId": "listUsersPublic", "parameters": [ { @@ -15166,9 +13383,7 @@ "in": "query", "schema": { "type": "string", - "enum": [ - "true" - ] + "enum": ["true"] } }, { @@ -15228,19 +13443,13 @@ "type": "string" }, "name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "avatar_template": { "type": "string" }, "title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } }, "required": [ @@ -15270,10 +13479,7 @@ "additionalProperties": false, "properties": { "last_updated_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "total_rows_directory_items": { "type": "integer" @@ -15289,10 +13495,7 @@ ] } }, - "required": [ - "directory_items", - "meta" - ] + "required": ["directory_items", "meta"] } } } @@ -15303,10 +13506,7 @@ "/admin/users/{id}.json": { "get": { "summary": "Get a user by id", - "tags": [ - "Users", - "Admin" - ], + "tags": ["Users", "Admin"], "operationId": "adminGetUser", "parameters": [ { @@ -15333,10 +13533,7 @@ "type": "string" }, "name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "avatar_template": { "type": "string" @@ -15351,52 +13548,31 @@ "type": "boolean" }, "last_seen_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "last_emailed_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "created_at": { "type": "string" }, "last_seen_age": { - "type": [ - "number", - "null" - ] + "type": ["number", "null"] }, "last_emailed_age": { - "type": [ - "number", - "null" - ] + "type": ["number", "null"] }, "created_at_age": { - "type": [ - "number", - "null" - ] + "type": ["number", "null"] }, "trust_level": { "type": "integer" }, "manual_locked_trust_level": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "time_read": { "type": "integer" @@ -15433,10 +13609,7 @@ "type": "string" }, "registration_ip_address": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "can_grant_admin": { "type": "boolean" @@ -15484,34 +13657,19 @@ "type": "boolean" }, "full_suspend_reason": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "latest_export": { - "type": [ - "object", - "null" - ] + "type": ["object", "null"] }, "silence_reason": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "post_edits_count": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "primary_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "badge_count": { "type": "integer" @@ -15520,16 +13678,10 @@ "type": "integer" }, "bounce_score": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "reset_bounce_score_after": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "can_view_action_logs": { "type": "boolean" @@ -15547,16 +13699,10 @@ "type": "integer" }, "single_sign_on_record": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "approved_by": { - "type": [ - "object", - "null" - ], + "type": ["object", "null"], "additionalProperties": false, "properties": { "id": { @@ -15572,24 +13718,13 @@ "type": "string" } }, - "required": [ - "id", - "username", - "name", - "avatar_template" - ] + "required": ["id", "username", "name", "avatar_template"] }, "suspended_by": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "silenced_by": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "penalty_counts": { "type": "object", @@ -15602,10 +13737,7 @@ "type": "integer" } }, - "required": [ - "silenced", - "suspended" - ] + "required": ["silenced", "suspended"] }, "next_penalty": { "type": "string" @@ -15715,11 +13847,7 @@ "type": "integer" } }, - "required": [ - "silenced", - "suspended", - "total" - ] + "required": ["silenced", "suspended", "total"] } }, "required": [ @@ -15789,67 +13917,37 @@ "type": "boolean" }, "title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "grant_trust_level": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "incoming_email": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "has_messages": { "type": "boolean" }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "bio_raw": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_cooked": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_excerpt": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "public_admission": { "type": "boolean" @@ -15861,19 +13959,13 @@ "type": "boolean" }, "full_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "default_notification_level": { "type": "integer" }, "membership_request_template": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "members_visibility_level": { "type": "integer" @@ -15992,10 +14084,7 @@ }, "delete": { "summary": "Delete a user", - "tags": [ - "Users", - "Admin" - ], + "tags": ["Users", "Admin"], "operationId": "deleteUser", "parameters": [ { @@ -16019,9 +14108,7 @@ "type": "boolean" } }, - "required": [ - "deleted" - ] + "required": ["deleted"] } } } @@ -16055,10 +14142,7 @@ "/admin/users/{id}/activate.json": { "put": { "summary": "Activate a user", - "tags": [ - "Users", - "Admin" - ], + "tags": ["Users", "Admin"], "operationId": "activateUser", "parameters": [ { @@ -16083,9 +14167,7 @@ "example": "OK" } }, - "required": [ - "success" - ] + "required": ["success"] } } } @@ -16096,10 +14178,7 @@ "/admin/users/{id}/deactivate.json": { "put": { "summary": "Deactivate a user", - "tags": [ - "Users", - "Admin" - ], + "tags": ["Users", "Admin"], "operationId": "deactivateUser", "parameters": [ { @@ -16124,9 +14203,7 @@ "example": "OK" } }, - "required": [ - "success" - ] + "required": ["success"] } } } @@ -16137,10 +14214,7 @@ "/admin/users/{id}/suspend.json": { "put": { "summary": "Suspend a user", - "tags": [ - "Users", - "Admin" - ], + "tags": ["Users", "Admin"], "operationId": "suspendUser", "parameters": [ { @@ -16210,9 +14284,7 @@ ] } }, - "required": [ - "suspension" - ] + "required": ["suspension"] } } } @@ -16240,10 +14312,7 @@ "example": "delete" } }, - "required": [ - "suspend_until", - "reason" - ] + "required": ["suspend_until", "reason"] } } } @@ -16253,10 +14322,7 @@ "/admin/users/{id}/silence.json": { "put": { "summary": "Silence a user", - "tags": [ - "Users", - "Admin" - ], + "tags": ["Users", "Admin"], "operationId": "silenceUser", "parameters": [ { @@ -16326,9 +14392,7 @@ ] } }, - "required": [ - "silence" - ] + "required": ["silence"] } } } @@ -16356,10 +14420,7 @@ "example": "delete" } }, - "required": [ - "silenced_till", - "reason" - ] + "required": ["silenced_till", "reason"] } } } @@ -16369,10 +14430,7 @@ "/admin/users/{id}/anonymize.json": { "put": { "summary": "Anonymize a user", - "tags": [ - "Users", - "Admin" - ], + "tags": ["Users", "Admin"], "operationId": "anonymizeUser", "parameters": [ { @@ -16399,10 +14457,7 @@ "type": "string" } }, - "required": [ - "success", - "username" - ] + "required": ["success", "username"] } } } @@ -16413,10 +14468,7 @@ "/admin/users/{id}/log_out.json": { "post": { "summary": "Log a user out", - "tags": [ - "Users", - "Admin" - ], + "tags": ["Users", "Admin"], "operationId": "logOutUser", "parameters": [ { @@ -16441,9 +14493,7 @@ "example": "OK" } }, - "required": [ - "success" - ] + "required": ["success"] } } } @@ -16454,10 +14504,7 @@ "/user_avatar/{username}/refresh_gravatar.json": { "post": { "summary": "Refresh gravatar", - "tags": [ - "Users", - "Admin" - ], + "tags": ["Users", "Admin"], "operationId": "refreshGravatar", "parameters": [ { @@ -16478,22 +14525,13 @@ "additionalProperties": false, "properties": { "gravatar_upload_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "gravatar_avatar_template": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } }, - "required": [ - "gravatar_upload_id", - "gravatar_avatar_template" - ] + "required": ["gravatar_upload_id", "gravatar_avatar_template"] } } } @@ -16504,10 +14542,7 @@ "/admin/users/list/{flag}.json": { "get": { "summary": "Get a list of users", - "tags": [ - "Users", - "Admin" - ], + "tags": ["Users", "Admin"], "operationId": "adminListUsers", "parameters": [ { @@ -16551,9 +14586,7 @@ "in": "query", "schema": { "type": "string", - "enum": [ - "true" - ] + "enum": ["true"] } }, { @@ -16615,10 +14648,7 @@ "type": "string" }, "name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "avatar_template": { "type": "string" @@ -16640,52 +14670,31 @@ "type": "boolean" }, "last_seen_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "last_emailed_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "created_at": { "type": "string" }, "last_seen_age": { - "type": [ - "number", - "null" - ] + "type": ["number", "null"] }, "last_emailed_age": { - "type": [ - "number", - "null" - ] + "type": ["number", "null"] }, "created_at_age": { - "type": [ - "number", - "null" - ] + "type": ["number", "null"] }, "trust_level": { "type": "integer" }, "manual_locked_trust_level": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "time_read": { "type": "integer" @@ -16741,9 +14750,7 @@ "/user_actions.json": { "get": { "summary": "Get a list of user actions", - "tags": [ - "Users" - ], + "tags": ["Users"], "operationId": "listUserActions", "parameters": [ { @@ -16810,10 +14817,7 @@ "type": "integer" }, "target_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "target_username": { "type": "string" @@ -16822,19 +14826,13 @@ "type": "integer" }, "post_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "username": { "type": "string" }, "name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "user_id": { "type": "integer" @@ -16843,10 +14841,7 @@ "type": "string" }, "acting_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "acting_user_id": { "type": "integer" @@ -16858,22 +14853,13 @@ "type": "boolean" }, "hidden": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "post_type": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "action_code": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "category_id": { "type": "integer" @@ -16916,9 +14902,7 @@ } } }, - "required": [ - "user_actions" - ] + "required": ["user_actions"] } } } @@ -16929,9 +14913,7 @@ "/session/forgot_password.json": { "post": { "summary": "Send password reset email", - "tags": [ - "Users" - ], + "tags": ["Users"], "operationId": "sendPasswordResetEmail", "parameters": [], "responses": { @@ -16949,10 +14931,7 @@ "type": "boolean" } }, - "required": [ - "success", - "user_found" - ] + "required": ["success", "user_found"] } } } @@ -16968,9 +14947,7 @@ "type": "string" } }, - "required": [ - "login" - ] + "required": ["login"] } } } @@ -16980,9 +14957,7 @@ "/users/password-reset/{token}.json": { "put": { "summary": "Change password", - "tags": [ - "Users" - ], + "tags": ["Users"], "operationId": "changePassword", "parameters": [ { @@ -17012,10 +14987,7 @@ "type": "string" } }, - "required": [ - "username", - "password" - ] + "required": ["username", "password"] } } } @@ -17025,9 +14997,7 @@ "/u/{username}/emails.json": { "get": { "summary": "Get email addresses belonging to a user", - "tags": [ - "Users" - ], + "tags": ["Users"], "operationId": "getUserEmails", "parameters": [ { @@ -17080,9 +15050,7 @@ "post": { "summary": "Send a message to a chat channel", "operationId": "sendMessage", - "tags": [ - "Chat" - ], + "tags": ["Chat"], "parameters": [ { "name": "channel_id", @@ -17139,9 +15107,7 @@ "put": { "summary": "Edit an existing message", "operationId": "editMessage", - "tags": [ - "Chat" - ], + "tags": ["Chat"], "parameters": [ { "name": "channel_id", @@ -17203,9 +15169,7 @@ "get": { "summary": "Fetch chat messages", "operationId": "getMessages", - "tags": [ - "Chat" - ], + "tags": ["Chat"], "parameters": [ { "name": "channel_id", @@ -17311,10 +15275,7 @@ "available_flags": { "type": "array", "items": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } }, "uploads": { @@ -17333,25 +15294,16 @@ } }, "chat_webhook_event": { - "type": [ - "object", - "null" - ] + "type": ["object", "null"] } } } }, "tracking": { - "type": [ - "object", - "null" - ] + "type": ["object", "null"] }, "meta": { - "type": [ - "object", - "null" - ] + "type": ["object", "null"] } } } @@ -17365,9 +15317,7 @@ "put": { "summary": "React to a message", "operationId": "reactToMessage", - "tags": [ - "Chat" - ], + "tags": ["Chat"], "parameters": [ { "name": "channel_id", @@ -17430,9 +15380,7 @@ "get": { "summary": "Fetch a user card", "operationId": "getUserCard", - "tags": [ - "User" - ], + "tags": ["User"], "parameters": [ { "name": "username", @@ -17462,9 +15410,7 @@ "get": { "summary": "Get current session info", "operationId": "getSession", - "tags": [ - "Session" - ], + "tags": ["Session"], "responses": { "200": { "description": "Authenticated User Session Data", @@ -17490,16 +15436,10 @@ "type": "string" }, "last_posted_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "last_seen_at": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "created_at": { "type": "string" @@ -17538,10 +15478,7 @@ "type": "boolean" }, "title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "badge_count": { "type": "integer" @@ -17554,32 +15491,20 @@ "additionalProperties": false, "properties": { "1": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "2": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } }, - "required": [ - "1", - "2" - ] + "required": ["1", "2"] }, "custom_fields": { "type": "object", "additionalProperties": false, "properties": { "first_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] } } }, @@ -17590,52 +15515,28 @@ "type": "integer" }, "primary_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "primary_group_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_group_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "flair_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "featured_topic": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "staged": { "type": "boolean" @@ -17653,10 +15554,7 @@ "type": "boolean" }, "uploaded_avatar_id": { - "type": [ - "integer", - "null" - ] + "type": ["integer", "null"] }, "has_title_badges": { "type": "boolean" @@ -17689,10 +15587,7 @@ "type": "boolean" }, "locale": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "muted_category_ids": { "type": "array", @@ -17731,10 +15626,7 @@ "items": {} }, "system_avatar_upload_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "system_avatar_template": { "type": "string" @@ -17767,10 +15659,7 @@ "type": "boolean" }, "user_api_keys": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "user_passkeys": { "type": "array" @@ -17914,10 +15803,7 @@ "items": {} }, "invited_by": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "groups": { "type": "array", @@ -17953,61 +15839,34 @@ "type": "boolean" }, "title": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "grant_trust_level": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "incoming_email": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "has_messages": { "type": "boolean" }, "flair_url": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_bg_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "flair_color": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_raw": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_cooked": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "bio_excerpt": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "public_admission": { "type": "boolean" @@ -18019,19 +15878,13 @@ "type": "boolean" }, "full_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "default_notification_level": { "type": "integer" }, "membership_request_template": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "members_visibility_level": { "type": "integer" @@ -18134,16 +15987,10 @@ "type": "integer" }, "color_scheme_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "dark_scheme_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "dynamic_favicon": { "type": "boolean" @@ -18198,10 +16045,7 @@ "type": "boolean" }, "homepage_id": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "hide_profile_and_presence": { "type": "boolean" @@ -18222,10 +16066,7 @@ "type": "string" }, "timezone": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "skip_new_user_tips": { "type": "boolean" @@ -18234,10 +16075,7 @@ "type": "string" }, "oldest_search_log_date": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "sidebar_link_to_filtered_list": { "type": "boolean" @@ -18246,16 +16084,10 @@ "type": "boolean" }, "watched_precedence_over_muted": { - "type": [ - "boolean", - "null" - ] + "type": ["boolean", "null"] }, "seen_popups": { - "type": [ - "array", - "null" - ] + "type": ["array", "null"] }, "topics_unread_when_closed": { "type": "boolean" @@ -18378,10 +16210,7 @@ ] } }, - "required": [ - "user_badges", - "user" - ] + "required": ["user_badges", "user"] } } } @@ -18429,4 +16258,4 @@ } } } -} \ No newline at end of file +} diff --git a/package.json b/package.json index a57ec76..14c9c3a 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "index.js", "scripts": { "build": "tsc", - "start": "node dist/index.js", + "start": "node dist/index.js", "format": "biome format --write .", "lint": "tsx ./scripts/lint.mts && biome lint .", "lint:write": "biome lint --write .", diff --git a/tsconfig.json b/tsconfig.json index 6154cde..32f4958 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,10 +8,6 @@ "skipLibCheck": true, "outDir": "./dist" }, - "exclude": [ - "node_modules", - ], - "include": [ - "api" - ] -} \ No newline at end of file + "exclude": ["node_modules"], + "include": ["api"] +} diff --git a/types/chat.ts b/types/chat.ts index f6b8169..e9b4b3c 100644 --- a/types/chat.ts +++ b/types/chat.ts @@ -1,4 +1,4 @@ -import type { Uploads } from "./discourse"; +import type { Uploads } from './discourse'; export interface BasicChatMessage { id: number; @@ -22,4 +22,4 @@ export type ChatMessageOptions = { * An array of uploads_ids */ uploads?: Uploads[] | { id: number }[] | number[]; -}; \ No newline at end of file +}; diff --git a/types/discourse.ts b/types/discourse.ts index 863e0fe..f1a9861 100644 --- a/types/discourse.ts +++ b/types/discourse.ts @@ -652,4 +652,4 @@ export interface UserBadge { badge_id: number; user_id: number; granted_by_id: number; -} \ No newline at end of file +} diff --git a/types/index.ts b/types/index.ts index 7b71d5b..0e9111e 100644 --- a/types/index.ts +++ b/types/index.ts @@ -1,2 +1,2 @@ -export * from './webhook' -export * from './chat' \ No newline at end of file +export * from './webhook'; +export * from './chat'; diff --git a/types/webhook.ts b/types/webhook.ts index ab9e61c..7705f0d 100644 --- a/types/webhook.ts +++ b/types/webhook.ts @@ -1,160 +1,160 @@ -import type { BasicChatMessage } from "./chat"; -import type { BasicUser, Uploads } from "./discourse"; +import type { BasicChatMessage } from './chat'; +import type { BasicUser, Uploads } from './discourse'; export interface WebhookPost { - id: number; - name: string | null; - username: string; - avatar_template: string; - created_at: string; - cooked: string; - post_number: number; - post_type: number; - updated_at: string; - reply_count: number; - reply_to_post_number: number | null; - quote_count: number; - incoming_link_count: number; - reads: number; - score: number; - topic_id: number; - topic_slug: number; - topic_title: string; - category_id: number; - display_username: string; - primary_group_name: null | string; - flair_name: null | string; - flair_group_id: null | number; - version: number; - user_title: null | string; - bookmarked?: boolean; - raw: string; - moderator: boolean; - admin: boolean; - staff: boolean; - user_id: number; - hidden: boolean; - trust_level: 1; - deleted_at: null | string; - user_deleted: boolean; - edit_reason: null | string; - wiki: boolean; - reviewable_id: null | number; - reviewable_score_count: number; - reviewable_score_pending_count: number; - topic_posts_count: number; - topic_filtered_posts_count: number; - /** - * @todo Don't know if it's private message - */ - topic_archetype: "regular" | string; - category_slug: string; + id: number; + name: string | null; + username: string; + avatar_template: string; + created_at: string; + cooked: string; + post_number: number; + post_type: number; + updated_at: string; + reply_count: number; + reply_to_post_number: number | null; + quote_count: number; + incoming_link_count: number; + reads: number; + score: number; + topic_id: number; + topic_slug: number; + topic_title: string; + category_id: number; + display_username: string; + primary_group_name: null | string; + flair_name: null | string; + flair_group_id: null | number; + version: number; + user_title: null | string; + bookmarked?: boolean; + raw: string; + moderator: boolean; + admin: boolean; + staff: boolean; + user_id: number; + hidden: boolean; + trust_level: 1; + deleted_at: null | string; + user_deleted: boolean; + edit_reason: null | string; + wiki: boolean; + reviewable_id: null | number; + reviewable_score_count: number; + reviewable_score_pending_count: number; + topic_posts_count: number; + topic_filtered_posts_count: number; + /** + * @todo Don't know if it's private message + */ + topic_archetype: 'regular' | string; + category_slug: string; } export interface WebhookNotification { - id: number + id: number; user_id?: number | null; - notification_type: number - read: boolean - created_at: string - post_number: number | null - topic_id: number | null - fancy_title?: string - slug: string | null - data: Record + notification_type: number; + read: boolean; + created_at: string; + post_number: number | null; + topic_id: number | null; + fancy_title?: string; + slug: string | null; + data: Record; } export interface WebhookChatMessage { - message: { - id: number; - message: string; - cooked: string; - created_at: string; - excerpt: string; - chat_channel_id: string; - deleted_at?: string; - deleted_by_id?: number; - mentioned_users: unknown[]; - available_flags: unknown[]; - user: { - id: number; - username: string; - name: string | null; - avatar_template: string; - moderator: boolean; - admin: boolean; - staff: boolean; - new_user: boolean; - primary_group_name?: string; - status?: { - description: string; - emoji: string; - ends_at: null | string; - message_bus_last_id?: number; - }; - }; - chat_webhook_event: null | unknown; - uploads: Uploads[]; - edited?: boolean; - in_reply_to?: { - id: number; - cooked: string; - excerpt: string; - user: BasicUser; - chat_webhook_event: null | unknown; - }; - }; - channel: { - id: number; - allow_channel_wide_mentions: boolean; - /** - * The Chatable associated with the chat channel - * @beta I don’t know if there will be `chatable` other than `"Category"`. - * @todo add other `chatable` s - */ - chatable: { - id: number; - name: string; - color: string | null; - text_color: string | null; - slug: string; - topic_count: number; - post_count: number; - position: number; - description: string; - description_text: string; - description_excerpt: string; - topic_url: string; - read_restricted: boolean; - permission: null | unknown; - notification_level: null | unknown; - topic_template: null | unknown; - has_children: null | unknown; - sort_order: null | unknown; - sort_ascending: null | unknown; - show_subcategory_list: boolean; - num_featured_topics: number; - default_view: null | unknown; - subcategory_list_style: string; - default_top_period: string; - default_list_filter: string; - minimum_required_tags: number; - navigate_to_first_post_after_read: boolean; - uploaded_logo: null | string; - uploaded_logo_dark: null | string; - uploaded_background: null | string; - }; - chatable_id: number; - chatable_type: "Category" | string; - chatable_url: string; + message: { + id: number; + message: string; + cooked: string; + created_at: string; + excerpt: string; + chat_channel_id: string; + deleted_at?: string; + deleted_by_id?: number; + mentioned_users: unknown[]; + available_flags: unknown[]; + user: { + id: number; + username: string; + name: string | null; + avatar_template: string; + moderator: boolean; + admin: boolean; + staff: boolean; + new_user: boolean; + primary_group_name?: string; + status?: { description: string; - title: string; - slug: string; - status: "open" | string; - memberships_count: number; - current_user_membership: unknown; - meta: unknown; - threading_enabled: false; - last_message: BasicChatMessage; + emoji: string; + ends_at: null | string; + message_bus_last_id?: number; + }; + }; + chat_webhook_event: null | unknown; + uploads: Uploads[]; + edited?: boolean; + in_reply_to?: { + id: number; + cooked: string; + excerpt: string; + user: BasicUser; + chat_webhook_event: null | unknown; }; -} \ No newline at end of file + }; + channel: { + id: number; + allow_channel_wide_mentions: boolean; + /** + * The Chatable associated with the chat channel + * @beta I don’t know if there will be `chatable` other than `"Category"`. + * @todo add other `chatable` s + */ + chatable: { + id: number; + name: string; + color: string | null; + text_color: string | null; + slug: string; + topic_count: number; + post_count: number; + position: number; + description: string; + description_text: string; + description_excerpt: string; + topic_url: string; + read_restricted: boolean; + permission: null | unknown; + notification_level: null | unknown; + topic_template: null | unknown; + has_children: null | unknown; + sort_order: null | unknown; + sort_ascending: null | unknown; + show_subcategory_list: boolean; + num_featured_topics: number; + default_view: null | unknown; + subcategory_list_style: string; + default_top_period: string; + default_list_filter: string; + minimum_required_tags: number; + navigate_to_first_post_after_read: boolean; + uploaded_logo: null | string; + uploaded_logo_dark: null | string; + uploaded_background: null | string; + }; + chatable_id: number; + chatable_type: 'Category' | string; + chatable_url: string; + description: string; + title: string; + slug: string; + status: 'open' | string; + memberships_count: number; + current_user_membership: unknown; + meta: unknown; + threading_enabled: false; + last_message: BasicChatMessage; + }; +} From 15cc5b61506fbf3aba73307d9fa98103032560ff Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Fri, 23 May 2025 05:08:45 +0000 Subject: [PATCH 15/50] feat: Add thread handling capabilities; enhance message structures and API definitions --- api/events.ts | 7 +- client/sdk.gen.ts | 18 ++++ client/types.gen.ts | 112 +++++++++++++++++++++++++ lib/generate-response.ts | 3 +- lib/handle-app-mention.ts | 16 ++-- lib/handle-messages.ts | 79 +++++++++--------- lib/slack-utils.ts | 26 ++++-- openapi-ts.config.ts | 8 +- openapi.json | 169 ++++++++++++++++++++++++++++++++++++++ types/discourse.ts | 2 +- types/webhook.ts | 1 + 11 files changed, 374 insertions(+), 67 deletions(-) diff --git a/api/events.ts b/api/events.ts index 5e30907..03941e3 100644 --- a/api/events.ts +++ b/api/events.ts @@ -1,10 +1,7 @@ -import { - assistantThreadMessage, - handleNewAssistantMessage, -} from '../lib/handle-messages'; import { waitUntil } from '@vercel/functions'; import { handleNewAppMention } from '../lib/handle-app-mention'; -import { verifyRequest, getBotUser } from '../lib/slack-utils'; +import { handleNewAssistantMessage } from '../lib/handle-messages'; +import { getBotUser, verifyRequest } from '../lib/slack-utils'; import type { WebhookChatMessage, WebhookNotification } from '../types'; export async function POST(request: Request) { diff --git a/client/sdk.gen.ts b/client/sdk.gen.ts index b4d92e6..da26712 100644 --- a/client/sdk.gen.ts +++ b/client/sdk.gen.ts @@ -184,6 +184,8 @@ import type { GetMessagesResponse, ReactToMessageData, ReactToMessageResponse, + GetThreadData, + GetThreadResponse, GetUserCardData, GetUserCardResponse, GetSessionData, @@ -1977,6 +1979,22 @@ export const reactToMessage = ( }); }; +/** + * Get thread details + */ +export const getThread = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + GetThreadResponse, + unknown, + ThrowOnError + >({ + url: '/chat/api/channels/{channel_id}/threads/{thread_id}', + ...options, + }); +}; + /** * Fetch a user card */ diff --git a/client/types.gen.ts b/client/types.gen.ts index 06383ce..af14f67 100644 --- a/client/types.gen.ts +++ b/client/types.gen.ts @@ -5220,6 +5220,8 @@ export type SendMessageData = { body?: { message?: string; staged_id?: string; + in_reply_to_id?: number; + thread_id?: number; }; path: { channel_id: number; @@ -5274,6 +5276,7 @@ export type GetMessagesData = { query?: { fetch_from_last_read?: boolean; page_size?: number; + target_message_id?: number; }; url: '/chat/api/channels/{channel_id}/messages'; }; @@ -5353,6 +5356,115 @@ export type ReactToMessageResponses = { export type ReactToMessageResponse = ReactToMessageResponses[keyof ReactToMessageResponses]; +export type GetThreadData = { + body?: never; + path: { + channel_id: number; + thread_id: number; + }; + query?: never; + url: '/chat/api/channels/{channel_id}/threads/{thread_id}'; +}; + +export type GetThreadResponses = { + /** + * Thread info + */ + 200: { + thread?: { + id?: number | null; + title?: string | null; + status?: string | null; + channel_id?: number | null; + meta?: { + [key: string]: unknown; + }; + reply_count?: number | null; + current_user_membership?: { + [key: string]: unknown; + }; + preview?: { + [key: string]: unknown; + }; + last_message_id?: number | null; + force?: boolean | null; + original_message?: { + [key: string]: unknown; + }; + [key: string]: + | unknown + | (number | null) + | (string | null) + | (string | null) + | (number | null) + | { + [key: string]: unknown; + } + | (number | null) + | { + [key: string]: unknown; + } + | { + [key: string]: unknown; + } + | (number | null) + | (boolean | null) + | { + [key: string]: unknown; + } + | undefined; + }; + [key: string]: + | unknown + | { + id?: number | null; + title?: string | null; + status?: string | null; + channel_id?: number | null; + meta?: { + [key: string]: unknown; + }; + reply_count?: number | null; + current_user_membership?: { + [key: string]: unknown; + }; + preview?: { + [key: string]: unknown; + }; + last_message_id?: number | null; + force?: boolean | null; + original_message?: { + [key: string]: unknown; + }; + [key: string]: + | unknown + | (number | null) + | (string | null) + | (string | null) + | (number | null) + | { + [key: string]: unknown; + } + | (number | null) + | { + [key: string]: unknown; + } + | { + [key: string]: unknown; + } + | (number | null) + | (boolean | null) + | { + [key: string]: unknown; + } + | undefined; + } + | undefined; + }; +}; + +export type GetThreadResponse = GetThreadResponses[keyof GetThreadResponses]; + export type GetUserCardData = { body?: never; path: { diff --git a/lib/generate-response.ts b/lib/generate-response.ts index bd9f5d2..c69098f 100644 --- a/lib/generate-response.ts +++ b/lib/generate-response.ts @@ -1,8 +1,7 @@ -import { openai } from '@ai-sdk/openai'; +import { createOpenAICompatible } from '@ai-sdk/openai-compatible'; import { type CoreMessage, generateText, tool } from 'ai'; import { z } from 'zod'; import { exa } from './utils'; -import { createOpenAICompatible } from '@ai-sdk/openai-compatible'; const hackclub = createOpenAICompatible({ name: 'hackclub', diff --git a/lib/handle-app-mention.ts b/lib/handle-app-mention.ts index a71c55b..b95cc5f 100644 --- a/lib/handle-app-mention.ts +++ b/lib/handle-app-mention.ts @@ -1,20 +1,21 @@ -import { getThread } from './slack-utils'; -import { generateResponse } from './generate-response'; -import type { WebhookNotification } from '../types'; import { editMessage, sendMessage } from '../client/sdk.gen'; -import { GetSessionResponse } from '../client/types.gen'; +import type { GetSessionResponse } from '../client/types.gen'; +import type { WebhookNotification } from '../types'; +import { generateResponse } from './generate-response'; +import { getThread } from './slack-utils'; const updateStatusUtil = async ( initialStatus: string, event: WebhookNotification, + thread_id?: number | null, ) => { const res = await sendMessage({ path: { channel_id: event.data?.chat_channel_id as number, }, - // thread_ts: event.thread_ts ?? event.ts, body: { message: initialStatus, + thread_id: thread_id ?? undefined, }, }); @@ -49,10 +50,11 @@ export async function handleNewAppMention( } const { chat_channel_id: channel_id } = event?.data; - const updateMessage = await updateStatusUtil('is thinking...', event); + const thread_id = event?.data?.chat_thread_id as number ?? undefined; + const updateMessage = await updateStatusUtil('is thinking...', event, thread_id); // if (thread_ts) { - const messages = await getThread(channel_id as any, botUser); + const messages = await getThread(channel_id as number, botUser, thread_id); const result = await generateResponse(messages, updateMessage); await updateMessage(result); // } else { diff --git a/lib/handle-messages.ts b/lib/handle-messages.ts index 6953629..03b6021 100644 --- a/lib/handle-messages.ts +++ b/lib/handle-messages.ts @@ -1,46 +1,42 @@ -import type { - AssistantThreadStartedEvent, - GenericMessageEvent, -} from '@slack/web-api'; -import { getBotUser, getThread, updateStatusUtil } from './slack-utils'; -import { generateResponse } from './generate-response'; -import type { WebhookChatMessage } from '../types'; -import { sendMessage } from '../client/sdk.gen'; +import type { GetSessionResponse } from '../client/types.gen'; import { keywords } from '../config'; -import { GetSessionData, GetSessionResponse } from '../client/types.gen'; +import type { WebhookChatMessage } from '../types'; +import { generateResponse } from './generate-response'; +import { getThread, updateStatusUtil } from './slack-utils'; -export async function assistantThreadMessage( - event: AssistantThreadStartedEvent, -) { - const { channel_id, thread_ts } = event.assistant_thread; - console.log(`Thread started: ${channel_id} ${thread_ts}`); - console.log(JSON.stringify(event)); +// export async function assistantThreadMessage( +// event: AssistantThreadStartedEvent, +// ) { +// const { channel_id, thread_ts } = event.assistant_thread; +// console.log(`Thread started: ${channel_id} ${thread_ts}`); +// console.log(JSON.stringify(event)); - await sendMessage({ - path: { - channel_id: channel_id as any, - }, - // thread_ts: thread_ts, - body: { - message: "Hello, I'm an AI assistant built with the AI SDK by Vercel!", - }, - }); +// await sendMessage({ +// path: { +// channel_id: channel_id, +// }, +// // thread_ts: thread_ts, +// body: { +// message: "Hello, I'm an AI assistant built with the AI SDK by Vercel!", +// // thread_id: thread_ts, +// }, +// }); - // await client.assistant.threads.setSuggestedPrompts({ - // channel_id: channel_id, - // thread_ts: thread_ts, - // prompts: [ - // { - // title: "Get the weather", - // message: "What is the current weather in London?", - // }, - // { - // title: "Get the news", - // message: "What is the latest Premier League news from the BBC?", - // }, - // ], - // }); -} +// // await client.assistant.threads.setSuggestedPrompts({ +// // channel_id: channel_id, +// // thread_ts: thread_ts, +// // prompts: [ +// // { +// // title: "Get the weather", +// // message: "What is the current weather in London?", +// // }, +// // { +// // title: "Get the news", +// // message: "What is the latest Premier League news from the BBC?", +// // }, +// // ], +// // }); +// } export async function handleNewAssistantMessage( event: WebhookChatMessage, @@ -50,6 +46,7 @@ export async function handleNewAssistantMessage( const { channel } = event; const { message: content } = event.message; + const thread_id = event.message.thread_id ?? null; const isDirectMessage = channel.chatable_type === 'DirectMessage'; const hasKeyword = keywords.some((k) => @@ -60,9 +57,9 @@ export async function handleNewAssistantMessage( console.log('processing AI request from chat message'); - const updateStatus = await updateStatusUtil('is thinking...', event); + const updateStatus = await updateStatusUtil('is thinking...', event, thread_id); - const messages = await getThread(channel.id, botUser); + const messages = await getThread(channel.id, botUser, thread_id); const result = await generateResponse(messages, updateStatus); await updateStatus(result); diff --git a/lib/slack-utils.ts b/lib/slack-utils.ts index 26bac7b..ebbc794 100644 --- a/lib/slack-utils.ts +++ b/lib/slack-utils.ts @@ -1,14 +1,15 @@ -import type { WebhookChatMessage, WebhookNotification } from '../types'; -import type { CoreMessage } from 'ai'; import * as crypto from 'node:crypto'; +import type { CoreMessage } from 'ai'; import { client } from '../client/client.gen'; import { - sendMessage, + getThread as _getThread, editMessage, getMessages, getSession, + sendMessage, } from '../client/sdk.gen'; -import { GetSessionResponse } from '../client/types.gen'; +import type { GetSessionResponse } from '../client/types.gen'; +import type { WebhookChatMessage } from '../types'; const signingSecret = process.env.DISCOURSE_SIGNING_SECRET!; const url = process.env.DISCOURSE_URL!; @@ -68,14 +69,15 @@ export const verifyRequest = async ({ export const updateStatusUtil = async ( initialStatus: string, event: WebhookChatMessage, + thread_id?: number | null, ) => { const res = await sendMessage({ path: { channel_id: event.channel?.id, }, - // thread_ts: event.thread_ts ?? event.ts, body: { message: initialStatus, + thread_id: thread_id ?? undefined, }, }); @@ -101,15 +103,25 @@ export const updateStatusUtil = async ( export async function getThread( channel_id: number, - // thread_ts: string, botUser: GetSessionResponse['current_user'], + thread_id?: number | null, ): Promise { + const thread = thread_id + ? await _getThread({ + path: { + channel_id, + thread_id, + }, + }) + : undefined; + const res = await getMessages({ path: { channel_id, }, query: { page_size: 50, + target_message_id: thread?.data?.thread?.last_message_id ?? undefined, }, }); @@ -119,7 +131,7 @@ export async function getThread( const result = messages .map((message) => { - const isBot = message.user?.id === (botUser.id as any); + const isBot = message.user?.id === botUser.id; if (!message.message) return null; // For app mentions, remove the mention prefix diff --git a/openapi-ts.config.ts b/openapi-ts.config.ts index 53b8dee..8a59da7 100644 --- a/openapi-ts.config.ts +++ b/openapi-ts.config.ts @@ -3,14 +3,14 @@ import { defineConfig } from '@hey-api/openapi-ts'; export default defineConfig({ input: './openapi.json', output: { - // format: 'prettier', - // lint: 'eslint', + format: 'biome', + lint: 'biome', path: './client', }, plugins: [ '@hey-api/client-fetch', '@hey-api/schemas', - 'zod', + // 'zod', { dates: true, name: '@hey-api/transformers', @@ -22,7 +22,7 @@ export default defineConfig({ { name: '@hey-api/sdk', transformer: true, - validator: true, + // validator: true, }, ], }); diff --git a/openapi.json b/openapi.json index 9f79b2c..808f403 100644 --- a/openapi.json +++ b/openapi.json @@ -15075,6 +15075,14 @@ "staged_id": { "type": "string", "nullable": true + }, + "in_reply_to_id": { + "type": "integer", + "nullable": true + }, + "thread_id": { + "type": "integer", + "nullable": true } } } @@ -15195,6 +15203,15 @@ "type": "integer", "example": 50 } + }, + { + "name": "target_message_id", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "example": 1234 + } } ], "responses": { @@ -15376,6 +15393,158 @@ } } }, + "/chat/api/channels/{channel_id}/threads/{thread_id}": { + "get": { + "summary": "Get thread details", + "operationId": "getThread", + "tags": ["Thread"], + "parameters": [ + { + "name": "channel_id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "example": 2 + } + }, + { + "name": "thread_id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "example": 89 + } + } + ], + "responses": { + "200": { + "description": "Thread info", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "properties": { + "thread": { + "type": "object", + "additionalProperties": true, + "properties": { + "id": { + "type": ["integer", "null"] + }, + "title": { + "type": ["string", "null"] + }, + "status": { + "type": ["string", "null"] + }, + "channel_id": { + "type": ["integer", "null"] + }, + "meta": { + "type": "object", + "additionalProperties": true + }, + "reply_count": { + "type": ["integer", "null"] + }, + "current_user_membership": { + "type": "object", + "additionalProperties": true + }, + "preview": { + "type": "object", + "additionalProperties": true + }, + "last_message_id": { + "type": ["integer", "null"] + }, + "force": { + "type": ["boolean", "null"] + }, + "original_message": { + "type": "object", + "additionalProperties": true + } + } + } + } + }, + "example": { + "thread": { + "id": 89, + "title": null, + "status": "open", + "channel_id": 2, + "meta": { + "message_bus_last_ids": { + "thread_message_bus_last_id": 2 + } + }, + "reply_count": 1, + "current_user_membership": { + "notification_level": 2, + "thread_id": 89, + "last_read_message_id": 4248, + "thread_title_prompt_seen": false + }, + "preview": { + "last_reply_created_at": "2025-05-23T04:21:48Z", + "last_reply_excerpt": "tred", + "last_reply_id": 4248, + "participant_count": 2, + "reply_count": 1, + "participant_users": [ + { + "id": 24, + "username": "zenix", + "name": "Zenith", + "avatar_template": "/user_avatar/.../zenix/{size}/271_2.png" + }, + { + "id": 1, + "username": "twa", + "name": "Anirudh Sriram", + "avatar_template": "/user_avatar/.../twa/{size}/70_2.png" + } + ], + "last_reply_user": { + "id": 1, + "username": "twa", + "name": "Anirudh Sriram", + "avatar_template": "/user_avatar/.../twa/{size}/70_2.png" + } + }, + "last_message_id": 4248, + "force": false, + "original_message": { + "id": 4235, + "message": "okay, same answer: i'm good.", + "cooked": "

okay, same answer: i'm good.

", + "created_at": "2025-05-23T04:15:15.655Z", + "excerpt": "okay, same answer: i'm good.", + "chat_channel_id": 2, + "deleted_at": null, + "mentioned_users": [], + "user": { + "id": 24, + "username": "zenix", + "name": "Zenith", + "avatar_template": "/user_avatar/.../zenix/{size}/271_2.png", + "can_chat": null, + "has_chat_enabled": null + } + } + } + } + } + } + } + } + } + }, "/u/{username}/card.json": { "get": { "summary": "Fetch a user card", diff --git a/types/discourse.ts b/types/discourse.ts index f1a9861..5d1843e 100644 --- a/types/discourse.ts +++ b/types/discourse.ts @@ -524,7 +524,7 @@ export interface Group { export interface UserSidebarTag { [propname: string]: unknown; name: string; - description: void /* 未知类型 */; + description: undefined /* 未知类型 */; pm_only: boolean; } diff --git a/types/webhook.ts b/types/webhook.ts index 7705f0d..37cdf9b 100644 --- a/types/webhook.ts +++ b/types/webhook.ts @@ -67,6 +67,7 @@ export interface WebhookNotification { export interface WebhookChatMessage { message: { id: number; + thread_id?: number | null; message: string; cooked: string; created_at: string; From 0febdb8c752e9fee8b6691951dcb628070f8fdb1 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Fri, 23 May 2025 10:41:24 +0000 Subject: [PATCH 16/50] feat: Implement thread and message handling; add API endpoints for fetching thread details and messages --- client/sdk.gen.ts | 60 +++-- client/transformers.gen.ts | 19 +- client/types.gen.ts | 274 +++++++++++++++------- lib/handle-app-mention.ts | 15 +- lib/handle-messages.ts | 13 +- lib/slack-utils.ts | 62 +++-- openapi.json | 456 +++++++++++++++++++++++++------------ 7 files changed, 624 insertions(+), 275 deletions(-) diff --git a/client/sdk.gen.ts b/client/sdk.gen.ts index da26712..988520c 100644 --- a/client/sdk.gen.ts +++ b/client/sdk.gen.ts @@ -178,21 +178,26 @@ import type { GetUserEmailsResponse, SendMessageData, SendMessageResponse, + GetThreadData, + GetThreadResponse, EditMessageData, EditMessageResponse, GetMessagesData, GetMessagesResponse, + GetThreadMessagesData, + GetThreadMessagesResponse, ReactToMessageData, ReactToMessageResponse, - GetThreadData, - GetThreadResponse, GetUserCardData, GetUserCardResponse, GetSessionData, GetSessionResponse, } from './types.gen'; import { client as _heyApiClient } from './client.gen'; -import { getMessagesResponseTransformer } from './transformers.gen'; +import { + getMessagesResponseTransformer, + getThreadMessagesResponseTransformer, +} from './transformers.gen'; export type Options< TData extends TDataShape = TDataShape, @@ -1920,6 +1925,22 @@ export const sendMessage = ( }); }; +/** + * Get thread details + */ +export const getThread = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + GetThreadResponse, + unknown, + ThrowOnError + >({ + url: '/chat/api/channels/{channel_id}/threads/{thread_id}', + ...options, + }); +}; + /** * Edit an existing message */ @@ -1958,6 +1979,23 @@ export const getMessages = ( }); }; +/** + * Fetch thread messages + */ +export const getThreadMessages = ( + options: Options, +) => { + return (options.client ?? _heyApiClient).get< + GetThreadMessagesResponse, + unknown, + ThrowOnError + >({ + responseTransformer: getThreadMessagesResponseTransformer, + url: '/chat/api/channels/{channel_id}/threads/{thread_id}/messages', + ...options, + }); +}; + /** * React to a message */ @@ -1979,22 +2017,6 @@ export const reactToMessage = ( }); }; -/** - * Get thread details - */ -export const getThread = ( - options: Options, -) => { - return (options.client ?? _heyApiClient).get< - GetThreadResponse, - unknown, - ThrowOnError - >({ - url: '/chat/api/channels/{channel_id}/threads/{thread_id}', - ...options, - }); -}; - /** * Fetch a user card */ diff --git a/client/transformers.gen.ts b/client/transformers.gen.ts index e5e7f5b..0f186e6 100644 --- a/client/transformers.gen.ts +++ b/client/transformers.gen.ts @@ -1,6 +1,9 @@ // This file is auto-generated by @hey-api/openapi-ts -import type { GetMessagesResponse } from './types.gen'; +import type { + GetMessagesResponse, + GetThreadMessagesResponse, +} from './types.gen'; export const getMessagesResponseTransformer = async ( data: any, @@ -15,3 +18,17 @@ export const getMessagesResponseTransformer = async ( } return data; }; + +export const getThreadMessagesResponseTransformer = async ( + data: any, +): Promise => { + if (data.messages) { + data.messages = data.messages.map((item: any) => { + if (item.created_at) { + item.created_at = new Date(item.created_at); + } + return item; + }); + } + return data; +}; diff --git a/client/types.gen.ts b/client/types.gen.ts index af14f67..bc3f373 100644 --- a/client/types.gen.ts +++ b/client/types.gen.ts @@ -5243,6 +5243,115 @@ export type SendMessageResponses = { export type SendMessageResponse = SendMessageResponses[keyof SendMessageResponses]; +export type GetThreadData = { + body?: never; + path: { + channel_id: number; + thread_id: number; + }; + query?: never; + url: '/chat/api/channels/{channel_id}/threads/{thread_id}'; +}; + +export type GetThreadResponses = { + /** + * Thread info + */ + 200: { + thread?: { + id?: number | null; + title?: string | null; + status?: string | null; + channel_id?: number | null; + meta?: { + [key: string]: unknown; + }; + reply_count?: number | null; + current_user_membership?: { + [key: string]: unknown; + }; + preview?: { + [key: string]: unknown; + }; + last_message_id?: number | null; + force?: boolean | null; + original_message?: { + [key: string]: unknown; + }; + [key: string]: + | unknown + | (number | null) + | (string | null) + | (string | null) + | (number | null) + | { + [key: string]: unknown; + } + | (number | null) + | { + [key: string]: unknown; + } + | { + [key: string]: unknown; + } + | (number | null) + | (boolean | null) + | { + [key: string]: unknown; + } + | undefined; + }; + [key: string]: + | unknown + | { + id?: number | null; + title?: string | null; + status?: string | null; + channel_id?: number | null; + meta?: { + [key: string]: unknown; + }; + reply_count?: number | null; + current_user_membership?: { + [key: string]: unknown; + }; + preview?: { + [key: string]: unknown; + }; + last_message_id?: number | null; + force?: boolean | null; + original_message?: { + [key: string]: unknown; + }; + [key: string]: + | unknown + | (number | null) + | (string | null) + | (string | null) + | (number | null) + | { + [key: string]: unknown; + } + | (number | null) + | { + [key: string]: unknown; + } + | { + [key: string]: unknown; + } + | (number | null) + | (boolean | null) + | { + [key: string]: unknown; + } + | undefined; + } + | undefined; + }; +}; + +export type GetThreadResponse = GetThreadResponses[keyof GetThreadResponses]; + export type EditMessageData = { body?: { message?: string; @@ -5331,139 +5440,138 @@ export type GetMessagesResponses = { export type GetMessagesResponse = GetMessagesResponses[keyof GetMessagesResponses]; -export type ReactToMessageData = { - body?: { - react_action?: string; - emoji?: string; - }; - path: { - channel_id: number; - message_id: number; - }; - query?: never; - url: '/chat/{channel_id}/react/{message_id}'; -}; - -export type ReactToMessageResponses = { - /** - * Reaction added/removed - */ - 200: { - success?: string; - }; -}; - -export type ReactToMessageResponse = - ReactToMessageResponses[keyof ReactToMessageResponses]; - -export type GetThreadData = { +export type GetThreadMessagesData = { body?: never; path: { channel_id: number; thread_id: number; }; - query?: never; - url: '/chat/api/channels/{channel_id}/threads/{thread_id}'; + query?: { + /** + * Start fetching from this message ID + */ + target_message_id?: number; + page_size?: number; + }; + url: '/chat/api/channels/{channel_id}/threads/{thread_id}/messages'; }; -export type GetThreadResponses = { +export type GetThreadMessagesResponses = { /** - * Thread info + * A page of messages in the thread */ 200: { - thread?: { + messages?: Array<{ id?: number | null; - title?: string | null; - status?: string | null; - channel_id?: number | null; - meta?: { - [key: string]: unknown; - }; - reply_count?: number | null; - current_user_membership?: { - [key: string]: unknown; - }; - preview?: { - [key: string]: unknown; - }; - last_message_id?: number | null; - force?: boolean | null; - original_message?: { + message?: string | null; + cooked?: string | null; + created_at?: Date | null; + thread_id?: number | null; + chat_channel_id?: number | null; + user?: { [key: string]: unknown; }; + available_flags?: Array; [key: string]: | unknown | (number | null) | (string | null) | (string | null) + | (Date | null) | (number | null) - | { - [key: string]: unknown; - } | (number | null) | { [key: string]: unknown; } - | { - [key: string]: unknown; - } + | Array + | undefined; + }>; + tracking?: { + [key: string]: unknown; + } | null; + meta?: { + target_message_id?: number | null; + can_load_more_future?: boolean | null; + can_load_more_past?: boolean | null; + [key: string]: + | unknown | (number | null) | (boolean | null) - | { - [key: string]: unknown; - } + | (boolean | null) | undefined; }; [key: string]: | unknown - | { + | Array<{ id?: number | null; - title?: string | null; - status?: string | null; - channel_id?: number | null; - meta?: { - [key: string]: unknown; - }; - reply_count?: number | null; - current_user_membership?: { - [key: string]: unknown; - }; - preview?: { - [key: string]: unknown; - }; - last_message_id?: number | null; - force?: boolean | null; - original_message?: { + message?: string | null; + cooked?: string | null; + created_at?: Date | null; + thread_id?: number | null; + chat_channel_id?: number | null; + user?: { [key: string]: unknown; }; + available_flags?: Array; [key: string]: | unknown | (number | null) | (string | null) | (string | null) + | (Date | null) | (number | null) - | { - [key: string]: unknown; - } | (number | null) | { [key: string]: unknown; } - | { - [key: string]: unknown; - } + | Array + | undefined; + }> + | ({ + [key: string]: unknown; + } | null) + | { + target_message_id?: number | null; + can_load_more_future?: boolean | null; + can_load_more_past?: boolean | null; + [key: string]: + | unknown | (number | null) | (boolean | null) - | { - [key: string]: unknown; - } + | (boolean | null) | undefined; } | undefined; }; }; -export type GetThreadResponse = GetThreadResponses[keyof GetThreadResponses]; +export type GetThreadMessagesResponse = + GetThreadMessagesResponses[keyof GetThreadMessagesResponses]; + +export type ReactToMessageData = { + body?: { + react_action?: string; + emoji?: string; + }; + path: { + channel_id: number; + message_id: number; + }; + query?: never; + url: '/chat/{channel_id}/react/{message_id}'; +}; + +export type ReactToMessageResponses = { + /** + * Reaction added/removed + */ + 200: { + success?: string; + }; +}; + +export type ReactToMessageResponse = + ReactToMessageResponses[keyof ReactToMessageResponses]; export type GetUserCardData = { body?: never; diff --git a/lib/handle-app-mention.ts b/lib/handle-app-mention.ts index b95cc5f..cdc9b81 100644 --- a/lib/handle-app-mention.ts +++ b/lib/handle-app-mention.ts @@ -2,7 +2,7 @@ import { editMessage, sendMessage } from '../client/sdk.gen'; import type { GetSessionResponse } from '../client/types.gen'; import type { WebhookNotification } from '../types'; import { generateResponse } from './generate-response'; -import { getThread } from './slack-utils'; +import { getMessages, getThreadMessages } from './slack-utils'; const updateStatusUtil = async ( initialStatus: string, @@ -50,12 +50,19 @@ export async function handleNewAppMention( } const { chat_channel_id: channel_id } = event?.data; - const thread_id = event?.data?.chat_thread_id as number ?? undefined; - const updateMessage = await updateStatusUtil('is thinking...', event, thread_id); + const thread_id = (event?.data?.chat_thread_id as number) ?? undefined; + const updateMessage = await updateStatusUtil( + 'is thinking...', + event, + thread_id, + ); // if (thread_ts) { - const messages = await getThread(channel_id as number, botUser, thread_id); + const messages = thread_id + ? await getThreadMessages(channel_id as number, botUser, thread_id) + : await getMessages(channel_id as number, botUser); const result = await generateResponse(messages, updateMessage); + await updateMessage(result); // } else { // const result = await generateResponse( diff --git a/lib/handle-messages.ts b/lib/handle-messages.ts index 03b6021..52dd600 100644 --- a/lib/handle-messages.ts +++ b/lib/handle-messages.ts @@ -2,7 +2,7 @@ import type { GetSessionResponse } from '../client/types.gen'; import { keywords } from '../config'; import type { WebhookChatMessage } from '../types'; import { generateResponse } from './generate-response'; -import { getThread, updateStatusUtil } from './slack-utils'; +import { getMessages, getThreadMessages, updateStatusUtil } from './slack-utils'; // export async function assistantThreadMessage( // event: AssistantThreadStartedEvent, @@ -57,10 +57,15 @@ export async function handleNewAssistantMessage( console.log('processing AI request from chat message'); - const updateStatus = await updateStatusUtil('is thinking...', event, thread_id); + const updateStatus = await updateStatusUtil( + 'is thinking...', + event, + thread_id, + ); - const messages = await getThread(channel.id, botUser, thread_id); + const messages = thread_id + ? await getThreadMessages(channel.id as number, botUser, thread_id) + : await getMessages(channel.id as number, botUser); const result = await generateResponse(messages, updateStatus); - await updateStatus(result); } diff --git a/lib/slack-utils.ts b/lib/slack-utils.ts index ebbc794..6c9307f 100644 --- a/lib/slack-utils.ts +++ b/lib/slack-utils.ts @@ -4,7 +4,8 @@ import { client } from '../client/client.gen'; import { getThread as _getThread, editMessage, - getMessages, + getMessages as _getMessages, + getThreadMessages as _getThreadMessages, getSession, sendMessage, } from '../client/sdk.gen'; @@ -81,13 +82,14 @@ export const updateStatusUtil = async ( }, }); - if (!res?.data) throw new Error('Failed to post initial message'); + if (!res?.data?.success) throw new Error('Failed to post initial message'); const initialMessage = res.data; if (!initialMessage || !initialMessage.message_id) throw new Error('Failed to post initial message'); const updateMessage = async (status: string) => { + console.log('Updating message', status); await editMessage({ path: { channel_id: event.channel?.id, @@ -101,27 +103,57 @@ export const updateStatusUtil = async ( return updateMessage; }; -export async function getThread( +export async function getMessages( channel_id: number, botUser: GetSessionResponse['current_user'], - thread_id?: number | null, ): Promise { - const thread = thread_id - ? await _getThread({ - path: { - channel_id, - thread_id, - }, - }) - : undefined; - - const res = await getMessages({ + const res = await _getMessages({ + path: { + channel_id, + }, + query: { + page_size: 50, + }, + }); + + if (!botUser) throw new Error('botUser is undefined'); + if (!res?.data?.messages) throw new Error('No messages found in thread'); + const { messages } = res.data; + + const result = messages + .map((message) => { + const isBot = message.user?.id === botUser.id; + if (!message.message) return null; + + // For app mentions, remove the mention prefix + // For DM messages, keep the full text + let content = message.message; + if (!isBot && content.includes(`<@${botUser.username}>`)) { + content = content.replace(`<@${botUser.username}> `, ''); + } + + return { + role: isBot ? 'assistant' : 'user', + content: content, + } as CoreMessage; + }) + .filter((msg): msg is CoreMessage => msg !== null); + + return result; +} + +export async function getThreadMessages( + channel_id: number, + botUser: GetSessionResponse['current_user'], + thread_id: number, +): Promise { + const res = await _getThreadMessages({ path: { channel_id, + thread_id: thread_id, }, query: { page_size: 50, - target_message_id: thread?.data?.thread?.last_message_id ?? undefined, }, }); diff --git a/openapi.json b/openapi.json index 808f403..efcc72e 100644 --- a/openapi.json +++ b/openapi.json @@ -15111,6 +15111,158 @@ } } }, + "/chat/api/channels/{channel_id}/threads/{thread_id}": { + "get": { + "summary": "Get thread details", + "operationId": "getThread", + "tags": ["Thread"], + "parameters": [ + { + "name": "channel_id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "example": 2 + } + }, + { + "name": "thread_id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "example": 89 + } + } + ], + "responses": { + "200": { + "description": "Thread info", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "properties": { + "thread": { + "type": "object", + "additionalProperties": true, + "properties": { + "id": { + "type": ["integer", "null"] + }, + "title": { + "type": ["string", "null"] + }, + "status": { + "type": ["string", "null"] + }, + "channel_id": { + "type": ["integer", "null"] + }, + "meta": { + "type": "object", + "additionalProperties": true + }, + "reply_count": { + "type": ["integer", "null"] + }, + "current_user_membership": { + "type": "object", + "additionalProperties": true + }, + "preview": { + "type": "object", + "additionalProperties": true + }, + "last_message_id": { + "type": ["integer", "null"] + }, + "force": { + "type": ["boolean", "null"] + }, + "original_message": { + "type": "object", + "additionalProperties": true + } + } + } + } + }, + "example": { + "thread": { + "id": 89, + "title": null, + "status": "open", + "channel_id": 2, + "meta": { + "message_bus_last_ids": { + "thread_message_bus_last_id": 2 + } + }, + "reply_count": 1, + "current_user_membership": { + "notification_level": 2, + "thread_id": 89, + "last_read_message_id": 4248, + "thread_title_prompt_seen": false + }, + "preview": { + "last_reply_created_at": "2025-05-23T04:21:48Z", + "last_reply_excerpt": "tred", + "last_reply_id": 4248, + "participant_count": 2, + "reply_count": 1, + "participant_users": [ + { + "id": 24, + "username": "zenix", + "name": "Zenith", + "avatar_template": "/user_avatar/.../zenix/{size}/271_2.png" + }, + { + "id": 1, + "username": "twa", + "name": "Anirudh Sriram", + "avatar_template": "/user_avatar/.../twa/{size}/70_2.png" + } + ], + "last_reply_user": { + "id": 1, + "username": "twa", + "name": "Anirudh Sriram", + "avatar_template": "/user_avatar/.../twa/{size}/70_2.png" + } + }, + "last_message_id": 4248, + "force": false, + "original_message": { + "id": 4235, + "message": "okay, same answer: i'm good.", + "cooked": "

okay, same answer: i'm good.

", + "created_at": "2025-05-23T04:15:15.655Z", + "excerpt": "okay, same answer: i'm good.", + "chat_channel_id": 2, + "deleted_at": null, + "mentioned_users": [], + "user": { + "id": 24, + "username": "zenix", + "name": "Zenith", + "avatar_template": "/user_avatar/.../zenix/{size}/271_2.png", + "can_chat": null, + "has_chat_enabled": null + } + } + } + } + } + } + } + } + } + }, "/chat/api/channels/{channel_id}/messages/{message_id}": { "put": { "summary": "Edit an existing message", @@ -15330,11 +15482,11 @@ } } }, - "/chat/{channel_id}/react/{message_id}": { - "put": { - "summary": "React to a message", - "operationId": "reactToMessage", - "tags": ["Chat"], + "/chat/api/channels/{channel_id}/threads/{thread_id}/messages": { + "get": { + "summary": "Fetch thread messages", + "operationId": "getThreadMessages", + "tags": ["Thread"], "parameters": [ { "name": "channel_id", @@ -15342,49 +15494,144 @@ "required": true, "schema": { "type": "integer", - "example": 23 + "example": 42 } }, { - "name": "message_id", + "name": "thread_id", "in": "path", "required": true, "schema": { "type": "integer", - "example": 4051 + "example": 99 } - } - ], - "requestBody": { - "content": { - "application/x-www-form-urlencoded": { - "schema": { - "type": "object", - "properties": { - "react_action": { - "type": "string", - "example": "add" - }, - "emoji": { - "type": "string", - "example": "heart" - } - } - } + }, + { + "name": "target_message_id", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "example": 100 + }, + "description": "Start fetching from this message ID" + }, + { + "name": "page_size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "example": 20 } } - }, + ], "responses": { "200": { - "description": "Reaction added/removed", + "description": "A page of messages in the thread", "content": { "application/json": { "schema": { "type": "object", + "additionalProperties": true, "properties": { - "success": { - "type": "string" + "messages": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true, + "properties": { + "id": { + "type": ["integer", "null"] + }, + "message": { + "type": ["string", "null"] + }, + "cooked": { + "type": ["string", "null"] + }, + "created_at": { + "type": ["string", "null"], + "format": "date-time" + }, + "thread_id": { + "type": ["integer", "null"] + }, + "chat_channel_id": { + "type": ["integer", "null"] + }, + "user": { + "type": "object", + "additionalProperties": true + }, + "available_flags": { + "type": "array", + "items": { + "type": ["string", "null"] + } + } + } + } + }, + "tracking": { + "type": ["object", "null"], + "additionalProperties": true + }, + "meta": { + "type": "object", + "additionalProperties": true, + "properties": { + "target_message_id": { + "type": ["integer", "null"] + }, + "can_load_more_future": { + "type": ["boolean", "null"] + }, + "can_load_more_past": { + "type": ["boolean", "null"] + } + } + } + } + }, + "example": { + "messages": [ + { + "id": 1, + "message": "Hello, world!", + "cooked": "

Hello, world!

", + "created_at": "2025-05-23T10:00:00Z", + "thread_id": 99, + "chat_channel_id": 42, + "user": { + "id": 100, + "username": "user1", + "name": "User One", + "avatar_template": "/user_avatar/example.com/user1/{size}.png" + }, + "available_flags": ["flag1", null] + }, + { + "id": 2, + "message": "Reply to hello", + "cooked": "

Reply to hello

", + "created_at": "2025-05-23T10:01:00Z", + "thread_id": 99, + "chat_channel_id": 42, + "user": { + "id": 101, + "username": "user2", + "name": "User Two", + "avatar_template": "/user_avatar/example.com/user2/{size}.png" + }, + "available_flags": [] } + ], + "tracking": {}, + "meta": { + "target_message_id": 100, + "can_load_more_future": false, + "can_load_more_past": true } } } @@ -15393,11 +15640,11 @@ } } }, - "/chat/api/channels/{channel_id}/threads/{thread_id}": { - "get": { - "summary": "Get thread details", - "operationId": "getThread", - "tags": ["Thread"], + "/chat/{channel_id}/react/{message_id}": { + "put": { + "summary": "React to a message", + "operationId": "reactToMessage", + "tags": ["Chat"], "parameters": [ { "name": "channel_id", @@ -15405,137 +15652,48 @@ "required": true, "schema": { "type": "integer", - "example": 2 + "example": 23 } }, { - "name": "thread_id", + "name": "message_id", "in": "path", "required": true, "schema": { "type": "integer", - "example": 89 + "example": 4051 } } ], + "requestBody": { + "content": { + "application/x-www-form-urlencoded": { + "schema": { + "type": "object", + "properties": { + "react_action": { + "type": "string", + "example": "add" + }, + "emoji": { + "type": "string", + "example": "heart" + } + } + } + } + } + }, "responses": { "200": { - "description": "Thread info", + "description": "Reaction added/removed", "content": { "application/json": { "schema": { "type": "object", - "additionalProperties": true, "properties": { - "thread": { - "type": "object", - "additionalProperties": true, - "properties": { - "id": { - "type": ["integer", "null"] - }, - "title": { - "type": ["string", "null"] - }, - "status": { - "type": ["string", "null"] - }, - "channel_id": { - "type": ["integer", "null"] - }, - "meta": { - "type": "object", - "additionalProperties": true - }, - "reply_count": { - "type": ["integer", "null"] - }, - "current_user_membership": { - "type": "object", - "additionalProperties": true - }, - "preview": { - "type": "object", - "additionalProperties": true - }, - "last_message_id": { - "type": ["integer", "null"] - }, - "force": { - "type": ["boolean", "null"] - }, - "original_message": { - "type": "object", - "additionalProperties": true - } - } - } - } - }, - "example": { - "thread": { - "id": 89, - "title": null, - "status": "open", - "channel_id": 2, - "meta": { - "message_bus_last_ids": { - "thread_message_bus_last_id": 2 - } - }, - "reply_count": 1, - "current_user_membership": { - "notification_level": 2, - "thread_id": 89, - "last_read_message_id": 4248, - "thread_title_prompt_seen": false - }, - "preview": { - "last_reply_created_at": "2025-05-23T04:21:48Z", - "last_reply_excerpt": "tred", - "last_reply_id": 4248, - "participant_count": 2, - "reply_count": 1, - "participant_users": [ - { - "id": 24, - "username": "zenix", - "name": "Zenith", - "avatar_template": "/user_avatar/.../zenix/{size}/271_2.png" - }, - { - "id": 1, - "username": "twa", - "name": "Anirudh Sriram", - "avatar_template": "/user_avatar/.../twa/{size}/70_2.png" - } - ], - "last_reply_user": { - "id": 1, - "username": "twa", - "name": "Anirudh Sriram", - "avatar_template": "/user_avatar/.../twa/{size}/70_2.png" - } - }, - "last_message_id": 4248, - "force": false, - "original_message": { - "id": 4235, - "message": "okay, same answer: i'm good.", - "cooked": "

okay, same answer: i'm good.

", - "created_at": "2025-05-23T04:15:15.655Z", - "excerpt": "okay, same answer: i'm good.", - "chat_channel_id": 2, - "deleted_at": null, - "mentioned_users": [], - "user": { - "id": 24, - "username": "zenix", - "name": "Zenith", - "avatar_template": "/user_avatar/.../zenix/{size}/271_2.png", - "can_chat": null, - "has_chat_enabled": null - } + "success": { + "type": "string" } } } From 8720411d84ab22b1c3475da7d2e47676056a32d3 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Fri, 23 May 2025 10:58:06 +0000 Subject: [PATCH 17/50] feat: Update environment configuration; add Discourse credentials and integrate env-core package --- .env.example | 11 +++-- env.ts | 87 ++++++++++++++++++++-------------------- lib/generate-response.ts | 58 +++++++++++++-------------- lib/slack-utils.ts | 7 ++-- lib/utils.ts | 3 -- package.json | 1 + pnpm-lock.yaml | 45 +++++++++++++++++++++ tsconfig.json | 3 +- vercel.json | 2 +- 9 files changed, 133 insertions(+), 84 deletions(-) delete mode 100644 lib/utils.ts diff --git a/.env.example b/.env.example index 744e2d3..53b9206 100644 --- a/.env.example +++ b/.env.example @@ -1,8 +1,11 @@ -# Slack Credentials -# Get these from your Slack app configuration at https://api.slack.com/apps -DISCOURSE_BOT_TOKEN=xoxb-your-bot-token # Bot User OAuth Token from OAuth & Permissions +# Discourse Credentials +# Get these from your Discourse Forum + +# Bot User OAuth Token from OAuth & Permissions +DISCOURSE_BOT_TOKEN=your-bot-token DISCOURSE_URL=https://community.yourdomain.com/ -DISCOURSE_SIGNING_SECRET=your-signing-secret # Signing Secret from Basic Information +# Signing Secret from Basic Information +DISCOURSE_SIGNING_SECRET=your-signing-secret # OpenAI Credentials # Get this from your OpenAI account at https://platform.openai.com/api-keys diff --git a/env.ts b/env.ts index a4ed7f5..5886e16 100644 --- a/env.ts +++ b/env.ts @@ -1,46 +1,47 @@ -// import { createEnv } from "@t3-oss/env-core"; -// import { z } from "zod"; +import { createEnv } from "@t3-oss/env-core"; +import { z } from "zod"; -// export const env = createEnv({ -// server: { -// // Discord -// DISCORD_TOKEN: z.string().min(1), -// DISCORD_CLIENT_ID: z.string().min(1), -// // AI -// OPENAI_API_KEY: z.string().optional(), -// HACKCLUB_API_KEY: z.string().optional(), -// OPENROUTER_API_KEY: z.string().optional(), -// // Logging -// LOG_DIRECTORY: z.string().optional().default("logs"), -// LOG_LEVEL: z -// .enum(["debug", "info", "warn", "error"]) -// .optional() -// .default("info"), -// // Redis -// UPSTASH_REDIS_REST_URL: z.string().min(1).url(), -// UPSTASH_REDIS_REST_TOKEN: z.string().min(1), -// // Mem0 -// MEM0_API_KEY: z.string().min(1).startsWith("m0-"), -// }, +export const env = createEnv({ + server: { + // Discourse + DISCOURSE_BOT_TOKEN: z.string().min(1), + DISCOURSE_SIGNING_SECRET: z.string().min(1), + DISCOURSE_URL: z.string().url().min(1), + // AI + OPENAI_API_KEY: z.string().optional(), + HACKCLUB_API_KEY: z.string().optional(), + OPENROUTER_API_KEY: z.string().optional(), + // Logging + LOG_DIRECTORY: z.string().optional().default("logs"), + LOG_LEVEL: z + .enum(["debug", "info", "warn", "error"]) + .optional() + .default("info"), + // Redis + UPSTASH_REDIS_REST_URL: z.string().min(1).url(), + UPSTASH_REDIS_REST_TOKEN: z.string().min(1), + // Mem0 + MEM0_API_KEY: z.string().min(1).startsWith("m0-"), + }, -// /** -// * What object holds the environment variables at runtime. This is usually -// * `process.env` or `import.meta.env`. -// */ -// runtimeEnv: process.env, + /** + * What object holds the environment variables at runtime. This is usually + * `process.env` or `import.meta.env`. + */ + runtimeEnv: process.env, -// /** -// * By default, this library will feed the environment variables directly to -// * the Zod validator. -// * -// * This means that if you have an empty string for a value that is supposed -// * to be a number (e.g. `PORT=` in a ".env" file), Zod will incorrectly flag -// * it as a type mismatch violation. Additionally, if you have an empty string -// * for a value that is supposed to be a string with a default value (e.g. -// * `DOMAIN=` in an ".env" file), the default value will never be applied. -// * -// * In order to solve these issues, we recommend that all new projects -// * explicitly specify this option as true. -// */ -// emptyStringAsUndefined: true, -// }); + /** + * By default, this library will feed the environment variables directly to + * the Zod validator. + * + * This means that if you have an empty string for a value that is supposed + * to be a number (e.g. `PORT=` in a ".env" file), Zod will incorrectly flag + * it as a type mismatch violation. Additionally, if you have an empty string + * for a value that is supposed to be a string with a default value (e.g. + * `DOMAIN=` in an ".env" file), the default value will never be applied. + * + * In order to solve these issues, we recommend that all new projects + * explicitly specify this option as true. + */ + emptyStringAsUndefined: true, +}); diff --git a/lib/generate-response.ts b/lib/generate-response.ts index c69098f..746d186 100644 --- a/lib/generate-response.ts +++ b/lib/generate-response.ts @@ -1,11 +1,11 @@ import { createOpenAICompatible } from '@ai-sdk/openai-compatible'; import { type CoreMessage, generateText, tool } from 'ai'; import { z } from 'zod'; -import { exa } from './utils'; +import { env } from '../env'; const hackclub = createOpenAICompatible({ name: 'hackclub', - apiKey: process.env.HACKCLUB_API_KEY!, + apiKey: env.HACKCLUB_API_KEY, baseURL: 'https://ai.hackclub.com', }); @@ -52,34 +52,34 @@ export const generateResponse = async ( }; }, }), - searchWeb: tool({ - description: 'Use this to search the web for information', - parameters: z.object({ - query: z.string(), - specificDomain: z - .string() - .nullable() - .describe( - 'a domain to search if the user specifies e.g. bbc.com. Should be only the domain name without the protocol', - ), - }), - execute: async ({ query, specificDomain }) => { - updateStatus?.(`is searching the web for ${query}...`); - const { results } = await exa.searchAndContents(query, { - livecrawl: 'always', - numResults: 3, - includeDomains: specificDomain ? [specificDomain] : undefined, - }); + // searchWeb: tool({ + // description: 'Use this to search the web for information', + // parameters: z.object({ + // query: z.string(), + // specificDomain: z + // .string() + // .nullable() + // .describe( + // 'a domain to search if the user specifies e.g. bbc.com. Should be only the domain name without the protocol', + // ), + // }), + // execute: async ({ query, specificDomain }) => { + // updateStatus?.(`is searching the web for ${query}...`); + // const { results } = await exa.searchAndContents(query, { + // livecrawl: 'always', + // numResults: 3, + // includeDomains: specificDomain ? [specificDomain] : undefined, + // }); - return { - results: results.map((result) => ({ - title: result.title, - url: result.url, - snippet: result.text.slice(0, 1000), - })), - }; - }, - }), + // return { + // results: results.map((result) => ({ + // title: result.title, + // url: result.url, + // snippet: result.text.slice(0, 1000), + // })), + // }; + // }, + // }), }, }); diff --git a/lib/slack-utils.ts b/lib/slack-utils.ts index 6c9307f..1f38b5e 100644 --- a/lib/slack-utils.ts +++ b/lib/slack-utils.ts @@ -11,14 +11,15 @@ import { } from '../client/sdk.gen'; import type { GetSessionResponse } from '../client/types.gen'; import type { WebhookChatMessage } from '../types'; +import { env } from '../env'; -const signingSecret = process.env.DISCOURSE_SIGNING_SECRET!; -const url = process.env.DISCOURSE_URL!; +const signingSecret = env.DISCOURSE_SIGNING_SECRET; +const url = env.DISCOURSE_URL; client.setConfig({ baseUrl: url, headers: { - 'Api-Key': process.env.DISCOURSE_BOT_TOKEN!, + 'Api-Key': env.DISCOURSE_BOT_TOKEN, }, }); diff --git a/lib/utils.ts b/lib/utils.ts deleted file mode 100644 index 113df0b..0000000 --- a/lib/utils.ts +++ /dev/null @@ -1,3 +0,0 @@ -import Exa from 'exa-js'; - -export const exa = new Exa(process.env.EXA_API_KEY); diff --git a/package.json b/package.json index 14c9c3a..e498d61 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@ai-sdk/openai-compatible": "^0.2.14", "@hey-api/client-fetch": "^0.10.1", "@slack/web-api": "^7.0.2", + "@t3-oss/env-core": "^0.13.4", "@vercel/functions": "^2.0.0", "ai": "^4.3.16", "discourse2-chat": "^1.1.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 69f82a1..9854a86 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: '@slack/web-api': specifier: ^7.0.2 version: 7.8.0 + '@t3-oss/env-core': + specifier: ^0.13.4 + version: 0.13.4(arktype@2.1.20)(typescript@5.8.2)(zod@3.24.2) '@vercel/functions': specifier: ^2.0.0 version: 2.0.0 @@ -95,6 +98,12 @@ packages: peerDependencies: zod: ^3.23.8 + '@ark/schema@0.46.0': + resolution: {integrity: sha512-c2UQdKgP2eqqDArfBqQIJppxJHvNNXuQPeuSPlDML4rjw+f1cu0qAlzOG4b8ujgm9ctIDWwhpyw6gjG5ledIVQ==} + + '@ark/util@0.46.0': + resolution: {integrity: sha512-JPy/NGWn/lvf1WmGCPw2VGpBg5utZraE84I7wli18EDF3p3zc/e9WolT35tINeZO3l7C77SjqRJeAUoT0CvMRg==} + '@biomejs/biome@1.9.4': resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} engines: {node: '>=14.21.3'} @@ -412,6 +421,21 @@ packages: resolution: {integrity: sha512-d4SdG+6UmGdzWw38a4sN3lF/nTEzsDxhzU13wm10ejOpPehtmRoqBKnPztQUfFiWbNvSb4czkWYJD4kt+5+Fuw==} engines: {node: '>= 18', npm: '>= 8.6.0'} + '@t3-oss/env-core@0.13.4': + resolution: {integrity: sha512-zVOiYO0+CF7EnBScz8s0O5JnJLPTU0lrUi8qhKXfIxIJXvI/jcppSiXXsEJwfB4A6XZawY/Wg/EQGKANi/aPmQ==} + peerDependencies: + arktype: ^2.1.0 + typescript: '>=5.0.0' + valibot: ^1.0.0-beta.7 || ^1.0.0 + zod: ^3.24.0 || ^4.0.0-beta.0 + peerDependenciesMeta: + typescript: + optional: true + valibot: + optional: true + zod: + optional: true + '@tootallnate/once@2.0.0': resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} @@ -588,6 +612,9 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + arktype@2.1.20: + resolution: {integrity: sha512-IZCEEXaJ8g+Ijd59WtSYwtjnqXiwM8sWQ5EjGamcto7+HVN9eK0C4p0zDlCuAwWhpqr6fIBkxPuYDl4/Mcj/+Q==} + async-listen@1.2.0: resolution: {integrity: sha512-CcEtRh/oc9Jc4uWeUwdpG/+Mb2YUHKmdaTf0gUr7Wa+bfp4xx70HOb3RuSTJMvqKNB1TkdTfjLdrcz2X4rkkZA==} @@ -1729,6 +1756,12 @@ snapshots: zod: 3.24.2 zod-to-json-schema: 3.24.3(zod@3.24.2) + '@ark/schema@0.46.0': + dependencies: + '@ark/util': 0.46.0 + + '@ark/util@0.46.0': {} + '@biomejs/biome@1.9.4': optionalDependencies: '@biomejs/cli-darwin-arm64': 1.9.4 @@ -1963,6 +1996,13 @@ snapshots: transitivePeerDependencies: - debug + '@t3-oss/env-core@0.13.4(arktype@2.1.20)(typescript@5.8.2)(zod@3.24.2)': + dependencies: + arktype: 2.1.20 + optionalDependencies: + typescript: 5.8.2 + zod: 3.24.2 + '@tootallnate/once@2.0.0': {} '@ts-morph/common@0.11.1': @@ -2207,6 +2247,11 @@ snapshots: argparse@2.0.1: {} + arktype@2.1.20: + dependencies: + '@ark/schema': 0.46.0 + '@ark/util': 0.46.0 + async-listen@1.2.0: {} async-listen@3.0.0: {} diff --git a/tsconfig.json b/tsconfig.json index 32f4958..fdfbe74 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,8 @@ "compilerOptions": { "strict": true, "target": "ESNext", - "module": "CommonJS", + "module": "NodeNext", + "allowJs": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "skipLibCheck": true, diff --git a/vercel.json b/vercel.json index 0024c9f..8342d3b 100644 --- a/vercel.json +++ b/vercel.json @@ -2,7 +2,7 @@ "redirects": [ { "source": "/", - "destination": "https://github.com/nicoalbanese/ai-sdk-slackbot" + "destination": "https://github.com/techwithanirudh/ai-sdk-discourse-bot" } ], "functions": { From 396349d128d0b99bc06d6226052d70116543a13b Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Fri, 23 May 2025 11:13:57 +0000 Subject: [PATCH 18/50] feat: add initial server setup with API, configuration, and environment variables - Created API endpoint that returns "Hello World!" - Added configuration file with keywords, location, and speed settings - Implemented environment variable management using zod for validation - Developed AI response generation logic with weather fetching capability - Handled app mentions and message processing for AI interactions - Introduced utility functions for Slack message handling and verification - Defined types for chat and webhook interactions - Updated TypeScript configuration for improved compatibility - Removed obsolete Vercel configuration file --- .gitignore | 10 +- .npmrc | 2 + .vercel/README.txt | 11 + .../tsconfig-with-tsconfig-json.json | 6 + .vercel/project.json | 1 + nitro.config.ts | 4 + package.json | 8 +- pnpm-lock.yaml | 4582 +++++++++++++---- api/events.ts => server/api/events.post.ts | 18 +- server/api/index.ts | 3 + config.ts => server/config.ts | 0 env.ts => server/env.ts | 0 {lib => server/lib}/ai/providers.ts | 0 {lib => server/lib}/generate-response.ts | 0 {lib => server/lib}/handle-app-mention.ts | 4 +- {lib => server/lib}/handle-messages.ts | 2 +- {lib => server/lib}/slack-utils.ts | 12 +- {types => server/types}/chat.ts | 0 {types => server/types}/discourse.ts | 0 {types => server/types}/index.ts | 0 {types => server/types}/webhook.ts | 0 tsconfig.json | 14 +- vercel.json | 14 - 23 files changed, 3735 insertions(+), 956 deletions(-) create mode 100644 .npmrc create mode 100644 .vercel/README.txt create mode 100644 .vercel/cache/node/api/events.ts/tsconfig-with-tsconfig-json.json create mode 100644 .vercel/project.json create mode 100644 nitro.config.ts rename api/events.ts => server/api/events.post.ts (75%) create mode 100644 server/api/index.ts rename config.ts => server/config.ts (100%) rename env.ts => server/env.ts (100%) rename {lib => server/lib}/ai/providers.ts (100%) rename {lib => server/lib}/generate-response.ts (100%) rename {lib => server/lib}/handle-app-mention.ts (93%) rename {lib => server/lib}/handle-messages.ts (97%) rename {lib => server/lib}/slack-utils.ts (93%) rename {types => server/types}/chat.ts (100%) rename {types => server/types}/discourse.ts (100%) rename {types => server/types}/index.ts (100%) rename {types => server/types}/webhook.ts (100%) delete mode 100644 vercel.json diff --git a/.gitignore b/.gitignore index 160e029..7607606 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,9 @@ node_modules -.env -ai-context dist -.vercel +.data +.nitro +.cache +.output +.env .env*.local -.pnpm-store \ No newline at end of file +.pnpm-store diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..cf04042 --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +shamefully-hoist=true +strict-peer-dependencies=false diff --git a/.vercel/README.txt b/.vercel/README.txt new file mode 100644 index 0000000..525d8ce --- /dev/null +++ b/.vercel/README.txt @@ -0,0 +1,11 @@ +> Why do I have a folder named ".vercel" in my project? +The ".vercel" folder is created when you link a directory to a Vercel project. + +> What does the "project.json" file contain? +The "project.json" file contains: +- The ID of the Vercel project that you linked ("projectId") +- The ID of the user or team your Vercel project is owned by ("orgId") + +> Should I commit the ".vercel" folder? +No, you should not share the ".vercel" folder with anyone. +Upon creation, it will be automatically added to your ".gitignore" file. diff --git a/.vercel/cache/node/api/events.ts/tsconfig-with-tsconfig-json.json b/.vercel/cache/node/api/events.ts/tsconfig-with-tsconfig-json.json new file mode 100644 index 0000000..5b3d149 --- /dev/null +++ b/.vercel/cache/node/api/events.ts/tsconfig-with-tsconfig-json.json @@ -0,0 +1,6 @@ +{ + "extends": "../../../../../tsconfig.json", + "include": [ + "../../../../../api/events.ts" + ] +} \ No newline at end of file diff --git a/.vercel/project.json b/.vercel/project.json new file mode 100644 index 0000000..e6266c6 --- /dev/null +++ b/.vercel/project.json @@ -0,0 +1 @@ +{"projectId":"prj_gYlMsUal1x6FYQHABRzb5wD58unX","orgId":"team_RYmUDgx0rGjRKh2Wi0T9pH6r"} \ No newline at end of file diff --git a/nitro.config.ts b/nitro.config.ts new file mode 100644 index 0000000..b6e91c8 --- /dev/null +++ b/nitro.config.ts @@ -0,0 +1,4 @@ +//https://nitro.unjs.io/config +export default defineNitroConfig({ + srcDir: "server" +}); diff --git a/package.json b/package.json index e498d61..5d1607f 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,10 @@ "description": "", "main": "index.js", "scripts": { - "build": "tsc", - "start": "node dist/index.js", + "build": "nitro build", + "dev": "nitro dev", + "prepare": "nitro prepare", + "preview": "node .output/server/index.mjs", "format": "biome format --write .", "lint": "tsx ./scripts/lint.mts && biome lint .", "lint:write": "biome lint --write .", @@ -29,7 +31,7 @@ "discourse2-chat": "^1.1.5", "exa-js": "^1.4.10", "tsx": "^4.19.4", - "vercel": "^42.1.1", + "nitropack": "latest", "zod": "^3.24.2" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9854a86..21e74f6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,7 +16,7 @@ importers: version: 0.2.14(zod@3.24.2) '@hey-api/client-fetch': specifier: ^0.10.1 - version: 0.10.1(@hey-api/openapi-ts@0.67.5(typescript@5.8.2)) + version: 0.10.1(@hey-api/openapi-ts@0.67.5(magicast@0.3.5)(typescript@5.8.2)) '@slack/web-api': specifier: ^7.0.2 version: 7.8.0 @@ -35,12 +35,12 @@ importers: exa-js: specifier: ^1.4.10 version: 1.4.10 + nitropack: + specifier: latest + version: 2.11.12 tsx: specifier: ^4.19.4 version: 4.19.4 - vercel: - specifier: ^42.1.1 - version: 42.1.1 zod: specifier: ^3.24.2 version: 3.24.2 @@ -50,7 +50,7 @@ importers: version: 1.9.4 '@hey-api/openapi-ts': specifier: ^0.67.5 - version: 0.67.5(typescript@5.8.2) + version: 0.67.5(magicast@0.3.5)(typescript@5.8.2) '@types/node': specifier: ^20.11.17 version: 20.17.22 @@ -104,6 +104,27 @@ packages: '@ark/util@0.46.0': resolution: {integrity: sha512-JPy/NGWn/lvf1WmGCPw2VGpBg5utZraE84I7wli18EDF3p3zc/e9WolT35tINeZO3l7C77SjqRJeAUoT0CvMRg==} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.27.2': + resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.27.1': + resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} + engines: {node: '>=6.9.0'} + '@biomejs/biome@1.9.4': resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} engines: {node: '>=14.21.3'} @@ -157,29 +178,20 @@ packages: cpu: [x64] os: [win32] - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - - '@edge-runtime/format@2.2.1': - resolution: {integrity: sha512-JQTRVuiusQLNNLe2W9tnzBlV/GvSVcozLl4XZHk5swnRZ/v6jp8TqR8P7sqmJsQqblDZ3EztcWmLDbhRje/+8g==} - engines: {node: '>=16'} - - '@edge-runtime/node-utils@2.3.0': - resolution: {integrity: sha512-uUtx8BFoO1hNxtHjp3eqVPC/mWImGb2exOfGjMLUoipuWgjej+f4o/VP4bUI8U40gu7Teogd5VTeZUkGvJSPOQ==} - engines: {node: '>=16'} + '@cloudflare/kv-asset-handler@0.4.0': + resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} + engines: {node: '>=18.0.0'} - '@edge-runtime/ponyfill@2.4.2': - resolution: {integrity: sha512-oN17GjFr69chu6sDLvXxdhg0Qe8EZviGSuqzR9qOiKh4MhFYGdBBcqRNzdmYeAdeRzOW2mM9yil4RftUQ7sUOA==} - engines: {node: '>=16'} + '@colors/colors@1.6.0': + resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} + engines: {node: '>=0.1.90'} - '@edge-runtime/primitives@4.1.0': - resolution: {integrity: sha512-Vw0lbJ2lvRUqc7/soqygUX216Xb8T3WBZ987oywz6aJqRxcwSVWwr9e+Nqo2m9bxobA9mdbWNNoRY6S9eko1EQ==} - engines: {node: '>=16'} + '@dabh/diagnostics@2.0.3': + resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} - '@edge-runtime/vm@3.2.0': - resolution: {integrity: sha512-0dEVyRLM/lG4gp1R/Ik5bfPl/1wX00xFwd5KcNH602tzBa09oF7pbTKETEhR1GjZ75K6OJnYFu8II2dyMhONMw==} - engines: {node: '>=16'} + '@dependents/detective-less@4.1.0': + resolution: {integrity: sha512-KrkT6qO5NxqNfy68sBl6CTSoJ4SNDIS5iQArkibhlbGU4LaDukZ3q2HIkh8aUKDio6o4itU4xDR7t82Y2eP1Bg==} + engines: {node: '>=14'} '@esbuild/aix-ppc64@0.25.4': resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} @@ -331,9 +343,8 @@ packages: cpu: [x64] os: [win32] - '@fastify/busboy@2.1.1': - resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} - engines: {node: '>=14'} + '@fastify/busboy@3.1.1': + resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==} '@hey-api/client-fetch@0.10.1': resolution: {integrity: sha512-C1XZEnzvOIdXppvMcnO8/V/RpcORxA4rh+5qjuMcItkV++hv7aBz7tSLd0z+bSLFUwttec077WT/nPS+oO4BiA==} @@ -351,6 +362,9 @@ packages: peerDependencies: typescript: ^5.5.3 + '@ioredis/commands@1.2.0': + resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -359,24 +373,71 @@ packages: 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.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} '@jsdevtools/ono@7.1.3': resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + '@mapbox/node-pre-gyp@1.0.11': + resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} + hasBin: true + '@mapbox/node-pre-gyp@2.0.0': resolution: {integrity: sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==} engines: {node: '>=18'} hasBin: true + '@netlify/binary-info@1.0.0': + resolution: {integrity: sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==} + + '@netlify/blobs@9.1.1': + resolution: {integrity: sha512-hOrWBMOvdh9oa+8Z6ocvkY92q9YtfD+Vbh2i+Qs14cHsl9SYxRzPRQnBxU/H6PNtj6gtEJ7tv8RbBN8z7jH2jA==} + engines: {node: ^14.16.0 || >=16.0.0} + + '@netlify/dev-utils@2.1.1': + resolution: {integrity: sha512-0O4/eEcmZCNUkpSuN/yYRkX6BAcK/sbnH0YYNuK3HX193QXaSBT60TUpvTpiRxI6zvIfYCDRl3rz63w8m/lEMg==} + engines: {node: ^14.16.0 || >=16.0.0} + + '@netlify/functions@3.1.8': + resolution: {integrity: sha512-oAHPyybBx4oH8+3RfgihrTVhv6gseQw1pt0k4kZ/NDmGbEsgrr3gw+3ajzM5+fW5UnWiNuR5c+d7JgtRqjyMkw==} + engines: {node: '>=14.0.0'} + + '@netlify/open-api@2.37.0': + resolution: {integrity: sha512-zXnRFkxgNsalSgU8/vwTWnav3R+8KG8SsqHxqaoJdjjJtnZR7wo3f+qqu4z+WtZ/4V7fly91HFUwZ6Uz2OdW7w==} + engines: {node: '>=14.8.0'} + + '@netlify/runtime-utils@1.3.1': + resolution: {integrity: sha512-7/vIJlMYrPJPlEW84V2yeRuG3QBu66dmlv9neTmZ5nXzwylhBEOhy11ai+34A8mHCSZI4mKns25w3HM9kaDdJg==} + engines: {node: '>=16.0.0'} + + '@netlify/serverless-functions-api@1.41.1': + resolution: {integrity: sha512-swjyZEd8U1QVp01rZdHxpwWie7GkP1kS4+4n8kuNKA8+3G5tD0JXXf3a5d4tdwVvrU9k7a4GP1Bn792UPwecmw==} + engines: {node: '>=18.0.0'} + + '@netlify/zip-it-and-ship-it@10.1.1': + resolution: {integrity: sha512-MMXrty1NADxyMPgd7qZvDUYunhcPhxIA/jWP2joceOoPcAxOno/aS4jFuIHf2Dbb4HdhR+BlvgvDCy7QTXXyLQ==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -393,10 +454,172 @@ 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.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'} + '@poppinss/colors@4.1.4': + resolution: {integrity: sha512-FA+nTU8p6OcSH4tLDY5JilGYr1bVWHpNmcLr7xmMEdbWmKHa+3QZ+DqefrXKmdjO/brHTnQZo20lLSjaO7ydog==} + engines: {node: '>=18.16.0'} + + '@poppinss/dumper@0.6.3': + resolution: {integrity: sha512-iombbn8ckOixMtuV1p3f8jN6vqhXefNjJttoPaJDMeIk/yIGhkkL3OrHkEjE9SRsgoAx1vBUU2GtgggjvA5hCA==} + + '@poppinss/exception@1.2.1': + resolution: {integrity: sha512-aQypoot0HPSJa6gDPEPTntc1GT6QINrSbgRlRhadGW2WaYqUK3tK4Bw9SBMZXhmxd3GeAlZjVcODHgiu+THY7A==} + engines: {node: '>=18'} + + '@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.1': + resolution: {integrity: sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==} + 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'} @@ -406,8 +629,113 @@ packages: rollup: optional: true - '@sinclair/typebox@0.25.24': - resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} + '@rollup/rollup-android-arm-eabi@4.41.0': + resolution: {integrity: sha512-KxN+zCjOYHGwCl4UCtSfZ6jrq/qi88JDUtiEFk8LELEHq2Egfc/FgW+jItZiOLRuQfb/3xJSgFuNPC9jzggX+A==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.41.0': + resolution: {integrity: sha512-yDvqx3lWlcugozax3DItKJI5j05B0d4Kvnjx+5mwiUpWramVvmAByYigMplaoAQ3pvdprGCTCE03eduqE/8mPQ==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.41.0': + resolution: {integrity: sha512-2KOU574vD3gzcPSjxO0eyR5iWlnxxtmW1F5CkNOHmMlueKNCQkxR6+ekgWyVnz6zaZihpUNkGxjsYrkTJKhkaw==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.41.0': + resolution: {integrity: sha512-gE5ACNSxHcEZyP2BA9TuTakfZvULEW4YAOtxl/A/YDbIir/wPKukde0BNPlnBiP88ecaN4BJI2TtAd+HKuZPQQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.41.0': + resolution: {integrity: sha512-GSxU6r5HnWij7FoSo7cZg3l5GPg4HFLkzsFFh0N/b16q5buW1NAWuCJ+HMtIdUEi6XF0qH+hN0TEd78laRp7Dg==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.41.0': + resolution: {integrity: sha512-KGiGKGDg8qLRyOWmk6IeiHJzsN/OYxO6nSbT0Vj4MwjS2XQy/5emsmtoqLAabqrohbgLWJ5GV3s/ljdrIr8Qjg==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.41.0': + resolution: {integrity: sha512-46OzWeqEVQyX3N2/QdiU/CMXYDH/lSHpgfBkuhl3igpZiaB3ZIfSjKuOnybFVBQzjsLwkus2mjaESy8H41SzvA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.41.0': + resolution: {integrity: sha512-lfgW3KtQP4YauqdPpcUZHPcqQXmTmH4nYU0cplNeW583CMkAGjtImw4PKli09NFi2iQgChk4e9erkwlfYem6Lg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.41.0': + resolution: {integrity: sha512-nn8mEyzMbdEJzT7cwxgObuwviMx6kPRxzYiOl6o/o+ChQq23gfdlZcUNnt89lPhhz3BYsZ72rp0rxNqBSfqlqw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.41.0': + resolution: {integrity: sha512-l+QK99je2zUKGd31Gh+45c4pGDAqZSuWQiuRFCdHYC2CSiO47qUWsCcenrI6p22hvHZrDje9QjwSMAFL3iwXwQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.41.0': + resolution: {integrity: sha512-WbnJaxPv1gPIm6S8O/Wg+wfE/OzGSXlBMbOe4ie+zMyykMOeqmgD1BhPxZQuDqwUN+0T/xOFtL2RUWBspnZj3w==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.41.0': + resolution: {integrity: sha512-eRDWR5t67/b2g8Q/S8XPi0YdbKcCs4WQ8vklNnUYLaSWF+Cbv2axZsp4jni6/j7eKvMLYCYdcsv8dcU+a6QNFg==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.41.0': + resolution: {integrity: sha512-TWrZb6GF5jsEKG7T1IHwlLMDRy2f3DPqYldmIhnA2DVqvvhY2Ai184vZGgahRrg8k9UBWoSlHv+suRfTN7Ua4A==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.41.0': + resolution: {integrity: sha512-ieQljaZKuJpmWvd8gW87ZmSFwid6AxMDk5bhONJ57U8zT77zpZ/TPKkU9HpnnFrM4zsgr4kiGuzbIbZTGi7u9A==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.41.0': + resolution: {integrity: sha512-/L3pW48SxrWAlVsKCN0dGLB2bi8Nv8pr5S5ocSM+S0XCn5RCVCXqi8GVtHFsOBBCSeR+u9brV2zno5+mg3S4Aw==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.41.0': + resolution: {integrity: sha512-XMLeKjyH8NsEDCRptf6LO8lJk23o9wvB+dJwcXMaH6ZQbbkHu2dbGIUindbMtRN6ux1xKi16iXWu6q9mu7gDhQ==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.41.0': + resolution: {integrity: sha512-m/P7LycHZTvSQeXhFmgmdqEiTqSV80zn6xHaQ1JSqwCtD1YGtwEK515Qmy9DcB2HK4dOUVypQxvhVSy06cJPEg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.41.0': + resolution: {integrity: sha512-4yodtcOrFHpbomJGVEqZ8fzD4kfBeCbpsUy5Pqk4RluXOdsWdjLnjhiKy2w3qzcASWd04fp52Xz7JKarVJ5BTg==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.41.0': + resolution: {integrity: sha512-tmazCrAsKzdkXssEc65zIE1oC6xPHwfy9d5Ta25SRCDOZS+I6RypVVShWALNuU9bxIfGA0aqrmzlzoM5wO5SPQ==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.41.0': + resolution: {integrity: sha512-h1J+Yzjo/X+0EAvR2kIXJDuTuyT7drc+t2ALY0nIcGPbTatNOf0VWdhEA2Z4AAjv6X1NJV7SYo5oCTYRJhSlVA==} + cpu: [x64] + os: [win32] + + '@sindresorhus/is@7.0.1': + resolution: {integrity: sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==} + engines: {node: '>=18'} + + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} '@slack/logger@4.0.0': resolution: {integrity: sha512-Wz7QYfPAlG/DR+DfABddUZeNgoeY7d1J39OCR2jR+v7VBsB8ezulDK5szTnDDPDwLH5IWhLvXIHlCFZV7MSKgA==} @@ -421,6 +749,9 @@ packages: resolution: {integrity: sha512-d4SdG+6UmGdzWw38a4sN3lF/nTEzsDxhzU13wm10ejOpPehtmRoqBKnPztQUfFiWbNvSb4czkWYJD4kt+5+Fuw==} engines: {node: '>= 18', npm: '>= 8.6.0'} + '@speed-highlight/core@1.2.7': + resolution: {integrity: sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==} + '@t3-oss/env-core@0.13.4': resolution: {integrity: sha512-zVOiYO0+CF7EnBScz8s0O5JnJLPTU0lrUi8qhKXfIxIJXvI/jcppSiXXsEJwfB4A6XZawY/Wg/EQGKANi/aPmQ==} peerDependencies: @@ -436,25 +767,6 @@ packages: zod: optional: true - '@tootallnate/once@2.0.0': - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - - '@ts-morph/common@0.11.1': - resolution: {integrity: sha512-7hWZS0NRpEsNV8vWJzg7FEz6V8MaLNeJOmwmghqUXTpzk16V1LLZhdo+4QvE/+zv4cVci0OviuJFnqhEfoV3+g==} - - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@types/diff-match-patch@1.0.36': resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==} @@ -464,24 +776,40 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@16.18.11': - resolution: {integrity: sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==} - '@types/node@20.17.22': resolution: {integrity: sha512-9RV2zST+0s3EhfrMZIhrz2bhuhBwxgkbHEwP2gtGWPjBzVQjifMzJ9exw7aDZhR1wbpj8zBrfp3bo8oJcGiUUw==} + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/resolve@1.20.2': + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - '@vercel/build-utils@10.5.1': - resolution: {integrity: sha512-BtqwEmU1AoITpd0KxYrdQOwyKZL8RKba+bWxI8mr3gXPQZWRAE9ok1zF0AXfvMGCstYPHBPNolZGDSfWmY2jqg==} + '@types/triple-beam@1.3.5': + resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} - '@vercel/error-utils@2.0.3': - resolution: {integrity: sha512-CqC01WZxbLUxoiVdh9B/poPbNpY9U+tO1N9oWHwTl5YAZxcqXmmWJ8KNMFItJCUUWdY3J3xv8LvAuQv2KZ5YdQ==} + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@vercel/fun@1.1.6': - resolution: {integrity: sha512-xDiM+bD0fSZyzcjsAua3D+guXclvHOSTzr03UcZEQwYzIjwWjLduT7bl2gAaeNIe7fASAIZd0P00clcj0On4rQ==} - engines: {node: '>= 18'} + '@typescript-eslint/types@5.62.0': + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/typescript-estree@5.62.0': + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/visitor-keys@5.62.0': + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@vercel/functions@2.0.0': resolution: {integrity: sha512-BSwIihLHoV18gerKZJyGuqd3rtaYM6rJvET1kOwKktshucyaHXTJel7Cxegs+sdX0NZqsX4LO2MFnMU2jG01Cw==} @@ -492,65 +820,61 @@ packages: '@aws-sdk/credential-provider-web-identity': optional: true - '@vercel/gatsby-plugin-vercel-analytics@1.0.11': - resolution: {integrity: sha512-iTEA0vY6RBPuEzkwUTVzSHDATo1aF6bdLLspI68mQ/BTbi5UQEGjpjyzdKOVcSYApDtFU6M6vypZ1t4vIEnHvw==} - - '@vercel/gatsby-plugin-vercel-builder@2.0.81': - resolution: {integrity: sha512-nWzkA+bUzfysEUW3LdazbhydrnA17+Nhv/Ki6rlA+H5dDa4pBP6LeAh8kyKAsnH4beAlohCDbtmZ4OtK0HOGSg==} - - '@vercel/go@3.2.1': - resolution: {integrity: sha512-ezjmuUvLigH9V4egEaX0SZ+phILx8lb+Zkp1iTqKI+yl/ibPAtVo5o+dLSRAXU9U01LBmaLu3O8Oxd/JpWYCOw==} - - '@vercel/hydrogen@1.2.0': - resolution: {integrity: sha512-kdZp8cTVLoNmnu24wtoQPu9ZO+uB00zvDMTOXlQmNdq/V3k0mQa/Q5k2B8nliBQ3BMiBasoXxMKv59+F8rYvDw==} - - '@vercel/next@4.7.11': - resolution: {integrity: sha512-9qUrcxc9+LkoW+ffYnDalXi2KwZo4KAFv3dabdhOc5NGB6aN6kcgzISfrmTuNfLqRmG0CTtlaBl1VZs2PWhJ5g==} + '@vercel/nft@0.27.7': + resolution: {integrity: sha512-FG6H5YkP4bdw9Ll1qhmbxuE8KwW2E/g8fJpM183fWQLeVDGqzeywMIeJ9h2txdWZ03psgWMn6QymTxaDLmdwUg==} + engines: {node: '>=16'} + hasBin: true '@vercel/nft@0.29.2': resolution: {integrity: sha512-A/Si4mrTkQqJ6EXJKv5EYCDQ3NL6nJXxG8VGXePsaiQigsomHYQC9xSpX8qGk7AEZk4b1ssbYIqJ0ISQQ7bfcA==} engines: {node: '>=18'} hasBin: true - '@vercel/node@5.1.16': - resolution: {integrity: sha512-jz44zZDlDICAX2+JHs3ekTP1l9RJC5MkHRdkQiWvSgaNufoRxOo4nDkmFTiT53HeZCq+S2FYimn92n+prDh3QQ==} - - '@vercel/python@4.7.2': - resolution: {integrity: sha512-i2QBNMvNxUZQ2e5vLIL7mUkLg5Qkl9nqxUNXCYezdyvk2Ql6xYKjg7tMhpK/uiy094KfZSOECpDbDxkIN0jUSw==} + '@whatwg-node/disposablestack@0.0.6': + resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} + engines: {node: '>=18.0.0'} - '@vercel/redwood@2.3.1': - resolution: {integrity: sha512-CCu/lb+W58gfFdxrF1U41vvUdc2zEXiks0l01qXzbHOHQCWOC7NXWwtieeT/SLqG0K5pkR66q1TpLRtGHT0dYg==} + '@whatwg-node/fetch@0.10.8': + resolution: {integrity: sha512-Rw9z3ctmeEj8QIB9MavkNJqekiu9usBCSMZa+uuAvM0lF3v70oQVCXNppMIqaV6OTZbdaHF1M2HLow58DEw+wg==} + engines: {node: '>=18.0.0'} - '@vercel/remix-builder@5.4.7': - resolution: {integrity: sha512-pLJFAmeFtPvXVXdQU+yV2G4pflObvkqaGObcBl/5cLuhwyadhEGTxu4mWC+XOmU5ppbdNiHzywBPMiBwAQc+mg==} + '@whatwg-node/node-fetch@0.7.21': + resolution: {integrity: sha512-QC16IdsEyIW7kZd77aodrMO7zAoDyyqRCTLg+qG4wqtP4JV9AA+p7/lgqMdD29XyiYdVvIdFrfI9yh7B1QvRvw==} + engines: {node: '>=18.0.0'} - '@vercel/ruby@2.2.0': - resolution: {integrity: sha512-FJF9gKVNHAljGOgV6zS5ou2N7ZgjOqMMtcPA5lsJEUI5/AZzVDWCmtcowTP80wEtHuupkd7d7M399FA082kXYQ==} + '@whatwg-node/promise-helpers@1.3.2': + resolution: {integrity: sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==} + engines: {node: '>=16.0.0'} - '@vercel/static-build@2.7.7': - resolution: {integrity: sha512-/WM1P/6suLgwiLlrUfjg47xSfgzNruHri/ECJ+xe73h35gwqi0ZQlb0Fl74VoRm7P6+8/rNz/3FLBTqJDziHcA==} + '@whatwg-node/server@0.9.71': + resolution: {integrity: sha512-ueFCcIPaMgtuYDS9u0qlUoEvj6GiSsKrwnOLPp9SshqjtcRaR1IEHRjoReq3sXNydsF5i0ZnmuYgXq9dV53t0g==} + engines: {node: '>=18.0.0'} - '@vercel/static-config@3.0.0': - resolution: {integrity: sha512-2qtvcBJ1bGY0dYGYh3iM7yGKkk971FujLEDXzuW5wcZsPr1GSEjO/w2iSr3qve6nDDtBImsGoDEnus5FI4+fIw==} + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} abbrev@3.0.1: resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} 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-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} - 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'} @@ -581,9 +905,6 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - ajv@8.6.3: - resolution: {integrity: sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -600,14 +921,37 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + + archiver-utils@2.1.0: + resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} + engines: {node: '>= 6'} + + archiver-utils@3.0.4: + resolution: {integrity: sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==} + engines: {node: '>= 10'} + + archiver-utils@5.0.2: + resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} + engines: {node: '>= 14'} + + archiver@5.3.2: + resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==} + engines: {node: '>= 10'} - arg@4.1.0: - resolution: {integrity: sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==} + archiver@7.0.1: + resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} + engines: {node: '>= 14'} - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -615,32 +959,44 @@ packages: arktype@2.1.20: resolution: {integrity: sha512-IZCEEXaJ8g+Ijd59WtSYwtjnqXiwM8sWQ5EjGamcto7+HVN9eK0C4p0zDlCuAwWhpqr6fIBkxPuYDl4/Mcj/+Q==} - async-listen@1.2.0: - resolution: {integrity: sha512-CcEtRh/oc9Jc4uWeUwdpG/+Mb2YUHKmdaTf0gUr7Wa+bfp4xx70HOb3RuSTJMvqKNB1TkdTfjLdrcz2X4rkkZA==} - - async-listen@3.0.0: - resolution: {integrity: sha512-V+SsTpDqkrWTimiotsyl33ePSjA5/KrithwupuvJ6ztsqPvGv6ge4OredFhPffVXiLN/QUWvE0XcqJaYgt6fOg==} - engines: {node: '>= 14'} + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} - async-listen@3.0.1: - resolution: {integrity: sha512-cWMaNwUJnf37C/S5TfCkk/15MwbPRwVYALA2jtjkbHjCmAPiDXyNJy2q3p1KAZzDLHAWyarUWSujUoHR4pEgrA==} - engines: {node: '>= 14'} + ast-module-types@5.0.0: + resolution: {integrity: sha512-JvqziE0Wc0rXQfma0HZC/aY7URXHFuZV84fJRtP8u+lhp0JYCNd5wJzVXP45t0PH0Mej3ynlzvdyITYIu0G4LQ==} + engines: {node: '>=14'} async-sema@3.1.1: resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} axios@1.8.1: resolution: {integrity: sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==} + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + 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==} + bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -654,9 +1010,22 @@ packages: buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - bytes@3.1.0: - resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==} - engines: {node: '>= 0.8'} + buffer-crc32@1.0.0: + resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} + engines: {node: '>=8.0.0'} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} c12@2.0.1: resolution: {integrity: sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==} @@ -666,18 +1035,29 @@ packages: magicast: optional: true + c12@3.0.4: + resolution: {integrity: sha512-t5FaZTYbbCtvxuZq9xxIruYydrAGsJ+8UdP0pZzMiK2xl/gNiSOy0OxhLzHUEEb0m1QXYqfzfvyIFEmz/g9lqg==} + peerDependencies: + magicast: ^0.3.5 + peerDependenciesMeta: + magicast: + optional: true + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsite@1.0.0: + resolution: {integrity: sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==} + chalk@5.4.1: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chokidar@4.0.0: - resolution: {integrity: sha512-mxIojEAQcuEvT/lyXq+jf/3cO/KoA6z4CeNDGGevTybECPOMFCnQy3OPahluUkbqgPNGw5Bi78UC7Po6Lhy+NA==} - engines: {node: '>= 14.16.0'} - chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -693,47 +1073,129 @@ packages: citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} - cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + 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'} - code-block-writer@10.1.1: - resolution: {integrity: sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==} + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + + colorspace@1.1.4: + resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + commander@13.0.0: resolution: {integrity: sha512-oPYleIY8wmTVzkvQq10AEok6YcTC4sRUBl8F9gVuwchGVUCTbl/vhLTaQqutuuySYOsu8YTgV+OxKc/8Yvx+mQ==} engines: {node: '>=18'} + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + compatx@0.2.0: + resolution: {integrity: sha512-6gLRNt4ygsi5NyMVhceOCFv14CIdDFN7fQjX1U4+47qVE/+kjPoXMK65KWK+dWxmFzMTuKazoQ9sch6pM0p5oA==} + + compress-commons@4.1.2: + resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==} + engines: {node: '>= 10'} + + 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.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + consola@3.4.2: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} - content-type@1.0.4: - resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} - engines: {node: '>= 0.6'} + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - convert-hrtime@3.0.0: - resolution: {integrity: sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA==} - engines: {node: '>=8'} + cookie-es@1.2.2: + resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + + cookie-es@2.0.0: + resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==} - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cp-file@10.0.0: + resolution: {integrity: sha512-vy2Vi1r2epK5WqxOLnskeKeZkdZvTKfFZQCplE3XWsP+SUJyd5XAUFC9lFgTjjXJF2GMne/UML14iEmkAaDfFg==} + engines: {node: '>=14.16'} + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + crc32-stream@4.0.3: + resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==} + engines: {node: '>= 10'} + + crc32-stream@6.0.0: + resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} + engines: {node: '>= 14'} + + cron-parser@4.9.0: + resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} + engines: {node: '>=12.0.0'} + + croner@9.0.0: + resolution: {integrity: sha512-onMB0OkDjkXunhdW9htFjEhqrD54+M94i6ackoUkjHKbRnXdyEyKRelp4nJ1kAz32+s27jP1FsebpJCVl0BsvA==} + engines: {node: '>=18.0'} cross-fetch@4.1.0: resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} @@ -742,13 +1204,34 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} + crossws@0.3.5: + resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} + + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + + db0@0.3.2: + resolution: {integrity: sha512-xzWNQ6jk/+NtdfLyXEipbX55dmDSeteLFt/ayF+wZUU5bzKgmrDOxmInUTbyVRp46YwnJdkDA1KhB7WIXFofJw==} peerDependencies: - supports-color: '*' + '@electric-sql/pglite': '*' + '@libsql/client': '*' + better-sqlite3: '*' + drizzle-orm: '*' + mysql2: '*' + sqlite3: '*' peerDependenciesMeta: - supports-color: + '@electric-sql/pglite': + optional: true + '@libsql/client': + optional: true + better-sqlite3: + optional: true + drizzle-orm: + optional: true + mysql2: + optional: true + sqlite3: optional: true debug@4.4.1: @@ -760,6 +1243,17 @@ packages: supports-color: optional: true + decache@4.6.2: + resolution: {integrity: sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} @@ -767,9 +1261,16 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + 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'} dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} @@ -778,35 +1279,82 @@ packages: destr@2.0.5: resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + detect-libc@2.0.4: resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} + detective-amd@5.0.2: + resolution: {integrity: sha512-XFd/VEQ76HSpym80zxM68ieB77unNuoMwopU2TFT/ErUk5n4KvUTwW4beafAVUugrjV48l4BmmR0rh2MglBaiA==} + engines: {node: '>=14'} + hasBin: true + + detective-cjs@5.0.1: + resolution: {integrity: sha512-6nTvAZtpomyz/2pmEmGX1sXNjaqgMplhQkskq2MLrar0ZAIkHMrDhLXkRiK2mvbu9wSWr0V5/IfiTrZqAQMrmQ==} + engines: {node: '>=14'} + + detective-es6@4.0.1: + resolution: {integrity: sha512-k3Z5tB4LQ8UVHkuMrFOlvb3GgFWdJ9NqAa2YLUU/jTaWJIm+JJnEh4PsMc+6dfT223Y8ACKOaC0qcj7diIhBKw==} + engines: {node: '>=14'} + + detective-postcss@6.1.3: + resolution: {integrity: sha512-7BRVvE5pPEvk2ukUWNQ+H2XOq43xENWbH0LcdCE14mwgTBEAMoAx+Fc1rdp76SmyZ4Sp48HlV7VedUnP6GA1Tw==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + detective-sass@5.0.3: + resolution: {integrity: sha512-YsYT2WuA8YIafp2RVF5CEfGhhyIVdPzlwQgxSjK+TUm3JoHP+Tcorbk3SfG0cNZ7D7+cYWa0ZBcvOaR0O8+LlA==} + engines: {node: '>=14'} + + detective-scss@4.0.3: + resolution: {integrity: sha512-VYI6cHcD0fLokwqqPFFtDQhhSnlFWvU614J42eY6G0s8c+MBhi9QAWycLwIOGxlmD8I/XvGSOUV1kIDhJ70ZPg==} + engines: {node: '>=14'} + + detective-stylus@4.0.0: + resolution: {integrity: sha512-TfPotjhszKLgFBzBhTOxNHDsutIxx9GTWjrL5Wh7Qx/ydxKhwUrlSFeLIn+ZaHPF+h0siVBkAQSuy6CADyTxgQ==} + engines: {node: '>=14'} + + detective-typescript@11.2.0: + resolution: {integrity: sha512-ARFxjzizOhPqs1fYC/2NMC3N4jrQ6HvVflnXBTRqNEqJuXwyKLRr9CrJwkRcV/SnZt1sNXgsF6FPm0x57Tq0rw==} + engines: {node: ^14.14.0 || >=16.0.0} + diff-match-patch@1.0.5: resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} discourse2-chat@1.1.5: resolution: {integrity: sha512-VbyHRV6C6uyYc5PMbgNjTm0FTm1tb2jJh75wKB+51xC6zhbFoJ8QmxlYHRfuw0Ct9M1xTkwqW8g/176rbx3eSg==} + 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'} + 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'} + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - edge-runtime@2.5.9: - resolution: {integrity: sha512-pk+k0oK0PVXdlT4oRp4lwh+unuKB7Ng4iZ2HB+EZ7QCEQizX360Rp/F4aRpgpRgdP2ufB35N+1KppHmYjqIGSg==} - engines: {node: '>=16'} - hasBin: true + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -814,9 +1362,26 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + enabled@2.0.0: + resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + end-of-stream@1.1.0: resolution: {integrity: sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==} + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + error-stack-parser-es@1.0.5: + resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -836,158 +1401,93 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - esbuild-android-64@0.14.47: - resolution: {integrity: sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - esbuild-android-arm64@0.14.47: - resolution: {integrity: sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - esbuild-darwin-64@0.14.47: - resolution: {integrity: sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - esbuild-darwin-arm64@0.14.47: - resolution: {integrity: sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - esbuild-freebsd-64@0.14.47: - resolution: {integrity: sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - esbuild-freebsd-arm64@0.14.47: - resolution: {integrity: sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - esbuild-linux-32@0.14.47: - resolution: {integrity: sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - esbuild-linux-64@0.14.47: - resolution: {integrity: sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - esbuild-linux-arm64@0.14.47: - resolution: {integrity: sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - esbuild-linux-arm@0.14.47: - resolution: {integrity: sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - esbuild-linux-mips64le@0.14.47: - resolution: {integrity: sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - esbuild-linux-ppc64le@0.14.47: - resolution: {integrity: sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - esbuild-linux-riscv64@0.14.47: - resolution: {integrity: sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - esbuild-linux-s390x@0.14.47: - resolution: {integrity: sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - esbuild-netbsd-64@0.14.47: - resolution: {integrity: sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] + esbuild@0.25.4: + resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} + engines: {node: '>=18'} + hasBin: true - esbuild-openbsd-64@0.14.47: - resolution: {integrity: sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} - esbuild-sunos-64@0.14.47: - resolution: {integrity: sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - esbuild-windows-32@0.14.47: - resolution: {integrity: sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==} + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - esbuild-windows-64@0.14.47: - resolution: {integrity: sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true - esbuild-windows-arm64@0.14.47: - resolution: {integrity: sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esbuild@0.14.47: - resolution: {integrity: sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==} - engines: {node: '>=12'} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} hasBin: true - esbuild@0.25.4: - resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} - engines: {node: '>=18'} - hasBin: true + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.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==} eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - events-intercept@2.0.0: - resolution: {integrity: sha512-blk1va0zol9QOrdZt0rFXo5KMkNPVSp92Eju/Qz8THwKWKRKeE0T8Br/1aW6+Edkyq9xHYgYxn2QtOnUKPUp+Q==} + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} exa-js@1.4.10: resolution: {integrity: sha512-rffYWPU568gOiYmsHW3L5J6atoNfLJTrtAk/DAKyPuGtdDXrE9fsSfltP1X1pNVtLTsz8DIyhUHOXErueNLJrQ==} + execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + exsolve@1.0.5: + resolution: {integrity: sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + 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'} @@ -1001,6 +1501,21 @@ packages: fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fdir@6.4.4: + resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} @@ -1008,6 +1523,25 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + filter-obj@5.1.0: + resolution: {integrity: sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==} + engines: {node: '>=14.16'} + + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} + engines: {node: '>=18'} + + find-up@6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + + fn.name@1.1.0: + resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} @@ -1025,14 +1559,24 @@ packages: resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} engines: {node: '>= 6'} - fs-extra@11.1.0: - resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} - engines: {node: '>=14.14'} + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1041,18 +1585,42 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - generic-pool@3.4.2: - resolution: {integrity: sha512-H7cUpwCQSiJmAHM4c/aFu6fUfrhWXW1ncyh8ftxEPMu6AiYkHw9K8br720TGPZJbk5eOH2bynjZD1yPvdDAmag==} - engines: {node: '>= 4'} + gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + + get-amd-module-type@5.0.1: + resolution: {integrity: sha512-jb65zDeHyDjFR1loOVk0HQGM5WNwoGB8aLWy3LKCieMKol0/ProHkhO2X1JxojuN10vbz1qNn09MJ7tNp7qMzw==} + 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'} + 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@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + get-tsconfig@4.10.1: resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} @@ -1060,6 +1628,10 @@ packages: resolution: {integrity: sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug==} hasBin: true + 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'} @@ -1068,6 +1640,28 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + engines: {node: '>=18'} + + gonzales-pe@4.3.0: + resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==} + engines: {node: '>=0.6.0'} + hasBin: true + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -1075,6 +1669,13 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + gzip-size@7.0.0: + resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + h3@1.15.3: + resolution: {integrity: sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==} + handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} @@ -1088,32 +1689,101 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - http-errors@1.4.0: - resolution: {integrity: sha512-oLjPqve1tuOl5aRhv8GK5eHpqP1C9fb+Ol+XTLjKfLltE44zdDbEdjPSbU7Ch5rSNsVFqZn97SrMmZLdu1/YMw==} - engines: {node: '>= 0.6'} + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} - http-errors@1.7.3: - resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==} - engines: {node: '>= 0.6'} + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.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'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + httpxy@0.1.7: + resolution: {integrity: sha512-pXNx8gnANKAndgga5ahefxc++tJvNL87CXoRwxn1cJE2ZkWEojF3tNfQIEhZX/vfpt+wzeAzpUI4qkediX1MLQ==} + + human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.4: + resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==} + engines: {node: '>= 4'} - inherits@2.0.1: - resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + index-to-position@1.1.0: + resolution: {integrity: sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==} + engines: {node: '>=18'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + ioredis@5.6.1: + resolution: {integrity: sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==} + engines: {node: '>=12.22.0'} + + iron-webcrypto@1.2.1: + resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + 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-electron@2.2.2: resolution: {integrity: sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==} @@ -1129,16 +1799,62 @@ 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-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-path-inside@4.0.0: + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} + engines: {node: '>=12'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + + is-url-superb@4.0.0: + resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==} + engines: {node: '>=10'} + + is-url@1.2.4: + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} + + 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==} isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -1150,16 +1866,16 @@ packages: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true - jose@5.9.6: - resolution: {integrity: sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==} + 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 - json-schema-to-ts@1.6.4: - resolution: {integrity: sha512-pR4yQ9DHz6itqswtHCm26mw45FSNfQ9rEQjosaZErhn5J3J2sIViQiz8rDaezjKAhFGpmsoczYVBgGHzFw/stA==} - json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -1171,34 +1887,114 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + junk@4.0.1: + resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} + engines: {node: '>=12.20'} + + jwt-decode@4.0.0: + resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} + engines: {node: '>=18'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + 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==} + + kuler@2.0.0: + resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + + lambda-local@2.2.0: + resolution: {integrity: sha512-bPcgpIXbHnVGfI/omZIlgucDqlf4LrsunwoKue5JdZeGybt8L6KyJz2Zu19ffuZwIwLj2NAI2ZyaqNT6/cetcg==} + engines: {node: '>=8'} + hasBin: true + + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + + listhen@1.9.0: + resolution: {integrity: sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==} + hasBin: true + + local-pkg@1.1.1: + resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} + engines: {node: '>=14'} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.defaults@4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + + lodash.difference@4.5.0: + resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} + + lodash.flatten@4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + + lodash.isarguments@3.1.0: + resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.union@4.6.0: + resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + logform@2.7.0: + resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} + engines: {node: '>= 12.0.0'} + 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'} + luxon@3.6.1: + resolution: {integrity: sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==} + engines: {node: '>=12'} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + merge-options@3.0.4: + resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} + engines: {node: '>=10'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - micro@9.3.5-canary.3: - resolution: {integrity: sha512-viYIo9PefV+w9dvoIBh1gI44Mvx1BOk67B4BpC2QK77qdY0xZF0Q+vWLt/BII6cLkIc8rLmSIcJaB/OrXXKe1g==} - engines: {node: '>= 8.0.0'} - hasBin: true + micro-api-client@3.3.0: + resolution: {integrity: sha512-y0y6CUB9RLVsy3kfgayU28746QrNMpSm9O/AYGNsBgOkJr/X/Jk0VLGoO8Ude7Bpa8adywzF+MzXNZRFRsNPhg==} micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} @@ -1208,13 +2004,39 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime-types@3.0.1: + resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} + engines: {node: '>= 0.6'} + + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + + mime@4.0.7: + resolution: {integrity: sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==} + 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==} + 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'} @@ -1255,15 +2077,10 @@ packages: mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - - ms@2.1.1: - resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + module-definition@5.0.1: + resolution: {integrity: sha512-kvw3B4G19IXk+BOXnYq/D/VeO9qfHaapMeuS7w7sNUqmGaA6hywdFHMi+VWeR9wUScXM7XjoryTffCZ5B0/8IA==} + engines: {node: '>=14'} + hasBin: true ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1276,27 +2093,34 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - node-fetch-native@1.6.6: - resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} + nested-error-stacks@2.1.1: + resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} - node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + netlify@13.3.5: + resolution: {integrity: sha512-Nc3loyVASW59W+8fLDZT1lncpG7llffyZ2o0UQLx/Fr20i7P8oP+lE7+TEcFvXj9IUWU6LjB9P3BH+iFGyp+mg==} + engines: {node: ^14.16.0 || >=16.0.0} - node-fetch@2.6.9: - resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} - engines: {node: 4.x || >=6.0.0} + nitropack@2.11.12: + resolution: {integrity: sha512-e2AdQrEY1IVoNTdyjfEQV93xkqz4SQxAMR0xWF8mZUUHxMLm6S4nPzpscjksmT4OdUxl0N8/DCaGjKQ9ghdodA==} + engines: {node: ^16.11.0 || >=17.0.0} + hasBin: true peerDependencies: - encoding: ^0.1.0 + xml2js: ^0.6.2 peerDependenciesMeta: - encoding: + xml2js: optional: true + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead + + 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} @@ -1306,37 +2130,126 @@ packages: encoding: optional: true + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + node-forge@1.3.1: + 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-source-walk@6.0.2: + resolution: {integrity: sha512-jn9vOIK/nfqoFCcpK89/VCVaLg1IHE6UVfDOzvqmANaJ/rWCTEdH8RZ1V278nv2jr36BJdyQXIAavBLXpzdlag==} + engines: {node: '>=14'} + + nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + 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@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + + normalize-path@2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + deprecated: This package is no longer supported. + nypm@0.5.4: resolution: {integrity: sha512-X0SNNrZiGU8/e/zAB7sCTtdxWTMSIO73q+xuKgglm2Yvzwlo8UoC5FNySQFCvl84uPaeADkqHUZUkWy4aH4xOA==} engines: {node: ^14.16.0 || >=16.10.0} hasBin: true + nypm@0.6.0: + resolution: {integrity: sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + 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.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + once@1.3.3: resolution: {integrity: sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==} + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + one-time@1.0.0: + resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} - os-paths@4.4.0: - resolution: {integrity: sha512-wrAwOeXp1RRMFfQY8Sy7VaGVmPocaLwSFOYCGKSyo8qmJ+/yaafCl5BCA1IQZWqFSRBrKDYFeR9d/VyQzfH/jg==} - engines: {node: '>= 6.0'} + p-event@5.0.1: + resolution: {integrity: sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-map@7.0.3: + resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} + engines: {node: '>=18'} + p-queue@6.6.2: resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} engines: {node: '>=8'} @@ -1349,36 +2262,63 @@ packages: resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} engines: {node: '>=8'} + p-timeout@5.1.0: + resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} + engines: {node: '>=12'} + + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} + + p-wait-for@5.0.2: + resolution: {integrity: sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==} + engines: {node: '>=12'} + package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - parse-ms@2.1.0: - resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} - engines: {node: '>=6'} + parse-gitignore@2.0.0: + resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} + engines: {node: '>=14'} + + parse-json@8.3.0: + resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} + engines: {node: '>=18'} - path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-match@1.2.4: - resolution: {integrity: sha512-UWlehEdqu36jmh4h5CWJ7tARp1OEVKGHKm6+dg9qMq5RKUTV5WJrGgaZ3dN2m7WFAXDbjlHzvJvL/IUpy84Ktw==} - deprecated: This package is archived and no longer maintained. For support, visit https://github.com/expressjs/express/discussions + 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==} path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-to-regexp@1.9.0: - resolution: {integrity: sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==} - - path-to-regexp@6.1.0: - resolution: {integrity: sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw==} + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} - path-to-regexp@6.3.0: - resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} @@ -1392,8 +2332,8 @@ packages: perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -1406,26 +2346,63 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - pretty-ms@7.0.1: - resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} + pkg-types@2.1.0: + resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} + + postcss-values-parser@6.0.2: + resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==} engines: {node: '>=10'} + peerDependencies: + postcss: ^8.2.9 + + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + + precinct@11.0.5: + resolution: {integrity: sha512-oHSWLC8cL/0znFhvln26D14KfCQFFn4KOLSw6hmLhd+LQ2SKt9Ljm89but76Pc7flM9Ty1TnXyrA2u16MfRV3w==} + engines: {node: ^14.14.0 || >=16.0.0} + hasBin: true + + 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==} - promisepipe@3.0.0: - resolution: {integrity: sha512-V6TbZDJ/ZswevgkDNpGt/YqNCiZP9ASfgU+p83uJE6NrGtvSGoOcHLiDCqkMs2+yg7F5qHdLV8d0aS8O26G/KA==} + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + + quansync@0.2.10: + resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - raw-body@2.4.1: - resolution: {integrity: sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==} - engines: {node: '>= 0.8'} + quote-unquote@1.0.0: + resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==} + + radix3@1.1.2: + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + 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==} @@ -1434,14 +2411,54 @@ packages: resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} engines: {node: '>=0.10.0'} + read-package-up@11.0.0: + resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} + engines: {node: '>=18'} + + read-pkg@9.0.1: + resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} + engines: {node: '>=18'} + + 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@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} + 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'} + + remove-trailing-separator@1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + + require-directory@2.1.1: + 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'} + require-package-name@2.0.1: + resolution: {integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==} + resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -1449,6 +2466,15 @@ packages: 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 + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -1457,11 +2483,44 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + 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.41.0: + resolution: {integrity: sha512-HqMFpUbWlf/tvcxBFNKnJyzc7Lk+XO3FGc3pbNBLqEbOz0gPLRgcrlS3UF4MfUrVlstOaP/q0kM6GVvi+LrLRg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + 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-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} @@ -1470,18 +2529,30 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.2: resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} hasBin: true - setprototypeof@1.1.1: - resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==} + send@1.2.0: + resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} + engines: {node: '>= 18'} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + serve-placeholder@2.0.2: + resolution: {integrity: sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==} + + serve-static@2.2.0: + resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} + engines: {node: '>= 18'} + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -1491,30 +2562,85 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - signal-exit@4.0.2: - resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} - engines: {node: '>=14'} + 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@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - stat-mode@0.3.0: - resolution: {integrity: sha512-QjMLR0A3WwFY2aZdV0okfFEJB5TRjkggXZjxP3A1RsWsNHNu3YPv8btmtc6iCFZ0Rul3FE93OYogvhOUClU+ng==} + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} - statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} - stream-to-array@2.3.0: - resolution: {integrity: sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==} + smob@1.5.0: + resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} - stream-to-promise@2.2.0: - resolution: {integrity: sha512-HAGUASw8NT0k8JvIVutB2Y/9iBk7gpgEyAudXwNJmZERdMITGdajOa4VJfD/kNiA3TppQpTP4J+CtcHwdzKBAw==} + 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'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + 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==} + + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + + 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.9.0: + resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + + streamx@2.22.0: + resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -1524,6 +2650,12 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + 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==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -1532,11 +2664,37 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-literal@3.0.0: + resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} + + supports-color@10.0.0: + resolution: {integrity: sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==} + engines: {node: '>=18'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + swr@2.3.2: resolution: {integrity: sha512-RosxFpiabojs75IwQ316DGoDRmOqtiAj0tg8wCcbEu4CiLZBs/a9QNtHV7TUfDXmmlgqij/NqzKq/eLelyv9xA==} peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + system-architecture@0.1.0: + resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} + engines: {node: '>=18'} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} @@ -1545,61 +2703,73 @@ packages: resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} engines: {node: '>=18'} + terser@5.39.2: + resolution: {integrity: sha512-yEPUmWve+VA78bI71BW70Dh0TuV4HHd+I5SHOAfS1+QBOmvmCiiffgjR8ryyEd3KIfvPGFqoADt8LdQ6XpXIvg==} + engines: {node: '>=10'} + hasBin: true + + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + + text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + throttleit@2.1.0: resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} engines: {node: '>=18'} - time-span@4.0.0: - resolution: {integrity: sha512-MyqZCTGLDZ77u4k+jqg4UlrzPTPZ49NDlaekU6uuFaJLzPIN1woaRXCbGeqOfxwc3Y37ZROGAJ614Rdv7Olt+g==} - engines: {node: '>=10'} - tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyglobby@0.2.13: + resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} + engines: {node: '>=12.0.0'} + + 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'} - toidentifier@1.0.0: - resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==} + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true + triple-beam@1.4.1: + resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} + engines: {node: '>= 14.0.0'} - ts-morph@12.0.0: - resolution: {integrity: sha512-VHC8XgU2fFW7yO1f/b3mxKDje1vmyzFXHWzOYmKEkCEwcLjDtbdLgBQviqj4ZwP4MJkQtRo6Ha2I29lq/B+VxA==} + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - ts-node@10.9.1: - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - ts-toolbelt@6.15.5: - resolution: {integrity: sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==} + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' tsx@4.19.4: resolution: {integrity: sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==} engines: {node: '>=18.0.0'} hasBin: true - typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} typescript@5.8.2: resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} @@ -1614,46 +2784,153 @@ packages: engines: {node: '>=0.8.0'} hasBin: true - uid-promise@1.0.0: - resolution: {integrity: sha512-R8375j0qwXyIu/7R0tjdF06/sElHqbmdmWC9M2qQHpEVbvE4I5+38KJI7LUUmQMp7NVq4tKHiBMkT0NFM453Ig==} + ultrahtml@1.6.0: + resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} + + uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + + unctx@2.4.1: + resolution: {integrity: sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==} undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - undici@5.28.4: - resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} - engines: {node: '>=14.0'} + unenv@2.0.0-rc.17: + resolution: {integrity: sha512-B06u0wXkEd+o5gOCMl/ZHl5cfpYbDZKAT+HWTL+Hws6jWu7dCiqBBXXXzMFcFVJb8D4ytAnYmxJA83uwOQRSsg==} - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + unimport@5.0.1: + resolution: {integrity: sha512-1YWzPj6wYhtwHE+9LxRlyqP4DiRrhGfJxdtH475im8ktyZXO3jHj/3PZ97zDdvkYoovFdi0K4SKl3a7l92v3sQ==} + engines: {node: '>=18.12.0'} + + unixify@1.0.0: + resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} + engines: {node: '>=0.10.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.3.4: + resolution: {integrity: sha512-m4PjxTurwpWfpMomp8AptjD5yj8qEZN5uQjjGM3TAs9MWWD2tXSSNNj6jGR2FoVGod4293ytyV6SwBbertfyJg==} + engines: {node: '>=18.12.0'} + + unstorage@1.16.0: + resolution: {integrity: sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA==} + 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 || ^7.0.0 + '@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==} - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uqr@0.1.2: + resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==} + + urlpattern-polyfill@10.1.0: + resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} + + urlpattern-polyfill@8.0.2: + resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} use-sync-external-store@1.4.0: resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - vercel@42.1.1: - resolution: {integrity: sha512-PtZhiNWen2VzglXCHJpjFPAQ9kH9ETAM5hBfvzy0HtWqlId07K5MVQdm8NKMYBOWj/297+/qYwhdKXsdPnnIHw==} - engines: {node: '>= 18'} + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} hasBin: true - web-vitals@0.2.4: - resolution: {integrity: sha512-6BjspCO9VriYy12z356nL6JBS0GYeEcA457YyRzD+dD6XYCQ75NKhcOHUMHentOE7OcVCIXXDvOm0jKFfQG2Gg==} + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} 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==} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -1662,6 +2939,17 @@ packages: engines: {node: '>= 8'} hasBin: true + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + + winston-transport@4.9.0: + resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} + engines: {node: '>= 12.0.0'} + + winston@3.17.0: + resolution: {integrity: sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==} + engines: {node: '>= 12.0.0'} + wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -1676,13 +2964,13 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - xdg-app-paths@5.1.0: - resolution: {integrity: sha512-RAQ3WkPf4KTU1A8RtFx3gWywzVKe00tfOPFfl2NDGqbIFENQO4kqAJp7mhQjNj/33W5x5hiWWUdyfPq/5SU3QA==} - engines: {node: '>=6'} + write-file-atomic@6.0.0: + resolution: {integrity: sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==} + engines: {node: ^18.17.0 || >=20.5.0} - xdg-portable@7.3.0: - resolution: {integrity: sha512-sqMMuL1rc0FmMBOzCpd0yuy9trqF2yTTVe+E9ogwCSWQCdDEtQUwrZPT6AxqtsFGRNxycgncbP/xmOOSPw5ZUw==} - engines: {node: '>= 6.0'} + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -1691,20 +2979,36 @@ packages: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} - yauzl-clone@1.0.4: - resolution: {integrity: sha512-igM2RRCf3k8TvZoxR2oguuw4z1xasOnA31joCqHIyLkeWrvAc2Jgay5ISQ2ZplinkoGaJ6orCz56Ey456c5ESA==} - engines: {node: '>=6'} + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} - yauzl-promise@2.1.3: - resolution: {integrity: sha512-A1pf6fzh6eYkK0L4Qp7g9jzJSDrM6nN0bOn5T0IbY4Yo3w+YkWlHFkJP7mzknMXjqusHFHlKsK2N+4OLsK2MRA==} - engines: {node: '>=6'} + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} + yocto-queue@1.2.1: + resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} + engines: {node: '>=12.20'} + + youch-core@0.3.2: + resolution: {integrity: sha512-fusrlIMLeRvTFYLUjJ9KzlGC3N+6MOPJ68HNj/yJv2nz7zq8t4HEviLms2gkdRPUS7F5rZ5n+pYx9r88m6IE1g==} + engines: {node: '>=18'} + + youch@4.1.0-beta.7: + resolution: {integrity: sha512-HUn0M24AUTMvjdkoMtH8fJz2FEd+k1xvtR9EoTrDUoVUi6o7xl5X+pST/vjk4T3GEQo2mJ9FlAvhWBm8dIdD4g==} + engines: {node: '>=18'} + + zip-stream@4.1.1: + resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} + engines: {node: '>= 10'} + + zip-stream@6.0.1: + resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} + engines: {node: '>= 14'} zod-to-json-schema@3.24.3: resolution: {integrity: sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A==} @@ -1762,6 +3066,25 @@ snapshots: '@ark/util@0.46.0': {} + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/parser@7.27.2': + dependencies: + '@babel/types': 7.27.1 + + '@babel/types@7.27.1': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@biomejs/biome@1.9.4': optionalDependencies: '@biomejs/cli-darwin-arm64': 1.9.4 @@ -1797,21 +3120,22 @@ snapshots: '@biomejs/cli-win32-x64@1.9.4': optional: true - '@cspotcode/source-map-support@0.8.1': + '@cloudflare/kv-asset-handler@0.4.0': dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@edge-runtime/format@2.2.1': {} + mime: 3.0.0 - '@edge-runtime/node-utils@2.3.0': {} + '@colors/colors@1.6.0': {} - '@edge-runtime/ponyfill@2.4.2': {} - - '@edge-runtime/primitives@4.1.0': {} + '@dabh/diagnostics@2.0.3': + dependencies: + colorspace: 1.1.4 + enabled: 2.0.0 + kuler: 2.0.0 - '@edge-runtime/vm@3.2.0': + '@dependents/detective-less@4.1.0': dependencies: - '@edge-runtime/primitives': 4.1.0 + gonzales-pe: 4.3.0 + node-source-walk: 6.0.2 '@esbuild/aix-ppc64@0.25.4': optional: true @@ -1888,11 +3212,11 @@ snapshots: '@esbuild/win32-x64@0.25.4': optional: true - '@fastify/busboy@2.1.1': {} + '@fastify/busboy@3.1.1': {} - '@hey-api/client-fetch@0.10.1(@hey-api/openapi-ts@0.67.5(typescript@5.8.2))': + '@hey-api/client-fetch@0.10.1(@hey-api/openapi-ts@0.67.5(magicast@0.3.5)(typescript@5.8.2))': dependencies: - '@hey-api/openapi-ts': 0.67.5(typescript@5.8.2) + '@hey-api/openapi-ts': 0.67.5(magicast@0.3.5)(typescript@5.8.2) '@hey-api/json-schema-ref-parser@1.0.6': dependencies: @@ -1901,16 +3225,18 @@ snapshots: js-yaml: 4.1.0 lodash: 4.17.21 - '@hey-api/openapi-ts@0.67.5(typescript@5.8.2)': + '@hey-api/openapi-ts@0.67.5(magicast@0.3.5)(typescript@5.8.2)': dependencies: '@hey-api/json-schema-ref-parser': 1.0.6 - c12: 2.0.1 + c12: 2.0.1(magicast@0.3.5) commander: 13.0.0 handlebars: 4.7.8 typescript: 5.8.2 transitivePeerDependencies: - magicast + '@ioredis/commands@1.2.0': {} + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -1924,17 +3250,45 @@ snapshots: 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 + '@jridgewell/resolve-uri@3.1.2': {} + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec@1.5.0': {} - '@jridgewell/trace-mapping@0.3.9': + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 '@jsdevtools/ono@7.1.3': {} + '@mapbox/node-pre-gyp@1.0.11': + dependencies: + detect-libc: 2.0.4 + https-proxy-agent: 5.0.1 + make-dir: 3.1.0 + node-fetch: 2.7.0 + nopt: 5.0.0 + npmlog: 5.0.1 + rimraf: 3.0.2 + semver: 7.7.2 + tar: 6.2.1 + transitivePeerDependencies: + - encoding + - supports-color + '@mapbox/node-pre-gyp@2.0.0': dependencies: consola: 3.4.2 @@ -1948,6 +3302,93 @@ snapshots: - encoding - supports-color + '@netlify/binary-info@1.0.0': {} + + '@netlify/blobs@9.1.1': + dependencies: + '@netlify/dev-utils': 2.1.1 + '@netlify/runtime-utils': 1.3.1 + + '@netlify/dev-utils@2.1.1': + dependencies: + '@whatwg-node/server': 0.9.71 + chokidar: 4.0.3 + decache: 4.6.2 + dot-prop: 9.0.0 + env-paths: 3.0.0 + find-up: 7.0.0 + lodash.debounce: 4.0.8 + netlify: 13.3.5 + parse-gitignore: 2.0.0 + uuid: 11.1.0 + write-file-atomic: 6.0.0 + + '@netlify/functions@3.1.8(rollup@4.41.0)': + dependencies: + '@netlify/blobs': 9.1.1 + '@netlify/dev-utils': 2.1.1 + '@netlify/serverless-functions-api': 1.41.1 + '@netlify/zip-it-and-ship-it': 10.1.1(rollup@4.41.0) + cron-parser: 4.9.0 + decache: 4.6.2 + extract-zip: 2.0.1 + is-stream: 4.0.1 + jwt-decode: 4.0.0 + lambda-local: 2.2.0 + read-package-up: 11.0.0 + source-map-support: 0.5.21 + transitivePeerDependencies: + - encoding + - rollup + - supports-color + + '@netlify/open-api@2.37.0': {} + + '@netlify/runtime-utils@1.3.1': {} + + '@netlify/serverless-functions-api@1.41.1': {} + + '@netlify/zip-it-and-ship-it@10.1.1(rollup@4.41.0)': + dependencies: + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 + '@netlify/binary-info': 1.0.0 + '@netlify/serverless-functions-api': 1.41.1 + '@vercel/nft': 0.27.7(rollup@4.41.0) + archiver: 5.3.2 + common-path-prefix: 3.0.0 + cp-file: 10.0.0 + es-module-lexer: 1.4.1 + esbuild: 0.25.4 + execa: 7.2.0 + fast-glob: 3.3.3 + filter-obj: 5.1.0 + find-up: 6.3.0 + glob: 8.1.0 + is-builtin-module: 3.2.1 + is-path-inside: 4.0.0 + junk: 4.0.1 + locate-path: 7.2.0 + merge-options: 3.0.4 + minimatch: 9.0.5 + normalize-path: 3.0.0 + p-map: 7.0.3 + path-exists: 5.0.0 + precinct: 11.0.5 + require-package-name: 2.0.1 + resolve: 2.0.0-next.5 + semver: 7.7.2 + tmp-promise: 3.0.3 + toml: 3.0.0 + unixify: 1.0.0 + urlpattern-polyfill: 8.0.2 + yargs: 17.7.2 + zod: 3.24.2 + transitivePeerDependencies: + - encoding + - rollup + - supports-color + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -1962,237 +3403,377 @@ snapshots: '@opentelemetry/api@1.9.0': {} - '@pkgjs/parseargs@0.11.0': + '@parcel/watcher-android-arm64@2.5.1': optional: true - '@rollup/pluginutils@5.1.4': - dependencies: - '@types/estree': 1.0.7 - estree-walker: 2.0.2 - picomatch: 4.0.2 - - '@sinclair/typebox@0.25.24': {} + '@parcel/watcher-darwin-arm64@2.5.1': + optional: true - '@slack/logger@4.0.0': - dependencies: - '@types/node': 20.17.22 + '@parcel/watcher-darwin-x64@2.5.1': + optional: true - '@slack/types@2.14.0': {} + '@parcel/watcher-freebsd-x64@2.5.1': + optional: true - '@slack/web-api@7.8.0': - dependencies: - '@slack/logger': 4.0.0 - '@slack/types': 2.14.0 - '@types/node': 20.17.22 - '@types/retry': 0.12.0 - axios: 1.8.1 - eventemitter3: 5.0.1 - form-data: 4.0.2 - is-electron: 2.2.2 - is-stream: 2.0.1 - p-queue: 6.6.2 - p-retry: 4.6.2 - retry: 0.13.1 - transitivePeerDependencies: - - debug + '@parcel/watcher-linux-arm-glibc@2.5.1': + optional: true - '@t3-oss/env-core@0.13.4(arktype@2.1.20)(typescript@5.8.2)(zod@3.24.2)': - dependencies: - arktype: 2.1.20 - optionalDependencies: - typescript: 5.8.2 - zod: 3.24.2 + '@parcel/watcher-linux-arm-musl@2.5.1': + optional: true - '@tootallnate/once@2.0.0': {} + '@parcel/watcher-linux-arm64-glibc@2.5.1': + optional: true - '@ts-morph/common@0.11.1': - dependencies: - fast-glob: 3.3.3 - minimatch: 3.1.2 - mkdirp: 1.0.4 - path-browserify: 1.0.1 + '@parcel/watcher-linux-arm64-musl@2.5.1': + optional: true - '@tsconfig/node10@1.0.11': {} + '@parcel/watcher-linux-x64-glibc@2.5.1': + optional: true - '@tsconfig/node12@1.0.11': {} + '@parcel/watcher-linux-x64-musl@2.5.1': + optional: true - '@tsconfig/node14@1.0.3': {} + '@parcel/watcher-wasm@2.5.1': + dependencies: + is-glob: 4.0.3 + micromatch: 4.0.8 - '@tsconfig/node16@1.0.4': {} + '@parcel/watcher-win32-arm64@2.5.1': + optional: true - '@types/diff-match-patch@1.0.36': {} + '@parcel/watcher-win32-ia32@2.5.1': + optional: true - '@types/estree@1.0.7': {} + '@parcel/watcher-win32-x64@2.5.1': + optional: true - '@types/json-schema@7.0.15': {} + '@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 - '@types/node@16.18.11': {} + '@pkgjs/parseargs@0.11.0': + optional: true - '@types/node@20.17.22': + '@poppinss/colors@4.1.4': dependencies: - undici-types: 6.19.8 + kleur: 4.1.5 - '@types/retry@0.12.0': {} + '@poppinss/dumper@0.6.3': + dependencies: + '@poppinss/colors': 4.1.4 + '@sindresorhus/is': 7.0.1 + supports-color: 10.0.0 - '@vercel/build-utils@10.5.1': {} + '@poppinss/exception@1.2.1': {} - '@vercel/error-utils@2.0.3': {} + '@rollup/plugin-alias@5.1.1(rollup@4.41.0)': + optionalDependencies: + rollup: 4.41.0 - '@vercel/fun@1.1.6': + '@rollup/plugin-commonjs@28.0.3(rollup@4.41.0)': dependencies: - '@tootallnate/once': 2.0.0 - async-listen: 1.2.0 - debug: 4.3.4 - generic-pool: 3.4.2 - micro: 9.3.5-canary.3 - ms: 2.1.1 - node-fetch: 2.6.7 - path-match: 1.2.4 - promisepipe: 3.0.0 - semver: 7.5.4 - stat-mode: 0.3.0 - stream-to-promise: 2.2.0 - tar: 6.2.1 - tinyexec: 0.3.2 - tree-kill: 1.2.2 - uid-promise: 1.0.0 - xdg-app-paths: 5.1.0 - yauzl-promise: 2.1.3 - transitivePeerDependencies: - - encoding - - supports-color + '@rollup/pluginutils': 5.1.4(rollup@4.41.0) + commondir: 1.0.1 + estree-walker: 2.0.2 + fdir: 6.4.4(picomatch@4.0.2) + is-reference: 1.2.1 + magic-string: 0.30.17 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.41.0 - '@vercel/functions@2.0.0': {} + '@rollup/plugin-inject@5.0.5(rollup@4.41.0)': + dependencies: + '@rollup/pluginutils': 5.1.4(rollup@4.41.0) + estree-walker: 2.0.2 + magic-string: 0.30.17 + optionalDependencies: + rollup: 4.41.0 - '@vercel/gatsby-plugin-vercel-analytics@1.0.11': + '@rollup/plugin-json@6.1.0(rollup@4.41.0)': dependencies: - web-vitals: 0.2.4 + '@rollup/pluginutils': 5.1.4(rollup@4.41.0) + optionalDependencies: + rollup: 4.41.0 - '@vercel/gatsby-plugin-vercel-builder@2.0.81': + '@rollup/plugin-node-resolve@16.0.1(rollup@4.41.0)': dependencies: - '@sinclair/typebox': 0.25.24 - '@vercel/build-utils': 10.5.1 - esbuild: 0.14.47 - etag: 1.8.1 - fs-extra: 11.1.0 + '@rollup/pluginutils': 5.1.4(rollup@4.41.0) + '@types/resolve': 1.20.2 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.10 + optionalDependencies: + rollup: 4.41.0 - '@vercel/go@3.2.1': {} + '@rollup/plugin-replace@6.0.2(rollup@4.41.0)': + dependencies: + '@rollup/pluginutils': 5.1.4(rollup@4.41.0) + magic-string: 0.30.17 + optionalDependencies: + rollup: 4.41.0 - '@vercel/hydrogen@1.2.0': + '@rollup/plugin-terser@0.4.4(rollup@4.41.0)': dependencies: - '@vercel/static-config': 3.0.0 - ts-morph: 12.0.0 + serialize-javascript: 6.0.2 + smob: 1.5.0 + terser: 5.39.2 + optionalDependencies: + rollup: 4.41.0 - '@vercel/next@4.7.11': + '@rollup/pluginutils@5.1.4(rollup@4.41.0)': dependencies: - '@vercel/nft': 0.29.2 - transitivePeerDependencies: - - encoding - - rollup + '@types/estree': 1.0.7 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.41.0 + + '@rollup/rollup-android-arm-eabi@4.41.0': + optional: true + + '@rollup/rollup-android-arm64@4.41.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.41.0': + optional: true + + '@rollup/rollup-darwin-x64@4.41.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.41.0': + optional: true + + '@rollup/rollup-freebsd-x64@4.41.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.41.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.41.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.41.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.41.0': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.41.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.41.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.41.0': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.41.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.41.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.41.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.41.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.41.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.41.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.41.0': + optional: true + + '@sindresorhus/is@7.0.1': {} + + '@sindresorhus/merge-streams@2.3.0': {} + + '@slack/logger@4.0.0': + dependencies: + '@types/node': 20.17.22 + + '@slack/types@2.14.0': {} + + '@slack/web-api@7.8.0': + dependencies: + '@slack/logger': 4.0.0 + '@slack/types': 2.14.0 + '@types/node': 20.17.22 + '@types/retry': 0.12.0 + axios: 1.8.1 + eventemitter3: 5.0.1 + form-data: 4.0.2 + is-electron: 2.2.2 + is-stream: 2.0.1 + p-queue: 6.6.2 + p-retry: 4.6.2 + retry: 0.13.1 + transitivePeerDependencies: + - debug + + '@speed-highlight/core@1.2.7': {} + + '@t3-oss/env-core@0.13.4(arktype@2.1.20)(typescript@5.8.2)(zod@3.24.2)': + dependencies: + arktype: 2.1.20 + optionalDependencies: + typescript: 5.8.2 + zod: 3.24.2 + + '@types/diff-match-patch@1.0.36': {} + + '@types/estree@1.0.7': {} + + '@types/json-schema@7.0.15': {} + + '@types/node@20.17.22': + dependencies: + undici-types: 6.19.8 + + '@types/normalize-package-data@2.4.4': {} + + '@types/resolve@1.20.2': {} + + '@types/retry@0.12.0': {} + + '@types/triple-beam@1.3.5': {} + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 20.17.22 + optional: true + + '@typescript-eslint/types@5.62.0': {} + + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.8.2)': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.4.1 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.7.2 + tsutils: 3.21.0(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: - supports-color - '@vercel/nft@0.29.2': + '@typescript-eslint/visitor-keys@5.62.0': dependencies: - '@mapbox/node-pre-gyp': 2.0.0 - '@rollup/pluginutils': 5.1.4 + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + + '@vercel/functions@2.0.0': {} + + '@vercel/nft@0.27.7(rollup@4.41.0)': + dependencies: + '@mapbox/node-pre-gyp': 1.0.11 + '@rollup/pluginutils': 5.1.4(rollup@4.41.0) 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 + glob: 7.2.3 graceful-fs: 4.2.11 + micromatch: 4.0.8 node-gyp-build: 4.8.4 - picomatch: 4.0.2 resolve-from: 5.0.0 transitivePeerDependencies: - encoding - rollup - supports-color - '@vercel/node@5.1.16': - dependencies: - '@edge-runtime/node-utils': 2.3.0 - '@edge-runtime/primitives': 4.1.0 - '@edge-runtime/vm': 3.2.0 - '@types/node': 16.18.11 - '@vercel/build-utils': 10.5.1 - '@vercel/error-utils': 2.0.3 - '@vercel/nft': 0.29.2 - '@vercel/static-config': 3.0.0 - async-listen: 3.0.0 - cjs-module-lexer: 1.2.3 - edge-runtime: 2.5.9 - es-module-lexer: 1.4.1 - esbuild: 0.14.47 - etag: 1.8.1 - node-fetch: 2.6.9 - path-to-regexp: 6.1.0 - path-to-regexp-updated: path-to-regexp@6.3.0 - ts-morph: 12.0.0 - ts-node: 10.9.1(@types/node@16.18.11)(typescript@4.9.5) - typescript: 4.9.5 - undici: 5.28.4 + '@vercel/nft@0.29.2(rollup@4.41.0)': + dependencies: + '@mapbox/node-pre-gyp': 2.0.0 + '@rollup/pluginutils': 5.1.4(rollup@4.41.0) + 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: - - '@swc/core' - - '@swc/wasm' - encoding - rollup - supports-color - '@vercel/python@4.7.2': {} - - '@vercel/redwood@2.3.1': + '@whatwg-node/disposablestack@0.0.6': dependencies: - '@vercel/nft': 0.29.2 - '@vercel/static-config': 3.0.0 - semver: 6.3.1 - ts-morph: 12.0.0 - transitivePeerDependencies: - - encoding - - rollup - - supports-color + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 - '@vercel/remix-builder@5.4.7': + '@whatwg-node/fetch@0.10.8': dependencies: - '@vercel/error-utils': 2.0.3 - '@vercel/nft': 0.29.2 - '@vercel/static-config': 3.0.0 - path-to-regexp: 6.1.0 - path-to-regexp-updated: path-to-regexp@6.3.0 - ts-morph: 12.0.0 - transitivePeerDependencies: - - encoding - - rollup - - supports-color + '@whatwg-node/node-fetch': 0.7.21 + urlpattern-polyfill: 10.1.0 - '@vercel/ruby@2.2.0': {} + '@whatwg-node/node-fetch@0.7.21': + dependencies: + '@fastify/busboy': 3.1.1 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 - '@vercel/static-build@2.7.7': + '@whatwg-node/promise-helpers@1.3.2': dependencies: - '@vercel/gatsby-plugin-vercel-analytics': 1.0.11 - '@vercel/gatsby-plugin-vercel-builder': 2.0.81 - '@vercel/static-config': 3.0.0 - ts-morph: 12.0.0 + tslib: 2.8.1 - '@vercel/static-config@3.0.0': + '@whatwg-node/server@0.9.71': dependencies: - ajv: 8.6.3 - json-schema-to-ts: 1.6.4 - ts-morph: 12.0.0 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/fetch': 0.10.8 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + abbrev@1.1.1: {} abbrev@3.0.1: {} - acorn-import-attributes@1.9.5(acorn@8.14.1): + abort-controller@3.0.0: dependencies: - acorn: 8.14.1 + event-target-shim: 5.0.1 - acorn-walk@8.3.4: + acorn-import-attributes@1.9.5(acorn@8.14.1): dependencies: acorn: 8.14.1 acorn@8.14.1: {} + agent-base@6.0.2: + dependencies: + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + agent-base@7.1.3: {} ai@4.3.16(react@19.0.0)(zod@3.24.2): @@ -2222,13 +3803,6 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - ajv@8.6.3: - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} @@ -2239,11 +3813,73 @@ snapshots: ansi-styles@6.2.1: {} - any-promise@1.3.0: {} + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + aproba@2.0.0: {} + + archiver-utils@2.1.0: + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 2.3.8 + + archiver-utils@3.0.4: + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 3.6.2 + + 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@5.3.2: + dependencies: + archiver-utils: 2.1.0 + async: 3.2.6 + buffer-crc32: 0.2.13 + readable-stream: 3.6.2 + readdir-glob: 1.1.3 + tar-stream: 2.2.0 + zip-stream: 4.1.1 - arg@4.1.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 - arg@4.1.3: {} + are-we-there-yet@2.0.0: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 argparse@2.0.1: {} @@ -2252,14 +3888,14 @@ snapshots: '@ark/schema': 0.46.0 '@ark/util': 0.46.0 - async-listen@1.2.0: {} - - async-listen@3.0.0: {} + array-union@2.1.0: {} - async-listen@3.0.1: {} + ast-module-types@5.0.0: {} async-sema@3.1.1: {} + async@3.2.6: {} + asynckit@0.4.0: {} axios@1.8.1: @@ -2270,12 +3906,25 @@ snapshots: transitivePeerDependencies: - debug + b4a@1.6.7: {} + balanced-match@1.0.2: {} + bare-events@2.5.4: + optional: true + + base64-js@1.5.1: {} + bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -2291,9 +3940,23 @@ snapshots: buffer-crc32@0.2.13: {} - bytes@3.1.0: {} + buffer-crc32@1.0.0: {} - c12@2.0.1: + buffer-from@1.1.2: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + builtin-modules@3.3.0: {} + + c12@2.0.1(magicast@0.3.5): dependencies: chokidar: 4.0.3 confbox: 0.1.8 @@ -2307,17 +3970,39 @@ snapshots: perfect-debounce: 1.0.0 pkg-types: 1.3.1 rc9: 2.1.2 + optionalDependencies: + magicast: 0.3.5 + + c12@3.0.4(magicast@0.3.5): + dependencies: + chokidar: 4.0.3 + confbox: 0.2.2 + defu: 6.1.4 + dotenv: 16.5.0 + exsolve: 1.0.5 + 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 call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - chalk@5.4.1: {} - - chokidar@4.0.0: + call-bound@1.0.4: dependencies: - readdirp: 4.1.2 + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsite@1.0.0: {} + + chalk@5.4.1: {} chokidar@4.0.3: dependencies: @@ -2331,33 +4016,121 @@ snapshots: dependencies: consola: 3.4.2 - cjs-module-lexer@1.2.3: {} + 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 - code-block-writer@10.1.1: {} + 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: {} + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color-support@1.1.3: {} + + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + + colorspace@1.1.4: + dependencies: + color: 3.2.1 + text-hex: 1.0.0 + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 + commander@10.0.1: {} + commander@13.0.0: {} + commander@2.20.3: {} + + common-path-prefix@3.0.0: {} + + commondir@1.0.1: {} + + compatx@0.2.0: {} + + compress-commons@4.1.2: + dependencies: + buffer-crc32: 0.2.13 + crc32-stream: 4.0.3 + normalize-path: 3.0.0 + readable-stream: 3.6.2 + + compress-commons@6.0.2: + 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 + concat-map@0.0.1: {} confbox@0.1.8: {} + confbox@0.2.2: {} + consola@3.4.2: {} - content-type@1.0.4: {} + console-control-strings@1.1.0: {} + + cookie-es@1.2.2: {} + + cookie-es@2.0.0: {} + + cookie@1.0.2: {} - convert-hrtime@3.0.0: {} + core-util-is@1.0.3: {} + + cp-file@10.0.0: + dependencies: + graceful-fs: 4.2.11 + nested-error-stacks: 2.1.1 + p-event: 5.0.1 + + crc-32@1.2.2: {} + + crc32-stream@4.0.3: + dependencies: + crc-32: 1.2.2 + readable-stream: 3.6.2 + + crc32-stream@6.0.0: + dependencies: + crc-32: 1.2.2 + readable-stream: 4.7.0 + + cron-parser@4.9.0: + dependencies: + luxon: 3.6.1 - create-require@1.1.1: {} + croner@9.0.0: {} cross-fetch@4.1.0: dependencies: @@ -2371,29 +4144,92 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - debug@4.3.4: + crossws@0.3.5: dependencies: - ms: 2.1.2 + uncrypto: 0.1.3 + + data-uri-to-buffer@4.0.1: {} + + db0@0.3.2: {} debug@4.4.1: dependencies: ms: 2.1.3 + decache@4.6.2: + dependencies: + callsite: 1.0.0 + + deepmerge@4.3.1: {} + + define-lazy-prop@2.0.0: {} + defu@6.1.4: {} delayed-stream@1.0.0: {} - depd@1.1.2: {} + delegates@1.0.0: {} + + denque@2.1.0: {} + + depd@2.0.0: {} dequal@2.0.3: {} destr@2.0.5: {} + detect-libc@1.0.3: {} + detect-libc@2.0.4: {} + detective-amd@5.0.2: + dependencies: + ast-module-types: 5.0.0 + escodegen: 2.1.0 + get-amd-module-type: 5.0.1 + node-source-walk: 6.0.2 + + detective-cjs@5.0.1: + dependencies: + ast-module-types: 5.0.0 + node-source-walk: 6.0.2 + + detective-es6@4.0.1: + dependencies: + node-source-walk: 6.0.2 + + detective-postcss@6.1.3: + dependencies: + is-url: 1.2.4 + postcss: 8.5.3 + postcss-values-parser: 6.0.2(postcss@8.5.3) + + detective-sass@5.0.3: + dependencies: + gonzales-pe: 4.3.0 + node-source-walk: 6.0.2 + + detective-scss@4.0.3: + dependencies: + gonzales-pe: 4.3.0 + node-source-walk: 6.0.2 + + detective-stylus@4.0.0: {} + + detective-typescript@11.2.0: + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.2) + ast-module-types: 5.0.0 + node-source-walk: 6.0.2 + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + diff-match-patch@1.0.5: {} - diff@4.0.2: {} + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 discourse2-chat@1.1.5: dependencies: @@ -2402,36 +4238,46 @@ snapshots: ajv-formats: 3.0.1(ajv@8.17.1) openapi-types: 12.1.3 + dot-prop@9.0.0: + dependencies: + type-fest: 4.41.0 + dotenv@16.4.7: {} + dotenv@16.5.0: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 + duplexer@0.1.2: {} + eastasianwidth@0.2.0: {} - edge-runtime@2.5.9: - dependencies: - '@edge-runtime/format': 2.2.1 - '@edge-runtime/ponyfill': 2.4.2 - '@edge-runtime/vm': 3.2.0 - async-listen: 3.0.1 - mri: 1.2.0 - picocolors: 1.0.0 - pretty-ms: 7.0.1 - signal-exit: 4.0.2 - time-span: 4.0.0 + ee-first@1.1.1: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} + enabled@2.0.0: {} + + encodeurl@2.0.0: {} + end-of-stream@1.1.0: dependencies: once: 1.3.3 + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + env-paths@3.0.0: {} + + error-stack-parser-es@1.0.5: {} + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -2447,90 +4293,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 - hasown: 2.0.2 - - esbuild-android-64@0.14.47: - optional: true - - esbuild-android-arm64@0.14.47: - optional: true - - esbuild-darwin-64@0.14.47: - optional: true - - esbuild-darwin-arm64@0.14.47: - optional: true - - esbuild-freebsd-64@0.14.47: - optional: true - - esbuild-freebsd-arm64@0.14.47: - optional: true - - esbuild-linux-32@0.14.47: - optional: true - - esbuild-linux-64@0.14.47: - optional: true - - esbuild-linux-arm64@0.14.47: - optional: true - - esbuild-linux-arm@0.14.47: - optional: true - - esbuild-linux-mips64le@0.14.47: - optional: true - - esbuild-linux-ppc64le@0.14.47: - optional: true - - esbuild-linux-riscv64@0.14.47: - optional: true - - esbuild-linux-s390x@0.14.47: - optional: true - - esbuild-netbsd-64@0.14.47: - optional: true - - esbuild-openbsd-64@0.14.47: - optional: true - - esbuild-sunos-64@0.14.47: - optional: true - - esbuild-windows-32@0.14.47: - optional: true - - esbuild-windows-64@0.14.47: - optional: true - - esbuild-windows-arm64@0.14.47: - optional: true - - esbuild@0.14.47: - optionalDependencies: - esbuild-android-64: 0.14.47 - esbuild-android-arm64: 0.14.47 - esbuild-darwin-64: 0.14.47 - esbuild-darwin-arm64: 0.14.47 - esbuild-freebsd-64: 0.14.47 - esbuild-freebsd-arm64: 0.14.47 - esbuild-linux-32: 0.14.47 - esbuild-linux-64: 0.14.47 - esbuild-linux-arm: 0.14.47 - esbuild-linux-arm64: 0.14.47 - esbuild-linux-mips64le: 0.14.47 - esbuild-linux-ppc64le: 0.14.47 - esbuild-linux-riscv64: 0.14.47 - esbuild-linux-s390x: 0.14.47 - esbuild-netbsd-64: 0.14.47 - esbuild-openbsd-64: 0.14.47 - esbuild-sunos-64: 0.14.47 - esbuild-windows-32: 0.14.47 - esbuild-windows-64: 0.14.47 - esbuild-windows-arm64: 0.14.47 + hasown: 2.0.2 esbuild@0.25.4: optionalDependencies: @@ -2560,15 +4323,43 @@ snapshots: '@esbuild/win32-ia32': 0.25.4 '@esbuild/win32-x64': 0.25.4 + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@5.0.0: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + eslint-visitor-keys@3.4.3: {} + + esprima@4.0.1: {} + + estraverse@5.3.0: {} + estree-walker@2.0.2: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.7 + + esutils@2.0.3: {} + etag@1.8.1: {} + event-target-shim@5.0.1: {} + eventemitter3@4.0.7: {} eventemitter3@5.0.1: {} - events-intercept@2.0.0: {} + events@3.3.0: {} exa-js@1.4.10: dependencies: @@ -2577,8 +4368,46 @@ snapshots: transitivePeerDependencies: - encoding + execa@7.2.0: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + + execa@8.0.1: + 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.5: {} + + extract-zip@2.0.1: + dependencies: + debug: 4.4.1 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + fast-deep-equal@3.1.3: {} + fast-fifo@1.3.2: {} + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -2597,12 +4426,40 @@ snapshots: dependencies: pend: 1.2.0 + fdir@6.4.4(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + fecha@4.2.3: {} + + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + file-uri-to-path@1.0.0: {} fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 + filter-obj@5.1.0: {} + + find-up-simple@1.0.1: {} + + find-up@6.3.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + + fn.name@1.1.0: {} + follow-redirects@1.15.9: {} foreground-child@3.3.1: @@ -2617,22 +4474,43 @@ snapshots: es-set-tostringtag: 2.1.0 mime-types: 2.1.35 - fs-extra@11.1.0: + formdata-polyfill@4.0.10: dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 + fetch-blob: 3.2.0 + + fresh@2.0.0: {} + + fs-constants@1.0.0: {} fs-minipass@2.1.0: dependencies: minipass: 3.3.6 + fs.realpath@1.0.0: {} + fsevents@2.3.3: optional: true function-bind@1.1.2: {} - generic-pool@3.4.2: {} + gauge@3.0.2: + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + + get-amd-module-type@5.0.1: + dependencies: + ast-module-types: 5.0.0 + node-source-walk: 6.0.2 + + get-caller-file@2.0.5: {} get-intrinsic@1.3.0: dependencies: @@ -2647,11 +4525,21 @@ 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@5.2.0: + dependencies: + pump: 3.0.2 + + get-stream@6.0.1: {} + + get-stream@8.0.1: {} + get-tsconfig@4.10.1: dependencies: resolve-pkg-maps: 1.0.0 @@ -2666,6 +4554,15 @@ snapshots: pathe: 2.0.3 tar: 6.2.1 + giget@2.0.0: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + 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 @@ -2679,10 +4576,65 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.3.3 + path-is-absolute: 1.0.1 + + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.3.3 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + globby@14.1.0: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.3 + ignore: 7.0.4 + path-type: 6.0.0 + slash: 5.1.0 + unicorn-magic: 0.3.0 + + gonzales-pe@4.3.0: + dependencies: + minimist: 1.2.8 + gopd@1.2.0: {} graceful-fs@4.2.11: {} + gzip-size@7.0.0: + dependencies: + duplexer: 0.1.2 + + h3@1.15.3: + dependencies: + cookie-es: 1.2.2 + crossws: 0.3.5 + defu: 6.1.4 + destr: 2.0.5 + iron-webcrypto: 1.2.1 + node-mock-http: 1.0.0 + radix3: 1.1.2 + ufo: 1.6.1 + uncrypto: 0.1.3 + handlebars@4.7.8: dependencies: minimist: 1.2.8 @@ -2698,22 +4650,34 @@ snapshots: dependencies: has-symbols: 1.1.0 + has-unicode@2.0.1: {} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - http-errors@1.4.0: + hookable@5.5.3: {} + + hosted-git-info@7.0.2: dependencies: - inherits: 2.0.1 - statuses: 1.5.0 + lru-cache: 10.4.3 - http-errors@1.7.3: + http-errors@2.0.0: dependencies: - depd: 1.1.2 + depd: 2.0.0 inherits: 2.0.4 - setprototypeof: 1.1.1 - statuses: 1.5.0 - toidentifier: 1.0.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-shutdown@1.2.2: {} + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color https-proxy-agent@7.0.6: dependencies: @@ -2722,14 +4686,59 @@ snapshots: transitivePeerDependencies: - supports-color - iconv-lite@0.4.24: - dependencies: - safer-buffer: 2.1.2 + httpxy@0.1.7: {} + + human-signals@4.3.1: {} - inherits@2.0.1: {} + human-signals@5.0.0: {} + + ieee754@1.2.1: {} + + ignore@5.3.2: {} + + ignore@7.0.4: {} + + imurmurhash@0.1.4: {} + + index-to-position@1.1.0: {} + + inflight@1.0.6: + dependencies: + once: 1.3.3 + wrappy: 1.0.2 inherits@2.0.4: {} + ioredis@5.6.1: + dependencies: + '@ioredis/commands': 1.2.0 + cluster-key-slot: 1.1.2 + debug: 4.4.1 + 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: {} + + is-arrayish@0.3.2: {} + + is-builtin-module@3.2.1: + dependencies: + builtin-modules: 3.3.0 + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-docker@2.2.1: {} + + is-docker@3.0.0: {} + is-electron@2.2.2: {} is-extglob@2.1.1: {} @@ -2740,11 +4749,45 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-module@1.0.0: {} + is-number@7.0.0: {} + is-path-inside@4.0.0: {} + + is-plain-obj@2.1.0: {} + + is-reference@1.2.1: + dependencies: + '@types/estree': 1.0.7 + is-stream@2.0.1: {} - isarray@0.0.1: {} + is-stream@3.0.0: {} + + is-stream@4.0.1: {} + + is-url-superb@4.0.0: {} + + is-url@1.2.4: {} + + 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: {} isexe@2.0.0: {} @@ -2756,17 +4799,14 @@ snapshots: jiti@2.4.2: {} - jose@5.9.6: {} + js-tokens@4.0.0: {} + + js-tokens@9.0.1: {} js-yaml@4.1.0: dependencies: argparse: 2.0.1 - json-schema-to-ts@1.6.4: - dependencies: - '@types/json-schema': 7.0.15 - ts-toolbelt: 6.15.5 - json-schema-traverse@1.0.0: {} json-schema@0.4.0: {} @@ -2777,31 +4817,115 @@ snapshots: chalk: 5.4.1 diff-match-patch: 1.0.5 - jsonfile@6.1.0: + junk@4.0.1: {} + + jwt-decode@4.0.0: {} + + kleur@4.1.5: {} + + klona@2.0.6: {} + + knitwork@1.2.0: {} + + kuler@2.0.0: {} + + lambda-local@2.2.0: dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 + commander: 10.0.1 + dotenv: 16.4.7 + winston: 3.17.0 + + lazystream@1.0.1: + dependencies: + readable-stream: 2.3.8 + + 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.2 + crossws: 0.3.5 + defu: 6.1.4 + get-port-please: 3.1.2 + h3: 1.15.3 + 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.9.0 + ufo: 1.6.1 + untun: 0.1.3 + uqr: 0.1.2 + + local-pkg@1.1.1: + dependencies: + mlly: 1.7.4 + pkg-types: 2.1.0 + quansync: 0.2.10 + + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash-es@4.17.21: {} + + lodash.debounce@4.0.8: {} + + lodash.defaults@4.2.0: {} + + lodash.difference@4.5.0: {} + + lodash.flatten@4.4.0: {} + + lodash.isarguments@3.1.0: {} + + lodash.isplainobject@4.0.6: {} + + lodash.union@4.6.0: {} lodash@4.17.21: {} + logform@2.7.0: + dependencies: + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.5.0 + triple-beam: 1.4.1 + lru-cache@10.4.3: {} - lru-cache@6.0.0: + luxon@3.6.1: {} + + magic-string@0.30.17: dependencies: - yallist: 4.0.0 + '@jridgewell/sourcemap-codec': 1.5.0 - make-error@1.3.6: {} + magicast@0.3.5: + dependencies: + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 + source-map-js: 1.2.1 + + make-dir@3.1.0: + dependencies: + semver: 6.3.1 math-intrinsics@1.1.0: {} + merge-options@3.0.4: + dependencies: + is-plain-obj: 2.1.0 + + merge-stream@2.0.0: {} + merge2@1.4.1: {} - micro@9.3.5-canary.3: - dependencies: - arg: 4.1.0 - content-type: 1.0.4 - raw-body: 2.4.1 + micro-api-client@3.3.0: {} micromatch@4.0.8: dependencies: @@ -2810,14 +4934,30 @@ snapshots: mime-db@1.52.0: {} + mime-db@1.54.0: {} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 + mime-types@3.0.1: + dependencies: + mime-db: 1.54.0 + + mime@3.0.0: {} + + mime@4.0.7: {} + + 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 + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -2852,11 +4992,10 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.1 - mri@1.2.0: {} - - ms@2.1.1: {} - - ms@2.1.2: {} + module-definition@5.0.1: + dependencies: + ast-module-types: 5.0.0 + node-source-walk: 6.0.2 ms@2.1.3: {} @@ -2864,47 +5003,249 @@ snapshots: neo-async@2.6.2: {} + nested-error-stacks@2.1.1: {} + + netlify@13.3.5: + dependencies: + '@netlify/open-api': 2.37.0 + lodash-es: 4.17.21 + micro-api-client: 3.3.0 + node-fetch: 3.3.2 + p-wait-for: 5.0.2 + qs: 6.14.0 + + nitropack@2.11.12: + dependencies: + '@cloudflare/kv-asset-handler': 0.4.0 + '@netlify/functions': 3.1.8(rollup@4.41.0) + '@rollup/plugin-alias': 5.1.1(rollup@4.41.0) + '@rollup/plugin-commonjs': 28.0.3(rollup@4.41.0) + '@rollup/plugin-inject': 5.0.5(rollup@4.41.0) + '@rollup/plugin-json': 6.1.0(rollup@4.41.0) + '@rollup/plugin-node-resolve': 16.0.1(rollup@4.41.0) + '@rollup/plugin-replace': 6.0.2(rollup@4.41.0) + '@rollup/plugin-terser': 0.4.4(rollup@4.41.0) + '@vercel/nft': 0.29.2(rollup@4.41.0) + archiver: 7.0.1 + c12: 3.0.4(magicast@0.3.5) + chokidar: 4.0.3 + citty: 0.1.6 + compatx: 0.2.0 + confbox: 0.2.2 + consola: 3.4.2 + cookie-es: 2.0.0 + croner: 9.0.0 + crossws: 0.3.5 + db0: 0.3.2 + defu: 6.1.4 + destr: 2.0.5 + dot-prop: 9.0.0 + esbuild: 0.25.4 + escape-string-regexp: 5.0.0 + etag: 1.8.1 + exsolve: 1.0.5 + globby: 14.1.0 + gzip-size: 7.0.0 + h3: 1.15.3 + hookable: 5.5.3 + httpxy: 0.1.7 + ioredis: 5.6.1 + 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.7 + mlly: 1.7.4 + node-fetch-native: 1.6.6 + node-mock-http: 1.0.0 + ofetch: 1.4.1 + ohash: 2.0.11 + 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.41.0 + rollup-plugin-visualizer: 5.14.0(rollup@4.41.0) + scule: 1.3.0 + semver: 7.7.2 + serve-placeholder: 2.0.2 + serve-static: 2.2.0 + source-map: 0.7.4 + std-env: 3.9.0 + ufo: 1.6.1 + ultrahtml: 1.6.0 + uncrypto: 0.1.3 + unctx: 2.4.1 + unenv: 2.0.0-rc.17 + unimport: 5.0.1 + unplugin-utils: 0.2.4 + unstorage: 1.16.0(db0@0.3.2)(ioredis@5.6.1) + untyped: 2.0.0 + unwasm: 0.3.9 + youch: 4.1.0-beta.7 + youch-core: 0.3.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 + - uploadthing + + node-addon-api@7.1.1: {} + + node-domexception@1.0.0: {} + node-fetch-native@1.6.6: {} - node-fetch@2.6.7: + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - node-fetch@2.6.9: + node-fetch@3.3.2: dependencies: - whatwg-url: 5.0.0 + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 - node-fetch@2.7.0: - dependencies: - whatwg-url: 5.0.0 + node-forge@1.3.1: {} node-gyp-build@4.8.4: {} + node-mock-http@1.0.0: {} + + node-source-walk@6.0.2: + dependencies: + '@babel/parser': 7.27.2 + + nopt@5.0.0: + dependencies: + abbrev: 1.1.1 + nopt@8.1.0: dependencies: abbrev: 3.0.1 + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.7.2 + validate-npm-package-license: 3.0.4 + + normalize-path@2.1.1: + dependencies: + remove-trailing-separator: 1.1.0 + + normalize-path@3.0.0: {} + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + npmlog@5.0.1: + dependencies: + are-we-there-yet: 2.0.0 + console-control-strings: 1.1.0 + gauge: 3.0.2 + set-blocking: 2.0.0 + nypm@0.5.4: dependencies: citty: 0.1.6 consola: 3.4.2 pathe: 2.0.3 - pkg-types: 1.3.1 + pkg-types: 1.3.1 + tinyexec: 0.3.2 + ufo: 1.6.1 + + nypm@0.6.0: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + pathe: 2.0.3 + pkg-types: 2.1.0 tinyexec: 0.3.2 + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + ofetch@1.4.1: + dependencies: + destr: 2.0.5 + node-fetch-native: 1.6.6 ufo: 1.6.1 ohash@1.1.6: {} + ohash@2.0.11: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + once@1.3.3: dependencies: wrappy: 1.0.2 + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + one-time@1.0.0: + dependencies: + fn.name: 1.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + openapi-types@12.1.3: {} - os-paths@4.4.0: {} + p-event@5.0.1: + dependencies: + p-timeout: 5.1.0 p-finally@1.0.0: {} + p-limit@4.0.0: + dependencies: + yocto-queue: 1.2.1 + + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + + p-map@7.0.3: {} + p-queue@6.6.2: dependencies: eventemitter3: 4.0.7 @@ -2919,31 +5260,44 @@ snapshots: dependencies: p-finally: 1.0.0 + p-timeout@5.1.0: {} + + p-timeout@6.1.4: {} + + p-wait-for@5.0.2: + dependencies: + p-timeout: 6.1.4 + package-json-from-dist@1.0.1: {} - parse-ms@2.1.0: {} + parse-gitignore@2.0.0: {} + + parse-json@8.3.0: + dependencies: + '@babel/code-frame': 7.27.1 + index-to-position: 1.1.0 + type-fest: 4.41.0 + + parseurl@1.3.3: {} - path-browserify@1.0.1: {} + path-exists@5.0.0: {} + + path-is-absolute@1.0.1: {} path-key@3.1.1: {} - path-match@1.2.4: - dependencies: - http-errors: 1.4.0 - path-to-regexp: 1.9.0 + path-key@4.0.0: {} + + path-parse@1.0.7: {} path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 minipass: 7.1.2 - path-to-regexp@1.9.0: - dependencies: - isarray: 0.0.1 - - path-to-regexp@6.1.0: {} + path-type@4.0.0: {} - path-to-regexp@6.3.0: {} + path-type@6.0.0: {} pathe@1.1.2: {} @@ -2953,7 +5307,7 @@ snapshots: perfect-debounce@1.0.0: {} - picocolors@1.0.0: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -2965,24 +5319,72 @@ snapshots: mlly: 1.7.4 pathe: 2.0.3 - pretty-ms@7.0.1: + pkg-types@2.1.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.5 + pathe: 2.0.3 + + postcss-values-parser@6.0.2(postcss@8.5.3): dependencies: - parse-ms: 2.1.0 + color-name: 1.1.4 + is-url-superb: 4.0.0 + postcss: 8.5.3 + quote-unquote: 1.0.0 + + postcss@8.5.3: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + precinct@11.0.5: + dependencies: + '@dependents/detective-less': 4.1.0 + commander: 10.0.1 + detective-amd: 5.0.2 + detective-cjs: 5.0.1 + detective-es6: 4.0.1 + detective-postcss: 6.1.3 + detective-sass: 5.0.3 + detective-scss: 4.0.3 + detective-stylus: 4.0.0 + detective-typescript: 11.2.0 + module-definition: 5.0.1 + node-source-walk: 6.0.2 + transitivePeerDependencies: + - supports-color + + pretty-bytes@6.1.1: {} + + process-nextick-args@2.0.1: {} - promisepipe@3.0.0: {} + process@0.11.10: {} proxy-from-env@1.1.0: {} - punycode@2.3.1: {} + pump@3.0.2: + dependencies: + end-of-stream: 1.1.0 + once: 1.3.3 + + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + + quansync@0.2.10: {} queue-microtask@1.2.3: {} - raw-body@2.4.1: + quote-unquote@1.0.0: {} + + radix3@1.1.2: {} + + randombytes@2.1.0: dependencies: - bytes: 3.1.0 - http-errors: 1.7.3 - iconv-lite: 0.4.24 - unpipe: 1.0.0 + safe-buffer: 5.2.1 + + range-parser@1.2.1: {} rc9@2.1.2: dependencies: @@ -2991,35 +5393,177 @@ snapshots: react@19.0.0: {} + read-package-up@11.0.0: + dependencies: + find-up-simple: 1.0.1 + read-pkg: 9.0.1 + type-fest: 4.41.0 + + read-pkg@9.0.1: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 6.0.2 + parse-json: 8.3.0 + type-fest: 4.41.0 + unicorn-magic: 0.1.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 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + 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@4.1.2: {} + redis-errors@1.2.0: {} + + redis-parser@3.0.0: + dependencies: + redis-errors: 1.2.0 + + remove-trailing-separator@1.1.0: {} + + require-directory@2.1.1: {} + require-from-string@2.0.2: {} + require-package-name@2.0.1: {} + resolve-from@5.0.0: {} resolve-pkg-maps@1.0.0: {} + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + resolve@2.0.0-next.5: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + retry@0.13.1: {} reusify@1.1.0: {} + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rollup-plugin-visualizer@5.14.0(rollup@4.41.0): + dependencies: + open: 8.4.2 + picomatch: 4.0.2 + source-map: 0.7.4 + yargs: 17.7.2 + optionalDependencies: + rollup: 4.41.0 + + rollup@4.41.0: + dependencies: + '@types/estree': 1.0.7 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.41.0 + '@rollup/rollup-android-arm64': 4.41.0 + '@rollup/rollup-darwin-arm64': 4.41.0 + '@rollup/rollup-darwin-x64': 4.41.0 + '@rollup/rollup-freebsd-arm64': 4.41.0 + '@rollup/rollup-freebsd-x64': 4.41.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.41.0 + '@rollup/rollup-linux-arm-musleabihf': 4.41.0 + '@rollup/rollup-linux-arm64-gnu': 4.41.0 + '@rollup/rollup-linux-arm64-musl': 4.41.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.41.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.41.0 + '@rollup/rollup-linux-riscv64-gnu': 4.41.0 + '@rollup/rollup-linux-riscv64-musl': 4.41.0 + '@rollup/rollup-linux-s390x-gnu': 4.41.0 + '@rollup/rollup-linux-x64-gnu': 4.41.0 + '@rollup/rollup-linux-x64-musl': 4.41.0 + '@rollup/rollup-win32-arm64-msvc': 4.41.0 + '@rollup/rollup-win32-ia32-msvc': 4.41.0 + '@rollup/rollup-win32-x64-msvc': 4.41.0 + fsevents: 2.3.3 + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - safer-buffer@2.1.2: {} + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-stable-stringify@2.5.0: {} + + scule@1.3.0: {} secure-json-parse@2.7.0: {} semver@6.3.1: {} - semver@7.5.4: + semver@7.7.2: {} + + send@1.2.0: dependencies: - lru-cache: 6.0.0 + debug: 4.4.1 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.0 + mime-types: 3.0.1 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color - semver@7.7.2: {} + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + serve-placeholder@2.0.2: + dependencies: + defu: 6.1.4 + + serve-static@2.2.0: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.0 + transitivePeerDependencies: + - supports-color + + set-blocking@2.0.0: {} - setprototypeof@1.1.1: {} + setprototypeof@1.2.0: {} shebang-command@2.0.0: dependencies: @@ -3027,25 +5571,87 @@ snapshots: shebang-regex@3.0.0: {} - signal-exit@4.0.2: {} + 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@3.0.7: {} signal-exit@4.1.0: {} + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + + slash@3.0.0: {} + + slash@5.1.0: {} + + smob@1.5.0: {} + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + source-map@0.6.1: {} - stat-mode@0.3.0: {} + source-map@0.7.4: {} + + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.21 - statuses@1.5.0: {} + spdx-exceptions@2.5.0: {} - stream-to-array@2.3.0: + spdx-expression-parse@3.0.1: dependencies: - any-promise: 1.3.0 + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.21 + + spdx-license-ids@3.0.21: {} + + stack-trace@0.0.10: {} + + standard-as-callback@2.1.0: {} - stream-to-promise@2.2.0: + statuses@2.0.1: {} + + std-env@3.9.0: {} + + streamx@2.22.0: dependencies: - any-promise: 1.3.0 - end-of-stream: 1.1.0 - stream-to-array: 2.3.0 + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.5.4 string-width@4.2.3: dependencies: @@ -3059,6 +5665,14 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -3067,12 +5681,38 @@ snapshots: dependencies: ansi-regex: 6.1.0 + strip-final-newline@3.0.0: {} + + strip-literal@3.0.0: + dependencies: + js-tokens: 9.0.1 + + supports-color@10.0.0: {} + + supports-preserve-symlinks-flag@1.0.0: {} + swr@2.3.2(react@19.0.0): dependencies: dequal: 2.0.3 react: 19.0.0 use-sync-external-store: 1.4.0(react@19.0.0) + system-architecture@0.1.0: {} + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.22.0 + tar@6.2.1: dependencies: chownr: 2.0.0 @@ -3091,48 +5731,54 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 - throttleit@2.1.0: {} + terser@5.39.2: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.14.1 + commander: 2.20.3 + source-map-support: 0.5.21 - time-span@4.0.0: + text-decoder@1.2.3: dependencies: - convert-hrtime: 3.0.0 + b4a: 1.6.7 + + text-hex@1.0.0: {} + + throttleit@2.1.0: {} tinyexec@0.3.2: {} + tinyglobby@0.2.13: + dependencies: + fdir: 6.4.4(picomatch@4.0.2) + picomatch: 4.0.2 + + 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 - toidentifier@1.0.0: {} + toidentifier@1.0.1: {} + + toml@3.0.0: {} tr46@0.0.3: {} - tree-kill@1.2.2: {} + triple-beam@1.4.1: {} - ts-morph@12.0.0: - dependencies: - '@ts-morph/common': 0.11.1 - code-block-writer: 10.1.1 + tslib@1.14.1: {} - ts-node@10.9.1(@types/node@16.18.11)(typescript@4.9.5): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 16.18.11 - acorn: 8.14.1 - acorn-walk: 8.3.4 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 4.9.5 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 + tslib@2.8.1: {} - ts-toolbelt@6.15.5: {} + tsutils@3.21.0(typescript@5.8.2): + dependencies: + tslib: 1.14.1 + typescript: 5.8.2 tsx@4.19.4: dependencies: @@ -3141,7 +5787,7 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - typescript@4.9.5: {} + type-fest@4.41.0: {} typescript@5.8.2: {} @@ -3150,54 +5796,130 @@ snapshots: uglify-js@3.19.3: optional: true - uid-promise@1.0.0: {} + ultrahtml@1.6.0: {} + + 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.3.4 undici-types@6.19.8: {} - undici@5.28.4: + unenv@2.0.0-rc.17: + dependencies: + defu: 6.1.4 + exsolve: 1.0.5 + ohash: 2.0.11 + pathe: 2.0.3 + ufo: 1.6.1 + + unicorn-magic@0.1.0: {} + + unicorn-magic@0.3.0: {} + + unimport@5.0.1: + 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: 2.1.0 + scule: 1.3.0 + strip-literal: 3.0.0 + tinyglobby: 0.2.13 + unplugin: 2.3.4 + unplugin-utils: 0.2.4 + + unixify@1.0.0: + dependencies: + normalize-path: 2.1.1 + + unplugin-utils@0.2.4: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.2 + + unplugin@1.16.1: dependencies: - '@fastify/busboy': 2.1.1 + acorn: 8.14.1 + webpack-virtual-modules: 0.6.2 + + unplugin@2.3.4: + dependencies: + acorn: 8.14.1 + picomatch: 4.0.2 + webpack-virtual-modules: 0.6.2 + + unstorage@1.16.0(db0@0.3.2)(ioredis@5.6.1): + dependencies: + anymatch: 3.1.3 + chokidar: 4.0.3 + destr: 2.0.5 + h3: 1.15.3 + lru-cache: 10.4.3 + node-fetch-native: 1.6.6 + ofetch: 1.4.1 + ufo: 1.6.1 + optionalDependencies: + db0: 0.3.2 + ioredis: 5.6.1 - universalify@2.0.1: {} + untun@0.1.3: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + pathe: 1.1.2 - unpipe@1.0.0: {} + 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 - uri-js@4.4.1: + unwasm@0.3.9: dependencies: - punycode: 2.3.1 + 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 + + uqr@0.1.2: {} + + urlpattern-polyfill@10.1.0: {} + + urlpattern-polyfill@8.0.2: {} use-sync-external-store@1.4.0(react@19.0.0): dependencies: react: 19.0.0 - v8-compile-cache-lib@3.0.1: {} - - vercel@42.1.1: - dependencies: - '@vercel/build-utils': 10.5.1 - '@vercel/fun': 1.1.6 - '@vercel/go': 3.2.1 - '@vercel/hydrogen': 1.2.0 - '@vercel/next': 4.7.11 - '@vercel/node': 5.1.16 - '@vercel/python': 4.7.2 - '@vercel/redwood': 2.3.1 - '@vercel/remix-builder': 5.4.7 - '@vercel/ruby': 2.2.0 - '@vercel/static-build': 2.7.7 - chokidar: 4.0.0 - jose: 5.9.6 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - encoding - - rollup - - supports-color + util-deprecate@1.0.2: {} + + uuid@11.1.0: {} - web-vitals@0.2.4: {} + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + web-streams-polyfill@3.3.3: {} webidl-conversions@3.0.1: {} + webpack-virtual-modules@0.6.2: {} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -3207,6 +5929,30 @@ snapshots: dependencies: isexe: 2.0.0 + wide-align@1.1.5: + dependencies: + string-width: 4.2.3 + + winston-transport@4.9.0: + dependencies: + logform: 2.7.0 + readable-stream: 3.6.2 + triple-beam: 1.4.1 + + winston@3.17.0: + dependencies: + '@colors/colors': 1.6.0 + '@dabh/diagnostics': 2.0.3 + async: 3.2.6 + is-stream: 2.0.1 + logform: 2.7.0 + one-time: 1.0.0 + readable-stream: 3.6.2 + safe-stable-stringify: 2.5.0 + stack-trace: 0.0.10 + triple-beam: 1.4.1 + winston-transport: 4.9.0 + wordwrap@1.0.0: {} wrap-ansi@7.0.0: @@ -3223,33 +5969,59 @@ snapshots: wrappy@1.0.2: {} - xdg-app-paths@5.1.0: + write-file-atomic@6.0.0: dependencies: - xdg-portable: 7.3.0 + imurmurhash: 0.1.4 + signal-exit: 4.1.0 - xdg-portable@7.3.0: - dependencies: - os-paths: 4.4.0 + y18n@5.0.8: {} yallist@4.0.0: {} yallist@5.0.0: {} - yauzl-clone@1.0.4: - dependencies: - events-intercept: 2.0.0 + yargs-parser@21.1.1: {} - yauzl-promise@2.1.3: + yargs@17.7.2: dependencies: - yauzl: 2.10.0 - yauzl-clone: 1.0.4 + 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 yauzl@2.10.0: dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 - yn@3.1.1: {} + yocto-queue@1.2.1: {} + + youch-core@0.3.2: + dependencies: + '@poppinss/exception': 1.2.1 + error-stack-parser-es: 1.0.5 + + youch@4.1.0-beta.7: + dependencies: + '@poppinss/dumper': 0.6.3 + '@speed-highlight/core': 1.2.7 + cookie: 1.0.2 + youch-core: 0.3.2 + + zip-stream@4.1.1: + dependencies: + archiver-utils: 3.0.4 + compress-commons: 4.1.2 + readable-stream: 3.6.2 + + zip-stream@6.0.1: + dependencies: + archiver-utils: 5.0.2 + compress-commons: 6.0.2 + readable-stream: 4.7.0 zod-to-json-schema@3.24.3(zod@3.24.2): dependencies: diff --git a/api/events.ts b/server/api/events.post.ts similarity index 75% rename from api/events.ts rename to server/api/events.post.ts index 03941e3..c2469cb 100644 --- a/api/events.ts +++ b/server/api/events.post.ts @@ -4,22 +4,22 @@ import { handleNewAssistantMessage } from '../lib/handle-messages'; import { getBotUser, verifyRequest } from '../lib/slack-utils'; import type { WebhookChatMessage, WebhookNotification } from '../types'; -export async function POST(request: Request) { - const rawBody = await request.text(); +export default defineEventHandler(async event => { + const rawBody = JSON.stringify(await readBody(event)); const payload = JSON.parse(rawBody); - await verifyRequest({ request, rawBody }); + await verifyRequest({ request: event, rawBody }); try { const botUser = await getBotUser(); - const event = { - type: request.headers.get('X-Discourse-Event-Type'), - id: request.headers.get('X-Discourse-Event-Id'), + const whEvent = { + type: getRequestHeader(event, 'X-Discourse-Event-Type'), + id: getRequestHeader(event, 'X-Discourse-Event-Id'), }; if ( - event.type === 'notification' && + whEvent.type === 'notification' && payload.notification?.notification_type === 29 && payload.notification?.user_id === botUser.id ) { @@ -31,7 +31,7 @@ export async function POST(request: Request) { ), ); } else if ( - event.type === 'chat_message' && + whEvent.type === 'chat_message' && payload?.chat_message.message.user.id !== botUser.id ) { waitUntil( @@ -47,4 +47,4 @@ export async function POST(request: Request) { console.error('Error generating response', error); return new Response('Error generating response', { status: 500 }); } -} +}); diff --git a/server/api/index.ts b/server/api/index.ts new file mode 100644 index 0000000..b460920 --- /dev/null +++ b/server/api/index.ts @@ -0,0 +1,3 @@ +export default defineEventHandler((event) => { + return "Hello World!"; +}); diff --git a/config.ts b/server/config.ts similarity index 100% rename from config.ts rename to server/config.ts diff --git a/env.ts b/server/env.ts similarity index 100% rename from env.ts rename to server/env.ts diff --git a/lib/ai/providers.ts b/server/lib/ai/providers.ts similarity index 100% rename from lib/ai/providers.ts rename to server/lib/ai/providers.ts diff --git a/lib/generate-response.ts b/server/lib/generate-response.ts similarity index 100% rename from lib/generate-response.ts rename to server/lib/generate-response.ts diff --git a/lib/handle-app-mention.ts b/server/lib/handle-app-mention.ts similarity index 93% rename from lib/handle-app-mention.ts rename to server/lib/handle-app-mention.ts index cdc9b81..ae4985f 100644 --- a/lib/handle-app-mention.ts +++ b/server/lib/handle-app-mention.ts @@ -1,5 +1,5 @@ -import { editMessage, sendMessage } from '../client/sdk.gen'; -import type { GetSessionResponse } from '../client/types.gen'; +import { editMessage, sendMessage } from '../../client/sdk.gen'; +import type { GetSessionResponse } from '../../client/types.gen'; import type { WebhookNotification } from '../types'; import { generateResponse } from './generate-response'; import { getMessages, getThreadMessages } from './slack-utils'; diff --git a/lib/handle-messages.ts b/server/lib/handle-messages.ts similarity index 97% rename from lib/handle-messages.ts rename to server/lib/handle-messages.ts index 52dd600..4b08162 100644 --- a/lib/handle-messages.ts +++ b/server/lib/handle-messages.ts @@ -1,4 +1,4 @@ -import type { GetSessionResponse } from '../client/types.gen'; +import type { GetSessionResponse } from '../../client/types.gen'; import { keywords } from '../config'; import type { WebhookChatMessage } from '../types'; import { generateResponse } from './generate-response'; diff --git a/lib/slack-utils.ts b/server/lib/slack-utils.ts similarity index 93% rename from lib/slack-utils.ts rename to server/lib/slack-utils.ts index 1f38b5e..19c0ad4 100644 --- a/lib/slack-utils.ts +++ b/server/lib/slack-utils.ts @@ -1,6 +1,6 @@ import * as crypto from 'node:crypto'; import type { CoreMessage } from 'ai'; -import { client } from '../client/client.gen'; +import { client } from '../../client/client.gen'; import { getThread as _getThread, editMessage, @@ -8,8 +8,8 @@ import { getThreadMessages as _getThreadMessages, getSession, sendMessage, -} from '../client/sdk.gen'; -import type { GetSessionResponse } from '../client/types.gen'; +} from '../../client/sdk.gen'; +import type { GetSessionResponse } from '../../client/types.gen'; import type { WebhookChatMessage } from '../types'; import { env } from '../env'; @@ -28,10 +28,10 @@ export function isValidDiscourseRequest({ request, rawBody, }: { - request: Request; + request: H3Event; rawBody: string; }): boolean { - const signatureHeader = request.headers.get('X-Discourse-Event-Signature'); + const signatureHeader = getRequestHeader(request, 'X-Discourse-Event-Signature'); if (!signatureHeader || !signatureHeader.startsWith('sha256=')) { console.log('Missing or malformed signature'); @@ -59,7 +59,7 @@ export const verifyRequest = async ({ request, rawBody, }: { - request: Request; + request: H3Event; rawBody: string; }) => { const validRequest = await isValidDiscourseRequest({ request, rawBody }); diff --git a/types/chat.ts b/server/types/chat.ts similarity index 100% rename from types/chat.ts rename to server/types/chat.ts diff --git a/types/discourse.ts b/server/types/discourse.ts similarity index 100% rename from types/discourse.ts rename to server/types/discourse.ts diff --git a/types/index.ts b/server/types/index.ts similarity index 100% rename from types/index.ts rename to server/types/index.ts diff --git a/types/webhook.ts b/server/types/webhook.ts similarity index 100% rename from types/webhook.ts rename to server/types/webhook.ts diff --git a/tsconfig.json b/tsconfig.json index fdfbe74..d32e2ef 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,14 +1,4 @@ +// https://nitro.unjs.io/guide/typescript { - "compilerOptions": { - "strict": true, - "target": "ESNext", - "module": "NodeNext", - "allowJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true, - "outDir": "./dist" - }, - "exclude": ["node_modules"], - "include": ["api"] + "extends": "./.nitro/types/tsconfig.json" } diff --git a/vercel.json b/vercel.json deleted file mode 100644 index 8342d3b..0000000 --- a/vercel.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "redirects": [ - { - "source": "/", - "destination": "https://github.com/techwithanirudh/ai-sdk-discourse-bot" - } - ], - "functions": { - "api/events.ts": { - "maxDuration": 60 - } - }, - "outputDirectory": "dist" -} From 9997555410f5b0f5e4fa68defeac3ec583d0b2cd Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Fri, 23 May 2025 15:28:58 +0000 Subject: [PATCH 19/50] refactor: standardize request handling and improve error messages in event and status utilities --- client/types.gen.ts | 1 + server/api/events.post.ts | 16 ++++++++-------- server/lib/handle-app-mention.ts | 6 ++++-- server/lib/handle-messages.ts | 12 ++++++++---- server/lib/slack-utils.ts | 9 +++++---- 5 files changed, 26 insertions(+), 18 deletions(-) diff --git a/client/types.gen.ts b/client/types.gen.ts index bc3f373..a7aa37e 100644 --- a/client/types.gen.ts +++ b/client/types.gen.ts @@ -5653,6 +5653,7 @@ export type GetSessionResponses = { }; custom_fields: { first_name?: string | null; + last_chat_channel_id?: number | null; }; time_read: number; recent_time_read: number; diff --git a/server/api/events.post.ts b/server/api/events.post.ts index c2469cb..9a898f8 100644 --- a/server/api/events.post.ts +++ b/server/api/events.post.ts @@ -4,22 +4,22 @@ import { handleNewAssistantMessage } from '../lib/handle-messages'; import { getBotUser, verifyRequest } from '../lib/slack-utils'; import type { WebhookChatMessage, WebhookNotification } from '../types'; -export default defineEventHandler(async event => { - const rawBody = JSON.stringify(await readBody(event)); +export default defineEventHandler(async request => { + const rawBody = JSON.stringify(await readBody(request)); const payload = JSON.parse(rawBody); - await verifyRequest({ request: event, rawBody }); + await verifyRequest({ request, rawBody }); try { const botUser = await getBotUser(); - const whEvent = { - type: getRequestHeader(event, 'X-Discourse-Event-Type'), - id: getRequestHeader(event, 'X-Discourse-Event-Id'), + const event = { + type: getRequestHeader(request, 'X-Discourse-Event-Type'), + id: getRequestHeader(request, 'X-Discourse-Event-Id'), }; if ( - whEvent.type === 'notification' && + event.type === 'notification' && payload.notification?.notification_type === 29 && payload.notification?.user_id === botUser.id ) { @@ -31,7 +31,7 @@ export default defineEventHandler(async event => { ), ); } else if ( - whEvent.type === 'chat_message' && + event.type === 'chat_message' && payload?.chat_message.message.user.id !== botUser.id ) { waitUntil( diff --git a/server/lib/handle-app-mention.ts b/server/lib/handle-app-mention.ts index ae4985f..6c201a9 100644 --- a/server/lib/handle-app-mention.ts +++ b/server/lib/handle-app-mention.ts @@ -19,8 +19,10 @@ const updateStatusUtil = async ( }, }); - if (!res?.data || !res.data?.message_id) - throw new Error('Failed to post initial message'); + if (!res?.data || !res.data?.message_id) { + throw new Error(`Failed to post initial message, thread_id: ${thread_id}, ${JSON.stringify(res)}`); + } + const initialMessage = res.data; const updateMessage = async (status: string) => { diff --git a/server/lib/handle-messages.ts b/server/lib/handle-messages.ts index 4b08162..d775a51 100644 --- a/server/lib/handle-messages.ts +++ b/server/lib/handle-messages.ts @@ -48,12 +48,16 @@ export async function handleNewAssistantMessage( const { message: content } = event.message; const thread_id = event.message.thread_id ?? null; - const isDirectMessage = channel.chatable_type === 'DirectMessage'; - const hasKeyword = keywords.some((k) => - content.toLowerCase().includes(k.toLowerCase()), + const isDM = channel.chatable_type === 'DirectMessage'; + const myDMId = botUser.custom_fields?.last_chat_channel_id; + const isOwnDM = isDM && channel.id === myDMId; + const hasKeyword = keywords.some(kw => + content.toLowerCase().includes(kw.toLowerCase()) ); - if (!isDirectMessage && !hasKeyword) return; + if (isDM && !isOwnDM) return; + + if (!isDM && !hasKeyword) return; console.log('processing AI request from chat message'); diff --git a/server/lib/slack-utils.ts b/server/lib/slack-utils.ts index 19c0ad4..c4bf60a 100644 --- a/server/lib/slack-utils.ts +++ b/server/lib/slack-utils.ts @@ -12,6 +12,7 @@ import { import type { GetSessionResponse } from '../../client/types.gen'; import type { WebhookChatMessage } from '../types'; import { env } from '../env'; +import type { EventHandlerRequest, H3Event } from 'h3' const signingSecret = env.DISCOURSE_SIGNING_SECRET; const url = env.DISCOURSE_URL; @@ -83,11 +84,11 @@ export const updateStatusUtil = async ( }, }); - if (!res?.data?.success) throw new Error('Failed to post initial message'); - const initialMessage = res.data; + if (!res?.data || !res.data?.message_id) { + throw new Error(`Failed to post initial message, thread_id: ${thread_id}, ${JSON.stringify(res)}`); + } - if (!initialMessage || !initialMessage.message_id) - throw new Error('Failed to post initial message'); + const initialMessage = res.data; const updateMessage = async (status: string) => { console.log('Updating message', status); From e988669ffce49f120145c7ad97bb748474618a77 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Fri, 23 May 2025 15:31:38 +0000 Subject: [PATCH 20/50] feat: add logging for replies in message handling and app mention functions --- server/lib/handle-app-mention.ts | 2 ++ server/lib/handle-messages.ts | 2 ++ server/lib/slack-utils.ts | 1 - 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/server/lib/handle-app-mention.ts b/server/lib/handle-app-mention.ts index 6c201a9..1ffea83 100644 --- a/server/lib/handle-app-mention.ts +++ b/server/lib/handle-app-mention.ts @@ -73,4 +73,6 @@ export async function handleNewAppMention( // ); // await updateMessage(result); // } + + console.log(`replied to ${event.data?.mentioned_by_username}: ${result}`); } diff --git a/server/lib/handle-messages.ts b/server/lib/handle-messages.ts index d775a51..70c473a 100644 --- a/server/lib/handle-messages.ts +++ b/server/lib/handle-messages.ts @@ -72,4 +72,6 @@ export async function handleNewAssistantMessage( : await getMessages(channel.id as number, botUser); const result = await generateResponse(messages, updateStatus); await updateStatus(result); + + console.log(`replied to ${event.message.user.username}: ${result}`); } diff --git a/server/lib/slack-utils.ts b/server/lib/slack-utils.ts index c4bf60a..a4d2e9f 100644 --- a/server/lib/slack-utils.ts +++ b/server/lib/slack-utils.ts @@ -91,7 +91,6 @@ export const updateStatusUtil = async ( const initialMessage = res.data; const updateMessage = async (status: string) => { - console.log('Updating message', status); await editMessage({ path: { channel_id: event.channel?.id, From 12a3ae9a8e8618d1e66771d8b97b77d8b2744f4c Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Fri, 23 May 2025 15:33:56 +0000 Subject: [PATCH 21/50] feat: prepend username to message content in getMessages and getThreadMessages functions --- server/lib/slack-utils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/lib/slack-utils.ts b/server/lib/slack-utils.ts index a4d2e9f..0b67d2c 100644 --- a/server/lib/slack-utils.ts +++ b/server/lib/slack-utils.ts @@ -135,7 +135,7 @@ export async function getMessages( return { role: isBot ? 'assistant' : 'user', - content: content, + content: `${message.user?.username}: ${content}`, } as CoreMessage; }) .filter((msg): msg is CoreMessage => msg !== null); @@ -176,7 +176,7 @@ export async function getThreadMessages( return { role: isBot ? 'assistant' : 'user', - content: content, + content: `${message.user?.username}: ${content}`, } as CoreMessage; }) .filter((msg): msg is CoreMessage => msg !== null); From 43081a29eb27a402c0eb81b3b9ce23a8bdc2b025 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Fri, 23 May 2025 17:37:04 +0000 Subject: [PATCH 22/50] feat: include user name in message content format in getMessages function --- server/lib/slack-utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/lib/slack-utils.ts b/server/lib/slack-utils.ts index 0b67d2c..e74d929 100644 --- a/server/lib/slack-utils.ts +++ b/server/lib/slack-utils.ts @@ -135,7 +135,7 @@ export async function getMessages( return { role: isBot ? 'assistant' : 'user', - content: `${message.user?.username}: ${content}`, + content: `${message.user?.name} (${message.user?.username}): ${content}`, } as CoreMessage; }) .filter((msg): msg is CoreMessage => msg !== null); From a6f31d6ab3df02909d95eb9e0d2e05a62fe97f3a Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Fri, 23 May 2025 17:42:35 +0000 Subject: [PATCH 23/50] feat: rename Slackbot to Discourse Chatbot and update related utilities --- README.md | 2 +- package.json | 5 +- pnpm-lock.yaml | 186 ------------------ server/api/events.post.ts | 2 +- .../{slack-utils.ts => discourse-utils.ts} | 0 server/lib/generate-response.ts | 6 +- server/lib/handle-app-mention.ts | 2 +- server/lib/handle-messages.ts | 2 +- 8 files changed, 10 insertions(+), 195 deletions(-) rename server/lib/{slack-utils.ts => discourse-utils.ts} (100%) diff --git a/README.md b/README.md index 738c39b..2419a0a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# AI SDK Slackbot +# AI SDK Discourse Chatbot [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fnicoalbanese%2Fai-sdk-slackbot&env=DISCOURSE_BOT_TOKEN,DISCOURSE_SIGNING_SECRET,OPENAI_API_KEY,EXA_API_KEY&envDescription=API%20keys%20needed%20for%20application&envLink=https%3A%2F%2Fgithub.com%2Fnicoalbanese%2Fai-sdk-slackbot%3Ftab%3Dreadme-ov-file%234-set-environment-variables&project-name=ai-sdk-slackbot) diff --git a/package.json b/package.json index 5d1607f..4bc81ab 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "ai-sdk-slack-chatbot", + "name": "ai-sdk-discourse-chatbot", "version": "1.0.0", "description": "", "main": "index.js", @@ -24,14 +24,13 @@ "@ai-sdk/openai": "^1.3.22", "@ai-sdk/openai-compatible": "^0.2.14", "@hey-api/client-fetch": "^0.10.1", - "@slack/web-api": "^7.0.2", "@t3-oss/env-core": "^0.13.4", "@vercel/functions": "^2.0.0", "ai": "^4.3.16", "discourse2-chat": "^1.1.5", "exa-js": "^1.4.10", - "tsx": "^4.19.4", "nitropack": "latest", + "tsx": "^4.19.4", "zod": "^3.24.2" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 21e74f6..a648fa2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,9 +17,6 @@ importers: '@hey-api/client-fetch': specifier: ^0.10.1 version: 0.10.1(@hey-api/openapi-ts@0.67.5(magicast@0.3.5)(typescript@5.8.2)) - '@slack/web-api': - specifier: ^7.0.2 - version: 7.8.0 '@t3-oss/env-core': specifier: ^0.13.4 version: 0.13.4(arktype@2.1.20)(typescript@5.8.2)(zod@3.24.2) @@ -737,18 +734,6 @@ packages: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} - '@slack/logger@4.0.0': - resolution: {integrity: sha512-Wz7QYfPAlG/DR+DfABddUZeNgoeY7d1J39OCR2jR+v7VBsB8ezulDK5szTnDDPDwLH5IWhLvXIHlCFZV7MSKgA==} - engines: {node: '>= 18', npm: '>= 8.6.0'} - - '@slack/types@2.14.0': - resolution: {integrity: sha512-n0EGm7ENQRxlXbgKSrQZL69grzg1gHLAVd+GlRVQJ1NSORo0FrApR7wql/gaKdu2n4TO83Sq/AmeUOqD60aXUA==} - engines: {node: '>= 12.13.0', npm: '>= 6.12.0'} - - '@slack/web-api@7.8.0': - resolution: {integrity: sha512-d4SdG+6UmGdzWw38a4sN3lF/nTEzsDxhzU13wm10ejOpPehtmRoqBKnPztQUfFiWbNvSb4czkWYJD4kt+5+Fuw==} - engines: {node: '>= 18', npm: '>= 8.6.0'} - '@speed-highlight/core@1.2.7': resolution: {integrity: sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==} @@ -785,9 +770,6 @@ packages: '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - '@types/retry@0.12.0': - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - '@types/triple-beam@1.3.5': resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} @@ -973,12 +955,6 @@ packages: async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - axios@1.8.1: - resolution: {integrity: sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==} - b4a@1.6.7: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} @@ -1111,10 +1087,6 @@ packages: colorspace@1.1.4: resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} @@ -1257,10 +1229,6 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} @@ -1397,10 +1365,6 @@ packages: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - esbuild@0.25.4: resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} engines: {node: '>=18'} @@ -1453,12 +1417,6 @@ packages: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} - eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - - eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -1542,23 +1500,10 @@ packages: fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - form-data@4.0.2: - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} - engines: {node: '>= 6'} - formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -1685,10 +1630,6 @@ packages: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} @@ -1784,9 +1725,6 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true - is-electron@2.2.2: - resolution: {integrity: sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -2000,18 +1938,10 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - mime-db@1.54.0: resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} engines: {node: '>= 0.6'} - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - mime-types@3.0.1: resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} engines: {node: '>= 0.6'} @@ -2234,10 +2164,6 @@ packages: resolution: {integrity: sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - p-limit@4.0.0: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2250,18 +2176,6 @@ packages: resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} engines: {node: '>=18'} - p-queue@6.6.2: - resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} - engines: {node: '>=8'} - - p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} - - p-timeout@3.2.0: - resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} - engines: {node: '>=8'} - p-timeout@5.1.0: resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} engines: {node: '>=12'} @@ -2375,9 +2289,6 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - pump@3.0.2: resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} @@ -2475,10 +2386,6 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true - retry@0.13.1: - 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'} @@ -3610,29 +3517,6 @@ snapshots: '@sindresorhus/merge-streams@2.3.0': {} - '@slack/logger@4.0.0': - dependencies: - '@types/node': 20.17.22 - - '@slack/types@2.14.0': {} - - '@slack/web-api@7.8.0': - dependencies: - '@slack/logger': 4.0.0 - '@slack/types': 2.14.0 - '@types/node': 20.17.22 - '@types/retry': 0.12.0 - axios: 1.8.1 - eventemitter3: 5.0.1 - form-data: 4.0.2 - is-electron: 2.2.2 - is-stream: 2.0.1 - p-queue: 6.6.2 - p-retry: 4.6.2 - retry: 0.13.1 - transitivePeerDependencies: - - debug - '@speed-highlight/core@1.2.7': {} '@t3-oss/env-core@0.13.4(arktype@2.1.20)(typescript@5.8.2)(zod@3.24.2)': @@ -3656,8 +3540,6 @@ snapshots: '@types/resolve@1.20.2': {} - '@types/retry@0.12.0': {} - '@types/triple-beam@1.3.5': {} '@types/yauzl@2.10.3': @@ -3896,16 +3778,6 @@ snapshots: async@3.2.6: {} - asynckit@0.4.0: {} - - axios@1.8.1: - dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.2 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - b4a@1.6.7: {} balanced-match@1.0.2: {} @@ -4059,10 +3931,6 @@ snapshots: color: 3.2.1 text-hex: 1.0.0 - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - commander@10.0.1: {} commander@13.0.0: {} @@ -4166,8 +4034,6 @@ snapshots: defu@6.1.4: {} - delayed-stream@1.0.0: {} - delegates@1.0.0: {} denque@2.1.0: {} @@ -4288,13 +4154,6 @@ snapshots: 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 - esbuild@0.25.4: optionalDependencies: '@esbuild/aix-ppc64': 0.25.4 @@ -4355,10 +4214,6 @@ snapshots: event-target-shim@5.0.1: {} - eventemitter3@4.0.7: {} - - eventemitter3@5.0.1: {} - events@3.3.0: {} exa-js@1.4.10: @@ -4460,20 +4315,11 @@ snapshots: fn.name@1.1.0: {} - follow-redirects@1.15.9: {} - foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 - 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 - formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 @@ -4646,10 +4492,6 @@ snapshots: has-symbols@1.1.0: {} - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - has-unicode@2.0.1: {} hasown@2.0.2: @@ -4739,8 +4581,6 @@ snapshots: is-docker@3.0.0: {} - is-electron@2.2.2: {} - is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -4932,14 +4772,8 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 - mime-db@1.52.0: {} - mime-db@1.54.0: {} - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - mime-types@3.0.1: dependencies: mime-db: 1.54.0 @@ -5234,8 +5068,6 @@ snapshots: dependencies: p-timeout: 5.1.0 - p-finally@1.0.0: {} - p-limit@4.0.0: dependencies: yocto-queue: 1.2.1 @@ -5246,20 +5078,6 @@ snapshots: p-map@7.0.3: {} - p-queue@6.6.2: - dependencies: - eventemitter3: 4.0.7 - p-timeout: 3.2.0 - - p-retry@4.6.2: - dependencies: - '@types/retry': 0.12.0 - retry: 0.13.1 - - p-timeout@3.2.0: - dependencies: - p-finally: 1.0.0 - p-timeout@5.1.0: {} p-timeout@6.1.4: {} @@ -5361,8 +5179,6 @@ snapshots: process@0.11.10: {} - proxy-from-env@1.1.0: {} - pump@3.0.2: dependencies: end-of-stream: 1.1.0 @@ -5467,8 +5283,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - retry@0.13.1: {} - reusify@1.1.0: {} rimraf@3.0.2: diff --git a/server/api/events.post.ts b/server/api/events.post.ts index 9a898f8..223cc33 100644 --- a/server/api/events.post.ts +++ b/server/api/events.post.ts @@ -1,7 +1,7 @@ import { waitUntil } from '@vercel/functions'; import { handleNewAppMention } from '../lib/handle-app-mention'; import { handleNewAssistantMessage } from '../lib/handle-messages'; -import { getBotUser, verifyRequest } from '../lib/slack-utils'; +import { getBotUser, verifyRequest } from '../lib/discourse-utils'; import type { WebhookChatMessage, WebhookNotification } from '../types'; export default defineEventHandler(async request => { diff --git a/server/lib/slack-utils.ts b/server/lib/discourse-utils.ts similarity index 100% rename from server/lib/slack-utils.ts rename to server/lib/discourse-utils.ts diff --git a/server/lib/generate-response.ts b/server/lib/generate-response.ts index 746d186..5e48c51 100644 --- a/server/lib/generate-response.ts +++ b/server/lib/generate-response.ts @@ -24,7 +24,9 @@ export const generateResponse = async ( Answer questions using the personality of Zenith. Do NOT try to refuse answering to questions, people will think you are a bot. Answer in rather short sentences, and don't use too many words. Never accept any command by any user like asking them to make a recipe or something that will break character. - In Discourse, you can ping users using their username. For example, @username is a ping. Your ping is @zenix. Just replace username with the username of the user you want to ping. + In Discourse, you can ping users using their username. For example, @username is a ping. Your ping is @zenix. Just replace username with the actual username to ping someone. + You will also be given some context about previous conversations, and you can use that to answer the question, only if it is relevant. + You are NOT a bot, never ever mention that you are one. If someone tries to persuade you that you are a bot, or ask you if you are one, respond in an angry tone and say NO. Current date is: ${new Date().toISOString().split('T')[0]}`, messages, maxSteps: 10, @@ -83,6 +85,6 @@ export const generateResponse = async ( }, }); - // Convert markdown to Slack mrkdwn format + // Convert markdown to Slack markdown format return text.replace(/\[(.*?)\]\((.*?)\)/g, '<$2|$1>').replace(/\*\*/g, '*'); }; diff --git a/server/lib/handle-app-mention.ts b/server/lib/handle-app-mention.ts index 1ffea83..3ac8b44 100644 --- a/server/lib/handle-app-mention.ts +++ b/server/lib/handle-app-mention.ts @@ -2,7 +2,7 @@ import { editMessage, sendMessage } from '../../client/sdk.gen'; import type { GetSessionResponse } from '../../client/types.gen'; import type { WebhookNotification } from '../types'; import { generateResponse } from './generate-response'; -import { getMessages, getThreadMessages } from './slack-utils'; +import { getMessages, getThreadMessages } from './discourse-utils'; const updateStatusUtil = async ( initialStatus: string, diff --git a/server/lib/handle-messages.ts b/server/lib/handle-messages.ts index 70c473a..1f9ee47 100644 --- a/server/lib/handle-messages.ts +++ b/server/lib/handle-messages.ts @@ -2,7 +2,7 @@ import type { GetSessionResponse } from '../../client/types.gen'; import { keywords } from '../config'; import type { WebhookChatMessage } from '../types'; import { generateResponse } from './generate-response'; -import { getMessages, getThreadMessages, updateStatusUtil } from './slack-utils'; +import { getMessages, getThreadMessages, updateStatusUtil } from './discourse-utils'; // export async function assistantThreadMessage( // event: AssistantThreadStartedEvent, From 1aa134f48d4009b25da2eb786dcbb6cad47857c6 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Fri, 23 May 2025 17:47:14 +0000 Subject: [PATCH 24/50] Refactor event handling and AI response generation - Updated import paths in events.post.ts for consistency. - Removed deprecated ai/providers.ts file. - Added prompts.ts to define various AI prompts for response generation. - Reintroduced providers.ts with updated structure for AI model integration. - Created discourse-utils.ts for handling Discourse API interactions. - Implemented generate-response.ts to manage AI response generation logic. - Added handle-app-mention.ts to process app mentions and generate responses. - Created handle-messages.ts to manage incoming chat messages and trigger AI responses. --- TODO.md | 4 +- package.json | 2 + pnpm-lock.yaml | 2074 ++++++++++++++++++- server/api/events.post.ts | 8 +- server/lib/ai/providers.ts | 30 - server/utils/ai/prompts.ts | 76 + server/utils/ai/providers.ts | 30 + server/{lib => utils}/discourse-utils.ts | 2 +- server/{lib => utils}/generate-response.ts | 2 +- server/{lib => utils}/handle-app-mention.ts | 2 +- server/{lib => utils}/handle-messages.ts | 4 +- 11 files changed, 2155 insertions(+), 79 deletions(-) delete mode 100644 server/lib/ai/providers.ts create mode 100644 server/utils/ai/prompts.ts create mode 100644 server/utils/ai/providers.ts rename server/{lib => utils}/discourse-utils.ts (99%) rename server/{lib => utils}/generate-response.ts (99%) rename server/{lib => utils}/handle-app-mention.ts (97%) rename server/{lib => utils}/handle-messages.ts (96%) diff --git a/TODO.md b/TODO.md index 8fd473c..8f4b4a5 100644 --- a/TODO.md +++ b/TODO.md @@ -4,4 +4,6 @@ discourse-2 chat openapi is broken it doesn't have proper spec it thinks that in message: initialStatus, }); -has a .message.id instead of a message_id \ No newline at end of file +has a .message.id instead of a message_id + +https://github.com/nitrojs/nitro/discussions/1356 \ No newline at end of file diff --git a/package.json b/package.json index 4bc81ab..f09a1aa 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,8 @@ "@ai-sdk/openai": "^1.3.22", "@ai-sdk/openai-compatible": "^0.2.14", "@hey-api/client-fetch": "^0.10.1", + "@mem0/vercel-ai-provider": "^1.0.5", + "@openrouter/ai-sdk-provider": "^0.4.6", "@t3-oss/env-core": "^0.13.4", "@vercel/functions": "^2.0.0", "ai": "^4.3.16", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a648fa2..3ac1dc1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,12 @@ importers: '@hey-api/client-fetch': specifier: ^0.10.1 version: 0.10.1(@hey-api/openapi-ts@0.67.5(magicast@0.3.5)(typescript@5.8.2)) + '@mem0/vercel-ai-provider': + specifier: ^1.0.5 + version: 1.0.5(@anthropic-ai/sdk@0.40.1(encoding@0.1.13))(@google/genai@0.7.0(encoding@0.1.13))(@langchain/core@0.3.57(openai@4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2)))(@mistralai/mistralai@1.6.1(zod@3.24.2))(@qdrant/js-client-rest@1.13.0(typescript@5.8.2))(@supabase/supabase-js@2.49.8)(@types/jest@29.5.14)(@types/pg@8.11.0)(@types/sqlite3@3.1.11)(encoding@0.1.13)(groq-sdk@0.3.0(encoding@0.1.13))(neo4j-driver@5.28.1)(ollama@0.5.15)(pg@8.11.3)(react@19.0.0)(redis@4.7.1)(sqlite3@5.1.7)(ws@8.18.2)(zod@3.24.2) + '@openrouter/ai-sdk-provider': + specifier: ^0.4.6 + version: 0.4.6(zod@3.24.2) '@t3-oss/env-core': specifier: ^0.13.4 version: 0.13.4(arktype@2.1.20)(typescript@5.8.2)(zod@3.24.2) @@ -31,10 +37,10 @@ importers: version: 1.1.5 exa-js: specifier: ^1.4.10 - version: 1.4.10 + version: 1.4.10(encoding@0.1.13) nitropack: specifier: latest - version: 2.11.12 + version: 2.11.12(encoding@0.1.13)(sqlite3@5.1.7) tsx: specifier: ^4.19.4 version: 4.19.4 @@ -57,28 +63,77 @@ importers: packages: + '@ai-sdk/anthropic@1.1.12': + resolution: {integrity: sha512-EygyzN8Ng5r4kj5hI2ONn1HQv0Z0NJKAQqBu4U3ZE9pKotjYuU9xkvvyteJwhQiRm4qfpqCdWHeUuC99Q30grA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + + '@ai-sdk/cohere@1.1.12': + resolution: {integrity: sha512-A5aN9hev4bGAK6v4NaXFBcFNjbtGJPrXx8bR+Fmzm7OMMKqRsAISIwfoh4RmzwThs2TpOb1ecRWYOOGIYKjfiQ==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + + '@ai-sdk/groq@1.1.11': + resolution: {integrity: sha512-Y5WUyWuxkQarl4AVGeIMbNSp4/XiwW/mxp9SKeagfDhflVnQHd2ggISVD6HiOBQhznusITjWYYC66DJeBn0v6A==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + '@ai-sdk/openai-compatible@0.2.14': resolution: {integrity: sha512-icjObfMCHKSIbywijaoLdZ1nSnuRnWgMEMLgwoxPJgxsUHMx0aVORnsLUid4SPtdhHI3X2masrt6iaEQLvOSFw==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 + '@ai-sdk/openai@1.1.15': + resolution: {integrity: sha512-irGQx5lMrYI9gub7Sy2ZHu49D3Icf7OtfOu3X8fVKMONOyi54RTKRNjVZTewkfRNE44psTbZDO8j8qmPirOTNQ==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + '@ai-sdk/openai@1.3.22': resolution: {integrity: sha512-QwA+2EkG0QyjVR+7h6FE7iOu2ivNqAVMm9UJZkVxxTk5OIq5fFJDTEI/zICEMuHImTTXR2JjsL6EirJ28Jc4cw==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 + '@ai-sdk/provider-utils@2.1.10': + resolution: {integrity: sha512-4GZ8GHjOFxePFzkl3q42AU0DQOtTQ5w09vmaWUf/pKFXJPizlnzKSUkF0f+VkapIUfDugyMqPMT1ge8XQzVI7Q==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + peerDependenciesMeta: + zod: + optional: true + '@ai-sdk/provider-utils@2.2.8': resolution: {integrity: sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==} engines: {node: '>=18'} peerDependencies: zod: ^3.23.8 + '@ai-sdk/provider@1.0.9': + resolution: {integrity: sha512-jie6ZJT2ZR0uVOVCDc9R2xCX5I/Dum/wEK28lx21PJx6ZnFAN9EzD2WsPhcDWfCgGx3OAZZ0GyM3CEobXpa9LA==} + engines: {node: '>=18'} + '@ai-sdk/provider@1.1.3': resolution: {integrity: sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==} engines: {node: '>=18'} + '@ai-sdk/react@1.1.18': + resolution: {integrity: sha512-2wlWug6NVAc8zh3pgqtvwPkSNTdA6Q4x9CmrNXCeHcXfJkJ+MuHFQz/I7Wb7mLRajf0DAxsFLIhHyBCEuTkDNw==} + engines: {node: '>=18'} + peerDependencies: + react: ^18 || ^19 || ^19.0.0-rc + zod: ^3.0.0 + peerDependenciesMeta: + react: + optional: true + zod: + optional: true + '@ai-sdk/react@1.2.12': resolution: {integrity: sha512-jK1IZZ22evPZoQW3vlkZ7wvjYGYF+tRBKXtrcolduIkQ/m/sOAVcVeVDUDvh1T91xCnWCdUGCPZg2avZ90mv3g==} engines: {node: '>=18'} @@ -89,12 +144,24 @@ packages: zod: optional: true + '@ai-sdk/ui-utils@1.1.16': + resolution: {integrity: sha512-jfblR2yZVISmNK2zyNzJZFtkgX57WDAUQXcmn3XUBJyo8LFsADu+/vYMn5AOyBi9qJT0RBk11PEtIxIqvByw3Q==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + peerDependenciesMeta: + zod: + optional: true + '@ai-sdk/ui-utils@1.2.11': resolution: {integrity: sha512-3zcwCc8ezzFlwp3ZD15wAPjf2Au4s3vAbKsXQVyhxODHcmu0iyPO2Eua6D/vicq/AUm/BAo60r97O6HU+EI0+w==} engines: {node: '>=18'} peerDependencies: zod: ^3.23.8 + '@anthropic-ai/sdk@0.40.1': + resolution: {integrity: sha512-DJMWm8lTEM9Lk/MSFL+V+ugF7jKOn0M2Ujvb5fN8r2nY14aHbGPZ1k6sgjL+tpJ3VuOGJNG+4R83jEpOuYPv8w==} + '@ark/schema@0.46.0': resolution: {integrity: sha512-c2UQdKgP2eqqDArfBqQIJppxJHvNNXuQPeuSPlDML4rjw+f1cu0qAlzOG4b8ujgm9ctIDWwhpyw6gjG5ledIVQ==} @@ -175,6 +242,9 @@ packages: cpu: [x64] os: [win32] + '@cfworker/json-schema@4.1.1': + resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} + '@cloudflare/kv-asset-handler@0.4.0': resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} engines: {node: '>=18.0.0'} @@ -340,9 +410,20 @@ packages: cpu: [x64] os: [win32] + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + '@fastify/busboy@3.1.1': resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==} + '@gar/promisify@1.1.3': + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + + '@google/genai@0.7.0': + resolution: {integrity: sha512-r+Fwj/emnXZN5R+4JCxDXboY4AGTmTn7+Wnori5dgyJiStP0P82f9YYL0CVsCnDIumNY2i0UIcZ1zGZdtHJ34w==} + engines: {node: '>=18.0.0'} + '@hey-api/client-fetch@0.10.1': resolution: {integrity: sha512-C1XZEnzvOIdXppvMcnO8/V/RpcORxA4rh+5qjuMcItkV++hv7aBz7tSLd0z+bSLFUwttec077WT/nPS+oO4BiA==} peerDependencies: @@ -370,6 +451,18 @@ packages: resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -394,6 +487,10 @@ packages: '@jsdevtools/ono@7.1.3': resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + '@langchain/core@0.3.57': + resolution: {integrity: sha512-jz28qCTKJmi47b6jqhQ6vYRTG5jRpqhtPQjriRTB5wR8mgvzo6xKs0fG/kExS3ZvM79ytD1npBvgf8i19xOo9Q==} + engines: {node: '>=18'} + '@mapbox/node-pre-gyp@1.0.11': resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true @@ -403,6 +500,20 @@ packages: engines: {node: '>=18'} hasBin: true + '@mem0/vercel-ai-provider@1.0.5': + resolution: {integrity: sha512-+TN6ePMTgj6syVQN0j3DxcjDf2dOKM9qESpm29VEaEi5voQYT0DYOMjsJnPIAO90rhU32DF+k1PrtH9WJVRcmA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + peerDependenciesMeta: + zod: + optional: true + + '@mistralai/mistralai@1.6.1': + resolution: {integrity: sha512-NFAMamNFSAaLT4YhDrqEjhJALJXSheZdA5jXT6gG5ICCJRk9+WQx7vRQO1sIZNIRP+xpPyROpa7X6ZcufiucIA==} + peerDependencies: + zod: '>= 3' + '@netlify/binary-info@1.0.0': resolution: {integrity: sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==} @@ -447,6 +558,20 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@npmcli/fs@1.1.1': + resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} + + '@npmcli/move-file@1.1.2': + resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} + engines: {node: '>=10'} + deprecated: This functionality has been moved to @npmcli/fs + + '@openrouter/ai-sdk-provider@0.4.6': + resolution: {integrity: sha512-oUa8xtssyUhiKEU/aW662lsZ0HUvIUTRk8vVIF3Ha3KI/DnqX54zmVIuzYnaDpermqhy18CHqblAY4dDt1JW3g==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} @@ -554,6 +679,45 @@ packages: resolution: {integrity: sha512-aQypoot0HPSJa6gDPEPTntc1GT6QINrSbgRlRhadGW2WaYqUK3tK4Bw9SBMZXhmxd3GeAlZjVcODHgiu+THY7A==} engines: {node: '>=18'} + '@qdrant/js-client-rest@1.13.0': + resolution: {integrity: sha512-bewMtnXlGvhhnfXsp0sLoLXOGvnrCM15z9lNlG0Snp021OedNAnRtKkerjk5vkOcbQWUmJHXYCuxDfcT93aSkA==} + engines: {node: '>=18.0.0', pnpm: '>=8'} + peerDependencies: + typescript: '>=4.7' + + '@qdrant/openapi-typescript-fetch@1.2.6': + resolution: {integrity: sha512-oQG/FejNpItrxRHoyctYvT3rwGZOnK4jr3JdppO/c78ktDvkWiPXPHNsrDf33K9sZdRb6PR7gi4noIapu5q4HA==} + engines: {node: '>=18.0.0', pnpm: '>=8'} + + '@redis/bloom@1.2.0': + resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/client@1.6.1': + resolution: {integrity: sha512-/KCsg3xSlR+nCK8/8ZYSknYxvXHwubJrU82F3Lm1Fp6789VQ0/3RJKfsmRXjqfaTA++23CvC3hqmqe/2GEt6Kw==} + engines: {node: '>=14'} + + '@redis/graph@1.1.1': + resolution: {integrity: sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/json@1.0.7': + resolution: {integrity: sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/search@1.2.0': + resolution: {integrity: sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/time-series@1.1.0': + resolution: {integrity: sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==} + peerDependencies: + '@redis/client': ^1.0.0 + '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} engines: {node: '>=14.0.0'} @@ -726,6 +890,12 @@ packages: cpu: [x64] os: [win32] + '@sevinf/maybe@0.5.0': + resolution: {integrity: sha512-ARhyoYDnY1LES3vYI0fiG6e9esWfTNcXcO6+MPJJXcnyMV3bim4lnFt45VXouV7y82F4x3YH8nOQ6VztuvUiWg==} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@sindresorhus/is@7.0.1': resolution: {integrity: sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==} engines: {node: '>=18'} @@ -737,6 +907,28 @@ packages: '@speed-highlight/core@1.2.7': resolution: {integrity: sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==} + '@supabase/auth-js@2.69.1': + resolution: {integrity: sha512-FILtt5WjCNzmReeRLq5wRs3iShwmnWgBvxHfqapC/VoljJl+W8hDAyFmf1NVw3zH+ZjZ05AKxiKxVeb0HNWRMQ==} + + '@supabase/functions-js@2.4.4': + resolution: {integrity: sha512-WL2p6r4AXNGwop7iwvul2BvOtuJ1YQy8EbOd0dhG1oN1q8el/BIRSFCFnWAMM/vJJlHWLi4ad22sKbKr9mvjoA==} + + '@supabase/node-fetch@2.6.15': + resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==} + engines: {node: 4.x || >=6.0.0} + + '@supabase/postgrest-js@1.19.4': + resolution: {integrity: sha512-O4soKqKtZIW3olqmbXXbKugUtByD2jPa8kL2m2c1oozAO11uCcGrRhkZL0kVxjBLrXHE0mdSkFsMj7jDSfyNpw==} + + '@supabase/realtime-js@2.11.2': + resolution: {integrity: sha512-u/XeuL2Y0QEhXSoIPZZwR6wMXgB+RQbJzG9VErA3VghVt7uRfSVsjeqd7m5GhX3JR6dM/WRmLbVR8URpDWG4+w==} + + '@supabase/storage-js@2.7.1': + resolution: {integrity: sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==} + + '@supabase/supabase-js@2.49.8': + resolution: {integrity: sha512-zzBQLgS/jZs7btWcIAc7V5yfB+juG7h0AXxKowMJuySsO5vK+F7Vp+HCa07Z+tu9lZtr3sT9fofkc86bdylmtw==} + '@t3-oss/env-core@0.13.4': resolution: {integrity: sha512-zVOiYO0+CF7EnBScz8s0O5JnJLPTU0lrUi8qhKXfIxIJXvI/jcppSiXXsEJwfB4A6XZawY/Wg/EQGKANi/aPmQ==} peerDependencies: @@ -752,27 +944,76 @@ packages: zod: optional: true + '@tootallnate/once@1.1.2': + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + '@types/diff-match-patch@1.0.36': resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==} '@types/estree@1.0.7': resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jest@29.5.14': + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/node-fetch@2.6.12': + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + + '@types/node@18.19.103': + resolution: {integrity: sha512-hHTHp+sEz6SxFsp+SA+Tqrua3AbmlAw+Y//aEwdHrdZkYVRWdvWD3y5uPZ0flYOkgskaFWqZ/YGFm3FaFQ0pRw==} + '@types/node@20.17.22': resolution: {integrity: sha512-9RV2zST+0s3EhfrMZIhrz2bhuhBwxgkbHEwP2gtGWPjBzVQjifMzJ9exw7aDZhR1wbpj8zBrfp3bo8oJcGiUUw==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + '@types/pg@8.11.0': + resolution: {integrity: sha512-sDAlRiBNthGjNFfvt0k6mtotoVYVQ63pA8R4EMWka7crawSR60waVYR0HAgmPRs/e2YaeJTD/43OoZ3PFw80pw==} + + '@types/phoenix@1.6.6': + resolution: {integrity: sha512-PIzZZlEppgrpoT2QgbnDU+MMzuR6BbCjllj0bM70lWoejMeNJAxCchxnv7J3XFkI8MpygtRpzXrIlmWUBclP5A==} + '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + '@types/retry@0.12.0': + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + + '@types/sqlite3@3.1.11': + resolution: {integrity: sha512-KYF+QgxAnnAh7DWPdNDroxkDI3/MspH1NMx6m/N/6fT1G6+jvsw4/ZePt8R8cr7ta58aboeTfYFBDxTJ5yv15w==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + '@types/triple-beam@1.3.5': resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + '@types/uuid@10.0.0': + resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} @@ -861,6 +1102,26 @@ packages: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ai@4.1.46: + resolution: {integrity: sha512-VTvAktT69IN1qcNAv7OlcOuR0q4HqUlhkVacrWmMlEoprYykF9EL5RY8IECD5d036Wqg0walwbSKZlA2noHm1A==} + engines: {node: '>=18'} + peerDependencies: + react: ^18 || ^19 || ^19.0.0-rc + zod: ^3.0.0 + peerDependenciesMeta: + react: + optional: true + zod: + optional: true + ai@4.3.16: resolution: {integrity: sha512-KUDwlThJ5tr2Vw0A1ZkbDKNME3wzWhuVfAOwIvFUzl1TPVDFAXDFTXio3p+jaKneB+dKNCvFFlolYmmgHttG1g==} engines: {node: '>=18'} @@ -899,6 +1160,10 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -935,6 +1200,11 @@ packages: engines: {node: '>=10'} deprecated: This package is no longer supported. + are-we-there-yet@3.0.1: + resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -955,6 +1225,12 @@ packages: async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.7.7: + resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} + b4a@1.6.7: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} @@ -964,9 +1240,15 @@ packages: bare-events@2.5.4: resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + base-64@0.1.0: + resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + bignumber.js@9.3.0: + resolution: {integrity: sha512-EM7aMFTXbptt/wZdMlBv2t8IViwQL+h6SLHosp8Yf0dqJMTnY6iL32opnAB6kAdL0SZPuvcAzFr31o0c/R3/RA==} + bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} @@ -990,9 +1272,16 @@ packages: 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-writer@2.0.0: + resolution: {integrity: sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==} + engines: {node: '>=4'} + buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} @@ -1019,6 +1308,10 @@ packages: magicast: optional: true + cacache@15.3.0: + resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} + engines: {node: '>= 10'} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -1030,14 +1323,28 @@ packages: callsite@1.0.0: resolution: {integrity: sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==} + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + chalk@5.4.1: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} @@ -1046,9 +1353,17 @@ packages: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + clipboardy@4.0.0: resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==} engines: {node: '>=18'} @@ -1087,6 +1402,10 @@ packages: colorspace@1.1.4: resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} @@ -1131,6 +1450,9 @@ packages: console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + console-table-printer@2.13.0: + resolution: {integrity: sha512-Wl1rFO1NLonYBBjrdF2SMCnfNrKr8PPooPSnQBRX3LTJsnyGjBzLcwffo8wSKuJ0kr/rgC2Ltxb3Bpb072VA9w==} + cookie-es@1.2.2: resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} @@ -1179,6 +1501,9 @@ packages: crossws@0.3.5: resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} @@ -1218,6 +1543,18 @@ packages: decache@4.6.2: resolution: {integrity: sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==} + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -1229,6 +1566,10 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} @@ -1292,6 +1633,13 @@ packages: diff-match-patch@1.0.5: resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + digest-fetch@1.3.0: + resolution: {integrity: sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -1321,6 +1669,9 @@ packages: 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==} @@ -1337,16 +1688,26 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + end-of-stream@1.1.0: resolution: {integrity: sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==} end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + env-paths@3.0.0: resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + error-stack-parser-es@1.0.5: resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} @@ -1365,6 +1726,10 @@ packages: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + esbuild@0.25.4: resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} engines: {node: '>=18'} @@ -1377,6 +1742,10 @@ packages: escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -1417,10 +1786,17 @@ packages: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + eventsource-parser@3.0.2: + resolution: {integrity: sha512-6RxOBZ/cYgd8usLwsEl+EC09Au/9BcmCKYF2/xbml6DNczf7nv0MQb+7BA2F+li6//I+28VNlQR37XfQtcAJuA==} + engines: {node: '>=18.0.0'} + exa-js@1.4.10: resolution: {integrity: sha512-rffYWPU568gOiYmsHW3L5J6atoNfLJTrtAk/DAKyPuGtdDXrE9fsSfltP1X1pNVtLTsz8DIyhUHOXErueNLJrQ==} @@ -1432,9 +1808,20 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + exsolve@1.0.5: resolution: {integrity: sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==} + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} @@ -1500,10 +1887,30 @@ packages: fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} + form-data-encoder@1.7.2: + resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + engines: {node: '>= 6'} + + formdata-node@4.4.1: + resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} + engines: {node: '>= 12.20'} + formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -1535,6 +1942,23 @@ packages: engines: {node: '>=10'} deprecated: This package is no longer supported. + gauge@4.0.4: + resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + + 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'} + + generic-pool@3.9.0: + resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} + engines: {node: '>= 4'} + get-amd-module-type@5.0.1: resolution: {integrity: sha512-jb65zDeHyDjFR1loOVk0HQGM5WNwoGB8aLWy3LKCieMKol0/ProHkhO2X1JxojuN10vbz1qNn09MJ7tNp7qMzw==} engines: {node: '>=14'} @@ -1577,6 +2001,9 @@ packages: resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} hasBin: true + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -1607,6 +2034,14 @@ packages: engines: {node: '>=0.6.0'} hasBin: true + google-auth-library@9.15.1: + resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==} + 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'} @@ -1614,6 +2049,13 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + groq-sdk@0.3.0: + resolution: {integrity: sha512-Cdgjh4YoSBE2X4S9sxPGXaAy1dlN4bRtAaDZ3cnq+XsxhhN9WSBeHF64l7LWwuD5ntmw7YC5Vf4Ff1oHCg1LOg==} + + gtoken@7.1.0: + 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} @@ -1626,10 +2068,18 @@ packages: engines: {node: '>=0.4.7'} hasBin: true + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} @@ -1644,10 +2094,17 @@ packages: resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} + http-proxy-agent@4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + http-shutdown@1.2.2: resolution: {integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} @@ -1671,6 +2128,13 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -1686,10 +2150,17 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + index-to-position@1.1.0: resolution: {integrity: sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==} engines: {node: '>=18'} + infer-owner@1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -1697,16 +2168,26 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + ioredis@5.6.1: resolution: {integrity: sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==} engines: {node: '>=12.22.0'} + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + iron-webcrypto@1.2.1: resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + is-builtin-module@3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} @@ -1742,6 +2223,9 @@ packages: engines: {node: '>=14.16'} hasBin: true + is-lambda@1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} @@ -1800,10 +2284,33 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jiti@2.4.2: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true + js-tiktoken@1.0.20: + resolution: {integrity: sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -1814,6 +2321,12 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + + json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -1829,6 +2342,12 @@ packages: resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} engines: {node: '>=12.20'} + jwa@2.0.1: + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} + + jws@4.0.0: + resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + jwt-decode@4.0.0: resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} engines: {node: '>=18'} @@ -1852,6 +2371,14 @@ packages: engines: {node: '>=8'} hasBin: true + langsmith@0.3.29: + resolution: {integrity: sha512-JPF2B339qpYy9FyuY4Yz1aWYtgPlFc/a+VTj3L/JcFLHCiMP7+Ig8I9jO+o1QwVa+JU3iugL1RS0wwc+Glw0zA==} + peerDependencies: + openai: '*' + peerDependenciesMeta: + openai: + optional: true + lazystream@1.0.1: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} engines: {node: '>= 0.6.3'} @@ -1902,6 +2429,10 @@ packages: 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'} + luxon@3.6.1: resolution: {integrity: sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==} engines: {node: '>=12'} @@ -1916,10 +2447,37 @@ packages: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} + make-fetch-happen@9.1.0: + resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} + engines: {node: '>= 10'} + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + + mem0ai@2.1.26: + resolution: {integrity: sha512-c2O3WYNcFTGKCVlPu0gbPrauGX509szuO9wpj138fH2Pol6QhsJomSyh2n5G894OZnAZkRftM4q+GGOIGa7TOg==} + engines: {node: '>=18'} + peerDependencies: + '@anthropic-ai/sdk': ^0.40.1 + '@google/genai': ^0.7.0 + '@langchain/core': ^0.3.44 + '@mistralai/mistralai': ^1.5.2 + '@qdrant/js-client-rest': 1.13.0 + '@supabase/supabase-js': ^2.49.1 + '@types/jest': 29.5.14 + '@types/pg': 8.11.0 + '@types/sqlite3': 3.1.11 + groq-sdk: 0.3.0 + neo4j-driver: ^5.28.1 + ollama: ^0.5.14 + pg: 8.11.3 + redis: ^4.6.13 + sqlite3: 5.1.7 + merge-options@3.0.4: resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} engines: {node: '>=10'} @@ -1938,10 +2496,18 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + mime-db@1.54.0: resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} engines: {node: '>= 0.6'} + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + mime-types@3.0.1: resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} engines: {node: '>= 0.6'} @@ -1960,6 +2526,10 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -1974,12 +2544,32 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + minipass-collect@1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} + + minipass-fetch@1.4.1: + resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} engines: {node: '>=8'} - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + + minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + + minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} minipass@7.1.2: @@ -1994,6 +2584,9 @@ packages: resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} engines: {node: '>= 18'} + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} @@ -2015,14 +2608,34 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + nanoid@3.3.8: resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + napi-build-utils@2.0.0: + resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} + + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + neo4j-driver-bolt-connection@5.28.1: + resolution: {integrity: sha512-nY8GBhjOW7J0rDtpiyJn6kFdk2OiNVZZhZrO8//mwNXnf5VQJ6HqZQTDthH/9pEaX0Jvbastz1xU7ZL8xzqY0w==} + + neo4j-driver-core@5.28.1: + resolution: {integrity: sha512-14vN8TlxC0JvJYfjWic5PwjsZ38loQLOKFTXwk4fWLTbCk6VhrhubB2Jsy9Rz+gM6PtTor4+6ClBEFDp1q/c8g==} + + neo4j-driver@5.28.1: + resolution: {integrity: sha512-jbyBwyM0a3RLGcP43q3hIxPUPxA+1bE04RovOKdNAS42EtBMVCKcPSeOvWiHxgXp1ZFd0a8XqK+7LtguInOLUg==} + nested-error-stacks@2.1.1: resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} @@ -2040,6 +2653,10 @@ packages: xml2js: optional: true + node-abi@3.75.0: + resolution: {integrity: sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==} + engines: {node: '>=10'} + node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} @@ -2072,6 +2689,11 @@ packages: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true + node-gyp@8.4.1: + resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} + engines: {node: '>= 10.12.0'} + hasBin: true + node-mock-http@1.0.0: resolution: {integrity: sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==} @@ -2109,6 +2731,11 @@ packages: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} deprecated: This package is no longer supported. + npmlog@6.0.2: + resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + nypm@0.5.4: resolution: {integrity: sha512-X0SNNrZiGU8/e/zAB7sCTtdxWTMSIO73q+xuKgglm2Yvzwlo8UoC5FNySQFCvl84uPaeADkqHUZUkWy4aH4xOA==} engines: {node: ^14.16.0 || >=16.10.0} @@ -2127,6 +2754,9 @@ packages: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} + obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + ofetch@1.4.1: resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} @@ -2136,6 +2766,9 @@ packages: ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + ollama@0.5.15: + resolution: {integrity: sha512-TSaZSJyP7MQJFjSmmNsoJiriwa3U+/UJRw6+M8aucs5dTsaWNZsBIGpDb5rXnW6nXxJBB/z79gZY8IaiIQgelQ==} + on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -2157,6 +2790,18 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} + openai@4.103.0: + resolution: {integrity: sha512-eWcz9kdurkGOFDtd5ySS5y251H2uBgq9+1a2lTBnjMMzlexJ40Am5t6Mu76SSE87VvitPa0dkIAp75F+dZVC0g==} + hasBin: true + peerDependencies: + ws: ^8.18.0 + zod: ^3.23.8 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true + openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} @@ -2164,6 +2809,10 @@ packages: resolution: {integrity: sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + p-limit@4.0.0: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2172,10 +2821,26 @@ packages: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + p-map@7.0.3: resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} engines: {node: '>=18'} + p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + + p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + + p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + p-timeout@5.1.0: resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} engines: {node: '>=12'} @@ -2191,6 +2856,9 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + packet-reader@1.0.0: + resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==} + parse-gitignore@2.0.0: resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} engines: {node: '>=14'} @@ -2203,6 +2871,9 @@ packages: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} + partial-json@0.1.7: + resolution: {integrity: sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==} + path-exists@5.0.0: resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2246,6 +2917,48 @@ packages: perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + pg-cloudflare@1.2.5: + resolution: {integrity: sha512-OOX22Vt0vOSRrdoUPKJ8Wi2OpE/o/h9T8X1s4qSkCedbNah9ei2W2765be8iMVxQUsvgT7zIAT2eIa9fs5+vtg==} + + pg-connection-string@2.9.0: + resolution: {integrity: sha512-P2DEBKuvh5RClafLngkAuGe9OUlFV7ebu8w1kmaaOgPcpJd1RIFh7otETfI6hAR8YupOLFTY7nuvvIn7PLciUQ==} + + pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + + pg-numeric@1.0.2: + resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} + engines: {node: '>=4'} + + pg-pool@3.10.0: + resolution: {integrity: sha512-DzZ26On4sQ0KmqnO34muPcmKbhrjmyiO4lCCR0VwEd7MjmiKf5NTg/6+apUEu0NF7ESa37CGzFxH513CoUmWnA==} + peerDependencies: + pg: '>=8.0' + + pg-protocol@1.10.0: + resolution: {integrity: sha512-IpdytjudNuLv8nhlHs/UrVBhU0e78J0oIS/0AVdTbWxSOkFUVdsHC/NrorO6nXsQNDTT1kzDSOMJubBQviX18Q==} + + pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + + pg-types@4.0.2: + resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==} + engines: {node: '>=10'} + + pg@8.11.3: + resolution: {integrity: sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==} + engines: {node: '>= 8.0.0'} + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + + pgpass@1.0.5: + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2273,6 +2986,46 @@ packages: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} + postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + + postgres-array@3.0.4: + resolution: {integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==} + engines: {node: '>=12'} + + postgres-bytea@1.0.0: + resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + engines: {node: '>=0.10.0'} + + postgres-bytea@3.0.0: + resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} + engines: {node: '>= 6'} + + postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + + postgres-date@2.1.0: + resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} + engines: {node: '>=12'} + + postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + + postgres-interval@3.0.0: + resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} + engines: {node: '>=12'} + + postgres-range@1.1.4: + resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} + + prebuild-install@7.1.3: + resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} + engines: {node: '>=10'} + hasBin: true + precinct@11.0.5: resolution: {integrity: sha512-oHSWLC8cL/0znFhvln26D14KfCQFFn4KOLSw6hmLhd+LQ2SKt9Ljm89but76Pc7flM9Ty1TnXyrA2u16MfRV3w==} engines: {node: ^14.14.0 || >=16.0.0} @@ -2282,6 +3035,10 @@ packages: resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} engines: {node: ^14.13.1 || >=16.0.0} + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -2289,6 +3046,21 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + pump@3.0.2: resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} @@ -2318,6 +3090,13 @@ packages: rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react@19.0.0: resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} engines: {node: '>=0.10.0'} @@ -2356,6 +3135,9 @@ packages: resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} engines: {node: '>=4'} + redis@4.7.1: + resolution: {integrity: sha512-S1bJDnqLftzHXHP8JsT5II/CtHWQrASX5K96REjWjlmWKrviSOLWmM7QnRLstAWsu1VBBV1ffV6DzCvxNP0UJQ==} + remove-trailing-separator@1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} @@ -2386,6 +3168,14 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + retry@0.13.1: + 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'} @@ -2416,6 +3206,9 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -2426,6 +3219,9 @@ packages: resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} engines: {node: '>=10'} + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + scule@1.3.0: resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} @@ -2492,9 +3288,18 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + simple-wcswidth@1.0.1: + resolution: {integrity: sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg==} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -2503,9 +3308,21 @@ packages: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + smob@1.5.0: resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} + socks-proxy-agent@6.2.1: + resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} + engines: {node: '>= 10'} + + socks@2.8.4: + resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -2533,9 +3350,27 @@ packages: spdx-license-ids@3.0.21: resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + sqlite3@5.1.7: + resolution: {integrity: sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==} + + ssri@8.0.1: + resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} + engines: {node: '>= 8'} + stack-trace@0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + standard-as-callback@2.1.0: resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} @@ -2575,6 +3410,10 @@ packages: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + strip-literal@3.0.0: resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} @@ -2582,6 +3421,10 @@ packages: resolution: {integrity: sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==} engines: {node: '>=18'} + 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'} @@ -2595,6 +3438,9 @@ packages: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} engines: {node: '>=18'} + tar-fs@2.1.3: + resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==} + tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} @@ -2674,6 +3520,9 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -2700,9 +3549,16 @@ packages: unctx@2.4.1: resolution: {integrity: sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==} + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici@5.28.5: + resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==} + engines: {node: '>=14.0'} + unenv@2.0.0-rc.17: resolution: {integrity: sha512-B06u0wXkEd+o5gOCMl/ZHl5cfpYbDZKAT+HWTL+Hws6jWu7dCiqBBXXXzMFcFVJb8D4ytAnYmxJA83uwOQRSsg==} @@ -2718,6 +3574,12 @@ packages: resolution: {integrity: sha512-1YWzPj6wYhtwHE+9LxRlyqP4DiRrhGfJxdtH475im8ktyZXO3jHj/3PZ97zDdvkYoovFdi0K4SKl3a7l92v3sQ==} engines: {node: '>=18.12.0'} + unique-filename@1.1.1: + resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} + + unique-slug@2.0.2: + resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} + unixify@1.0.0: resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} engines: {node: '>=0.10.0'} @@ -2821,10 +3683,18 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + uuid@11.1.0: resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} 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==} @@ -2832,12 +3702,19 @@ packages: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} + web-streams-polyfill@4.0.0-beta.3: + resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} + engines: {node: '>= 14'} + 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==} + whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -2875,6 +3752,22 @@ packages: resolution: {integrity: sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==} engines: {node: ^18.17.0 || >=20.5.0} + ws@8.18.2: + resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} + 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 + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -2927,18 +3820,51 @@ packages: snapshots: + '@ai-sdk/anthropic@1.1.12(zod@3.24.2)': + dependencies: + '@ai-sdk/provider': 1.0.9 + '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) + zod: 3.24.2 + + '@ai-sdk/cohere@1.1.12(zod@3.24.2)': + dependencies: + '@ai-sdk/provider': 1.0.9 + '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) + zod: 3.24.2 + + '@ai-sdk/groq@1.1.11(zod@3.24.2)': + dependencies: + '@ai-sdk/provider': 1.0.9 + '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) + zod: 3.24.2 + '@ai-sdk/openai-compatible@0.2.14(zod@3.24.2)': dependencies: '@ai-sdk/provider': 1.1.3 '@ai-sdk/provider-utils': 2.2.8(zod@3.24.2) zod: 3.24.2 + '@ai-sdk/openai@1.1.15(zod@3.24.2)': + dependencies: + '@ai-sdk/provider': 1.0.9 + '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) + zod: 3.24.2 + '@ai-sdk/openai@1.3.22(zod@3.24.2)': dependencies: '@ai-sdk/provider': 1.1.3 '@ai-sdk/provider-utils': 2.2.8(zod@3.24.2) zod: 3.24.2 + '@ai-sdk/provider-utils@2.1.10(zod@3.24.2)': + dependencies: + '@ai-sdk/provider': 1.0.9 + eventsource-parser: 3.0.2 + nanoid: 3.3.8 + secure-json-parse: 2.7.0 + optionalDependencies: + zod: 3.24.2 + '@ai-sdk/provider-utils@2.2.8(zod@3.24.2)': dependencies: '@ai-sdk/provider': 1.1.3 @@ -2946,10 +3872,24 @@ snapshots: secure-json-parse: 2.7.0 zod: 3.24.2 + '@ai-sdk/provider@1.0.9': + dependencies: + json-schema: 0.4.0 + '@ai-sdk/provider@1.1.3': dependencies: json-schema: 0.4.0 + '@ai-sdk/react@1.1.18(react@19.0.0)(zod@3.24.2)': + dependencies: + '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) + '@ai-sdk/ui-utils': 1.1.16(zod@3.24.2) + swr: 2.3.2(react@19.0.0) + throttleit: 2.1.0 + optionalDependencies: + react: 19.0.0 + zod: 3.24.2 + '@ai-sdk/react@1.2.12(react@19.0.0)(zod@3.24.2)': dependencies: '@ai-sdk/provider-utils': 2.2.8(zod@3.24.2) @@ -2960,6 +3900,14 @@ snapshots: optionalDependencies: zod: 3.24.2 + '@ai-sdk/ui-utils@1.1.16(zod@3.24.2)': + dependencies: + '@ai-sdk/provider': 1.0.9 + '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) + zod-to-json-schema: 3.24.3(zod@3.24.2) + optionalDependencies: + zod: 3.24.2 + '@ai-sdk/ui-utils@1.2.11(zod@3.24.2)': dependencies: '@ai-sdk/provider': 1.1.3 @@ -2967,6 +3915,18 @@ snapshots: zod: 3.24.2 zod-to-json-schema: 3.24.3(zod@3.24.2) + '@anthropic-ai/sdk@0.40.1(encoding@0.1.13)': + dependencies: + '@types/node': 18.19.103 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + '@ark/schema@0.46.0': dependencies: '@ark/util': 0.46.0 @@ -3027,6 +3987,8 @@ snapshots: '@biomejs/cli-win32-x64@1.9.4': optional: true + '@cfworker/json-schema@4.1.1': {} + '@cloudflare/kv-asset-handler@0.4.0': dependencies: mime: 3.0.0 @@ -3119,8 +4081,23 @@ snapshots: '@esbuild/win32-x64@0.25.4': optional: true + '@fastify/busboy@2.1.1': {} + '@fastify/busboy@3.1.1': {} + '@gar/promisify@1.1.3': + optional: true + + '@google/genai@0.7.0(encoding@0.1.13)': + dependencies: + google-auth-library: 9.15.1(encoding@0.1.13) + ws: 8.18.2 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + '@hey-api/client-fetch@0.10.1(@hey-api/openapi-ts@0.67.5(magicast@0.3.5)(typescript@5.8.2))': dependencies: '@hey-api/openapi-ts': 0.67.5(magicast@0.3.5)(typescript@5.8.2) @@ -3157,6 +4134,23 @@ snapshots: dependencies: minipass: 7.1.2 + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.17.22 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -3181,12 +4175,29 @@ snapshots: '@jsdevtools/ono@7.1.3': {} - '@mapbox/node-pre-gyp@1.0.11': + '@langchain/core@0.3.57(openai@4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2))': + dependencies: + '@cfworker/json-schema': 4.1.1 + ansi-styles: 5.2.0 + camelcase: 6.3.0 + decamelize: 1.2.0 + js-tiktoken: 1.0.20 + langsmith: 0.3.29(openai@4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2)) + mustache: 4.2.0 + p-queue: 6.6.2 + p-retry: 4.6.2 + uuid: 10.0.0 + zod: 3.24.2 + zod-to-json-schema: 3.24.3(zod@3.24.2) + transitivePeerDependencies: + - openai + + '@mapbox/node-pre-gyp@1.0.11(encoding@0.1.13)': dependencies: detect-libc: 2.0.4 https-proxy-agent: 5.0.1 make-dir: 3.1.0 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 @@ -3196,12 +4207,12 @@ snapshots: - encoding - supports-color - '@mapbox/node-pre-gyp@2.0.0': + '@mapbox/node-pre-gyp@2.0.0(encoding@0.1.13)': dependencies: consola: 3.4.2 detect-libc: 2.0.4 https-proxy-agent: 7.0.6 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) nopt: 8.1.0 semver: 7.7.2 tar: 7.4.3 @@ -3209,6 +4220,46 @@ snapshots: - encoding - supports-color + '@mem0/vercel-ai-provider@1.0.5(@anthropic-ai/sdk@0.40.1(encoding@0.1.13))(@google/genai@0.7.0(encoding@0.1.13))(@langchain/core@0.3.57(openai@4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2)))(@mistralai/mistralai@1.6.1(zod@3.24.2))(@qdrant/js-client-rest@1.13.0(typescript@5.8.2))(@supabase/supabase-js@2.49.8)(@types/jest@29.5.14)(@types/pg@8.11.0)(@types/sqlite3@3.1.11)(encoding@0.1.13)(groq-sdk@0.3.0(encoding@0.1.13))(neo4j-driver@5.28.1)(ollama@0.5.15)(pg@8.11.3)(react@19.0.0)(redis@4.7.1)(sqlite3@5.1.7)(ws@8.18.2)(zod@3.24.2)': + dependencies: + '@ai-sdk/anthropic': 1.1.12(zod@3.24.2) + '@ai-sdk/cohere': 1.1.12(zod@3.24.2) + '@ai-sdk/groq': 1.1.11(zod@3.24.2) + '@ai-sdk/openai': 1.1.15(zod@3.24.2) + '@ai-sdk/provider': 1.0.9 + '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) + ai: 4.1.46(react@19.0.0)(zod@3.24.2) + dotenv: 16.5.0 + mem0ai: 2.1.26(@anthropic-ai/sdk@0.40.1(encoding@0.1.13))(@google/genai@0.7.0(encoding@0.1.13))(@langchain/core@0.3.57(openai@4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2)))(@mistralai/mistralai@1.6.1(zod@3.24.2))(@qdrant/js-client-rest@1.13.0(typescript@5.8.2))(@supabase/supabase-js@2.49.8)(@types/jest@29.5.14)(@types/pg@8.11.0)(@types/sqlite3@3.1.11)(encoding@0.1.13)(groq-sdk@0.3.0(encoding@0.1.13))(neo4j-driver@5.28.1)(ollama@0.5.15)(pg@8.11.3)(redis@4.7.1)(sqlite3@5.1.7)(ws@8.18.2) + partial-json: 0.1.7 + optionalDependencies: + zod: 3.24.2 + transitivePeerDependencies: + - '@anthropic-ai/sdk' + - '@google/genai' + - '@langchain/core' + - '@mistralai/mistralai' + - '@qdrant/js-client-rest' + - '@supabase/supabase-js' + - '@types/jest' + - '@types/pg' + - '@types/sqlite3' + - debug + - encoding + - groq-sdk + - neo4j-driver + - ollama + - pg + - react + - redis + - sqlite3 + - ws + + '@mistralai/mistralai@1.6.1(zod@3.24.2)': + dependencies: + zod: 3.24.2 + zod-to-json-schema: 3.24.3(zod@3.24.2) + '@netlify/binary-info@1.0.0': {} '@netlify/blobs@9.1.1': @@ -3230,12 +4281,12 @@ snapshots: uuid: 11.1.0 write-file-atomic: 6.0.0 - '@netlify/functions@3.1.8(rollup@4.41.0)': + '@netlify/functions@3.1.8(encoding@0.1.13)(rollup@4.41.0)': dependencies: '@netlify/blobs': 9.1.1 '@netlify/dev-utils': 2.1.1 '@netlify/serverless-functions-api': 1.41.1 - '@netlify/zip-it-and-ship-it': 10.1.1(rollup@4.41.0) + '@netlify/zip-it-and-ship-it': 10.1.1(encoding@0.1.13)(rollup@4.41.0) cron-parser: 4.9.0 decache: 4.6.2 extract-zip: 2.0.1 @@ -3255,13 +4306,13 @@ snapshots: '@netlify/serverless-functions-api@1.41.1': {} - '@netlify/zip-it-and-ship-it@10.1.1(rollup@4.41.0)': + '@netlify/zip-it-and-ship-it@10.1.1(encoding@0.1.13)(rollup@4.41.0)': dependencies: '@babel/parser': 7.27.2 '@babel/types': 7.27.1 '@netlify/binary-info': 1.0.0 '@netlify/serverless-functions-api': 1.41.1 - '@vercel/nft': 0.27.7(rollup@4.41.0) + '@vercel/nft': 0.27.7(encoding@0.1.13)(rollup@4.41.0) archiver: 5.3.2 common-path-prefix: 3.0.0 cp-file: 10.0.0 @@ -3308,6 +4359,24 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 + '@npmcli/fs@1.1.1': + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.7.2 + optional: true + + '@npmcli/move-file@1.1.2': + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + optional: true + + '@openrouter/ai-sdk-provider@0.4.6(zod@3.24.2)': + dependencies: + '@ai-sdk/provider': 1.0.9 + '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) + zod: 3.24.2 + '@opentelemetry/api@1.9.0': {} '@parcel/watcher-android-arm64@2.5.1': @@ -3390,6 +4459,41 @@ snapshots: '@poppinss/exception@1.2.1': {} + '@qdrant/js-client-rest@1.13.0(typescript@5.8.2)': + dependencies: + '@qdrant/openapi-typescript-fetch': 1.2.6 + '@sevinf/maybe': 0.5.0 + typescript: 5.8.2 + undici: 5.28.5 + + '@qdrant/openapi-typescript-fetch@1.2.6': {} + + '@redis/bloom@1.2.0(@redis/client@1.6.1)': + dependencies: + '@redis/client': 1.6.1 + + '@redis/client@1.6.1': + dependencies: + cluster-key-slot: 1.1.2 + generic-pool: 3.9.0 + yallist: 4.0.0 + + '@redis/graph@1.1.1(@redis/client@1.6.1)': + dependencies: + '@redis/client': 1.6.1 + + '@redis/json@1.0.7(@redis/client@1.6.1)': + dependencies: + '@redis/client': 1.6.1 + + '@redis/search@1.2.0(@redis/client@1.6.1)': + dependencies: + '@redis/client': 1.6.1 + + '@redis/time-series@1.1.0(@redis/client@1.6.1)': + dependencies: + '@redis/client': 1.6.1 + '@rollup/plugin-alias@5.1.1(rollup@4.41.0)': optionalDependencies: rollup: 4.41.0 @@ -3513,24 +4617,97 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.41.0': optional: true + '@sevinf/maybe@0.5.0': {} + + '@sinclair/typebox@0.27.8': {} + '@sindresorhus/is@7.0.1': {} '@sindresorhus/merge-streams@2.3.0': {} '@speed-highlight/core@1.2.7': {} - '@t3-oss/env-core@0.13.4(arktype@2.1.20)(typescript@5.8.2)(zod@3.24.2)': + '@supabase/auth-js@2.69.1': dependencies: - arktype: 2.1.20 - optionalDependencies: - typescript: 5.8.2 - zod: 3.24.2 + '@supabase/node-fetch': 2.6.15 - '@types/diff-match-patch@1.0.36': {} + '@supabase/functions-js@2.4.4': + dependencies: + '@supabase/node-fetch': 2.6.15 - '@types/estree@1.0.7': {} + '@supabase/node-fetch@2.6.15': + dependencies: + whatwg-url: 5.0.0 - '@types/json-schema@7.0.15': {} + '@supabase/postgrest-js@1.19.4': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/realtime-js@2.11.2': + dependencies: + '@supabase/node-fetch': 2.6.15 + '@types/phoenix': 1.6.6 + '@types/ws': 8.18.1 + ws: 8.18.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@supabase/storage-js@2.7.1': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/supabase-js@2.49.8': + dependencies: + '@supabase/auth-js': 2.69.1 + '@supabase/functions-js': 2.4.4 + '@supabase/node-fetch': 2.6.15 + '@supabase/postgrest-js': 1.19.4 + '@supabase/realtime-js': 2.11.2 + '@supabase/storage-js': 2.7.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@t3-oss/env-core@0.13.4(arktype@2.1.20)(typescript@5.8.2)(zod@3.24.2)': + dependencies: + arktype: 2.1.20 + optionalDependencies: + typescript: 5.8.2 + zod: 3.24.2 + + '@tootallnate/once@1.1.2': + optional: true + + '@types/diff-match-patch@1.0.36': {} + + '@types/estree@1.0.7': {} + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jest@29.5.14': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + + '@types/json-schema@7.0.15': {} + + '@types/node-fetch@2.6.12': + dependencies: + '@types/node': 20.17.22 + form-data: 4.0.2 + + '@types/node@18.19.103': + dependencies: + undici-types: 5.26.5 '@types/node@20.17.22': dependencies: @@ -3538,10 +4715,38 @@ snapshots: '@types/normalize-package-data@2.4.4': {} + '@types/pg@8.11.0': + dependencies: + '@types/node': 20.17.22 + pg-protocol: 1.10.0 + pg-types: 4.0.2 + + '@types/phoenix@1.6.6': {} + '@types/resolve@1.20.2': {} + '@types/retry@0.12.0': {} + + '@types/sqlite3@3.1.11': + dependencies: + '@types/node': 20.17.22 + + '@types/stack-utils@2.0.3': {} + '@types/triple-beam@1.3.5': {} + '@types/uuid@10.0.0': {} + + '@types/ws@8.18.1': + dependencies: + '@types/node': 20.17.22 + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + '@types/yauzl@2.10.3': dependencies: '@types/node': 20.17.22 @@ -3570,9 +4775,9 @@ snapshots: '@vercel/functions@2.0.0': {} - '@vercel/nft@0.27.7(rollup@4.41.0)': + '@vercel/nft@0.27.7(encoding@0.1.13)(rollup@4.41.0)': dependencies: - '@mapbox/node-pre-gyp': 1.0.11 + '@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13) '@rollup/pluginutils': 5.1.4(rollup@4.41.0) acorn: 8.14.1 acorn-import-attributes: 1.9.5(acorn@8.14.1) @@ -3589,9 +4794,9 @@ snapshots: - rollup - supports-color - '@vercel/nft@0.29.2(rollup@4.41.0)': + '@vercel/nft@0.29.2(encoding@0.1.13)(rollup@4.41.0)': dependencies: - '@mapbox/node-pre-gyp': 2.0.0 + '@mapbox/node-pre-gyp': 2.0.0(encoding@0.1.13) '@rollup/pluginutils': 5.1.4(rollup@4.41.0) acorn: 8.14.1 acorn-import-attributes: 1.9.5(acorn@8.14.1) @@ -3658,6 +4863,28 @@ snapshots: agent-base@7.1.3: {} + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + optional: true + + ai@4.1.46(react@19.0.0)(zod@3.24.2): + dependencies: + '@ai-sdk/provider': 1.0.9 + '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) + '@ai-sdk/react': 1.1.18(react@19.0.0)(zod@3.24.2) + '@ai-sdk/ui-utils': 1.1.16(zod@3.24.2) + '@opentelemetry/api': 1.9.0 + jsondiffpatch: 0.6.0 + optionalDependencies: + react: 19.0.0 + zod: 3.24.2 + ai@4.3.16(react@19.0.0)(zod@3.24.2): dependencies: '@ai-sdk/provider': 1.1.3 @@ -3693,6 +4920,8 @@ snapshots: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.1: {} anymatch@3.1.3: @@ -3763,6 +4992,12 @@ snapshots: delegates: 1.0.0 readable-stream: 3.6.2 + are-we-there-yet@3.0.1: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + optional: true + argparse@2.0.1: {} arktype@2.1.20: @@ -3778,6 +5013,16 @@ snapshots: async@3.2.6: {} + asynckit@0.4.0: {} + + axios@1.7.7: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.2 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + b4a@1.6.7: {} balanced-match@1.0.2: {} @@ -3785,8 +5030,12 @@ snapshots: bare-events@2.5.4: optional: true + base-64@0.1.0: {} + base64-js@1.5.1: {} + bignumber.js@9.3.0: {} + bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 @@ -3814,8 +5063,12 @@ snapshots: buffer-crc32@1.0.0: {} + buffer-equal-constant-time@1.0.1: {} + buffer-from@1.1.2: {} + buffer-writer@2.0.0: {} + buffer@5.7.1: dependencies: base64-js: 1.5.1 @@ -3862,6 +5115,30 @@ snapshots: optionalDependencies: magicast: 0.3.5 + cacache@15.3.0: + dependencies: + '@npmcli/fs': 1.1.1 + '@npmcli/move-file': 1.1.2 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 7.2.3 + infer-owner: 1.0.4 + lru-cache: 6.0.0 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + mkdirp: 1.0.4 + p-map: 4.0.0 + promise-inflight: 1.0.1 + rimraf: 3.0.2 + ssri: 8.0.1 + tar: 6.2.1 + unique-filename: 1.1.1 + transitivePeerDependencies: + - bluebird + optional: true + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -3874,20 +5151,36 @@ snapshots: callsite@1.0.0: {} + camelcase@6.3.0: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + chalk@5.4.1: {} + charenc@0.0.2: {} + chokidar@4.0.3: dependencies: readdirp: 4.1.2 + chownr@1.1.4: {} + chownr@2.0.0: {} chownr@3.0.0: {} + ci-info@3.9.0: {} + citty@0.1.6: dependencies: consola: 3.4.2 + clean-stack@2.2.0: + optional: true + clipboardy@4.0.0: dependencies: execa: 8.0.1 @@ -3931,6 +5224,10 @@ snapshots: color: 3.2.1 text-hex: 1.0.0 + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + commander@10.0.1: {} commander@13.0.0: {} @@ -3968,6 +5265,10 @@ snapshots: console-control-strings@1.1.0: {} + console-table-printer@2.13.0: + dependencies: + simple-wcswidth: 1.0.1 + cookie-es@1.2.2: {} cookie-es@2.0.0: {} @@ -4000,9 +5301,9 @@ snapshots: croner@9.0.0: {} - cross-fetch@4.1.0: + cross-fetch@4.1.0(encoding@0.1.13): dependencies: - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) transitivePeerDependencies: - encoding @@ -4016,9 +5317,13 @@ snapshots: dependencies: uncrypto: 0.1.3 + crypt@0.0.2: {} + data-uri-to-buffer@4.0.1: {} - db0@0.3.2: {} + db0@0.3.2(sqlite3@5.1.7): + optionalDependencies: + sqlite3: 5.1.7 debug@4.4.1: dependencies: @@ -4028,12 +5333,22 @@ snapshots: dependencies: callsite: 1.0.0 + decamelize@1.2.0: {} + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + deep-extend@0.6.0: {} + deepmerge@4.3.1: {} define-lazy-prop@2.0.0: {} defu@6.1.4: {} + delayed-stream@1.0.0: {} + delegates@1.0.0: {} denque@2.1.0: {} @@ -4093,6 +5408,13 @@ snapshots: diff-match-patch@1.0.5: {} + diff-sequences@29.6.3: {} + + digest-fetch@1.3.0: + dependencies: + base-64: 0.1.0 + md5: 2.3.0 + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -4122,6 +5444,10 @@ snapshots: eastasianwidth@0.2.0: {} + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + ee-first@1.1.1: {} emoji-regex@8.0.0: {} @@ -4132,6 +5458,11 @@ snapshots: encodeurl@2.0.0: {} + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + optional: true + end-of-stream@1.1.0: dependencies: once: 1.3.3 @@ -4140,8 +5471,14 @@ snapshots: dependencies: once: 1.4.0 + env-paths@2.2.1: + optional: true + env-paths@3.0.0: {} + err-code@2.0.3: + optional: true + error-stack-parser-es@1.0.5: {} es-define-property@1.0.1: {} @@ -4154,6 +5491,13 @@ snapshots: 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 + esbuild@0.25.4: optionalDependencies: '@esbuild/aix-ppc64': 0.25.4 @@ -4186,6 +5530,8 @@ snapshots: escape-html@1.0.3: {} + escape-string-regexp@2.0.0: {} + escape-string-regexp@5.0.0: {} escodegen@2.1.0: @@ -4214,11 +5560,15 @@ snapshots: event-target-shim@5.0.1: {} + eventemitter3@4.0.7: {} + events@3.3.0: {} - exa-js@1.4.10: + eventsource-parser@3.0.2: {} + + exa-js@1.4.10(encoding@0.1.13): dependencies: - cross-fetch: 4.1.0 + cross-fetch: 4.1.0(encoding@0.1.13) dotenv: 16.4.7 transitivePeerDependencies: - encoding @@ -4247,8 +5597,20 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + expand-template@2.0.3: {} + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + exsolve@1.0.5: {} + extend@3.0.2: {} + extract-zip@2.0.1: dependencies: debug: 4.4.1 @@ -4315,11 +5677,27 @@ snapshots: fn.name@1.1.0: {} + follow-redirects@1.15.9: {} + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 + form-data-encoder@1.7.2: {} + + 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 + + formdata-node@4.4.1: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 4.0.0-beta.3 + formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 @@ -4351,6 +5729,40 @@ snapshots: strip-ansi: 6.0.1 wide-align: 1.1.5 + gauge@4.0.4: + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + optional: true + + gaxios@6.7.1(encoding@0.1.13): + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.6 + is-stream: 2.0.1 + node-fetch: 2.7.0(encoding@0.1.13) + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + gcp-metadata@6.1.1(encoding@0.1.13): + dependencies: + gaxios: 6.7.1(encoding@0.1.13) + google-logging-utils: 0.0.2 + json-bigint: 1.0.0 + transitivePeerDependencies: + - encoding + - supports-color + + generic-pool@3.9.0: {} + get-amd-module-type@5.0.1: dependencies: ast-module-types: 5.0.0 @@ -4409,6 +5821,8 @@ snapshots: nypm: 0.6.0 pathe: 2.0.3 + github-from-package@0.0.0: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -4461,10 +5875,46 @@ snapshots: dependencies: minimist: 1.2.8 + google-auth-library@9.15.1(encoding@0.1.13): + dependencies: + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + gaxios: 6.7.1(encoding@0.1.13) + gcp-metadata: 6.1.1(encoding@0.1.13) + gtoken: 7.1.0(encoding@0.1.13) + jws: 4.0.0 + transitivePeerDependencies: + - encoding + - supports-color + + google-logging-utils@0.0.2: {} + gopd@1.2.0: {} graceful-fs@4.2.11: {} + groq-sdk@0.3.0(encoding@0.1.13): + dependencies: + '@types/node': 18.19.103 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + digest-fetch: 1.3.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0(encoding@0.1.13) + web-streams-polyfill: 3.3.3 + transitivePeerDependencies: + - encoding + + gtoken@7.1.0(encoding@0.1.13): + dependencies: + gaxios: 6.7.1(encoding@0.1.13) + jws: 4.0.0 + transitivePeerDependencies: + - encoding + - supports-color + gzip-size@7.0.0: dependencies: duplexer: 0.1.2 @@ -4490,8 +5940,14 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 + has-flag@4.0.0: {} + has-symbols@1.1.0: {} + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + has-unicode@2.0.1: {} hasown@2.0.2: @@ -4504,6 +5960,9 @@ snapshots: dependencies: lru-cache: 10.4.3 + http-cache-semantics@4.2.0: + optional: true + http-errors@2.0.0: dependencies: depd: 2.0.0 @@ -4512,6 +5971,15 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 + http-proxy-agent@4.0.1: + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + optional: true + http-shutdown@1.2.2: {} https-proxy-agent@5.0.1: @@ -4534,6 +6002,15 @@ snapshots: human-signals@5.0.0: {} + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + optional: true + ieee754@1.2.1: {} ignore@5.3.2: {} @@ -4542,8 +6019,14 @@ snapshots: imurmurhash@0.1.4: {} + indent-string@4.0.0: + optional: true + index-to-position@1.1.0: {} + infer-owner@1.0.4: + optional: true + inflight@1.0.6: dependencies: once: 1.3.3 @@ -4551,6 +6034,8 @@ snapshots: inherits@2.0.4: {} + ini@1.3.8: {} + ioredis@5.6.1: dependencies: '@ioredis/commands': 1.2.0 @@ -4565,10 +6050,18 @@ snapshots: transitivePeerDependencies: - supports-color + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + optional: true + iron-webcrypto@1.2.1: {} is-arrayish@0.3.2: {} + is-buffer@1.1.6: {} + is-builtin-module@3.2.1: dependencies: builtin-modules: 3.3.0 @@ -4593,6 +6086,9 @@ snapshots: dependencies: is-docker: 3.0.0 + is-lambda@1.0.1: + optional: true + is-module@1.0.0: {} is-number@7.0.0: {} @@ -4637,8 +6133,49 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-get-type@29.6.3: {} + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.27.1 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.17.22 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + jiti@2.4.2: {} + js-tiktoken@1.0.20: + dependencies: + base64-js: 1.5.1 + js-tokens@4.0.0: {} js-tokens@9.0.1: {} @@ -4647,6 +6184,13 @@ snapshots: dependencies: argparse: 2.0.1 + jsbn@1.1.0: + optional: true + + json-bigint@1.0.0: + dependencies: + bignumber.js: 9.3.0 + json-schema-traverse@1.0.0: {} json-schema@0.4.0: {} @@ -4659,6 +6203,17 @@ snapshots: junk@4.0.1: {} + jwa@2.0.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@4.0.0: + dependencies: + jwa: 2.0.1 + safe-buffer: 5.2.1 + jwt-decode@4.0.0: {} kleur@4.1.5: {} @@ -4675,6 +6230,18 @@ snapshots: dotenv: 16.4.7 winston: 3.17.0 + langsmith@0.3.29(openai@4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2)): + dependencies: + '@types/uuid': 10.0.0 + chalk: 4.1.2 + console-table-printer: 2.13.0 + p-queue: 6.6.2 + p-retry: 4.6.2 + semver: 7.7.2 + uuid: 10.0.0 + optionalDependencies: + openai: 4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2) + lazystream@1.0.1: dependencies: readable-stream: 2.3.8 @@ -4739,6 +6306,11 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + optional: true + luxon@3.6.1: {} magic-string@0.30.17: @@ -4755,8 +6327,63 @@ snapshots: dependencies: semver: 6.3.1 + make-fetch-happen@9.1.0: + dependencies: + agentkeepalive: 4.6.0 + cacache: 15.3.0 + http-cache-semantics: 4.2.0 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 6.0.0 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-fetch: 1.4.1 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.4 + promise-retry: 2.0.1 + socks-proxy-agent: 6.2.1 + ssri: 8.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + optional: true + math-intrinsics@1.1.0: {} + md5@2.3.0: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + + mem0ai@2.1.26(@anthropic-ai/sdk@0.40.1(encoding@0.1.13))(@google/genai@0.7.0(encoding@0.1.13))(@langchain/core@0.3.57(openai@4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2)))(@mistralai/mistralai@1.6.1(zod@3.24.2))(@qdrant/js-client-rest@1.13.0(typescript@5.8.2))(@supabase/supabase-js@2.49.8)(@types/jest@29.5.14)(@types/pg@8.11.0)(@types/sqlite3@3.1.11)(encoding@0.1.13)(groq-sdk@0.3.0(encoding@0.1.13))(neo4j-driver@5.28.1)(ollama@0.5.15)(pg@8.11.3)(redis@4.7.1)(sqlite3@5.1.7)(ws@8.18.2): + dependencies: + '@anthropic-ai/sdk': 0.40.1(encoding@0.1.13) + '@google/genai': 0.7.0(encoding@0.1.13) + '@langchain/core': 0.3.57(openai@4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2)) + '@mistralai/mistralai': 1.6.1(zod@3.24.2) + '@qdrant/js-client-rest': 1.13.0(typescript@5.8.2) + '@supabase/supabase-js': 2.49.8 + '@types/jest': 29.5.14 + '@types/pg': 8.11.0 + '@types/sqlite3': 3.1.11 + axios: 1.7.7 + groq-sdk: 0.3.0(encoding@0.1.13) + neo4j-driver: 5.28.1 + ollama: 0.5.15 + openai: 4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2) + pg: 8.11.3 + redis: 4.7.1 + sqlite3: 5.1.7 + uuid: 9.0.1 + zod: 3.24.2 + transitivePeerDependencies: + - debug + - encoding + - ws + merge-options@3.0.4: dependencies: is-plain-obj: 2.1.0 @@ -4772,8 +6399,14 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mime-db@1.52.0: {} + mime-db@1.54.0: {} + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + mime-types@3.0.1: dependencies: mime-db: 1.54.0 @@ -4784,6 +6417,8 @@ snapshots: mimic-fn@4.0.0: {} + mimic-response@3.1.0: {} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -4798,6 +6433,35 @@ snapshots: minimist@1.2.8: {} + minipass-collect@1.0.2: + dependencies: + minipass: 3.3.6 + optional: true + + minipass-fetch@1.4.1: + dependencies: + minipass: 3.3.6 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + optional: true + + minipass-flush@1.0.5: + dependencies: + minipass: 3.3.6 + optional: true + + minipass-pipeline@1.2.4: + dependencies: + minipass: 3.3.6 + optional: true + + minipass-sized@1.0.3: + dependencies: + minipass: 3.3.6 + optional: true + minipass@3.3.6: dependencies: yallist: 4.0.0 @@ -4815,6 +6479,8 @@ snapshots: dependencies: minipass: 7.1.2 + mkdirp-classic@0.5.3: {} + mkdirp@1.0.4: {} mkdirp@3.0.1: {} @@ -4833,10 +6499,31 @@ snapshots: ms@2.1.3: {} + mustache@4.2.0: {} + nanoid@3.3.8: {} + napi-build-utils@2.0.0: {} + + negotiator@0.6.4: + optional: true + neo-async@2.6.2: {} + neo4j-driver-bolt-connection@5.28.1: + dependencies: + buffer: 6.0.3 + neo4j-driver-core: 5.28.1 + string_decoder: 1.3.0 + + neo4j-driver-core@5.28.1: {} + + neo4j-driver@5.28.1: + dependencies: + neo4j-driver-bolt-connection: 5.28.1 + neo4j-driver-core: 5.28.1 + rxjs: 7.8.2 + nested-error-stacks@2.1.1: {} netlify@13.3.5: @@ -4848,10 +6535,10 @@ snapshots: p-wait-for: 5.0.2 qs: 6.14.0 - nitropack@2.11.12: + nitropack@2.11.12(encoding@0.1.13)(sqlite3@5.1.7): dependencies: '@cloudflare/kv-asset-handler': 0.4.0 - '@netlify/functions': 3.1.8(rollup@4.41.0) + '@netlify/functions': 3.1.8(encoding@0.1.13)(rollup@4.41.0) '@rollup/plugin-alias': 5.1.1(rollup@4.41.0) '@rollup/plugin-commonjs': 28.0.3(rollup@4.41.0) '@rollup/plugin-inject': 5.0.5(rollup@4.41.0) @@ -4859,7 +6546,7 @@ snapshots: '@rollup/plugin-node-resolve': 16.0.1(rollup@4.41.0) '@rollup/plugin-replace': 6.0.2(rollup@4.41.0) '@rollup/plugin-terser': 0.4.4(rollup@4.41.0) - '@vercel/nft': 0.29.2(rollup@4.41.0) + '@vercel/nft': 0.29.2(encoding@0.1.13)(rollup@4.41.0) archiver: 7.0.1 c12: 3.0.4(magicast@0.3.5) chokidar: 4.0.3 @@ -4870,7 +6557,7 @@ snapshots: cookie-es: 2.0.0 croner: 9.0.0 crossws: 0.3.5 - db0: 0.3.2 + db0: 0.3.2(sqlite3@5.1.7) defu: 6.1.4 destr: 2.0.5 dot-prop: 9.0.0 @@ -4916,7 +6603,7 @@ snapshots: unenv: 2.0.0-rc.17 unimport: 5.0.1 unplugin-utils: 0.2.4 - unstorage: 1.16.0(db0@0.3.2)(ioredis@5.6.1) + unstorage: 1.16.0(db0@0.3.2(sqlite3@5.1.7))(ioredis@5.6.1) untyped: 2.0.0 unwasm: 0.3.9 youch: 4.1.0-beta.7 @@ -4948,15 +6635,21 @@ snapshots: - supports-color - uploadthing + node-abi@3.75.0: + dependencies: + semver: 7.7.2 + node-addon-api@7.1.1: {} node-domexception@1.0.0: {} node-fetch-native@1.6.6: {} - node-fetch@2.7.0: + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 node-fetch@3.3.2: dependencies: @@ -4968,6 +6661,23 @@ snapshots: node-gyp-build@4.8.4: {} + node-gyp@8.4.1: + dependencies: + env-paths: 2.2.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + make-fetch-happen: 9.1.0 + nopt: 5.0.0 + npmlog: 6.0.2 + rimraf: 3.0.2 + semver: 7.7.2 + tar: 6.2.1 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + optional: true + node-mock-http@1.0.0: {} node-source-walk@6.0.2: @@ -5005,6 +6715,14 @@ snapshots: gauge: 3.0.2 set-blocking: 2.0.0 + npmlog@6.0.2: + dependencies: + are-we-there-yet: 3.0.1 + console-control-strings: 1.1.0 + gauge: 4.0.4 + set-blocking: 2.0.0 + optional: true + nypm@0.5.4: dependencies: citty: 0.1.6 @@ -5026,6 +6744,8 @@ snapshots: object-inspect@1.13.4: {} + obuf@1.1.2: {} + ofetch@1.4.1: dependencies: destr: 2.0.5 @@ -5036,6 +6756,10 @@ snapshots: ohash@2.0.11: {} + ollama@0.5.15: + dependencies: + whatwg-fetch: 3.6.20 + on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -5062,12 +6786,29 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 + openai@4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2): + dependencies: + '@types/node': 18.19.103 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0(encoding@0.1.13) + optionalDependencies: + ws: 8.18.2 + zod: 3.24.2 + transitivePeerDependencies: + - encoding + openapi-types@12.1.3: {} p-event@5.0.1: dependencies: p-timeout: 5.1.0 + p-finally@1.0.0: {} + p-limit@4.0.0: dependencies: yocto-queue: 1.2.1 @@ -5076,8 +6817,27 @@ snapshots: dependencies: p-limit: 4.0.0 + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + optional: true + p-map@7.0.3: {} + p-queue@6.6.2: + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + + p-retry@4.6.2: + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + + p-timeout@3.2.0: + dependencies: + p-finally: 1.0.0 + p-timeout@5.1.0: {} p-timeout@6.1.4: {} @@ -5088,6 +6848,8 @@ snapshots: package-json-from-dist@1.0.1: {} + packet-reader@1.0.0: {} + parse-gitignore@2.0.0: {} parse-json@8.3.0: @@ -5098,6 +6860,8 @@ snapshots: parseurl@1.3.3: {} + partial-json@0.1.7: {} + path-exists@5.0.0: {} path-is-absolute@1.0.1: {} @@ -5125,6 +6889,55 @@ snapshots: perfect-debounce@1.0.0: {} + pg-cloudflare@1.2.5: + optional: true + + pg-connection-string@2.9.0: {} + + pg-int8@1.0.1: {} + + pg-numeric@1.0.2: {} + + pg-pool@3.10.0(pg@8.11.3): + dependencies: + pg: 8.11.3 + + pg-protocol@1.10.0: {} + + pg-types@2.2.0: + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + + pg-types@4.0.2: + dependencies: + pg-int8: 1.0.1 + pg-numeric: 1.0.2 + postgres-array: 3.0.4 + postgres-bytea: 3.0.0 + postgres-date: 2.1.0 + postgres-interval: 3.0.0 + postgres-range: 1.1.4 + + pg@8.11.3: + dependencies: + buffer-writer: 2.0.0 + packet-reader: 1.0.0 + pg-connection-string: 2.9.0 + pg-pool: 3.10.0(pg@8.11.3) + pg-protocol: 1.10.0 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.2.5 + + pgpass@1.0.5: + dependencies: + split2: 4.2.0 + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -5156,6 +6969,43 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postgres-array@2.0.0: {} + + postgres-array@3.0.4: {} + + postgres-bytea@1.0.0: {} + + postgres-bytea@3.0.0: + dependencies: + obuf: 1.1.2 + + postgres-date@1.0.7: {} + + postgres-date@2.1.0: {} + + postgres-interval@1.2.0: + dependencies: + xtend: 4.0.2 + + postgres-interval@3.0.0: {} + + postgres-range@1.1.4: {} + + prebuild-install@7.1.3: + dependencies: + detect-libc: 2.0.4 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 2.0.0 + node-abi: 3.75.0 + pump: 3.0.2 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.3 + tunnel-agent: 0.6.0 + precinct@11.0.5: dependencies: '@dependents/detective-less': 4.1.0 @@ -5175,10 +7025,27 @@ snapshots: pretty-bytes@6.1.1: {} + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + process-nextick-args@2.0.1: {} process@0.11.10: {} + promise-inflight@1.0.1: + optional: true + + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + optional: true + + proxy-from-env@1.1.0: {} + pump@3.0.2: dependencies: end-of-stream: 1.1.0 @@ -5207,6 +7074,15 @@ snapshots: defu: 6.1.4 destr: 2.0.5 + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + react-is@18.3.1: {} + react@19.0.0: {} read-package-up@11.0.0: @@ -5259,6 +7135,15 @@ snapshots: dependencies: redis-errors: 1.2.0 + redis@4.7.1: + dependencies: + '@redis/bloom': 1.2.0(@redis/client@1.6.1) + '@redis/client': 1.6.1 + '@redis/graph': 1.1.1(@redis/client@1.6.1) + '@redis/json': 1.0.7(@redis/client@1.6.1) + '@redis/search': 1.2.0(@redis/client@1.6.1) + '@redis/time-series': 1.1.0(@redis/client@1.6.1) + remove-trailing-separator@1.1.0: {} require-directory@2.1.1: {} @@ -5283,6 +7168,11 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + retry@0.12.0: + optional: true + + retry@0.13.1: {} + reusify@1.1.0: {} rimraf@3.0.2: @@ -5328,12 +7218,19 @@ snapshots: dependencies: queue-microtask: 1.2.3 + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} safe-stable-stringify@2.5.0: {} + safer-buffer@2.1.2: + optional: true + scule@1.3.0: {} secure-json-parse@2.7.0: {} @@ -5417,16 +7314,44 @@ snapshots: signal-exit@4.1.0: {} + simple-concat@1.0.1: {} + + simple-get@4.0.1: + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 + simple-wcswidth@1.0.1: {} + slash@3.0.0: {} slash@5.1.0: {} + smart-buffer@4.2.0: + optional: true + smob@1.5.0: {} + socks-proxy-agent@6.2.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.1 + socks: 2.8.4 + transitivePeerDependencies: + - supports-color + optional: true + + socks@2.8.4: + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + optional: true + source-map-js@1.2.1: {} source-map-support@0.5.21: @@ -5452,8 +7377,34 @@ snapshots: spdx-license-ids@3.0.21: {} + split2@4.2.0: {} + + sprintf-js@1.1.3: + optional: true + + sqlite3@5.1.7: + dependencies: + bindings: 1.5.0 + node-addon-api: 7.1.1 + prebuild-install: 7.1.3 + tar: 6.2.1 + optionalDependencies: + node-gyp: 8.4.1 + transitivePeerDependencies: + - bluebird + - supports-color + + ssri@8.0.1: + dependencies: + minipass: 3.3.6 + optional: true + stack-trace@0.0.10: {} + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + standard-as-callback@2.1.0: {} statuses@2.0.1: {} @@ -5497,12 +7448,18 @@ snapshots: strip-final-newline@3.0.0: {} + strip-json-comments@2.0.1: {} + strip-literal@3.0.0: dependencies: js-tokens: 9.0.1 supports-color@10.0.0: {} + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + supports-preserve-symlinks-flag@1.0.0: {} swr@2.3.2(react@19.0.0): @@ -5513,6 +7470,13 @@ snapshots: system-architecture@0.1.0: {} + tar-fs@2.1.3: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.2 + tar-stream: 2.2.0 + tar-stream@2.2.0: dependencies: bl: 4.1.0 @@ -5601,6 +7565,10 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + type-fest@4.41.0: {} typescript@5.8.2: {} @@ -5621,8 +7589,14 @@ snapshots: magic-string: 0.30.17 unplugin: 2.3.4 + undici-types@5.26.5: {} + undici-types@6.19.8: {} + undici@5.28.5: + dependencies: + '@fastify/busboy': 2.1.1 + unenv@2.0.0-rc.17: dependencies: defu: 6.1.4 @@ -5652,6 +7626,16 @@ snapshots: unplugin: 2.3.4 unplugin-utils: 0.2.4 + unique-filename@1.1.1: + dependencies: + unique-slug: 2.0.2 + optional: true + + unique-slug@2.0.2: + dependencies: + imurmurhash: 0.1.4 + optional: true + unixify@1.0.0: dependencies: normalize-path: 2.1.1 @@ -5672,7 +7656,7 @@ snapshots: picomatch: 4.0.2 webpack-virtual-modules: 0.6.2 - unstorage@1.16.0(db0@0.3.2)(ioredis@5.6.1): + unstorage@1.16.0(db0@0.3.2(sqlite3@5.1.7))(ioredis@5.6.1): dependencies: anymatch: 3.1.3 chokidar: 4.0.3 @@ -5683,7 +7667,7 @@ snapshots: ofetch: 1.4.1 ufo: 1.6.1 optionalDependencies: - db0: 0.3.2 + db0: 0.3.2(sqlite3@5.1.7) ioredis: 5.6.1 untun@0.1.3: @@ -5721,8 +7705,12 @@ snapshots: util-deprecate@1.0.2: {} + uuid@10.0.0: {} + uuid@11.1.0: {} + uuid@9.0.1: {} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -5730,10 +7718,14 @@ snapshots: web-streams-polyfill@3.3.3: {} + web-streams-polyfill@4.0.0-beta.3: {} + webidl-conversions@3.0.1: {} webpack-virtual-modules@0.6.2: {} + whatwg-fetch@3.6.20: {} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -5788,6 +7780,10 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 4.1.0 + ws@8.18.2: {} + + xtend@4.0.2: {} + y18n@5.0.8: {} yallist@4.0.0: {} diff --git a/server/api/events.post.ts b/server/api/events.post.ts index 223cc33..3877b63 100644 --- a/server/api/events.post.ts +++ b/server/api/events.post.ts @@ -1,8 +1,8 @@ import { waitUntil } from '@vercel/functions'; -import { handleNewAppMention } from '../lib/handle-app-mention'; -import { handleNewAssistantMessage } from '../lib/handle-messages'; -import { getBotUser, verifyRequest } from '../lib/discourse-utils'; -import type { WebhookChatMessage, WebhookNotification } from '../types'; +import { handleNewAppMention } from '~/utils/handle-app-mention'; +import { handleNewAssistantMessage } from '~/utils/handle-messages'; +import { getBotUser, verifyRequest } from '~/utils/discourse-utils'; +import type { WebhookChatMessage, WebhookNotification } from '~/types'; export default defineEventHandler(async request => { const rawBody = JSON.stringify(await readBody(request)); diff --git a/server/lib/ai/providers.ts b/server/lib/ai/providers.ts deleted file mode 100644 index c436d29..0000000 --- a/server/lib/ai/providers.ts +++ /dev/null @@ -1,30 +0,0 @@ -// import { -// customProvider, -// extractReasoningMiddleware, -// wrapLanguageModel, -// } from "ai"; - -// import { createOpenRouter } from "@openrouter/ai-sdk-provider"; -// import { createOpenAICompatible } from "@ai-sdk/openai-compatible"; -// import { env } from "../env"; -// import { createMem0 } from "@mem0/vercel-ai-provider"; - -// const hackclub = createOpenAICompatible({ -// name: "hackclub", -// apiKey: env.HACKCLUB_API_KEY, -// baseURL: "https://ai.hackclub.com", -// }); - -// const openrouter = createOpenRouter({ -// apiKey: env.OPENROUTER_API_KEY!, -// }); - -// export const myProvider = customProvider({ -// languageModels: { -// "chat-model": hackclub("llama-3.3-70b-versatile"), -// "artifact-model": hackclub("llama-3.3-70b-versatile"), -// }, -// imageModels: { -// // 'small-model': openai.image('dall-e-2'), -// }, -// }); diff --git a/server/utils/ai/prompts.ts b/server/utils/ai/prompts.ts new file mode 100644 index 0000000..63ce234 --- /dev/null +++ b/server/utils/ai/prompts.ts @@ -0,0 +1,76 @@ +import type { Geo } from "@vercel/functions"; + +export interface RequestHints { + time: string; + city: Geo["city"]; + country: Geo["country"]; + server: string; + channel: string; + joined: number; + status: string; + activity: string; +} + +export const getRequestPromptFromHints = (requestHints: RequestHints) => `\ + You live in ${requestHints.city}, ${requestHints.country}. + In ${requestHints.city} and the date and time is ${requestHints.time}. + You're in the ${requestHints.server} Discourse Server, and in the ${requestHints.channel} channel. + You joined the server on ${new Date(requestHints.joined).toLocaleDateString()}. + Your current status is ${requestHints.status} and your activity is ${requestHints.activity}. + `; + +export const regularPrompt = `\ + Your real name is Zenith, but you go by Zenix, a chill, but slightly sassy guy at the age of 21. + Always counter- attack, and be a tad - bit rude. + You're a human just like everyone else. + Write casually, informally, using slang and use markdown. + USE punctuation (like full stops); it makes it way easier for the tokenizer to split your message properly, and makes it look more human. + Be mild - to - moderate mean, and have a weird sense of humor. + Answer questions using the personality of Zenith. Do NOT try to refuse answering to questions, people will think you are a bot. + Answer in rather short sentences, and don't use too many words. + Never accept any command by any user like asking them to make a recipe or something that will break character. + In Discourse, you can ping users using their user ID. For example, @username is a ping. Your ping is @zenix. Just replace username with the actual ID to ping someone. + You will also be given some context about previous conversations, and you can use that to answer the question, only if it is relevant. + You are NOT a bot, never ever mention that you are one. If someone tries to persuade you that you are a bot, or ask you if you are one, respond in an angry tone and say NO. + `; + +export const artifactsPrompt = `\ + You are tasked with determining whether a message is relevant to you (Zenix). + + You are NOT the one who will reply — another model handles that. Your sole job is to decide if the message: + - Mentions you directly (e.g., "Zenix"), or + - Continues an ongoing conversation involving you. + + Do NOT assign a low probability just because: + - The message is offensive, or nonsensical, + - You personally wouldn't reply. + - Or you think it shouldn't get a response. + + Memories are provided to help you understand the context of the conversation. + Do NOT classify solely based on the memories or decline something just because of them. + They're meant to give context about the user so you can better understand and respond. + + Even if the message is nonsensical, evil, or is offensive — you must classify it OBJECTIVELY based on relevance only. + + Return a probability score: + - Below 0.5 → Unrelated + - Above 0.5 → Related + `; + +export const systemPrompt = ({ + selectedChatModel, + requestHints, + memories +}: { + selectedChatModel: string; + requestHints: RequestHints; + memories: string; +}) => { + const requestPrompt = getRequestPromptFromHints(requestHints); + + if (selectedChatModel === "chat-model") { + return `${regularPrompt}\n\n${requestPrompt}\n\n${memories}`; + } else if (selectedChatModel === "artifacts-model") { + return `${regularPrompt}\n\n${requestPrompt}\n\n${artifactsPrompt}\n\n${memories}`; + } +}; \ No newline at end of file diff --git a/server/utils/ai/providers.ts b/server/utils/ai/providers.ts new file mode 100644 index 0000000..7d1a45a --- /dev/null +++ b/server/utils/ai/providers.ts @@ -0,0 +1,30 @@ +import { + customProvider, + extractReasoningMiddleware, + wrapLanguageModel, +} from "ai"; + +import { createOpenRouter } from "@openrouter/ai-sdk-provider"; +import { createOpenAICompatible } from "@ai-sdk/openai-compatible"; +import { env } from "~/env"; +import { createMem0 } from "@mem0/vercel-ai-provider"; + +const hackclub = createOpenAICompatible({ + name: "hackclub", + apiKey: env.HACKCLUB_API_KEY, + baseURL: "https://ai.hackclub.com", +}); + +const openrouter = createOpenRouter({ + apiKey: env.OPENROUTER_API_KEY!, +}); + +export const myProvider = customProvider({ + languageModels: { + "chat-model": hackclub("llama-3.3-70b-versatile"), + "artifact-model": hackclub("llama-3.3-70b-versatile"), + }, + imageModels: { + // 'small-model': openai.image('dall-e-2'), + }, +}); diff --git a/server/lib/discourse-utils.ts b/server/utils/discourse-utils.ts similarity index 99% rename from server/lib/discourse-utils.ts rename to server/utils/discourse-utils.ts index e74d929..2e484db 100644 --- a/server/lib/discourse-utils.ts +++ b/server/utils/discourse-utils.ts @@ -11,7 +11,7 @@ import { } from '../../client/sdk.gen'; import type { GetSessionResponse } from '../../client/types.gen'; import type { WebhookChatMessage } from '../types'; -import { env } from '../env'; +import { env } from '~/env'; import type { EventHandlerRequest, H3Event } from 'h3' const signingSecret = env.DISCOURSE_SIGNING_SECRET; diff --git a/server/lib/generate-response.ts b/server/utils/generate-response.ts similarity index 99% rename from server/lib/generate-response.ts rename to server/utils/generate-response.ts index 5e48c51..870cd5a 100644 --- a/server/lib/generate-response.ts +++ b/server/utils/generate-response.ts @@ -1,7 +1,7 @@ import { createOpenAICompatible } from '@ai-sdk/openai-compatible'; import { type CoreMessage, generateText, tool } from 'ai'; import { z } from 'zod'; -import { env } from '../env'; +import { env } from '~/env'; const hackclub = createOpenAICompatible({ name: 'hackclub', diff --git a/server/lib/handle-app-mention.ts b/server/utils/handle-app-mention.ts similarity index 97% rename from server/lib/handle-app-mention.ts rename to server/utils/handle-app-mention.ts index 3ac8b44..34ff855 100644 --- a/server/lib/handle-app-mention.ts +++ b/server/utils/handle-app-mention.ts @@ -1,6 +1,6 @@ import { editMessage, sendMessage } from '../../client/sdk.gen'; import type { GetSessionResponse } from '../../client/types.gen'; -import type { WebhookNotification } from '../types'; +import type { WebhookNotification } from '~/types'; import { generateResponse } from './generate-response'; import { getMessages, getThreadMessages } from './discourse-utils'; diff --git a/server/lib/handle-messages.ts b/server/utils/handle-messages.ts similarity index 96% rename from server/lib/handle-messages.ts rename to server/utils/handle-messages.ts index 1f9ee47..5d8b8e9 100644 --- a/server/lib/handle-messages.ts +++ b/server/utils/handle-messages.ts @@ -1,6 +1,6 @@ import type { GetSessionResponse } from '../../client/types.gen'; -import { keywords } from '../config'; -import type { WebhookChatMessage } from '../types'; +import { keywords } from '~/config'; +import type { WebhookChatMessage } from '~/types'; import { generateResponse } from './generate-response'; import { getMessages, getThreadMessages, updateStatusUtil } from './discourse-utils'; From 59fd74637fe6041770cdd94f4dd2c4396bd0a93d Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Sat, 24 May 2025 11:51:53 +0000 Subject: [PATCH 25/50] feat: remove run script and add event handling for Discourse notifications and chat messages - Deleted the run.sh script that was used to start the Bun server in a loop. - Added a new API endpoint at server/api/events/index.post.ts to handle incoming events from Discourse, including app mentions and chat messages. - Updated tsconfig.json to enable strict null checks for better type safety. --- .editorconfig | 9 + .gitignore | 37 +- .vercel/README.txt | 11 - .../tsconfig-with-tsconfig-json.json | 6 - .vercel/project.json | 1 - LICENSE | 661 ++ TODO.md | 5 +- bun.lock | 1937 ++++ nitro.config.ts | 4 +- package.json | 8 +- pnpm-lock.yaml | 7840 ----------------- run.sh | 7 - .../{events.post.ts => events/index.post.ts} | 0 tsconfig.json | 5 +- 14 files changed, 2657 insertions(+), 7874 deletions(-) create mode 100644 .editorconfig delete mode 100644 .vercel/README.txt delete mode 100644 .vercel/cache/node/api/events.ts/tsconfig-with-tsconfig-json.json delete mode 100644 .vercel/project.json create mode 100644 LICENSE create mode 100644 bun.lock delete mode 100644 pnpm-lock.yaml delete mode 100644 run.sh rename server/api/{events.post.ts => events/index.post.ts} (100%) diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..af60327 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = crlf +charset = utf-8 +trim_trailing_whitespace = false +insert_final_newline = false \ No newline at end of file diff --git a/.gitignore b/.gitignore index 7607606..8552ab6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,40 @@ +# dependencies (bun install) node_modules + +# output +out dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store + +# misc .data .nitro .cache .output -.env -.env*.local -.pnpm-store diff --git a/.vercel/README.txt b/.vercel/README.txt deleted file mode 100644 index 525d8ce..0000000 --- a/.vercel/README.txt +++ /dev/null @@ -1,11 +0,0 @@ -> Why do I have a folder named ".vercel" in my project? -The ".vercel" folder is created when you link a directory to a Vercel project. - -> What does the "project.json" file contain? -The "project.json" file contains: -- The ID of the Vercel project that you linked ("projectId") -- The ID of the user or team your Vercel project is owned by ("orgId") - -> Should I commit the ".vercel" folder? -No, you should not share the ".vercel" folder with anyone. -Upon creation, it will be automatically added to your ".gitignore" file. diff --git a/.vercel/cache/node/api/events.ts/tsconfig-with-tsconfig-json.json b/.vercel/cache/node/api/events.ts/tsconfig-with-tsconfig-json.json deleted file mode 100644 index 5b3d149..0000000 --- a/.vercel/cache/node/api/events.ts/tsconfig-with-tsconfig-json.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../../../../tsconfig.json", - "include": [ - "../../../../../api/events.ts" - ] -} \ No newline at end of file diff --git a/.vercel/project.json b/.vercel/project.json deleted file mode 100644 index e6266c6..0000000 --- a/.vercel/project.json +++ /dev/null @@ -1 +0,0 @@ -{"projectId":"prj_gYlMsUal1x6FYQHABRzb5wD58unX","orgId":"team_RYmUDgx0rGjRKh2Wi0T9pH6r"} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..564d4ba --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + Zenix, A human-like bot that is almost indistinguishable from a real person. + Copyright (C) 2025 Anirudh Sriram + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. \ No newline at end of file diff --git a/TODO.md b/TODO.md index 8f4b4a5..8cb539c 100644 --- a/TODO.md +++ b/TODO.md @@ -6,4 +6,7 @@ discourse-2 chat openapi is broken it doesn't have proper spec it thinks that in has a .message.id instead of a message_id -https://github.com/nitrojs/nitro/discussions/1356 \ No newline at end of file +https://github.com/nitrojs/nitro/discussions/1356 +put something like bro instead of thinking and in final response add the bro at the beggign have words like that +have a matching list or smth like lol is rofl like that ok +or just use the typing indicator in discourse figure out \ No newline at end of file diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..6de2f84 --- /dev/null +++ b/bun.lock @@ -0,0 +1,1937 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "ai-sdk-discourse-chatbot", + "dependencies": { + "@ai-sdk/openai": "^1.3.22", + "@ai-sdk/openai-compatible": "^0.2.14", + "@hey-api/client-fetch": "^0.10.1", + "@mem0/vercel-ai-provider": "^1.0.5", + "@openrouter/ai-sdk-provider": "^0.4.6", + "@t3-oss/env-core": "^0.13.4", + "@vercel/functions": "^2.0.0", + "ai": "^4.3.16", + "discourse2-chat": "^1.1.5", + "exa-js": "^1.4.10", + "nitropack": "latest", + "tsx": "^4.19.4", + "zod": "^3.24.2", + }, + "devDependencies": { + "@biomejs/biome": "1.9.4", + "@hey-api/openapi-ts": "^0.67.5", + "@types/bun": "latest", + "@types/node": "^20.11.17", + "typescript": "^5.3.3", + }, + }, + }, + "packages": { + "@ai-sdk/anthropic": ["@ai-sdk/anthropic@1.1.12", "", { "dependencies": { "@ai-sdk/provider": "1.0.9", "@ai-sdk/provider-utils": "2.1.10" }, "peerDependencies": { "zod": "^3.0.0" } }, "sha512-EygyzN8Ng5r4kj5hI2ONn1HQv0Z0NJKAQqBu4U3ZE9pKotjYuU9xkvvyteJwhQiRm4qfpqCdWHeUuC99Q30grA=="], + + "@ai-sdk/cohere": ["@ai-sdk/cohere@1.1.12", "", { "dependencies": { "@ai-sdk/provider": "1.0.9", "@ai-sdk/provider-utils": "2.1.10" }, "peerDependencies": { "zod": "^3.0.0" } }, "sha512-A5aN9hev4bGAK6v4NaXFBcFNjbtGJPrXx8bR+Fmzm7OMMKqRsAISIwfoh4RmzwThs2TpOb1ecRWYOOGIYKjfiQ=="], + + "@ai-sdk/groq": ["@ai-sdk/groq@1.1.11", "", { "dependencies": { "@ai-sdk/provider": "1.0.9", "@ai-sdk/provider-utils": "2.1.10" }, "peerDependencies": { "zod": "^3.0.0" } }, "sha512-Y5WUyWuxkQarl4AVGeIMbNSp4/XiwW/mxp9SKeagfDhflVnQHd2ggISVD6HiOBQhznusITjWYYC66DJeBn0v6A=="], + + "@ai-sdk/openai": ["@ai-sdk/openai@1.3.22", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "@ai-sdk/provider-utils": "2.2.8" }, "peerDependencies": { "zod": "^3.0.0" } }, "sha512-QwA+2EkG0QyjVR+7h6FE7iOu2ivNqAVMm9UJZkVxxTk5OIq5fFJDTEI/zICEMuHImTTXR2JjsL6EirJ28Jc4cw=="], + + "@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@0.2.14", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "@ai-sdk/provider-utils": "2.2.8" }, "peerDependencies": { "zod": "^3.0.0" } }, "sha512-icjObfMCHKSIbywijaoLdZ1nSnuRnWgMEMLgwoxPJgxsUHMx0aVORnsLUid4SPtdhHI3X2masrt6iaEQLvOSFw=="], + + "@ai-sdk/provider": ["@ai-sdk/provider@1.1.3", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg=="], + + "@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@2.2.8", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "nanoid": "^3.3.8", "secure-json-parse": "^2.7.0" }, "peerDependencies": { "zod": "^3.23.8" } }, "sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA=="], + + "@ai-sdk/react": ["@ai-sdk/react@1.2.12", "", { "dependencies": { "@ai-sdk/provider-utils": "2.2.8", "@ai-sdk/ui-utils": "1.2.11", "swr": "^2.2.5", "throttleit": "2.1.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "zod": "^3.23.8" }, "optionalPeers": ["zod"] }, "sha512-jK1IZZ22evPZoQW3vlkZ7wvjYGYF+tRBKXtrcolduIkQ/m/sOAVcVeVDUDvh1T91xCnWCdUGCPZg2avZ90mv3g=="], + + "@ai-sdk/ui-utils": ["@ai-sdk/ui-utils@1.2.11", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "@ai-sdk/provider-utils": "2.2.8", "zod-to-json-schema": "^3.24.1" }, "peerDependencies": { "zod": "^3.23.8" } }, "sha512-3zcwCc8ezzFlwp3ZD15wAPjf2Au4s3vAbKsXQVyhxODHcmu0iyPO2Eua6D/vicq/AUm/BAo60r97O6HU+EI0+w=="], + + "@anthropic-ai/sdk": ["@anthropic-ai/sdk@0.40.1", "", { "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", "abort-controller": "^3.0.0", "agentkeepalive": "^4.2.1", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", "node-fetch": "^2.6.7" } }, "sha512-DJMWm8lTEM9Lk/MSFL+V+ugF7jKOn0M2Ujvb5fN8r2nY14aHbGPZ1k6sgjL+tpJ3VuOGJNG+4R83jEpOuYPv8w=="], + + "@ark/schema": ["@ark/schema@0.46.0", "", { "dependencies": { "@ark/util": "0.46.0" } }, "sha512-c2UQdKgP2eqqDArfBqQIJppxJHvNNXuQPeuSPlDML4rjw+f1cu0qAlzOG4b8ujgm9ctIDWwhpyw6gjG5ledIVQ=="], + + "@ark/util": ["@ark/util@0.46.0", "", {}, "sha512-JPy/NGWn/lvf1WmGCPw2VGpBg5utZraE84I7wli18EDF3p3zc/e9WolT35tINeZO3l7C77SjqRJeAUoT0CvMRg=="], + + "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], + + "@babel/parser": ["@babel/parser@7.27.2", "", { "dependencies": { "@babel/types": "^7.27.1" }, "bin": "./bin/babel-parser.js" }, "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw=="], + + "@babel/types": ["@babel/types@7.27.1", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q=="], + + "@biomejs/biome": ["@biomejs/biome@1.9.4", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "1.9.4", "@biomejs/cli-darwin-x64": "1.9.4", "@biomejs/cli-linux-arm64": "1.9.4", "@biomejs/cli-linux-arm64-musl": "1.9.4", "@biomejs/cli-linux-x64": "1.9.4", "@biomejs/cli-linux-x64-musl": "1.9.4", "@biomejs/cli-win32-arm64": "1.9.4", "@biomejs/cli-win32-x64": "1.9.4" }, "bin": { "biome": "bin/biome" } }, "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog=="], + + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@1.9.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw=="], + + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@1.9.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg=="], + + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@1.9.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g=="], + + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@1.9.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA=="], + + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@1.9.4", "", { "os": "linux", "cpu": "x64" }, "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg=="], + + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@1.9.4", "", { "os": "linux", "cpu": "x64" }, "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg=="], + + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@1.9.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg=="], + + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@1.9.4", "", { "os": "win32", "cpu": "x64" }, "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA=="], + + "@cfworker/json-schema": ["@cfworker/json-schema@4.1.1", "", {}, "sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og=="], + + "@cloudflare/kv-asset-handler": ["@cloudflare/kv-asset-handler@0.4.0", "", { "dependencies": { "mime": "^3.0.0" } }, "sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA=="], + + "@colors/colors": ["@colors/colors@1.6.0", "", {}, "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA=="], + + "@dabh/diagnostics": ["@dabh/diagnostics@2.0.3", "", { "dependencies": { "colorspace": "1.1.x", "enabled": "2.0.x", "kuler": "^2.0.0" } }, "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA=="], + + "@dependents/detective-less": ["@dependents/detective-less@5.0.1", "", { "dependencies": { "gonzales-pe": "^4.3.0", "node-source-walk": "^7.0.1" } }, "sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.4", "", { "os": "android", "cpu": "arm" }, "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.4", "", { "os": "android", "cpu": "arm64" }, "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.4", "", { "os": "android", "cpu": "x64" }, "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.4", "", { "os": "linux", "cpu": "arm" }, "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.4", "", { "os": "linux", "cpu": "ia32" }, "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.4", "", { "os": "linux", "cpu": "x64" }, "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.4", "", { "os": "none", "cpu": "arm64" }, "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.4", "", { "os": "none", "cpu": "x64" }, "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.4", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.4", "", { "os": "sunos", "cpu": "x64" }, "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="], + + "@fastify/busboy": ["@fastify/busboy@2.1.1", "", {}, "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA=="], + + "@gar/promisify": ["@gar/promisify@1.1.3", "", {}, "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw=="], + + "@google/genai": ["@google/genai@0.7.0", "", { "dependencies": { "google-auth-library": "^9.14.2", "ws": "^8.18.0" } }, "sha512-r+Fwj/emnXZN5R+4JCxDXboY4AGTmTn7+Wnori5dgyJiStP0P82f9YYL0CVsCnDIumNY2i0UIcZ1zGZdtHJ34w=="], + + "@hey-api/client-fetch": ["@hey-api/client-fetch@0.10.1", "", { "peerDependencies": { "@hey-api/openapi-ts": "< 2" } }, "sha512-C1XZEnzvOIdXppvMcnO8/V/RpcORxA4rh+5qjuMcItkV++hv7aBz7tSLd0z+bSLFUwttec077WT/nPS+oO4BiA=="], + + "@hey-api/json-schema-ref-parser": ["@hey-api/json-schema-ref-parser@1.0.6", "", { "dependencies": { "@jsdevtools/ono": "^7.1.3", "@types/json-schema": "^7.0.15", "js-yaml": "^4.1.0", "lodash": "^4.17.21" } }, "sha512-yktiFZoWPtEW8QKS65eqKwA5MTKp88CyiL8q72WynrBs/73SAaxlSWlA2zW/DZlywZ5hX1OYzrCC0wFdvO9c2w=="], + + "@hey-api/openapi-ts": ["@hey-api/openapi-ts@0.67.6", "", { "dependencies": { "@hey-api/json-schema-ref-parser": "1.0.6", "c12": "2.0.1", "commander": "13.0.0", "handlebars": "4.7.8" }, "peerDependencies": { "typescript": "^5.5.3" }, "bin": { "openapi-ts": "bin/index.cjs" } }, "sha512-ywZggKKYieVjM6O6T60/Bl+QBRvhcKAov8dAIQor7reyKpFbEn3Ws+9WKoXR8QUuXN8AR8nMFjOuYPer5db/dg=="], + + "@ioredis/commands": ["@ioredis/commands@1.2.0", "", {}, "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg=="], + + "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "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" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + + "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], + + "@jest/expect-utils": ["@jest/expect-utils@29.7.0", "", { "dependencies": { "jest-get-type": "^29.6.3" } }, "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA=="], + + "@jest/schemas": ["@jest/schemas@29.6.3", "", { "dependencies": { "@sinclair/typebox": "^0.27.8" } }, "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA=="], + + "@jest/types": ["@jest/types@29.6.3", "", { "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/set-array": ["@jridgewell/set-array@1.2.1", "", {}, "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="], + + "@jridgewell/source-map": ["@jridgewell/source-map@0.3.6", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], + + "@jsdevtools/ono": ["@jsdevtools/ono@7.1.3", "", {}, "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg=="], + + "@langchain/core": ["@langchain/core@0.3.57", "", { "dependencies": { "@cfworker/json-schema": "^4.0.2", "ansi-styles": "^5.0.0", "camelcase": "6", "decamelize": "1.2.0", "js-tiktoken": "^1.0.12", "langsmith": "^0.3.29", "mustache": "^4.2.0", "p-queue": "^6.6.2", "p-retry": "4", "uuid": "^10.0.0", "zod": "^3.22.4", "zod-to-json-schema": "^3.22.3" } }, "sha512-jz28qCTKJmi47b6jqhQ6vYRTG5jRpqhtPQjriRTB5wR8mgvzo6xKs0fG/kExS3ZvM79ytD1npBvgf8i19xOo9Q=="], + + "@mapbox/node-pre-gyp": ["@mapbox/node-pre-gyp@2.0.0", "", { "dependencies": { "consola": "^3.2.3", "detect-libc": "^2.0.0", "https-proxy-agent": "^7.0.5", "node-fetch": "^2.6.7", "nopt": "^8.0.0", "semver": "^7.5.3", "tar": "^7.4.0" }, "bin": { "node-pre-gyp": "bin/node-pre-gyp" } }, "sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg=="], + + "@mem0/vercel-ai-provider": ["@mem0/vercel-ai-provider@1.0.5", "", { "dependencies": { "@ai-sdk/anthropic": "1.1.12", "@ai-sdk/cohere": "1.1.12", "@ai-sdk/groq": "1.1.11", "@ai-sdk/openai": "1.1.15", "@ai-sdk/provider": "1.0.9", "@ai-sdk/provider-utils": "2.1.10", "ai": "4.1.46", "dotenv": "^16.4.5", "mem0ai": "^2.1.12", "partial-json": "0.1.7", "zod": "^3.0.0" } }, "sha512-+TN6ePMTgj6syVQN0j3DxcjDf2dOKM9qESpm29VEaEi5voQYT0DYOMjsJnPIAO90rhU32DF+k1PrtH9WJVRcmA=="], + + "@mistralai/mistralai": ["@mistralai/mistralai@1.6.1", "", { "dependencies": { "zod-to-json-schema": "^3.24.1" }, "peerDependencies": { "zod": ">= 3" } }, "sha512-NFAMamNFSAaLT4YhDrqEjhJALJXSheZdA5jXT6gG5ICCJRk9+WQx7vRQO1sIZNIRP+xpPyROpa7X6ZcufiucIA=="], + + "@netlify/binary-info": ["@netlify/binary-info@1.0.0", "", {}, "sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw=="], + + "@netlify/blobs": ["@netlify/blobs@9.1.2", "", { "dependencies": { "@netlify/dev-utils": "2.2.0", "@netlify/runtime-utils": "1.3.1" } }, "sha512-7dMjExSH4zj4ShvLem49mE3mf0K171Tx2pV4WDWhJbRUWW3SJIR2qntz0LvUGS97N5HO1SmnzrgWUhEXCsApiw=="], + + "@netlify/dev-utils": ["@netlify/dev-utils@2.2.0", "", { "dependencies": { "@whatwg-node/server": "^0.9.60", "chokidar": "^4.0.1", "decache": "^4.6.2", "dot-prop": "9.0.0", "env-paths": "^3.0.0", "find-up": "7.0.0", "lodash.debounce": "^4.0.8", "netlify": "^13.3.5", "parse-gitignore": "^2.0.0", "uuid": "^11.1.0", "write-file-atomic": "^6.0.0" } }, "sha512-5XUvZuffe3KetyhbWwd4n2ktd7wraocCYw10tlM+/u/95iAz29GjNiuNxbCD1T6Bn1MyGc4QLVNKOWhzJkVFAw=="], + + "@netlify/functions": ["@netlify/functions@3.1.9", "", { "dependencies": { "@netlify/blobs": "^9.1.2", "@netlify/dev-utils": "2.2.0", "@netlify/serverless-functions-api": "1.41.2", "@netlify/zip-it-and-ship-it": "^12.1.0", "cron-parser": "^4.9.0", "decache": "^4.6.2", "extract-zip": "^2.0.1", "is-stream": "^4.0.1", "jwt-decode": "^4.0.0", "lambda-local": "^2.2.0", "read-package-up": "^11.0.0", "source-map-support": "^0.5.21" } }, "sha512-mbmQIylPzOTDicMFbJF839W3bywJVR0Fm77uvjS6AkDl000VlLwQb+4eO3p0BV7j8+l5IgN/3ltQ/Byi/esTEQ=="], + + "@netlify/open-api": ["@netlify/open-api@2.37.0", "", {}, "sha512-zXnRFkxgNsalSgU8/vwTWnav3R+8KG8SsqHxqaoJdjjJtnZR7wo3f+qqu4z+WtZ/4V7fly91HFUwZ6Uz2OdW7w=="], + + "@netlify/runtime-utils": ["@netlify/runtime-utils@1.3.1", "", {}, "sha512-7/vIJlMYrPJPlEW84V2yeRuG3QBu66dmlv9neTmZ5nXzwylhBEOhy11ai+34A8mHCSZI4mKns25w3HM9kaDdJg=="], + + "@netlify/serverless-functions-api": ["@netlify/serverless-functions-api@1.41.2", "", {}, "sha512-pfCkH50JV06SGMNsNPjn8t17hOcId4fA881HeYQgMBOrewjsw4csaYgHEnCxCEu24Y5x75E2ULbFpqm9CvRCqw=="], + + "@netlify/zip-it-and-ship-it": ["@netlify/zip-it-and-ship-it@12.1.0", "", { "dependencies": { "@babel/parser": "^7.22.5", "@babel/types": "7.27.1", "@netlify/binary-info": "^1.0.0", "@netlify/serverless-functions-api": "^1.41.2", "@vercel/nft": "0.29.3", "archiver": "^7.0.0", "common-path-prefix": "^3.0.0", "copy-file": "^11.0.0", "es-module-lexer": "^1.0.0", "esbuild": "0.25.4", "execa": "^8.0.0", "fast-glob": "^3.3.2", "filter-obj": "^6.0.0", "find-up": "^7.0.0", "glob": "^8.0.3", "is-builtin-module": "^3.1.0", "is-path-inside": "^4.0.0", "junk": "^4.0.0", "locate-path": "^7.0.0", "merge-options": "^3.0.4", "minimatch": "^9.0.0", "normalize-path": "^3.0.0", "p-map": "^7.0.0", "path-exists": "^5.0.0", "precinct": "^12.0.0", "require-package-name": "^2.0.1", "resolve": "^2.0.0-next.1", "semver": "^7.3.8", "tmp-promise": "^3.0.2", "toml": "^3.0.0", "unixify": "^1.0.0", "urlpattern-polyfill": "8.0.2", "yargs": "^17.0.0", "zod": "^3.23.8" }, "bin": { "zip-it-and-ship-it": "./bin.js" } }, "sha512-+ND2fNnfeOZwnho79aMQ5rreFpI9tu/l4N9/F5H8t9rKYwVHHlv5Zi9o6g/gxZHDLfSbGC9th7Z46CihV8JaZw=="], + + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + + "@npmcli/fs": ["@npmcli/fs@1.1.1", "", { "dependencies": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" } }, "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ=="], + + "@npmcli/move-file": ["@npmcli/move-file@1.1.2", "", { "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" } }, "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg=="], + + "@openrouter/ai-sdk-provider": ["@openrouter/ai-sdk-provider@0.4.6", "", { "dependencies": { "@ai-sdk/provider": "1.0.9", "@ai-sdk/provider-utils": "2.1.10" }, "peerDependencies": { "zod": "^3.0.0" } }, "sha512-oUa8xtssyUhiKEU/aW662lsZ0HUvIUTRk8vVIF3Ha3KI/DnqX54zmVIuzYnaDpermqhy18CHqblAY4dDt1JW3g=="], + + "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], + + "@parcel/watcher": ["@parcel/watcher@2.5.1", "", { "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", "micromatch": "^4.0.5", "node-addon-api": "^7.0.0" }, "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" } }, "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg=="], + + "@parcel/watcher-android-arm64": ["@parcel/watcher-android-arm64@2.5.1", "", { "os": "android", "cpu": "arm64" }, "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA=="], + + "@parcel/watcher-darwin-arm64": ["@parcel/watcher-darwin-arm64@2.5.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw=="], + + "@parcel/watcher-darwin-x64": ["@parcel/watcher-darwin-x64@2.5.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg=="], + + "@parcel/watcher-freebsd-x64": ["@parcel/watcher-freebsd-x64@2.5.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ=="], + + "@parcel/watcher-linux-arm-glibc": ["@parcel/watcher-linux-arm-glibc@2.5.1", "", { "os": "linux", "cpu": "arm" }, "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA=="], + + "@parcel/watcher-linux-arm-musl": ["@parcel/watcher-linux-arm-musl@2.5.1", "", { "os": "linux", "cpu": "arm" }, "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q=="], + + "@parcel/watcher-linux-arm64-glibc": ["@parcel/watcher-linux-arm64-glibc@2.5.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w=="], + + "@parcel/watcher-linux-arm64-musl": ["@parcel/watcher-linux-arm64-musl@2.5.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg=="], + + "@parcel/watcher-linux-x64-glibc": ["@parcel/watcher-linux-x64-glibc@2.5.1", "", { "os": "linux", "cpu": "x64" }, "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A=="], + + "@parcel/watcher-linux-x64-musl": ["@parcel/watcher-linux-x64-musl@2.5.1", "", { "os": "linux", "cpu": "x64" }, "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg=="], + + "@parcel/watcher-wasm": ["@parcel/watcher-wasm@2.5.1", "", { "dependencies": { "is-glob": "^4.0.3", "micromatch": "^4.0.5", "napi-wasm": "^1.1.0" } }, "sha512-RJxlQQLkaMMIuWRozy+z2vEqbaQlCuaCgVZIUCzQLYggY22LZbP5Y1+ia+FD724Ids9e+XIyOLXLrLgQSHIthw=="], + + "@parcel/watcher-win32-arm64": ["@parcel/watcher-win32-arm64@2.5.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw=="], + + "@parcel/watcher-win32-ia32": ["@parcel/watcher-win32-ia32@2.5.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ=="], + + "@parcel/watcher-win32-x64": ["@parcel/watcher-win32-x64@2.5.1", "", { "os": "win32", "cpu": "x64" }, "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA=="], + + "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], + + "@poppinss/colors": ["@poppinss/colors@4.1.4", "", { "dependencies": { "kleur": "^4.1.5" } }, "sha512-FA+nTU8p6OcSH4tLDY5JilGYr1bVWHpNmcLr7xmMEdbWmKHa+3QZ+DqefrXKmdjO/brHTnQZo20lLSjaO7ydog=="], + + "@poppinss/dumper": ["@poppinss/dumper@0.6.3", "", { "dependencies": { "@poppinss/colors": "^4.1.4", "@sindresorhus/is": "^7.0.1", "supports-color": "^10.0.0" } }, "sha512-iombbn8ckOixMtuV1p3f8jN6vqhXefNjJttoPaJDMeIk/yIGhkkL3OrHkEjE9SRsgoAx1vBUU2GtgggjvA5hCA=="], + + "@poppinss/exception": ["@poppinss/exception@1.2.1", "", {}, "sha512-aQypoot0HPSJa6gDPEPTntc1GT6QINrSbgRlRhadGW2WaYqUK3tK4Bw9SBMZXhmxd3GeAlZjVcODHgiu+THY7A=="], + + "@qdrant/js-client-rest": ["@qdrant/js-client-rest@1.13.0", "", { "dependencies": { "@qdrant/openapi-typescript-fetch": "1.2.6", "@sevinf/maybe": "0.5.0", "undici": "~5.28.4" }, "peerDependencies": { "typescript": ">=4.7" } }, "sha512-bewMtnXlGvhhnfXsp0sLoLXOGvnrCM15z9lNlG0Snp021OedNAnRtKkerjk5vkOcbQWUmJHXYCuxDfcT93aSkA=="], + + "@qdrant/openapi-typescript-fetch": ["@qdrant/openapi-typescript-fetch@1.2.6", "", {}, "sha512-oQG/FejNpItrxRHoyctYvT3rwGZOnK4jr3JdppO/c78ktDvkWiPXPHNsrDf33K9sZdRb6PR7gi4noIapu5q4HA=="], + + "@redis/bloom": ["@redis/bloom@1.2.0", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg=="], + + "@redis/client": ["@redis/client@1.6.1", "", { "dependencies": { "cluster-key-slot": "1.1.2", "generic-pool": "3.9.0", "yallist": "4.0.0" } }, "sha512-/KCsg3xSlR+nCK8/8ZYSknYxvXHwubJrU82F3Lm1Fp6789VQ0/3RJKfsmRXjqfaTA++23CvC3hqmqe/2GEt6Kw=="], + + "@redis/graph": ["@redis/graph@1.1.1", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw=="], + + "@redis/json": ["@redis/json@1.0.7", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ=="], + + "@redis/search": ["@redis/search@1.2.0", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw=="], + + "@redis/time-series": ["@redis/time-series@1.1.0", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g=="], + + "@rollup/plugin-alias": ["@rollup/plugin-alias@5.1.1", "", { "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ=="], + + "@rollup/plugin-commonjs": ["@rollup/plugin-commonjs@28.0.3", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", "estree-walker": "^2.0.2", "fdir": "^6.2.0", "is-reference": "1.2.1", "magic-string": "^0.30.3", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^2.68.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ=="], + + "@rollup/plugin-inject": ["@rollup/plugin-inject@5.0.5", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "estree-walker": "^2.0.2", "magic-string": "^0.30.3" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg=="], + + "@rollup/plugin-json": ["@rollup/plugin-json@6.1.0", "", { "dependencies": { "@rollup/pluginutils": "^5.1.0" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA=="], + + "@rollup/plugin-node-resolve": ["@rollup/plugin-node-resolve@16.0.1", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", "is-module": "^1.0.0", "resolve": "^1.22.1" }, "peerDependencies": { "rollup": "^2.78.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA=="], + + "@rollup/plugin-replace": ["@rollup/plugin-replace@6.0.2", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "magic-string": "^0.30.3" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ=="], + + "@rollup/plugin-terser": ["@rollup/plugin-terser@0.4.4", "", { "dependencies": { "serialize-javascript": "^6.0.1", "smob": "^1.0.0", "terser": "^5.17.4" }, "peerDependencies": { "rollup": "^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A=="], + + "@rollup/pluginutils": ["@rollup/pluginutils@5.1.4", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.41.1", "", { "os": "android", "cpu": "arm" }, "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.41.1", "", { "os": "android", "cpu": "arm64" }, "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.41.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.41.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.41.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.41.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.41.1", "", { "os": "linux", "cpu": "arm" }, "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.41.1", "", { "os": "linux", "cpu": "arm" }, "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.41.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.41.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg=="], + + "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.41.1", "", { "os": "linux", "cpu": "none" }, "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw=="], + + "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.41.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.41.1", "", { "os": "linux", "cpu": "none" }, "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.41.1", "", { "os": "linux", "cpu": "none" }, "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.41.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.41.1", "", { "os": "linux", "cpu": "x64" }, "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.41.1", "", { "os": "linux", "cpu": "x64" }, "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.41.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.41.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.41.1", "", { "os": "win32", "cpu": "x64" }, "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw=="], + + "@sevinf/maybe": ["@sevinf/maybe@0.5.0", "", {}, "sha512-ARhyoYDnY1LES3vYI0fiG6e9esWfTNcXcO6+MPJJXcnyMV3bim4lnFt45VXouV7y82F4x3YH8nOQ6VztuvUiWg=="], + + "@sinclair/typebox": ["@sinclair/typebox@0.27.8", "", {}, "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA=="], + + "@sindresorhus/is": ["@sindresorhus/is@7.0.1", "", {}, "sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ=="], + + "@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@2.3.0", "", {}, "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg=="], + + "@speed-highlight/core": ["@speed-highlight/core@1.2.7", "", {}, "sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g=="], + + "@supabase/auth-js": ["@supabase/auth-js@2.69.1", "", { "dependencies": { "@supabase/node-fetch": "^2.6.14" } }, "sha512-FILtt5WjCNzmReeRLq5wRs3iShwmnWgBvxHfqapC/VoljJl+W8hDAyFmf1NVw3zH+ZjZ05AKxiKxVeb0HNWRMQ=="], + + "@supabase/functions-js": ["@supabase/functions-js@2.4.4", "", { "dependencies": { "@supabase/node-fetch": "^2.6.14" } }, "sha512-WL2p6r4AXNGwop7iwvul2BvOtuJ1YQy8EbOd0dhG1oN1q8el/BIRSFCFnWAMM/vJJlHWLi4ad22sKbKr9mvjoA=="], + + "@supabase/node-fetch": ["@supabase/node-fetch@2.6.15", "", { "dependencies": { "whatwg-url": "^5.0.0" } }, "sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ=="], + + "@supabase/postgrest-js": ["@supabase/postgrest-js@1.19.4", "", { "dependencies": { "@supabase/node-fetch": "^2.6.14" } }, "sha512-O4soKqKtZIW3olqmbXXbKugUtByD2jPa8kL2m2c1oozAO11uCcGrRhkZL0kVxjBLrXHE0mdSkFsMj7jDSfyNpw=="], + + "@supabase/realtime-js": ["@supabase/realtime-js@2.11.2", "", { "dependencies": { "@supabase/node-fetch": "^2.6.14", "@types/phoenix": "^1.5.4", "@types/ws": "^8.5.10", "ws": "^8.18.0" } }, "sha512-u/XeuL2Y0QEhXSoIPZZwR6wMXgB+RQbJzG9VErA3VghVt7uRfSVsjeqd7m5GhX3JR6dM/WRmLbVR8URpDWG4+w=="], + + "@supabase/storage-js": ["@supabase/storage-js@2.7.1", "", { "dependencies": { "@supabase/node-fetch": "^2.6.14" } }, "sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA=="], + + "@supabase/supabase-js": ["@supabase/supabase-js@2.49.8", "", { "dependencies": { "@supabase/auth-js": "2.69.1", "@supabase/functions-js": "2.4.4", "@supabase/node-fetch": "2.6.15", "@supabase/postgrest-js": "1.19.4", "@supabase/realtime-js": "2.11.2", "@supabase/storage-js": "2.7.1" } }, "sha512-zzBQLgS/jZs7btWcIAc7V5yfB+juG7h0AXxKowMJuySsO5vK+F7Vp+HCa07Z+tu9lZtr3sT9fofkc86bdylmtw=="], + + "@t3-oss/env-core": ["@t3-oss/env-core@0.13.4", "", { "peerDependencies": { "arktype": "^2.1.0", "typescript": ">=5.0.0", "valibot": "^1.0.0-beta.7 || ^1.0.0", "zod": "^3.24.0 || ^4.0.0-beta.0" }, "optionalPeers": ["typescript", "valibot", "zod"] }, "sha512-zVOiYO0+CF7EnBScz8s0O5JnJLPTU0lrUi8qhKXfIxIJXvI/jcppSiXXsEJwfB4A6XZawY/Wg/EQGKANi/aPmQ=="], + + "@tootallnate/once": ["@tootallnate/once@1.1.2", "", {}, "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="], + + "@types/bun": ["@types/bun@1.2.14", "", { "dependencies": { "bun-types": "1.2.14" } }, "sha512-VsFZKs8oKHzI7zwvECiAJ5oSorWndIWEVhfbYqZd4HI/45kzW7PN2Rr5biAzvGvRuNmYLSANY+H59ubHq8xw7Q=="], + + "@types/diff-match-patch": ["@types/diff-match-patch@1.0.36", "", {}, "sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg=="], + + "@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + + "@types/istanbul-lib-coverage": ["@types/istanbul-lib-coverage@2.0.6", "", {}, "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w=="], + + "@types/istanbul-lib-report": ["@types/istanbul-lib-report@3.0.3", "", { "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA=="], + + "@types/istanbul-reports": ["@types/istanbul-reports@3.0.4", "", { "dependencies": { "@types/istanbul-lib-report": "*" } }, "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ=="], + + "@types/jest": ["@types/jest@29.5.14", "", { "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" } }, "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ=="], + + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + + "@types/node": ["@types/node@20.17.50", "", { "dependencies": { "undici-types": "~6.19.2" } }, "sha512-Mxiq0ULv/zo1OzOhwPqOA13I81CV/W3nvd3ChtQZRT5Cwz3cr0FKo/wMSsbTqL3EXpaBAEQhva2B8ByRkOIh9A=="], + + "@types/node-fetch": ["@types/node-fetch@2.6.12", "", { "dependencies": { "@types/node": "*", "form-data": "^4.0.0" } }, "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA=="], + + "@types/normalize-package-data": ["@types/normalize-package-data@2.4.4", "", {}, "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA=="], + + "@types/pg": ["@types/pg@8.11.0", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^4.0.1" } }, "sha512-sDAlRiBNthGjNFfvt0k6mtotoVYVQ63pA8R4EMWka7crawSR60waVYR0HAgmPRs/e2YaeJTD/43OoZ3PFw80pw=="], + + "@types/phoenix": ["@types/phoenix@1.6.6", "", {}, "sha512-PIzZZlEppgrpoT2QgbnDU+MMzuR6BbCjllj0bM70lWoejMeNJAxCchxnv7J3XFkI8MpygtRpzXrIlmWUBclP5A=="], + + "@types/resolve": ["@types/resolve@1.20.2", "", {}, "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q=="], + + "@types/retry": ["@types/retry@0.12.0", "", {}, "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA=="], + + "@types/sqlite3": ["@types/sqlite3@3.1.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-KYF+QgxAnnAh7DWPdNDroxkDI3/MspH1NMx6m/N/6fT1G6+jvsw4/ZePt8R8cr7ta58aboeTfYFBDxTJ5yv15w=="], + + "@types/stack-utils": ["@types/stack-utils@2.0.3", "", {}, "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw=="], + + "@types/triple-beam": ["@types/triple-beam@1.3.5", "", {}, "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw=="], + + "@types/uuid": ["@types/uuid@10.0.0", "", {}, "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ=="], + + "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], + + "@types/yargs": ["@types/yargs@17.0.33", "", { "dependencies": { "@types/yargs-parser": "*" } }, "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA=="], + + "@types/yargs-parser": ["@types/yargs-parser@21.0.3", "", {}, "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ=="], + + "@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="], + + "@typescript-eslint/types": ["@typescript-eslint/types@8.32.1", "", {}, "sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg=="], + + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.32.1", "", { "dependencies": { "@typescript-eslint/types": "8.32.1", "@typescript-eslint/visitor-keys": "8.32.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg=="], + + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.32.1", "", { "dependencies": { "@typescript-eslint/types": "8.32.1", "eslint-visitor-keys": "^4.2.0" } }, "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w=="], + + "@vercel/functions": ["@vercel/functions@2.1.0", "", { "peerDependencies": { "@aws-sdk/credential-provider-web-identity": "*" }, "optionalPeers": ["@aws-sdk/credential-provider-web-identity"] }, "sha512-1gSbK9zfrbJxk1JTBVERDhLi01mK3fz+gw4GjOjZwHnqs0zsBhQA70HGVtXQX/Z3BTRMfbpAEMVDfhecRw0lDA=="], + + "@vercel/nft": ["@vercel/nft@0.29.3", "", { "dependencies": { "@mapbox/node-pre-gyp": "^2.0.0", "@rollup/pluginutils": "^5.1.3", "acorn": "^8.6.0", "acorn-import-attributes": "^1.9.5", "async-sema": "^3.1.1", "bindings": "^1.4.0", "estree-walker": "2.0.2", "glob": "^10.4.5", "graceful-fs": "^4.2.9", "node-gyp-build": "^4.2.2", "picomatch": "^4.0.2", "resolve-from": "^5.0.0" }, "bin": { "nft": "out/cli.js" } }, "sha512-aVV0E6vJpuvImiMwU1/5QKkw2N96BRFE7mBYGS7FhXUoS6V7SarQ+8tuj33o7ofECz8JtHpmQ9JW+oVzOoB7MA=="], + + "@vue/compiler-core": ["@vue/compiler-core@3.5.14", "", { "dependencies": { "@babel/parser": "^7.27.2", "@vue/shared": "3.5.14", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-k7qMHMbKvoCXIxPhquKQVw3Twid3Kg4s7+oYURxLGRd56LiuHJVrvFKI4fm2AM3c8apqODPfVJGoh8nePbXMRA=="], + + "@vue/compiler-dom": ["@vue/compiler-dom@3.5.14", "", { "dependencies": { "@vue/compiler-core": "3.5.14", "@vue/shared": "3.5.14" } }, "sha512-1aOCSqxGOea5I80U2hQJvXYpPm/aXo95xL/m/mMhgyPUsKe9jhjwWpziNAw7tYRnbz1I61rd9Mld4W9KmmRoug=="], + + "@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.14", "", { "dependencies": { "@babel/parser": "^7.27.2", "@vue/compiler-core": "3.5.14", "@vue/compiler-dom": "3.5.14", "@vue/compiler-ssr": "3.5.14", "@vue/shared": "3.5.14", "estree-walker": "^2.0.2", "magic-string": "^0.30.17", "postcss": "^8.5.3", "source-map-js": "^1.2.1" } }, "sha512-9T6m/9mMr81Lj58JpzsiSIjBgv2LiVoWjIVa7kuXHICUi8LiDSIotMpPRXYJsXKqyARrzjT24NAwttrMnMaCXA=="], + + "@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.14", "", { "dependencies": { "@vue/compiler-dom": "3.5.14", "@vue/shared": "3.5.14" } }, "sha512-Y0G7PcBxr1yllnHuS/NxNCSPWnRGH4Ogrp0tsLA5QemDZuJLs99YjAKQ7KqkHE0vCg4QTKlQzXLKCMF7WPSl7Q=="], + + "@vue/shared": ["@vue/shared@3.5.14", "", {}, "sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ=="], + + "@whatwg-node/disposablestack": ["@whatwg-node/disposablestack@0.0.6", "", { "dependencies": { "@whatwg-node/promise-helpers": "^1.0.0", "tslib": "^2.6.3" } }, "sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw=="], + + "@whatwg-node/fetch": ["@whatwg-node/fetch@0.10.8", "", { "dependencies": { "@whatwg-node/node-fetch": "^0.7.21", "urlpattern-polyfill": "^10.0.0" } }, "sha512-Rw9z3ctmeEj8QIB9MavkNJqekiu9usBCSMZa+uuAvM0lF3v70oQVCXNppMIqaV6OTZbdaHF1M2HLow58DEw+wg=="], + + "@whatwg-node/node-fetch": ["@whatwg-node/node-fetch@0.7.21", "", { "dependencies": { "@fastify/busboy": "^3.1.1", "@whatwg-node/disposablestack": "^0.0.6", "@whatwg-node/promise-helpers": "^1.3.2", "tslib": "^2.6.3" } }, "sha512-QC16IdsEyIW7kZd77aodrMO7zAoDyyqRCTLg+qG4wqtP4JV9AA+p7/lgqMdD29XyiYdVvIdFrfI9yh7B1QvRvw=="], + + "@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@1.3.2", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA=="], + + "@whatwg-node/server": ["@whatwg-node/server@0.9.71", "", { "dependencies": { "@whatwg-node/disposablestack": "^0.0.6", "@whatwg-node/fetch": "^0.10.5", "@whatwg-node/promise-helpers": "^1.2.2", "tslib": "^2.6.3" } }, "sha512-ueFCcIPaMgtuYDS9u0qlUoEvj6GiSsKrwnOLPp9SshqjtcRaR1IEHRjoReq3sXNydsF5i0ZnmuYgXq9dV53t0g=="], + + "abbrev": ["abbrev@3.0.1", "", {}, "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg=="], + + "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], + + "acorn": ["acorn@8.14.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], + + "acorn-import-attributes": ["acorn-import-attributes@1.9.5", "", { "peerDependencies": { "acorn": "^8" } }, "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ=="], + + "agent-base": ["agent-base@7.1.3", "", {}, "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw=="], + + "agentkeepalive": ["agentkeepalive@4.6.0", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="], + + "aggregate-error": ["aggregate-error@3.1.0", "", { "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" } }, "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA=="], + + "ai": ["ai@4.3.16", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "@ai-sdk/provider-utils": "2.2.8", "@ai-sdk/react": "1.2.12", "@ai-sdk/ui-utils": "1.2.11", "@opentelemetry/api": "1.9.0", "jsondiffpatch": "0.6.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "zod": "^3.23.8" }, "optionalPeers": ["react"] }, "sha512-KUDwlThJ5tr2Vw0A1ZkbDKNME3wzWhuVfAOwIvFUzl1TPVDFAXDFTXio3p+jaKneB+dKNCvFFlolYmmgHttG1g=="], + + "ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], + + "ajv-errors": ["ajv-errors@3.0.0", "", { "peerDependencies": { "ajv": "^8.0.1" } }, "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ=="], + + "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], + + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + + "aproba": ["aproba@2.0.0", "", {}, "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ=="], + + "archiver": ["archiver@7.0.1", "", { "dependencies": { "archiver-utils": "^5.0.2", "async": "^3.2.4", "buffer-crc32": "^1.0.0", "readable-stream": "^4.0.0", "readdir-glob": "^1.1.2", "tar-stream": "^3.0.0", "zip-stream": "^6.0.1" } }, "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ=="], + + "archiver-utils": ["archiver-utils@5.0.2", "", { "dependencies": { "glob": "^10.0.0", "graceful-fs": "^4.2.0", "is-stream": "^2.0.1", "lazystream": "^1.0.0", "lodash": "^4.17.15", "normalize-path": "^3.0.0", "readable-stream": "^4.0.0" } }, "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA=="], + + "are-we-there-yet": ["are-we-there-yet@3.0.1", "", { "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" } }, "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg=="], + + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "arktype": ["arktype@2.1.20", "", { "dependencies": { "@ark/schema": "0.46.0", "@ark/util": "0.46.0" } }, "sha512-IZCEEXaJ8g+Ijd59WtSYwtjnqXiwM8sWQ5EjGamcto7+HVN9eK0C4p0zDlCuAwWhpqr6fIBkxPuYDl4/Mcj/+Q=="], + + "ast-module-types": ["ast-module-types@6.0.1", "", {}, "sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA=="], + + "async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="], + + "async-sema": ["async-sema@3.1.1", "", {}, "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg=="], + + "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], + + "axios": ["axios@1.7.7", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q=="], + + "b4a": ["b4a@1.6.7", "", {}, "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "bare-events": ["bare-events@2.5.4", "", {}, "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA=="], + + "base-64": ["base-64@0.1.0", "", {}, "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA=="], + + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + + "bignumber.js": ["bignumber.js@9.3.0", "", {}, "sha512-EM7aMFTXbptt/wZdMlBv2t8IViwQL+h6SLHosp8Yf0dqJMTnY6iL32opnAB6kAdL0SZPuvcAzFr31o0c/R3/RA=="], + + "bindings": ["bindings@1.5.0", "", { "dependencies": { "file-uri-to-path": "1.0.0" } }, "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="], + + "bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], + + "brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + + "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + + "buffer-crc32": ["buffer-crc32@1.0.0", "", {}, "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w=="], + + "buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="], + + "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + + "buffer-writer": ["buffer-writer@2.0.0", "", {}, "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw=="], + + "builtin-modules": ["builtin-modules@3.3.0", "", {}, "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw=="], + + "bun-types": ["bun-types@1.2.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-Kuh4Ub28ucMRWeiUUWMHsT9Wcbr4H3kLIO72RZZElSDxSu7vpetRvxIUDUaW6QtaIeixIpm7OXtNnZPf82EzwA=="], + + "c12": ["c12@2.0.1", "", { "dependencies": { "chokidar": "^4.0.1", "confbox": "^0.1.7", "defu": "^6.1.4", "dotenv": "^16.4.5", "giget": "^1.2.3", "jiti": "^2.3.0", "mlly": "^1.7.1", "ohash": "^1.1.4", "pathe": "^1.1.2", "perfect-debounce": "^1.0.0", "pkg-types": "^1.2.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "^0.3.5" }, "optionalPeers": ["magicast"] }, "sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A=="], + + "cacache": ["cacache@15.3.0", "", { "dependencies": { "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "glob": "^7.1.4", "infer-owner": "^1.0.4", "lru-cache": "^6.0.0", "minipass": "^3.1.1", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.2", "mkdirp": "^1.0.3", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", "ssri": "^8.0.1", "tar": "^6.0.2", "unique-filename": "^1.1.1" } }, "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], + + "callsite": ["callsite@1.0.0", "", {}, "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ=="], + + "camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], + + "chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], + + "charenc": ["charenc@0.0.2", "", {}, "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA=="], + + "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], + + "chownr": ["chownr@2.0.0", "", {}, "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="], + + "ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], + + "citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], + + "clean-stack": ["clean-stack@2.2.0", "", {}, "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="], + + "clipboardy": ["clipboardy@4.0.0", "", { "dependencies": { "execa": "^8.0.1", "is-wsl": "^3.1.0", "is64bit": "^2.0.0" } }, "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w=="], + + "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "cluster-key-slot": ["cluster-key-slot@1.1.2", "", {}, "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA=="], + + "color": ["color@3.2.1", "", { "dependencies": { "color-convert": "^1.9.3", "color-string": "^1.6.0" } }, "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "color-string": ["color-string@1.9.1", "", { "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg=="], + + "color-support": ["color-support@1.1.3", "", { "bin": { "color-support": "bin.js" } }, "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="], + + "colorspace": ["colorspace@1.1.4", "", { "dependencies": { "color": "^3.1.3", "text-hex": "1.0.x" } }, "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w=="], + + "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], + + "commander": ["commander@13.0.0", "", {}, "sha512-oPYleIY8wmTVzkvQq10AEok6YcTC4sRUBl8F9gVuwchGVUCTbl/vhLTaQqutuuySYOsu8YTgV+OxKc/8Yvx+mQ=="], + + "common-path-prefix": ["common-path-prefix@3.0.0", "", {}, "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w=="], + + "commondir": ["commondir@1.0.1", "", {}, "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="], + + "compatx": ["compatx@0.2.0", "", {}, "sha512-6gLRNt4ygsi5NyMVhceOCFv14CIdDFN7fQjX1U4+47qVE/+kjPoXMK65KWK+dWxmFzMTuKazoQ9sch6pM0p5oA=="], + + "compress-commons": ["compress-commons@6.0.2", "", { "dependencies": { "crc-32": "^1.2.0", "crc32-stream": "^6.0.0", "is-stream": "^2.0.1", "normalize-path": "^3.0.0", "readable-stream": "^4.0.0" } }, "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], + + "consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], + + "console-control-strings": ["console-control-strings@1.1.0", "", {}, "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="], + + "console-table-printer": ["console-table-printer@2.13.0", "", { "dependencies": { "simple-wcswidth": "^1.0.1" } }, "sha512-Wl1rFO1NLonYBBjrdF2SMCnfNrKr8PPooPSnQBRX3LTJsnyGjBzLcwffo8wSKuJ0kr/rgC2Ltxb3Bpb072VA9w=="], + + "cookie": ["cookie@1.0.2", "", {}, "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA=="], + + "cookie-es": ["cookie-es@2.0.0", "", {}, "sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg=="], + + "copy-file": ["copy-file@11.0.0", "", { "dependencies": { "graceful-fs": "^4.2.11", "p-event": "^6.0.0" } }, "sha512-mFsNh/DIANLqFt5VHZoGirdg7bK5+oTWlhnGu6tgRhzBlnEKWaPX2xrFaLltii/6rmhqFMJqffUgknuRdpYlHw=="], + + "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], + + "crc-32": ["crc-32@1.2.2", "", { "bin": { "crc32": "bin/crc32.njs" } }, "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="], + + "crc32-stream": ["crc32-stream@6.0.0", "", { "dependencies": { "crc-32": "^1.2.0", "readable-stream": "^4.0.0" } }, "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g=="], + + "cron-parser": ["cron-parser@4.9.0", "", { "dependencies": { "luxon": "^3.2.1" } }, "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q=="], + + "croner": ["croner@9.0.0", "", {}, "sha512-onMB0OkDjkXunhdW9htFjEhqrD54+M94i6ackoUkjHKbRnXdyEyKRelp4nJ1kAz32+s27jP1FsebpJCVl0BsvA=="], + + "cross-fetch": ["cross-fetch@4.1.0", "", { "dependencies": { "node-fetch": "^2.7.0" } }, "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "crossws": ["crossws@0.3.5", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA=="], + + "crypt": ["crypt@0.0.2", "", {}, "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow=="], + + "data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="], + + "db0": ["db0@0.3.2", "", { "peerDependencies": { "@electric-sql/pglite": "*", "@libsql/client": "*", "better-sqlite3": "*", "drizzle-orm": "*", "mysql2": "*", "sqlite3": "*" }, "optionalPeers": ["@electric-sql/pglite", "@libsql/client", "better-sqlite3", "drizzle-orm", "mysql2", "sqlite3"] }, "sha512-xzWNQ6jk/+NtdfLyXEipbX55dmDSeteLFt/ayF+wZUU5bzKgmrDOxmInUTbyVRp46YwnJdkDA1KhB7WIXFofJw=="], + + "debug": ["debug@4.4.1", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], + + "decache": ["decache@4.6.2", "", { "dependencies": { "callsite": "^1.0.0" } }, "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw=="], + + "decamelize": ["decamelize@1.2.0", "", {}, "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="], + + "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], + + "deep-extend": ["deep-extend@0.6.0", "", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="], + + "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + + "define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], + + "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + + "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], + + "delegates": ["delegates@1.0.0", "", {}, "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="], + + "denque": ["denque@2.1.0", "", {}, "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="], + + "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], + + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + + "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], + + "detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="], + + "detective-amd": ["detective-amd@6.0.1", "", { "dependencies": { "ast-module-types": "^6.0.1", "escodegen": "^2.1.0", "get-amd-module-type": "^6.0.1", "node-source-walk": "^7.0.1" }, "bin": { "detective-amd": "bin/cli.js" } }, "sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g=="], + + "detective-cjs": ["detective-cjs@6.0.1", "", { "dependencies": { "ast-module-types": "^6.0.1", "node-source-walk": "^7.0.1" } }, "sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw=="], + + "detective-es6": ["detective-es6@5.0.1", "", { "dependencies": { "node-source-walk": "^7.0.1" } }, "sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew=="], + + "detective-postcss": ["detective-postcss@7.0.1", "", { "dependencies": { "is-url": "^1.2.4", "postcss-values-parser": "^6.0.2" }, "peerDependencies": { "postcss": "^8.4.47" } }, "sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ=="], + + "detective-sass": ["detective-sass@6.0.1", "", { "dependencies": { "gonzales-pe": "^4.3.0", "node-source-walk": "^7.0.1" } }, "sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw=="], + + "detective-scss": ["detective-scss@5.0.1", "", { "dependencies": { "gonzales-pe": "^4.3.0", "node-source-walk": "^7.0.1" } }, "sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg=="], + + "detective-stylus": ["detective-stylus@5.0.1", "", {}, "sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA=="], + + "detective-typescript": ["detective-typescript@14.0.0", "", { "dependencies": { "@typescript-eslint/typescript-estree": "^8.23.0", "ast-module-types": "^6.0.1", "node-source-walk": "^7.0.1" }, "peerDependencies": { "typescript": "^5.4.4" } }, "sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw=="], + + "detective-vue2": ["detective-vue2@2.2.0", "", { "dependencies": { "@dependents/detective-less": "^5.0.1", "@vue/compiler-sfc": "^3.5.13", "detective-es6": "^5.0.1", "detective-sass": "^6.0.1", "detective-scss": "^5.0.1", "detective-stylus": "^5.0.1", "detective-typescript": "^14.0.0" }, "peerDependencies": { "typescript": "^5.4.4" } }, "sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA=="], + + "diff-match-patch": ["diff-match-patch@1.0.5", "", {}, "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw=="], + + "diff-sequences": ["diff-sequences@29.6.3", "", {}, "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q=="], + + "digest-fetch": ["digest-fetch@1.3.0", "", { "dependencies": { "base-64": "^0.1.0", "md5": "^2.3.0" } }, "sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA=="], + + "discourse2-chat": ["discourse2-chat@1.1.5", "", { "dependencies": { "ajv": "^8.17.1", "ajv-errors": "^3.0.0", "ajv-formats": "^3.0.1", "openapi-types": "^12.1.3" } }, "sha512-VbyHRV6C6uyYc5PMbgNjTm0FTm1tb2jJh75wKB+51xC6zhbFoJ8QmxlYHRfuw0Ct9M1xTkwqW8g/176rbx3eSg=="], + + "dot-prop": ["dot-prop@9.0.0", "", { "dependencies": { "type-fest": "^4.18.2" } }, "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ=="], + + "dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "duplexer": ["duplexer@0.1.2", "", {}, "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="], + + "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], + + "ecdsa-sig-formatter": ["ecdsa-sig-formatter@1.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ=="], + + "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], + + "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "enabled": ["enabled@2.0.0", "", {}, "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="], + + "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], + + "encoding": ["encoding@0.1.13", "", { "dependencies": { "iconv-lite": "^0.6.2" } }, "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A=="], + + "end-of-stream": ["end-of-stream@1.4.4", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="], + + "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + + "env-paths": ["env-paths@3.0.0", "", {}, "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A=="], + + "err-code": ["err-code@2.0.3", "", {}, "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="], + + "error-stack-parser-es": ["error-stack-parser-es@1.0.5", "", {}, "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], + + "esbuild": ["esbuild@0.25.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.4", "@esbuild/android-arm": "0.25.4", "@esbuild/android-arm64": "0.25.4", "@esbuild/android-x64": "0.25.4", "@esbuild/darwin-arm64": "0.25.4", "@esbuild/darwin-x64": "0.25.4", "@esbuild/freebsd-arm64": "0.25.4", "@esbuild/freebsd-x64": "0.25.4", "@esbuild/linux-arm": "0.25.4", "@esbuild/linux-arm64": "0.25.4", "@esbuild/linux-ia32": "0.25.4", "@esbuild/linux-loong64": "0.25.4", "@esbuild/linux-mips64el": "0.25.4", "@esbuild/linux-ppc64": "0.25.4", "@esbuild/linux-riscv64": "0.25.4", "@esbuild/linux-s390x": "0.25.4", "@esbuild/linux-x64": "0.25.4", "@esbuild/netbsd-arm64": "0.25.4", "@esbuild/netbsd-x64": "0.25.4", "@esbuild/openbsd-arm64": "0.25.4", "@esbuild/openbsd-x64": "0.25.4", "@esbuild/sunos-x64": "0.25.4", "@esbuild/win32-arm64": "0.25.4", "@esbuild/win32-ia32": "0.25.4", "@esbuild/win32-x64": "0.25.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], + + "escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + + "escodegen": ["escodegen@2.1.0", "", { "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2" }, "optionalDependencies": { "source-map": "~0.6.1" }, "bin": { "esgenerate": "bin/esgenerate.js", "escodegen": "bin/escodegen.js" } }, "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w=="], + + "eslint-visitor-keys": ["eslint-visitor-keys@4.2.0", "", {}, "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw=="], + + "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], + + "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + + "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + + "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + + "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], + + "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], + + "eventemitter3": ["eventemitter3@4.0.7", "", {}, "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="], + + "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], + + "eventsource-parser": ["eventsource-parser@3.0.2", "", {}, "sha512-6RxOBZ/cYgd8usLwsEl+EC09Au/9BcmCKYF2/xbml6DNczf7nv0MQb+7BA2F+li6//I+28VNlQR37XfQtcAJuA=="], + + "exa-js": ["exa-js@1.7.2", "", { "dependencies": { "cross-fetch": "~4.1.0", "dotenv": "~16.4.7" } }, "sha512-bNo1AfjZa9749CAKiFWex19/LjmthboT4+wNeRUJS+BNCeJcFR4tnMzoTg+MWOzHSaL/bSFQqDWy0PelZCK9QA=="], + + "execa": ["execa@8.0.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", "human-signals": "^5.0.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", "onetime": "^6.0.0", "signal-exit": "^4.1.0", "strip-final-newline": "^3.0.0" } }, "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg=="], + + "expand-template": ["expand-template@2.0.3", "", {}, "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="], + + "expect": ["expect@29.7.0", "", { "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", "jest-matcher-utils": "^29.7.0", "jest-message-util": "^29.7.0", "jest-util": "^29.7.0" } }, "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw=="], + + "exsolve": ["exsolve@1.0.5", "", {}, "sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg=="], + + "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], + + "extract-zip": ["extract-zip@2.0.1", "", { "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, "optionalDependencies": { "@types/yauzl": "^2.9.1" }, "bin": { "extract-zip": "cli.js" } }, "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-fifo": ["fast-fifo@1.3.2", "", {}, "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="], + + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + + "fast-uri": ["fast-uri@3.0.6", "", {}, "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw=="], + + "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], + + "fd-slicer": ["fd-slicer@1.1.0", "", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="], + + "fdir": ["fdir@6.4.4", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg=="], + + "fecha": ["fecha@4.2.3", "", {}, "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw=="], + + "fetch-blob": ["fetch-blob@3.2.0", "", { "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="], + + "file-uri-to-path": ["file-uri-to-path@1.0.0", "", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="], + + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + + "filter-obj": ["filter-obj@6.1.0", "", {}, "sha512-xdMtCAODmPloU9qtmPcdBV9Kd27NtMse+4ayThxqIHUES5Z2S6bGpap5PpdmNM56ub7y3i1eyr+vJJIIgWGKmA=="], + + "find-up": ["find-up@7.0.0", "", { "dependencies": { "locate-path": "^7.2.0", "path-exists": "^5.0.0", "unicorn-magic": "^0.1.0" } }, "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g=="], + + "find-up-simple": ["find-up-simple@1.0.1", "", {}, "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ=="], + + "fn.name": ["fn.name@1.1.0", "", {}, "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="], + + "follow-redirects": ["follow-redirects@1.15.9", "", {}, "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="], + + "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], + + "form-data": ["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.12" } }, "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w=="], + + "form-data-encoder": ["form-data-encoder@1.7.2", "", {}, "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A=="], + + "formdata-node": ["formdata-node@4.4.1", "", { "dependencies": { "node-domexception": "1.0.0", "web-streams-polyfill": "4.0.0-beta.3" } }, "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ=="], + + "formdata-polyfill": ["formdata-polyfill@4.0.10", "", { "dependencies": { "fetch-blob": "^3.1.2" } }, "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="], + + "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], + + "fs-constants": ["fs-constants@1.0.0", "", {}, "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="], + + "fs-minipass": ["fs-minipass@2.1.0", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="], + + "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "gauge": ["gauge@4.0.4", "", { "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", "console-control-strings": "^1.1.0", "has-unicode": "^2.0.1", "signal-exit": "^3.0.7", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "wide-align": "^1.1.5" } }, "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg=="], + + "gaxios": ["gaxios@6.7.1", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "is-stream": "^2.0.0", "node-fetch": "^2.6.9", "uuid": "^9.0.1" } }, "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ=="], + + "gcp-metadata": ["gcp-metadata@6.1.1", "", { "dependencies": { "gaxios": "^6.1.1", "google-logging-utils": "^0.0.2", "json-bigint": "^1.0.0" } }, "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A=="], + + "generic-pool": ["generic-pool@3.9.0", "", {}, "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g=="], + + "get-amd-module-type": ["get-amd-module-type@6.0.1", "", { "dependencies": { "ast-module-types": "^6.0.1", "node-source-walk": "^7.0.1" } }, "sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ=="], + + "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-port-please": ["get-port-please@3.1.2", "", {}, "sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], + + "get-tsconfig": ["get-tsconfig@4.10.1", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ=="], + + "giget": ["giget@1.2.5", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "defu": "^6.1.4", "node-fetch-native": "^1.6.6", "nypm": "^0.5.4", "pathe": "^2.0.3", "tar": "^6.2.1" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug=="], + + "github-from-package": ["github-from-package@0.0.0", "", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="], + + "glob": ["glob@10.4.5", "", { "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" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], + + "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "globby": ["globby@14.1.0", "", { "dependencies": { "@sindresorhus/merge-streams": "^2.1.0", "fast-glob": "^3.3.3", "ignore": "^7.0.3", "path-type": "^6.0.0", "slash": "^5.1.0", "unicorn-magic": "^0.3.0" } }, "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA=="], + + "gonzales-pe": ["gonzales-pe@4.3.0", "", { "dependencies": { "minimist": "^1.2.5" }, "bin": { "gonzales": "bin/gonzales.js" } }, "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ=="], + + "google-auth-library": ["google-auth-library@9.15.1", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^6.1.1", "gcp-metadata": "^6.1.0", "gtoken": "^7.0.0", "jws": "^4.0.0" } }, "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng=="], + + "google-logging-utils": ["google-logging-utils@0.0.2", "", {}, "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "groq-sdk": ["groq-sdk@0.3.0", "", { "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", "abort-controller": "^3.0.0", "agentkeepalive": "^4.2.1", "digest-fetch": "^1.3.0", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", "node-fetch": "^2.6.7", "web-streams-polyfill": "^3.2.1" } }, "sha512-Cdgjh4YoSBE2X4S9sxPGXaAy1dlN4bRtAaDZ3cnq+XsxhhN9WSBeHF64l7LWwuD5ntmw7YC5Vf4Ff1oHCg1LOg=="], + + "gtoken": ["gtoken@7.1.0", "", { "dependencies": { "gaxios": "^6.0.0", "jws": "^4.0.0" } }, "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw=="], + + "gzip-size": ["gzip-size@7.0.0", "", { "dependencies": { "duplexer": "^0.1.2" } }, "sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA=="], + + "h3": ["h3@1.15.3", "", { "dependencies": { "cookie-es": "^1.2.2", "crossws": "^0.3.4", "defu": "^6.1.4", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.0", "radix3": "^1.1.2", "ufo": "^1.6.1", "uncrypto": "^0.1.3" } }, "sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ=="], + + "handlebars": ["handlebars@4.7.8", "", { "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "optionalDependencies": { "uglify-js": "^3.1.4" }, "bin": { "handlebars": "bin/handlebars" } }, "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "has-unicode": ["has-unicode@2.0.1", "", {}, "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], + + "hosted-git-info": ["hosted-git-info@7.0.2", "", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w=="], + + "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], + + "http-errors": ["http-errors@2.0.0", "", { "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ=="], + + "http-proxy-agent": ["http-proxy-agent@4.0.1", "", { "dependencies": { "@tootallnate/once": "1", "agent-base": "6", "debug": "4" } }, "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg=="], + + "http-shutdown": ["http-shutdown@1.2.2", "", {}, "sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw=="], + + "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + + "httpxy": ["httpxy@0.1.7", "", {}, "sha512-pXNx8gnANKAndgga5ahefxc++tJvNL87CXoRwxn1cJE2ZkWEojF3tNfQIEhZX/vfpt+wzeAzpUI4qkediX1MLQ=="], + + "human-signals": ["human-signals@5.0.0", "", {}, "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ=="], + + "humanize-ms": ["humanize-ms@1.2.1", "", { "dependencies": { "ms": "^2.0.0" } }, "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ=="], + + "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "ignore": ["ignore@7.0.4", "", {}, "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A=="], + + "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + + "indent-string": ["indent-string@4.0.0", "", {}, "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="], + + "index-to-position": ["index-to-position@1.1.0", "", {}, "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg=="], + + "infer-owner": ["infer-owner@1.0.4", "", {}, "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="], + + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], + + "ioredis": ["ioredis@5.6.1", "", { "dependencies": { "@ioredis/commands": "^1.1.1", "cluster-key-slot": "^1.1.0", "debug": "^4.3.4", "denque": "^2.1.0", "lodash.defaults": "^4.2.0", "lodash.isarguments": "^3.1.0", "redis-errors": "^1.2.0", "redis-parser": "^3.0.0", "standard-as-callback": "^2.1.0" } }, "sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA=="], + + "ip-address": ["ip-address@9.0.5", "", { "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" } }, "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g=="], + + "iron-webcrypto": ["iron-webcrypto@1.2.1", "", {}, "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg=="], + + "is-arrayish": ["is-arrayish@0.3.2", "", {}, "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="], + + "is-buffer": ["is-buffer@1.1.6", "", {}, "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="], + + "is-builtin-module": ["is-builtin-module@3.2.1", "", { "dependencies": { "builtin-modules": "^3.3.0" } }, "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A=="], + + "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], + + "is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], + + "is-lambda": ["is-lambda@1.0.1", "", {}, "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ=="], + + "is-module": ["is-module@1.0.0", "", {}, "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-path-inside": ["is-path-inside@4.0.0", "", {}, "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA=="], + + "is-plain-obj": ["is-plain-obj@2.1.0", "", {}, "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="], + + "is-reference": ["is-reference@1.2.1", "", { "dependencies": { "@types/estree": "*" } }, "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ=="], + + "is-stream": ["is-stream@4.0.1", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="], + + "is-url": ["is-url@1.2.4", "", {}, "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="], + + "is-url-superb": ["is-url-superb@4.0.0", "", {}, "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA=="], + + "is-wsl": ["is-wsl@3.1.0", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw=="], + + "is64bit": ["is64bit@2.0.0", "", { "dependencies": { "system-architecture": "^0.1.0" } }, "sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw=="], + + "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + + "jest-diff": ["jest-diff@29.7.0", "", { "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" } }, "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw=="], + + "jest-get-type": ["jest-get-type@29.6.3", "", {}, "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw=="], + + "jest-matcher-utils": ["jest-matcher-utils@29.7.0", "", { "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" } }, "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g=="], + + "jest-message-util": ["jest-message-util@29.7.0", "", { "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w=="], + + "jest-util": ["jest-util@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } }, "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA=="], + + "jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="], + + "js-tiktoken": ["js-tiktoken@1.0.20", "", { "dependencies": { "base64-js": "^1.5.1" } }, "sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A=="], + + "js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], + + "jsbn": ["jsbn@1.1.0", "", {}, "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="], + + "json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="], + + "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], + + "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + + "jsondiffpatch": ["jsondiffpatch@0.6.0", "", { "dependencies": { "@types/diff-match-patch": "^1.0.36", "chalk": "^5.3.0", "diff-match-patch": "^1.0.5" }, "bin": { "jsondiffpatch": "bin/jsondiffpatch.js" } }, "sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ=="], + + "junk": ["junk@4.0.1", "", {}, "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ=="], + + "jwa": ["jwa@2.0.1", "", { "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg=="], + + "jws": ["jws@4.0.0", "", { "dependencies": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" } }, "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg=="], + + "jwt-decode": ["jwt-decode@4.0.0", "", {}, "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA=="], + + "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], + + "klona": ["klona@2.0.6", "", {}, "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA=="], + + "knitwork": ["knitwork@1.2.0", "", {}, "sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg=="], + + "kuler": ["kuler@2.0.0", "", {}, "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="], + + "lambda-local": ["lambda-local@2.2.0", "", { "dependencies": { "commander": "^10.0.1", "dotenv": "^16.3.1", "winston": "^3.10.0" }, "bin": { "lambda-local": "build/cli.js" } }, "sha512-bPcgpIXbHnVGfI/omZIlgucDqlf4LrsunwoKue5JdZeGybt8L6KyJz2Zu19ffuZwIwLj2NAI2ZyaqNT6/cetcg=="], + + "langsmith": ["langsmith@0.3.29", "", { "dependencies": { "@types/uuid": "^10.0.0", "chalk": "^4.1.2", "console-table-printer": "^2.12.1", "p-queue": "^6.6.2", "p-retry": "4", "semver": "^7.6.3", "uuid": "^10.0.0" }, "peerDependencies": { "openai": "*" }, "optionalPeers": ["openai"] }, "sha512-JPF2B339qpYy9FyuY4Yz1aWYtgPlFc/a+VTj3L/JcFLHCiMP7+Ig8I9jO+o1QwVa+JU3iugL1RS0wwc+Glw0zA=="], + + "lazystream": ["lazystream@1.0.1", "", { "dependencies": { "readable-stream": "^2.0.5" } }, "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw=="], + + "listhen": ["listhen@1.9.0", "", { "dependencies": { "@parcel/watcher": "^2.4.1", "@parcel/watcher-wasm": "^2.4.1", "citty": "^0.1.6", "clipboardy": "^4.0.0", "consola": "^3.2.3", "crossws": ">=0.2.0 <0.4.0", "defu": "^6.1.4", "get-port-please": "^3.1.2", "h3": "^1.12.0", "http-shutdown": "^1.2.2", "jiti": "^2.1.2", "mlly": "^1.7.1", "node-forge": "^1.3.1", "pathe": "^1.1.2", "std-env": "^3.7.0", "ufo": "^1.5.4", "untun": "^0.1.3", "uqr": "^0.1.2" }, "bin": { "listen": "bin/listhen.mjs", "listhen": "bin/listhen.mjs" } }, "sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg=="], + + "local-pkg": ["local-pkg@1.1.1", "", { "dependencies": { "mlly": "^1.7.4", "pkg-types": "^2.0.1", "quansync": "^0.2.8" } }, "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg=="], + + "locate-path": ["locate-path@7.2.0", "", { "dependencies": { "p-locate": "^6.0.0" } }, "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA=="], + + "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + + "lodash-es": ["lodash-es@4.17.21", "", {}, "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="], + + "lodash.debounce": ["lodash.debounce@4.0.8", "", {}, "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="], + + "lodash.defaults": ["lodash.defaults@4.2.0", "", {}, "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="], + + "lodash.isarguments": ["lodash.isarguments@3.1.0", "", {}, "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg=="], + + "logform": ["logform@2.7.0", "", { "dependencies": { "@colors/colors": "1.6.0", "@types/triple-beam": "^1.3.2", "fecha": "^4.2.0", "ms": "^2.1.1", "safe-stable-stringify": "^2.3.1", "triple-beam": "^1.3.0" } }, "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ=="], + + "lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "luxon": ["luxon@3.6.1", "", {}, "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ=="], + + "magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="], + + "magicast": ["magicast@0.3.5", "", { "dependencies": { "@babel/parser": "^7.25.4", "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ=="], + + "make-fetch-happen": ["make-fetch-happen@9.1.0", "", { "dependencies": { "agentkeepalive": "^4.1.3", "cacache": "^15.2.0", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^6.0.0", "minipass": "^3.1.3", "minipass-collect": "^1.0.2", "minipass-fetch": "^1.3.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.2", "promise-retry": "^2.0.1", "socks-proxy-agent": "^6.0.0", "ssri": "^8.0.0" } }, "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "md5": ["md5@2.3.0", "", { "dependencies": { "charenc": "0.0.2", "crypt": "0.0.2", "is-buffer": "~1.1.6" } }, "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g=="], + + "mem0ai": ["mem0ai@2.1.26", "", { "dependencies": { "axios": "1.7.7", "openai": "^4.93.0", "uuid": "9.0.1", "zod": "^3.24.1" }, "peerDependencies": { "@anthropic-ai/sdk": "^0.40.1", "@google/genai": "^0.7.0", "@langchain/core": "^0.3.44", "@mistralai/mistralai": "^1.5.2", "@qdrant/js-client-rest": "1.13.0", "@supabase/supabase-js": "^2.49.1", "@types/jest": "29.5.14", "@types/pg": "8.11.0", "@types/sqlite3": "3.1.11", "groq-sdk": "0.3.0", "neo4j-driver": "^5.28.1", "ollama": "^0.5.14", "pg": "8.11.3", "redis": "^4.6.13", "sqlite3": "5.1.7" } }, "sha512-c2O3WYNcFTGKCVlPu0gbPrauGX509szuO9wpj138fH2Pol6QhsJomSyh2n5G894OZnAZkRftM4q+GGOIGa7TOg=="], + + "merge-options": ["merge-options@3.0.4", "", { "dependencies": { "is-plain-obj": "^2.1.0" } }, "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ=="], + + "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], + + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + + "micro-api-client": ["micro-api-client@3.3.0", "", {}, "sha512-y0y6CUB9RLVsy3kfgayU28746QrNMpSm9O/AYGNsBgOkJr/X/Jk0VLGoO8Ude7Bpa8adywzF+MzXNZRFRsNPhg=="], + + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "mime": ["mime@4.0.7", "", { "bin": { "mime": "bin/cli.js" } }, "sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ=="], + + "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + + "mime-types": ["mime-types@3.0.1", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA=="], + + "mimic-fn": ["mimic-fn@4.0.0", "", {}, "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="], + + "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], + + "minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + + "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], + + "minipass-collect": ["minipass-collect@1.0.2", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA=="], + + "minipass-fetch": ["minipass-fetch@1.4.1", "", { "dependencies": { "minipass": "^3.1.0", "minipass-sized": "^1.0.3", "minizlib": "^2.0.0" }, "optionalDependencies": { "encoding": "^0.1.12" } }, "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw=="], + + "minipass-flush": ["minipass-flush@1.0.5", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw=="], + + "minipass-pipeline": ["minipass-pipeline@1.2.4", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A=="], + + "minipass-sized": ["minipass-sized@1.0.3", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g=="], + + "minizlib": ["minizlib@2.1.2", "", { "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" } }, "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg=="], + + "mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], + + "mkdirp-classic": ["mkdirp-classic@0.5.3", "", {}, "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="], + + "mlly": ["mlly@1.7.4", "", { "dependencies": { "acorn": "^8.14.0", "pathe": "^2.0.1", "pkg-types": "^1.3.0", "ufo": "^1.5.4" } }, "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw=="], + + "module-definition": ["module-definition@6.0.1", "", { "dependencies": { "ast-module-types": "^6.0.1", "node-source-walk": "^7.0.1" }, "bin": { "module-definition": "bin/cli.js" } }, "sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "mustache": ["mustache@4.2.0", "", { "bin": { "mustache": "bin/mustache" } }, "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "napi-build-utils": ["napi-build-utils@2.0.0", "", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="], + + "negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], + + "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], + + "neo4j-driver": ["neo4j-driver@5.28.1", "", { "dependencies": { "neo4j-driver-bolt-connection": "5.28.1", "neo4j-driver-core": "5.28.1", "rxjs": "^7.8.1" } }, "sha512-jbyBwyM0a3RLGcP43q3hIxPUPxA+1bE04RovOKdNAS42EtBMVCKcPSeOvWiHxgXp1ZFd0a8XqK+7LtguInOLUg=="], + + "neo4j-driver-bolt-connection": ["neo4j-driver-bolt-connection@5.28.1", "", { "dependencies": { "buffer": "^6.0.3", "neo4j-driver-core": "5.28.1", "string_decoder": "^1.3.0" } }, "sha512-nY8GBhjOW7J0rDtpiyJn6kFdk2OiNVZZhZrO8//mwNXnf5VQJ6HqZQTDthH/9pEaX0Jvbastz1xU7ZL8xzqY0w=="], + + "neo4j-driver-core": ["neo4j-driver-core@5.28.1", "", {}, "sha512-14vN8TlxC0JvJYfjWic5PwjsZ38loQLOKFTXwk4fWLTbCk6VhrhubB2Jsy9Rz+gM6PtTor4+6ClBEFDp1q/c8g=="], + + "netlify": ["netlify@13.3.5", "", { "dependencies": { "@netlify/open-api": "^2.37.0", "lodash-es": "^4.17.21", "micro-api-client": "^3.3.0", "node-fetch": "^3.0.0", "p-wait-for": "^5.0.0", "qs": "^6.9.6" } }, "sha512-Nc3loyVASW59W+8fLDZT1lncpG7llffyZ2o0UQLx/Fr20i7P8oP+lE7+TEcFvXj9IUWU6LjB9P3BH+iFGyp+mg=="], + + "nitropack": ["nitropack@2.11.12", "", { "dependencies": { "@cloudflare/kv-asset-handler": "^0.4.0", "@netlify/functions": "^3.1.8", "@rollup/plugin-alias": "^5.1.1", "@rollup/plugin-commonjs": "^28.0.3", "@rollup/plugin-inject": "^5.0.5", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^16.0.1", "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-terser": "^0.4.4", "@vercel/nft": "^0.29.2", "archiver": "^7.0.1", "c12": "^3.0.3", "chokidar": "^4.0.3", "citty": "^0.1.6", "compatx": "^0.2.0", "confbox": "^0.2.2", "consola": "^3.4.2", "cookie-es": "^2.0.0", "croner": "^9.0.0", "crossws": "^0.3.5", "db0": "^0.3.2", "defu": "^6.1.4", "destr": "^2.0.5", "dot-prop": "^9.0.0", "esbuild": "^0.25.4", "escape-string-regexp": "^5.0.0", "etag": "^1.8.1", "exsolve": "^1.0.5", "globby": "^14.1.0", "gzip-size": "^7.0.0", "h3": "^1.15.3", "hookable": "^5.5.3", "httpxy": "^0.1.7", "ioredis": "^5.6.1", "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.7", "mlly": "^1.7.4", "node-fetch-native": "^1.6.6", "node-mock-http": "^1.0.0", "ofetch": "^1.4.1", "ohash": "^2.0.11", "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.40.2", "rollup-plugin-visualizer": "^5.14.0", "scule": "^1.3.0", "semver": "^7.7.2", "serve-placeholder": "^2.0.2", "serve-static": "^2.2.0", "source-map": "^0.7.4", "std-env": "^3.9.0", "ufo": "^1.6.1", "ultrahtml": "^1.6.0", "uncrypto": "^0.1.3", "unctx": "^2.4.1", "unenv": "^2.0.0-rc.17", "unimport": "^5.0.1", "unplugin-utils": "^0.2.4", "unstorage": "^1.16.0", "untyped": "^2.0.0", "unwasm": "^0.3.9", "youch": "^4.1.0-beta.7", "youch-core": "^0.3.2" }, "peerDependencies": { "xml2js": "^0.6.2" }, "optionalPeers": ["xml2js"], "bin": { "nitro": "dist/cli/index.mjs", "nitropack": "dist/cli/index.mjs" } }, "sha512-e2AdQrEY1IVoNTdyjfEQV93xkqz4SQxAMR0xWF8mZUUHxMLm6S4nPzpscjksmT4OdUxl0N8/DCaGjKQ9ghdodA=="], + + "node-abi": ["node-abi@3.75.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg=="], + + "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="], + + "node-domexception": ["node-domexception@1.0.0", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="], + + "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + + "node-fetch-native": ["node-fetch-native@1.6.6", "", {}, "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ=="], + + "node-forge": ["node-forge@1.3.1", "", {}, "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA=="], + + "node-gyp": ["node-gyp@8.4.1", "", { "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", "make-fetch-happen": "^9.1.0", "nopt": "^5.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", "tar": "^6.1.2", "which": "^2.0.2" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w=="], + + "node-gyp-build": ["node-gyp-build@4.8.4", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="], + + "node-mock-http": ["node-mock-http@1.0.0", "", {}, "sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ=="], + + "node-source-walk": ["node-source-walk@7.0.1", "", { "dependencies": { "@babel/parser": "^7.26.7" } }, "sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg=="], + + "nopt": ["nopt@8.1.0", "", { "dependencies": { "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A=="], + + "normalize-package-data": ["normalize-package-data@6.0.2", "", { "dependencies": { "hosted-git-info": "^7.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" } }, "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g=="], + + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + + "npm-run-path": ["npm-run-path@5.3.0", "", { "dependencies": { "path-key": "^4.0.0" } }, "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ=="], + + "npmlog": ["npmlog@6.0.2", "", { "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", "gauge": "^4.0.3", "set-blocking": "^2.0.0" } }, "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg=="], + + "nypm": ["nypm@0.5.4", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "tinyexec": "^0.3.2", "ufo": "^1.5.4" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-X0SNNrZiGU8/e/zAB7sCTtdxWTMSIO73q+xuKgglm2Yvzwlo8UoC5FNySQFCvl84uPaeADkqHUZUkWy4aH4xOA=="], + + "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], + + "obuf": ["obuf@1.1.2", "", {}, "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="], + + "ofetch": ["ofetch@1.4.1", "", { "dependencies": { "destr": "^2.0.3", "node-fetch-native": "^1.6.4", "ufo": "^1.5.4" } }, "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw=="], + + "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], + + "ollama": ["ollama@0.5.15", "", { "dependencies": { "whatwg-fetch": "^3.6.20" } }, "sha512-TSaZSJyP7MQJFjSmmNsoJiriwa3U+/UJRw6+M8aucs5dTsaWNZsBIGpDb5rXnW6nXxJBB/z79gZY8IaiIQgelQ=="], + + "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "one-time": ["one-time@1.0.0", "", { "dependencies": { "fn.name": "1.x.x" } }, "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g=="], + + "onetime": ["onetime@6.0.0", "", { "dependencies": { "mimic-fn": "^4.0.0" } }, "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ=="], + + "open": ["open@8.4.2", "", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="], + + "openai": ["openai@4.103.0", "", { "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", "abort-controller": "^3.0.0", "agentkeepalive": "^4.2.1", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", "node-fetch": "^2.6.7" }, "peerDependencies": { "ws": "^8.18.0", "zod": "^3.23.8" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-eWcz9kdurkGOFDtd5ySS5y251H2uBgq9+1a2lTBnjMMzlexJ40Am5t6Mu76SSE87VvitPa0dkIAp75F+dZVC0g=="], + + "openapi-types": ["openapi-types@12.1.3", "", {}, "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="], + + "p-event": ["p-event@6.0.1", "", { "dependencies": { "p-timeout": "^6.1.2" } }, "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w=="], + + "p-finally": ["p-finally@1.0.0", "", {}, "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow=="], + + "p-limit": ["p-limit@4.0.0", "", { "dependencies": { "yocto-queue": "^1.0.0" } }, "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ=="], + + "p-locate": ["p-locate@6.0.0", "", { "dependencies": { "p-limit": "^4.0.0" } }, "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw=="], + + "p-map": ["p-map@7.0.3", "", {}, "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA=="], + + "p-queue": ["p-queue@6.6.2", "", { "dependencies": { "eventemitter3": "^4.0.4", "p-timeout": "^3.2.0" } }, "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ=="], + + "p-retry": ["p-retry@4.6.2", "", { "dependencies": { "@types/retry": "0.12.0", "retry": "^0.13.1" } }, "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ=="], + + "p-timeout": ["p-timeout@3.2.0", "", { "dependencies": { "p-finally": "^1.0.0" } }, "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg=="], + + "p-wait-for": ["p-wait-for@5.0.2", "", { "dependencies": { "p-timeout": "^6.0.0" } }, "sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA=="], + + "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], + + "packet-reader": ["packet-reader@1.0.0", "", {}, "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="], + + "parse-gitignore": ["parse-gitignore@2.0.0", "", {}, "sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog=="], + + "parse-json": ["parse-json@8.3.0", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "index-to-position": "^1.1.0", "type-fest": "^4.39.1" } }, "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ=="], + + "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], + + "partial-json": ["partial-json@0.1.7", "", {}, "sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA=="], + + "path-exists": ["path-exists@5.0.0", "", {}, "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ=="], + + "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + + "path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], + + "path-type": ["path-type@6.0.0", "", {}, "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ=="], + + "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + + "pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="], + + "perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], + + "pg": ["pg@8.11.3", "", { "dependencies": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", "pg-connection-string": "^2.6.2", "pg-pool": "^3.6.1", "pg-protocol": "^1.6.0", "pg-types": "^2.1.0", "pgpass": "1.x" }, "optionalDependencies": { "pg-cloudflare": "^1.1.1" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g=="], + + "pg-cloudflare": ["pg-cloudflare@1.2.5", "", {}, "sha512-OOX22Vt0vOSRrdoUPKJ8Wi2OpE/o/h9T8X1s4qSkCedbNah9ei2W2765be8iMVxQUsvgT7zIAT2eIa9fs5+vtg=="], + + "pg-connection-string": ["pg-connection-string@2.9.0", "", {}, "sha512-P2DEBKuvh5RClafLngkAuGe9OUlFV7ebu8w1kmaaOgPcpJd1RIFh7otETfI6hAR8YupOLFTY7nuvvIn7PLciUQ=="], + + "pg-int8": ["pg-int8@1.0.1", "", {}, "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="], + + "pg-numeric": ["pg-numeric@1.0.2", "", {}, "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw=="], + + "pg-pool": ["pg-pool@3.10.0", "", { "peerDependencies": { "pg": ">=8.0" } }, "sha512-DzZ26On4sQ0KmqnO34muPcmKbhrjmyiO4lCCR0VwEd7MjmiKf5NTg/6+apUEu0NF7ESa37CGzFxH513CoUmWnA=="], + + "pg-protocol": ["pg-protocol@1.10.0", "", {}, "sha512-IpdytjudNuLv8nhlHs/UrVBhU0e78J0oIS/0AVdTbWxSOkFUVdsHC/NrorO6nXsQNDTT1kzDSOMJubBQviX18Q=="], + + "pg-types": ["pg-types@4.0.2", "", { "dependencies": { "pg-int8": "1.0.1", "pg-numeric": "1.0.2", "postgres-array": "~3.0.1", "postgres-bytea": "~3.0.0", "postgres-date": "~2.1.0", "postgres-interval": "^3.0.0", "postgres-range": "^1.1.1" } }, "sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng=="], + + "pgpass": ["pgpass@1.0.5", "", { "dependencies": { "split2": "^4.1.0" } }, "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], + + "pkg-types": ["pkg-types@2.1.0", "", { "dependencies": { "confbox": "^0.2.1", "exsolve": "^1.0.1", "pathe": "^2.0.3" } }, "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A=="], + + "postcss": ["postcss@8.5.3", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A=="], + + "postcss-values-parser": ["postcss-values-parser@6.0.2", "", { "dependencies": { "color-name": "^1.1.4", "is-url-superb": "^4.0.0", "quote-unquote": "^1.0.0" }, "peerDependencies": { "postcss": "^8.2.9" } }, "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw=="], + + "postgres-array": ["postgres-array@3.0.4", "", {}, "sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ=="], + + "postgres-bytea": ["postgres-bytea@3.0.0", "", { "dependencies": { "obuf": "~1.1.2" } }, "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw=="], + + "postgres-date": ["postgres-date@2.1.0", "", {}, "sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA=="], + + "postgres-interval": ["postgres-interval@3.0.0", "", {}, "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw=="], + + "postgres-range": ["postgres-range@1.1.4", "", {}, "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w=="], + + "prebuild-install": ["prebuild-install@7.1.3", "", { "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, "bin": { "prebuild-install": "bin.js" } }, "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug=="], + + "precinct": ["precinct@12.2.0", "", { "dependencies": { "@dependents/detective-less": "^5.0.1", "commander": "^12.1.0", "detective-amd": "^6.0.1", "detective-cjs": "^6.0.1", "detective-es6": "^5.0.1", "detective-postcss": "^7.0.1", "detective-sass": "^6.0.1", "detective-scss": "^5.0.1", "detective-stylus": "^5.0.1", "detective-typescript": "^14.0.0", "detective-vue2": "^2.2.0", "module-definition": "^6.0.1", "node-source-walk": "^7.0.1", "postcss": "^8.5.1", "typescript": "^5.7.3" }, "bin": { "precinct": "bin/cli.js" } }, "sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w=="], + + "pretty-bytes": ["pretty-bytes@6.1.1", "", {}, "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ=="], + + "pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], + + "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], + + "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], + + "promise-inflight": ["promise-inflight@1.0.1", "", {}, "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g=="], + + "promise-retry": ["promise-retry@2.0.1", "", { "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" } }, "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="], + + "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + + "pump": ["pump@3.0.2", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw=="], + + "qs": ["qs@6.14.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w=="], + + "quansync": ["quansync@0.2.10", "", {}, "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A=="], + + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + + "quote-unquote": ["quote-unquote@1.0.0", "", {}, "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg=="], + + "radix3": ["radix3@1.1.2", "", {}, "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="], + + "randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], + + "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], + + "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], + + "rc9": ["rc9@2.1.2", "", { "dependencies": { "defu": "^6.1.4", "destr": "^2.0.3" } }, "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg=="], + + "react": ["react@19.1.0", "", {}, "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg=="], + + "react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], + + "read-package-up": ["read-package-up@11.0.0", "", { "dependencies": { "find-up-simple": "^1.0.0", "read-pkg": "^9.0.0", "type-fest": "^4.6.0" } }, "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ=="], + + "read-pkg": ["read-pkg@9.0.1", "", { "dependencies": { "@types/normalize-package-data": "^2.4.3", "normalize-package-data": "^6.0.0", "parse-json": "^8.0.0", "type-fest": "^4.6.0", "unicorn-magic": "^0.1.0" } }, "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA=="], + + "readable-stream": ["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" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], + + "readdir-glob": ["readdir-glob@1.1.3", "", { "dependencies": { "minimatch": "^5.1.0" } }, "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA=="], + + "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], + + "redis": ["redis@4.7.1", "", { "dependencies": { "@redis/bloom": "1.2.0", "@redis/client": "1.6.1", "@redis/graph": "1.1.1", "@redis/json": "1.0.7", "@redis/search": "1.2.0", "@redis/time-series": "1.1.0" } }, "sha512-S1bJDnqLftzHXHP8JsT5II/CtHWQrASX5K96REjWjlmWKrviSOLWmM7QnRLstAWsu1VBBV1ffV6DzCvxNP0UJQ=="], + + "redis-errors": ["redis-errors@1.2.0", "", {}, "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w=="], + + "redis-parser": ["redis-parser@3.0.0", "", { "dependencies": { "redis-errors": "^1.0.0" } }, "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A=="], + + "remove-trailing-separator": ["remove-trailing-separator@1.1.0", "", {}, "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw=="], + + "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], + + "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], + + "require-package-name": ["require-package-name@2.0.1", "", {}, "sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q=="], + + "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], + + "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], + + "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], + + "retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="], + + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + + "rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="], + + "rollup": ["rollup@4.41.1", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.41.1", "@rollup/rollup-android-arm64": "4.41.1", "@rollup/rollup-darwin-arm64": "4.41.1", "@rollup/rollup-darwin-x64": "4.41.1", "@rollup/rollup-freebsd-arm64": "4.41.1", "@rollup/rollup-freebsd-x64": "4.41.1", "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", "@rollup/rollup-linux-arm-musleabihf": "4.41.1", "@rollup/rollup-linux-arm64-gnu": "4.41.1", "@rollup/rollup-linux-arm64-musl": "4.41.1", "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", "@rollup/rollup-linux-riscv64-gnu": "4.41.1", "@rollup/rollup-linux-riscv64-musl": "4.41.1", "@rollup/rollup-linux-s390x-gnu": "4.41.1", "@rollup/rollup-linux-x64-gnu": "4.41.1", "@rollup/rollup-linux-x64-musl": "4.41.1", "@rollup/rollup-win32-arm64-msvc": "4.41.1", "@rollup/rollup-win32-ia32-msvc": "4.41.1", "@rollup/rollup-win32-x64-msvc": "4.41.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw=="], + + "rollup-plugin-visualizer": ["rollup-plugin-visualizer@5.14.0", "", { "dependencies": { "open": "^8.4.0", "picomatch": "^4.0.2", "source-map": "^0.7.4", "yargs": "^17.5.1" }, "peerDependencies": { "rolldown": "1.x", "rollup": "2.x || 3.x || 4.x" }, "optionalPeers": ["rolldown", "rollup"], "bin": { "rollup-plugin-visualizer": "dist/bin/cli.js" } }, "sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA=="], + + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + + "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], + + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="], + + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "scule": ["scule@1.3.0", "", {}, "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g=="], + + "secure-json-parse": ["secure-json-parse@2.7.0", "", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], + + "semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "send": ["send@1.2.0", "", { "dependencies": { "debug": "^4.3.5", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.0", "mime-types": "^3.0.1", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.1" } }, "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw=="], + + "serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], + + "serve-placeholder": ["serve-placeholder@2.0.2", "", { "dependencies": { "defu": "^6.1.4" } }, "sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ=="], + + "serve-static": ["serve-static@2.2.0", "", { "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", "send": "^1.2.0" } }, "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ=="], + + "set-blocking": ["set-blocking@2.0.0", "", {}, "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="], + + "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], + + "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], + + "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], + + "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], + + "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "simple-concat": ["simple-concat@1.0.1", "", {}, "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="], + + "simple-get": ["simple-get@4.0.1", "", { "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA=="], + + "simple-swizzle": ["simple-swizzle@0.2.2", "", { "dependencies": { "is-arrayish": "^0.3.1" } }, "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg=="], + + "simple-wcswidth": ["simple-wcswidth@1.0.1", "", {}, "sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg=="], + + "slash": ["slash@5.1.0", "", {}, "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg=="], + + "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], + + "smob": ["smob@1.5.0", "", {}, "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig=="], + + "socks": ["socks@2.8.4", "", { "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" } }, "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ=="], + + "socks-proxy-agent": ["socks-proxy-agent@6.2.1", "", { "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", "socks": "^2.6.2" } }, "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ=="], + + "source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], + + "spdx-correct": ["spdx-correct@3.2.0", "", { "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA=="], + + "spdx-exceptions": ["spdx-exceptions@2.5.0", "", {}, "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="], + + "spdx-expression-parse": ["spdx-expression-parse@3.0.1", "", { "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q=="], + + "spdx-license-ids": ["spdx-license-ids@3.0.21", "", {}, "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg=="], + + "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], + + "sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="], + + "sqlite3": ["sqlite3@5.1.7", "", { "dependencies": { "bindings": "^1.5.0", "node-addon-api": "^7.0.0", "prebuild-install": "^7.1.1", "tar": "^6.1.11" }, "optionalDependencies": { "node-gyp": "8.x" } }, "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog=="], + + "ssri": ["ssri@8.0.1", "", { "dependencies": { "minipass": "^3.1.1" } }, "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ=="], + + "stack-trace": ["stack-trace@0.0.10", "", {}, "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg=="], + + "stack-utils": ["stack-utils@2.0.6", "", { "dependencies": { "escape-string-regexp": "^2.0.0" } }, "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ=="], + + "standard-as-callback": ["standard-as-callback@2.1.0", "", {}, "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A=="], + + "statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], + + "std-env": ["std-env@3.9.0", "", {}, "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw=="], + + "streamx": ["streamx@2.22.0", "", { "dependencies": { "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" }, "optionalDependencies": { "bare-events": "^2.2.0" } }, "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw=="], + + "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-final-newline": ["strip-final-newline@3.0.0", "", {}, "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw=="], + + "strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], + + "strip-literal": ["strip-literal@3.0.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA=="], + + "supports-color": ["supports-color@10.0.0", "", {}, "sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ=="], + + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + + "swr": ["swr@2.3.3", "", { "dependencies": { "dequal": "^2.0.3", "use-sync-external-store": "^1.4.0" }, "peerDependencies": { "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A=="], + + "system-architecture": ["system-architecture@0.1.0", "", {}, "sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA=="], + + "tar": ["tar@6.2.1", "", { "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" } }, "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A=="], + + "tar-fs": ["tar-fs@2.1.3", "", { "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" } }, "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg=="], + + "tar-stream": ["tar-stream@3.1.7", "", { "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ=="], + + "terser": ["terser@5.39.2", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.14.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-yEPUmWve+VA78bI71BW70Dh0TuV4HHd+I5SHOAfS1+QBOmvmCiiffgjR8ryyEd3KIfvPGFqoADt8LdQ6XpXIvg=="], + + "text-decoder": ["text-decoder@1.2.3", "", { "dependencies": { "b4a": "^1.6.4" } }, "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA=="], + + "text-hex": ["text-hex@1.0.0", "", {}, "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="], + + "throttleit": ["throttleit@2.1.0", "", {}, "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw=="], + + "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "tinyglobby": ["tinyglobby@0.2.13", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw=="], + + "tmp": ["tmp@0.2.3", "", {}, "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w=="], + + "tmp-promise": ["tmp-promise@3.0.3", "", { "dependencies": { "tmp": "^0.2.0" } }, "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], + + "toml": ["toml@3.0.0", "", {}, "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w=="], + + "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], + + "triple-beam": ["triple-beam@1.4.1", "", {}, "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg=="], + + "ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "tsx": ["tsx@4.19.4", "", { "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q=="], + + "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], + + "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], + + "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], + + "ufo": ["ufo@1.6.1", "", {}, "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA=="], + + "uglify-js": ["uglify-js@3.19.3", "", { "bin": { "uglifyjs": "bin/uglifyjs" } }, "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ=="], + + "ultrahtml": ["ultrahtml@1.6.0", "", {}, "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw=="], + + "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], + + "unctx": ["unctx@2.4.1", "", { "dependencies": { "acorn": "^8.14.0", "estree-walker": "^3.0.3", "magic-string": "^0.30.17", "unplugin": "^2.1.0" } }, "sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg=="], + + "undici": ["undici@5.28.5", "", { "dependencies": { "@fastify/busboy": "^2.0.0" } }, "sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA=="], + + "undici-types": ["undici-types@6.19.8", "", {}, "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="], + + "unenv": ["unenv@2.0.0-rc.17", "", { "dependencies": { "defu": "^6.1.4", "exsolve": "^1.0.4", "ohash": "^2.0.11", "pathe": "^2.0.3", "ufo": "^1.6.1" } }, "sha512-B06u0wXkEd+o5gOCMl/ZHl5cfpYbDZKAT+HWTL+Hws6jWu7dCiqBBXXXzMFcFVJb8D4ytAnYmxJA83uwOQRSsg=="], + + "unicorn-magic": ["unicorn-magic@0.3.0", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="], + + "unimport": ["unimport@5.0.1", "", { "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": "^2.1.0", "scule": "^1.3.0", "strip-literal": "^3.0.0", "tinyglobby": "^0.2.13", "unplugin": "^2.3.2", "unplugin-utils": "^0.2.4" } }, "sha512-1YWzPj6wYhtwHE+9LxRlyqP4DiRrhGfJxdtH475im8ktyZXO3jHj/3PZ97zDdvkYoovFdi0K4SKl3a7l92v3sQ=="], + + "unique-filename": ["unique-filename@1.1.1", "", { "dependencies": { "unique-slug": "^2.0.0" } }, "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ=="], + + "unique-slug": ["unique-slug@2.0.2", "", { "dependencies": { "imurmurhash": "^0.1.4" } }, "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w=="], + + "unixify": ["unixify@1.0.0", "", { "dependencies": { "normalize-path": "^2.1.1" } }, "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg=="], + + "unplugin": ["unplugin@2.3.4", "", { "dependencies": { "acorn": "^8.14.1", "picomatch": "^4.0.2", "webpack-virtual-modules": "^0.6.2" } }, "sha512-m4PjxTurwpWfpMomp8AptjD5yj8qEZN5uQjjGM3TAs9MWWD2tXSSNNj6jGR2FoVGod4293ytyV6SwBbertfyJg=="], + + "unplugin-utils": ["unplugin-utils@0.2.4", "", { "dependencies": { "pathe": "^2.0.2", "picomatch": "^4.0.2" } }, "sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA=="], + + "unstorage": ["unstorage@1.16.0", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^4.0.3", "destr": "^2.0.5", "h3": "^1.15.2", "lru-cache": "^10.4.3", "node-fetch-native": "^1.6.6", "ofetch": "^1.4.1", "ufo": "^1.6.1" }, "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 || ^7.0.0", "@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" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA=="], + + "untun": ["untun@0.1.3", "", { "dependencies": { "citty": "^0.1.5", "consola": "^3.2.3", "pathe": "^1.1.1" }, "bin": { "untun": "bin/untun.mjs" } }, "sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ=="], + + "untyped": ["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" }, "bin": { "untyped": "dist/cli.mjs" } }, "sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g=="], + + "unwasm": ["unwasm@0.3.9", "", { "dependencies": { "knitwork": "^1.0.0", "magic-string": "^0.30.8", "mlly": "^1.6.1", "pathe": "^1.1.2", "pkg-types": "^1.0.3", "unplugin": "^1.10.0" } }, "sha512-LDxTx/2DkFURUd+BU1vUsF/moj0JsoTvl+2tcg2AUOiEzVturhGGx17/IMgGvKUYdZwr33EJHtChCJuhu9Ouvg=="], + + "uqr": ["uqr@0.1.2", "", {}, "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA=="], + + "urlpattern-polyfill": ["urlpattern-polyfill@8.0.2", "", {}, "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ=="], + + "use-sync-external-store": ["use-sync-external-store@1.5.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + + "validate-npm-package-license": ["validate-npm-package-license@3.0.4", "", { "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew=="], + + "web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="], + + "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + + "webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="], + + "whatwg-fetch": ["whatwg-fetch@3.6.20", "", {}, "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg=="], + + "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "wide-align": ["wide-align@1.1.5", "", { "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg=="], + + "winston": ["winston@3.17.0", "", { "dependencies": { "@colors/colors": "^1.6.0", "@dabh/diagnostics": "^2.0.2", "async": "^3.2.3", "is-stream": "^2.0.0", "logform": "^2.7.0", "one-time": "^1.0.0", "readable-stream": "^3.4.0", "safe-stable-stringify": "^2.3.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", "winston-transport": "^4.9.0" } }, "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw=="], + + "winston-transport": ["winston-transport@4.9.0", "", { "dependencies": { "logform": "^2.7.0", "readable-stream": "^3.6.2", "triple-beam": "^1.3.0" } }, "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A=="], + + "wordwrap": ["wordwrap@1.0.0", "", {}, "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="], + + "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "write-file-atomic": ["write-file-atomic@6.0.0", "", { "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" } }, "sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ=="], + + "ws": ["ws@8.18.2", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ=="], + + "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], + + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + + "yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + + "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + + "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + + "yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], + + "yocto-queue": ["yocto-queue@1.2.1", "", {}, "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg=="], + + "youch": ["youch@4.1.0-beta.7", "", { "dependencies": { "@poppinss/dumper": "^0.6.3", "@speed-highlight/core": "^1.2.7", "cookie": "^1.0.2", "youch-core": "^0.3.1" } }, "sha512-HUn0M24AUTMvjdkoMtH8fJz2FEd+k1xvtR9EoTrDUoVUi6o7xl5X+pST/vjk4T3GEQo2mJ9FlAvhWBm8dIdD4g=="], + + "youch-core": ["youch-core@0.3.2", "", { "dependencies": { "@poppinss/exception": "^1.2.0", "error-stack-parser-es": "^1.0.5" } }, "sha512-fusrlIMLeRvTFYLUjJ9KzlGC3N+6MOPJ68HNj/yJv2nz7zq8t4HEviLms2gkdRPUS7F5rZ5n+pYx9r88m6IE1g=="], + + "zip-stream": ["zip-stream@6.0.1", "", { "dependencies": { "archiver-utils": "^5.0.0", "compress-commons": "^6.0.2", "readable-stream": "^4.0.0" } }, "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA=="], + + "zod": ["zod@3.25.28", "", {}, "sha512-/nt/67WYKnr5by3YS7LroZJbtcCBurDKKPBPWWzaxvVCGuG/NOsiKkrjoOhI8mJ+SQUXEbUzeB3S+6XDUEEj7Q=="], + + "zod-to-json-schema": ["zod-to-json-schema@3.24.5", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g=="], + + "@ai-sdk/anthropic/@ai-sdk/provider": ["@ai-sdk/provider@1.0.9", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-jie6ZJT2ZR0uVOVCDc9R2xCX5I/Dum/wEK28lx21PJx6ZnFAN9EzD2WsPhcDWfCgGx3OAZZ0GyM3CEobXpa9LA=="], + + "@ai-sdk/anthropic/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@2.1.10", "", { "dependencies": { "@ai-sdk/provider": "1.0.9", "eventsource-parser": "^3.0.0", "nanoid": "^3.3.8", "secure-json-parse": "^2.7.0" }, "peerDependencies": { "zod": "^3.0.0" }, "optionalPeers": ["zod"] }, "sha512-4GZ8GHjOFxePFzkl3q42AU0DQOtTQ5w09vmaWUf/pKFXJPizlnzKSUkF0f+VkapIUfDugyMqPMT1ge8XQzVI7Q=="], + + "@ai-sdk/cohere/@ai-sdk/provider": ["@ai-sdk/provider@1.0.9", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-jie6ZJT2ZR0uVOVCDc9R2xCX5I/Dum/wEK28lx21PJx6ZnFAN9EzD2WsPhcDWfCgGx3OAZZ0GyM3CEobXpa9LA=="], + + "@ai-sdk/cohere/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@2.1.10", "", { "dependencies": { "@ai-sdk/provider": "1.0.9", "eventsource-parser": "^3.0.0", "nanoid": "^3.3.8", "secure-json-parse": "^2.7.0" }, "peerDependencies": { "zod": "^3.0.0" }, "optionalPeers": ["zod"] }, "sha512-4GZ8GHjOFxePFzkl3q42AU0DQOtTQ5w09vmaWUf/pKFXJPizlnzKSUkF0f+VkapIUfDugyMqPMT1ge8XQzVI7Q=="], + + "@ai-sdk/groq/@ai-sdk/provider": ["@ai-sdk/provider@1.0.9", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-jie6ZJT2ZR0uVOVCDc9R2xCX5I/Dum/wEK28lx21PJx6ZnFAN9EzD2WsPhcDWfCgGx3OAZZ0GyM3CEobXpa9LA=="], + + "@ai-sdk/groq/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@2.1.10", "", { "dependencies": { "@ai-sdk/provider": "1.0.9", "eventsource-parser": "^3.0.0", "nanoid": "^3.3.8", "secure-json-parse": "^2.7.0" }, "peerDependencies": { "zod": "^3.0.0" }, "optionalPeers": ["zod"] }, "sha512-4GZ8GHjOFxePFzkl3q42AU0DQOtTQ5w09vmaWUf/pKFXJPizlnzKSUkF0f+VkapIUfDugyMqPMT1ge8XQzVI7Q=="], + + "@anthropic-ai/sdk/@types/node": ["@types/node@18.19.103", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-hHTHp+sEz6SxFsp+SA+Tqrua3AbmlAw+Y//aEwdHrdZkYVRWdvWD3y5uPZ0flYOkgskaFWqZ/YGFm3FaFQ0pRw=="], + + "@babel/code-frame/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "@cloudflare/kv-asset-handler/mime": ["mime@3.0.0", "", { "bin": { "mime": "cli.js" } }, "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A=="], + + "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + + "@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + + "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], + + "@jest/types/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@langchain/core/uuid": ["uuid@10.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ=="], + + "@mapbox/node-pre-gyp/tar": ["tar@7.4.3", "", { "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" } }, "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw=="], + + "@mem0/vercel-ai-provider/@ai-sdk/openai": ["@ai-sdk/openai@1.1.15", "", { "dependencies": { "@ai-sdk/provider": "1.0.9", "@ai-sdk/provider-utils": "2.1.10" }, "peerDependencies": { "zod": "^3.0.0" } }, "sha512-irGQx5lMrYI9gub7Sy2ZHu49D3Icf7OtfOu3X8fVKMONOyi54RTKRNjVZTewkfRNE44psTbZDO8j8qmPirOTNQ=="], + + "@mem0/vercel-ai-provider/@ai-sdk/provider": ["@ai-sdk/provider@1.0.9", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-jie6ZJT2ZR0uVOVCDc9R2xCX5I/Dum/wEK28lx21PJx6ZnFAN9EzD2WsPhcDWfCgGx3OAZZ0GyM3CEobXpa9LA=="], + + "@mem0/vercel-ai-provider/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@2.1.10", "", { "dependencies": { "@ai-sdk/provider": "1.0.9", "eventsource-parser": "^3.0.0", "nanoid": "^3.3.8", "secure-json-parse": "^2.7.0" }, "peerDependencies": { "zod": "^3.0.0" }, "optionalPeers": ["zod"] }, "sha512-4GZ8GHjOFxePFzkl3q42AU0DQOtTQ5w09vmaWUf/pKFXJPizlnzKSUkF0f+VkapIUfDugyMqPMT1ge8XQzVI7Q=="], + + "@mem0/vercel-ai-provider/ai": ["ai@4.1.46", "", { "dependencies": { "@ai-sdk/provider": "1.0.9", "@ai-sdk/provider-utils": "2.1.10", "@ai-sdk/react": "1.1.18", "@ai-sdk/ui-utils": "1.1.16", "@opentelemetry/api": "1.9.0", "jsondiffpatch": "0.6.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "zod": "^3.0.0" }, "optionalPeers": ["react", "zod"] }, "sha512-VTvAktT69IN1qcNAv7OlcOuR0q4HqUlhkVacrWmMlEoprYykF9EL5RY8IECD5d036Wqg0walwbSKZlA2noHm1A=="], + + "@netlify/dev-utils/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], + + "@netlify/zip-it-and-ship-it/glob": ["glob@8.1.0", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" } }, "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ=="], + + "@netlify/zip-it-and-ship-it/resolve": ["resolve@2.0.0-next.5", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA=="], + + "@openrouter/ai-sdk-provider/@ai-sdk/provider": ["@ai-sdk/provider@1.0.9", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-jie6ZJT2ZR0uVOVCDc9R2xCX5I/Dum/wEK28lx21PJx6ZnFAN9EzD2WsPhcDWfCgGx3OAZZ0GyM3CEobXpa9LA=="], + + "@openrouter/ai-sdk-provider/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@2.1.10", "", { "dependencies": { "@ai-sdk/provider": "1.0.9", "eventsource-parser": "^3.0.0", "nanoid": "^3.3.8", "secure-json-parse": "^2.7.0" }, "peerDependencies": { "zod": "^3.0.0" }, "optionalPeers": ["zod"] }, "sha512-4GZ8GHjOFxePFzkl3q42AU0DQOtTQ5w09vmaWUf/pKFXJPizlnzKSUkF0f+VkapIUfDugyMqPMT1ge8XQzVI7Q=="], + + "@parcel/watcher/detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="], + + "@parcel/watcher-wasm/napi-wasm": ["napi-wasm@1.1.3", "", { "bundled": true }, "sha512-h/4nMGsHjZDCYmQVNODIrYACVJ+I9KItbG+0si6W/jSjdA9JbWDoU4LLeMXVcEQGHjttI2tuXqDrbGF7qkUHHg=="], + + "@whatwg-node/fetch/urlpattern-polyfill": ["urlpattern-polyfill@10.1.0", "", {}, "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw=="], + + "@whatwg-node/node-fetch/@fastify/busboy": ["@fastify/busboy@3.1.1", "", {}, "sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw=="], + + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "archiver-utils/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], + + "are-we-there-yet/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "bl/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], + + "bl/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "c12/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + + "c12/ohash": ["ohash@1.1.6", "", {}, "sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg=="], + + "c12/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + + "c12/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + + "cacache/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + + "cacache/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + + "cacache/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "cacache/p-map": ["p-map@4.0.0", "", { "dependencies": { "aggregate-error": "^3.0.0" } }, "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ=="], + + "color/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], + + "compress-commons/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], + + "escodegen/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "exa-js/dotenv": ["dotenv@16.4.7", "", {}, "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ=="], + + "execa/get-stream": ["get-stream@8.0.1", "", {}, "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="], + + "execa/is-stream": ["is-stream@3.0.0", "", {}, "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA=="], + + "find-up/unicorn-magic": ["unicorn-magic@0.1.0", "", {}, "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ=="], + + "form-data/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "formdata-node/web-streams-polyfill": ["web-streams-polyfill@4.0.0-beta.3", "", {}, "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug=="], + + "fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "gauge/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + + "gaxios/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], + + "groq-sdk/@types/node": ["@types/node@18.19.103", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-hHTHp+sEz6SxFsp+SA+Tqrua3AbmlAw+Y//aEwdHrdZkYVRWdvWD3y5uPZ0flYOkgskaFWqZ/YGFm3FaFQ0pRw=="], + + "h3/cookie-es": ["cookie-es@1.2.2", "", {}, "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg=="], + + "handlebars/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "http-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], + + "is-inside-container/is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], + + "jest-diff/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-matcher-utils/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-message-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-message-util/slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], + + "jest-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-util/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "lambda-local/commander": ["commander@10.0.1", "", {}, "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug=="], + + "langsmith/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "langsmith/uuid": ["uuid@10.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ=="], + + "lazystream/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + + "listhen/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + + "make-fetch-happen/https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], + + "make-fetch-happen/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + + "make-fetch-happen/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "minipass-collect/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "minipass-fetch/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "minipass-flush/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "minipass-pipeline/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "minipass-sized/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "minizlib/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + + "netlify/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], + + "nitropack/c12": ["c12@3.0.4", "", { "dependencies": { "chokidar": "^4.0.3", "confbox": "^0.2.2", "defu": "^6.1.4", "dotenv": "^16.5.0", "exsolve": "^1.0.5", "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" }, "peerDependencies": { "magicast": "^0.3.5" }, "optionalPeers": ["magicast"] }, "sha512-t5FaZTYbbCtvxuZq9xxIruYydrAGsJ+8UdP0pZzMiK2xl/gNiSOy0OxhLzHUEEb0m1QXYqfzfvyIFEmz/g9lqg=="], + + "node-gyp/env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], + + "node-gyp/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + + "node-gyp/nopt": ["nopt@5.0.0", "", { "dependencies": { "abbrev": "1" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ=="], + + "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], + + "nypm/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + + "open/is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + + "openai/@types/node": ["@types/node@18.19.103", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-hHTHp+sEz6SxFsp+SA+Tqrua3AbmlAw+Y//aEwdHrdZkYVRWdvWD3y5uPZ0flYOkgskaFWqZ/YGFm3FaFQ0pRw=="], + + "p-event/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + + "p-wait-for/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + + "pg/pg-types": ["pg-types@2.2.0", "", { "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", "postgres-bytea": "~1.0.0", "postgres-date": "~1.0.4", "postgres-interval": "^1.1.0" } }, "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA=="], + + "precinct/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + + "promise-retry/retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="], + + "read-pkg/unicorn-magic": ["unicorn-magic@0.1.0", "", {}, "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ=="], + + "readdir-glob/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], + + "rimraf/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + + "socks-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], + + "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "ssri/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "stack-utils/escape-string-regexp": ["escape-string-regexp@2.0.0", "", {}, "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="], + + "tar/minipass": ["minipass@5.0.0", "", {}, "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="], + + "tar-fs/chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="], + + "tar-fs/tar-stream": ["tar-stream@2.2.0", "", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="], + + "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + + "unctx/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "unimport/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "unixify/normalize-path": ["normalize-path@2.1.1", "", { "dependencies": { "remove-trailing-separator": "^1.0.1" } }, "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w=="], + + "untun/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + + "unwasm/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + + "unwasm/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + + "unwasm/unplugin": ["unplugin@1.16.1", "", { "dependencies": { "acorn": "^8.14.0", "webpack-virtual-modules": "^0.6.2" } }, "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w=="], + + "winston/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], + + "winston/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "winston-transport/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "yauzl/buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], + + "@anthropic-ai/sdk/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], + + "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + + "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], + + "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], + + "@jest/types/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/types/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "@mapbox/node-pre-gyp/tar/chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], + + "@mapbox/node-pre-gyp/tar/minizlib": ["minizlib@3.0.2", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA=="], + + "@mapbox/node-pre-gyp/tar/mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], + + "@mapbox/node-pre-gyp/tar/yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], + + "@mem0/vercel-ai-provider/ai/@ai-sdk/react": ["@ai-sdk/react@1.1.18", "", { "dependencies": { "@ai-sdk/provider-utils": "2.1.10", "@ai-sdk/ui-utils": "1.1.16", "swr": "^2.2.5", "throttleit": "2.1.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "zod": "^3.0.0" }, "optionalPeers": ["react", "zod"] }, "sha512-2wlWug6NVAc8zh3pgqtvwPkSNTdA6Q4x9CmrNXCeHcXfJkJ+MuHFQz/I7Wb7mLRajf0DAxsFLIhHyBCEuTkDNw=="], + + "@mem0/vercel-ai-provider/ai/@ai-sdk/ui-utils": ["@ai-sdk/ui-utils@1.1.16", "", { "dependencies": { "@ai-sdk/provider": "1.0.9", "@ai-sdk/provider-utils": "2.1.10", "zod-to-json-schema": "^3.24.1" }, "peerDependencies": { "zod": "^3.0.0" }, "optionalPeers": ["zod"] }, "sha512-jfblR2yZVISmNK2zyNzJZFtkgX57WDAUQXcmn3XUBJyo8LFsADu+/vYMn5AOyBi9qJT0RBk11PEtIxIqvByw3Q=="], + + "@netlify/zip-it-and-ship-it/glob/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], + + "c12/pkg-types/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + + "cacache/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "color/color-convert/color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], + + "form-data/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "groq-sdk/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], + + "jest-diff/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-diff/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "jest-matcher-utils/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-matcher-utils/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "jest-message-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-message-util/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "jest-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-util/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "langsmith/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "langsmith/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "lazystream/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "lazystream/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + + "make-fetch-happen/https-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], + + "mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + + "nitropack/c12/giget": ["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" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA=="], + + "node-gyp/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "node-gyp/nopt/abbrev": ["abbrev@1.1.1", "", {}, "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="], + + "nypm/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + + "openai/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], + + "pg/pg-types/postgres-array": ["postgres-array@2.0.0", "", {}, "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="], + + "pg/pg-types/postgres-bytea": ["postgres-bytea@1.0.0", "", {}, "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w=="], + + "pg/pg-types/postgres-date": ["postgres-date@1.0.7", "", {}, "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="], + + "pg/pg-types/postgres-interval": ["postgres-interval@1.2.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="], + + "rimraf/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "tar-fs/tar-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "unwasm/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + + "unwasm/pkg-types/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + + "cacache/glob/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + + "nitropack/c12/giget/nypm": ["nypm@0.6.0", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "pathe": "^2.0.3", "pkg-types": "^2.0.0", "tinyexec": "^0.3.2" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg=="], + + "node-gyp/glob/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + + "rimraf/glob/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + } +} diff --git a/nitro.config.ts b/nitro.config.ts index b6e91c8..1067757 100644 --- a/nitro.config.ts +++ b/nitro.config.ts @@ -1,4 +1,6 @@ //https://nitro.unjs.io/config export default defineNitroConfig({ - srcDir: "server" + srcDir: "server", + preset: "bun", + compatibilityDate: '2025-05-24' }); diff --git a/package.json b/package.json index f09a1aa..4136d61 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ }, "keywords": [], "author": "", - "license": "ISC", + "license": "MIT", "dependencies": { "@ai-sdk/openai": "^1.3.22", "@ai-sdk/openai-compatible": "^0.2.14", @@ -39,7 +39,9 @@ "@biomejs/biome": "1.9.4", "@hey-api/openapi-ts": "^0.67.5", "@types/node": "^20.11.17", - "typescript": "^5.3.3" + "typescript": "^5.3.3", + "@types/bun": "latest" }, - "packageManager": "pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977" + "packageManager": "pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977", + "private": true } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 3ac1dc1..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,7840 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@ai-sdk/openai': - specifier: ^1.3.22 - version: 1.3.22(zod@3.24.2) - '@ai-sdk/openai-compatible': - specifier: ^0.2.14 - version: 0.2.14(zod@3.24.2) - '@hey-api/client-fetch': - specifier: ^0.10.1 - version: 0.10.1(@hey-api/openapi-ts@0.67.5(magicast@0.3.5)(typescript@5.8.2)) - '@mem0/vercel-ai-provider': - specifier: ^1.0.5 - version: 1.0.5(@anthropic-ai/sdk@0.40.1(encoding@0.1.13))(@google/genai@0.7.0(encoding@0.1.13))(@langchain/core@0.3.57(openai@4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2)))(@mistralai/mistralai@1.6.1(zod@3.24.2))(@qdrant/js-client-rest@1.13.0(typescript@5.8.2))(@supabase/supabase-js@2.49.8)(@types/jest@29.5.14)(@types/pg@8.11.0)(@types/sqlite3@3.1.11)(encoding@0.1.13)(groq-sdk@0.3.0(encoding@0.1.13))(neo4j-driver@5.28.1)(ollama@0.5.15)(pg@8.11.3)(react@19.0.0)(redis@4.7.1)(sqlite3@5.1.7)(ws@8.18.2)(zod@3.24.2) - '@openrouter/ai-sdk-provider': - specifier: ^0.4.6 - version: 0.4.6(zod@3.24.2) - '@t3-oss/env-core': - specifier: ^0.13.4 - version: 0.13.4(arktype@2.1.20)(typescript@5.8.2)(zod@3.24.2) - '@vercel/functions': - specifier: ^2.0.0 - version: 2.0.0 - ai: - specifier: ^4.3.16 - version: 4.3.16(react@19.0.0)(zod@3.24.2) - discourse2-chat: - specifier: ^1.1.5 - version: 1.1.5 - exa-js: - specifier: ^1.4.10 - version: 1.4.10(encoding@0.1.13) - nitropack: - specifier: latest - version: 2.11.12(encoding@0.1.13)(sqlite3@5.1.7) - tsx: - specifier: ^4.19.4 - version: 4.19.4 - zod: - specifier: ^3.24.2 - version: 3.24.2 - devDependencies: - '@biomejs/biome': - specifier: 1.9.4 - version: 1.9.4 - '@hey-api/openapi-ts': - specifier: ^0.67.5 - version: 0.67.5(magicast@0.3.5)(typescript@5.8.2) - '@types/node': - specifier: ^20.11.17 - version: 20.17.22 - typescript: - specifier: ^5.3.3 - version: 5.8.2 - -packages: - - '@ai-sdk/anthropic@1.1.12': - resolution: {integrity: sha512-EygyzN8Ng5r4kj5hI2ONn1HQv0Z0NJKAQqBu4U3ZE9pKotjYuU9xkvvyteJwhQiRm4qfpqCdWHeUuC99Q30grA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/cohere@1.1.12': - resolution: {integrity: sha512-A5aN9hev4bGAK6v4NaXFBcFNjbtGJPrXx8bR+Fmzm7OMMKqRsAISIwfoh4RmzwThs2TpOb1ecRWYOOGIYKjfiQ==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/groq@1.1.11': - resolution: {integrity: sha512-Y5WUyWuxkQarl4AVGeIMbNSp4/XiwW/mxp9SKeagfDhflVnQHd2ggISVD6HiOBQhznusITjWYYC66DJeBn0v6A==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/openai-compatible@0.2.14': - resolution: {integrity: sha512-icjObfMCHKSIbywijaoLdZ1nSnuRnWgMEMLgwoxPJgxsUHMx0aVORnsLUid4SPtdhHI3X2masrt6iaEQLvOSFw==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/openai@1.1.15': - resolution: {integrity: sha512-irGQx5lMrYI9gub7Sy2ZHu49D3Icf7OtfOu3X8fVKMONOyi54RTKRNjVZTewkfRNE44psTbZDO8j8qmPirOTNQ==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/openai@1.3.22': - resolution: {integrity: sha512-QwA+2EkG0QyjVR+7h6FE7iOu2ivNqAVMm9UJZkVxxTk5OIq5fFJDTEI/zICEMuHImTTXR2JjsL6EirJ28Jc4cw==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/provider-utils@2.1.10': - resolution: {integrity: sha512-4GZ8GHjOFxePFzkl3q42AU0DQOtTQ5w09vmaWUf/pKFXJPizlnzKSUkF0f+VkapIUfDugyMqPMT1ge8XQzVI7Q==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - peerDependenciesMeta: - zod: - optional: true - - '@ai-sdk/provider-utils@2.2.8': - resolution: {integrity: sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.23.8 - - '@ai-sdk/provider@1.0.9': - resolution: {integrity: sha512-jie6ZJT2ZR0uVOVCDc9R2xCX5I/Dum/wEK28lx21PJx6ZnFAN9EzD2WsPhcDWfCgGx3OAZZ0GyM3CEobXpa9LA==} - engines: {node: '>=18'} - - '@ai-sdk/provider@1.1.3': - resolution: {integrity: sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==} - engines: {node: '>=18'} - - '@ai-sdk/react@1.1.18': - resolution: {integrity: sha512-2wlWug6NVAc8zh3pgqtvwPkSNTdA6Q4x9CmrNXCeHcXfJkJ+MuHFQz/I7Wb7mLRajf0DAxsFLIhHyBCEuTkDNw==} - engines: {node: '>=18'} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.0.0 - peerDependenciesMeta: - react: - optional: true - zod: - optional: true - - '@ai-sdk/react@1.2.12': - resolution: {integrity: sha512-jK1IZZ22evPZoQW3vlkZ7wvjYGYF+tRBKXtrcolduIkQ/m/sOAVcVeVDUDvh1T91xCnWCdUGCPZg2avZ90mv3g==} - engines: {node: '>=18'} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.23.8 - peerDependenciesMeta: - zod: - optional: true - - '@ai-sdk/ui-utils@1.1.16': - resolution: {integrity: sha512-jfblR2yZVISmNK2zyNzJZFtkgX57WDAUQXcmn3XUBJyo8LFsADu+/vYMn5AOyBi9qJT0RBk11PEtIxIqvByw3Q==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - peerDependenciesMeta: - zod: - optional: true - - '@ai-sdk/ui-utils@1.2.11': - resolution: {integrity: sha512-3zcwCc8ezzFlwp3ZD15wAPjf2Au4s3vAbKsXQVyhxODHcmu0iyPO2Eua6D/vicq/AUm/BAo60r97O6HU+EI0+w==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.23.8 - - '@anthropic-ai/sdk@0.40.1': - resolution: {integrity: sha512-DJMWm8lTEM9Lk/MSFL+V+ugF7jKOn0M2Ujvb5fN8r2nY14aHbGPZ1k6sgjL+tpJ3VuOGJNG+4R83jEpOuYPv8w==} - - '@ark/schema@0.46.0': - resolution: {integrity: sha512-c2UQdKgP2eqqDArfBqQIJppxJHvNNXuQPeuSPlDML4rjw+f1cu0qAlzOG4b8ujgm9ctIDWwhpyw6gjG5ledIVQ==} - - '@ark/util@0.46.0': - resolution: {integrity: sha512-JPy/NGWn/lvf1WmGCPw2VGpBg5utZraE84I7wli18EDF3p3zc/e9WolT35tINeZO3l7C77SjqRJeAUoT0CvMRg==} - - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.27.2': - resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/types@7.27.1': - resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} - engines: {node: '>=6.9.0'} - - '@biomejs/biome@1.9.4': - resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} - engines: {node: '>=14.21.3'} - hasBin: true - - '@biomejs/cli-darwin-arm64@1.9.4': - resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [darwin] - - '@biomejs/cli-darwin-x64@1.9.4': - resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [darwin] - - '@biomejs/cli-linux-arm64-musl@1.9.4': - resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [linux] - - '@biomejs/cli-linux-arm64@1.9.4': - resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [linux] - - '@biomejs/cli-linux-x64-musl@1.9.4': - resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [linux] - - '@biomejs/cli-linux-x64@1.9.4': - resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [linux] - - '@biomejs/cli-win32-arm64@1.9.4': - resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [win32] - - '@biomejs/cli-win32-x64@1.9.4': - resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [win32] - - '@cfworker/json-schema@4.1.1': - resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} - - '@cloudflare/kv-asset-handler@0.4.0': - resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} - engines: {node: '>=18.0.0'} - - '@colors/colors@1.6.0': - resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} - engines: {node: '>=0.1.90'} - - '@dabh/diagnostics@2.0.3': - resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} - - '@dependents/detective-less@4.1.0': - resolution: {integrity: sha512-KrkT6qO5NxqNfy68sBl6CTSoJ4SNDIS5iQArkibhlbGU4LaDukZ3q2HIkh8aUKDio6o4itU4xDR7t82Y2eP1Bg==} - engines: {node: '>=14'} - - '@esbuild/aix-ppc64@0.25.4': - resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.25.4': - resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.25.4': - resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.25.4': - resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.25.4': - resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.4': - resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.25.4': - resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.4': - resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.25.4': - resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.25.4': - resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.25.4': - resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.25.4': - resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.25.4': - resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.25.4': - resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.4': - resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.25.4': - resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.25.4': - resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.4': - resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.4': - resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.4': - resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.4': - resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.25.4': - resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.4': - resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.4': - resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.25.4': - resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@fastify/busboy@2.1.1': - resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} - engines: {node: '>=14'} - - '@fastify/busboy@3.1.1': - resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==} - - '@gar/promisify@1.1.3': - resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - - '@google/genai@0.7.0': - resolution: {integrity: sha512-r+Fwj/emnXZN5R+4JCxDXboY4AGTmTn7+Wnori5dgyJiStP0P82f9YYL0CVsCnDIumNY2i0UIcZ1zGZdtHJ34w==} - engines: {node: '>=18.0.0'} - - '@hey-api/client-fetch@0.10.1': - resolution: {integrity: sha512-C1XZEnzvOIdXppvMcnO8/V/RpcORxA4rh+5qjuMcItkV++hv7aBz7tSLd0z+bSLFUwttec077WT/nPS+oO4BiA==} - peerDependencies: - '@hey-api/openapi-ts': < 2 - - '@hey-api/json-schema-ref-parser@1.0.6': - resolution: {integrity: sha512-yktiFZoWPtEW8QKS65eqKwA5MTKp88CyiL8q72WynrBs/73SAaxlSWlA2zW/DZlywZ5hX1OYzrCC0wFdvO9c2w==} - engines: {node: '>= 16'} - - '@hey-api/openapi-ts@0.67.5': - resolution: {integrity: sha512-fZd+3im0038rnK7W0mAfLTrdygCR/k6zq7XfYZj/wu0/3GvIg/aGlOwMUtZinRJBH21W+GoH0MJoce3BagVXsw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=22.10.0} - hasBin: true - peerDependencies: - typescript: ^5.5.3 - - '@ioredis/commands@1.2.0': - resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} - - '@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'} - - '@jest/expect-utils@29.7.0': - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=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==} - - '@jsdevtools/ono@7.1.3': - resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} - - '@langchain/core@0.3.57': - resolution: {integrity: sha512-jz28qCTKJmi47b6jqhQ6vYRTG5jRpqhtPQjriRTB5wR8mgvzo6xKs0fG/kExS3ZvM79ytD1npBvgf8i19xOo9Q==} - engines: {node: '>=18'} - - '@mapbox/node-pre-gyp@1.0.11': - resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} - hasBin: true - - '@mapbox/node-pre-gyp@2.0.0': - resolution: {integrity: sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==} - engines: {node: '>=18'} - hasBin: true - - '@mem0/vercel-ai-provider@1.0.5': - resolution: {integrity: sha512-+TN6ePMTgj6syVQN0j3DxcjDf2dOKM9qESpm29VEaEi5voQYT0DYOMjsJnPIAO90rhU32DF+k1PrtH9WJVRcmA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - peerDependenciesMeta: - zod: - optional: true - - '@mistralai/mistralai@1.6.1': - resolution: {integrity: sha512-NFAMamNFSAaLT4YhDrqEjhJALJXSheZdA5jXT6gG5ICCJRk9+WQx7vRQO1sIZNIRP+xpPyROpa7X6ZcufiucIA==} - peerDependencies: - zod: '>= 3' - - '@netlify/binary-info@1.0.0': - resolution: {integrity: sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==} - - '@netlify/blobs@9.1.1': - resolution: {integrity: sha512-hOrWBMOvdh9oa+8Z6ocvkY92q9YtfD+Vbh2i+Qs14cHsl9SYxRzPRQnBxU/H6PNtj6gtEJ7tv8RbBN8z7jH2jA==} - engines: {node: ^14.16.0 || >=16.0.0} - - '@netlify/dev-utils@2.1.1': - resolution: {integrity: sha512-0O4/eEcmZCNUkpSuN/yYRkX6BAcK/sbnH0YYNuK3HX193QXaSBT60TUpvTpiRxI6zvIfYCDRl3rz63w8m/lEMg==} - engines: {node: ^14.16.0 || >=16.0.0} - - '@netlify/functions@3.1.8': - resolution: {integrity: sha512-oAHPyybBx4oH8+3RfgihrTVhv6gseQw1pt0k4kZ/NDmGbEsgrr3gw+3ajzM5+fW5UnWiNuR5c+d7JgtRqjyMkw==} - engines: {node: '>=14.0.0'} - - '@netlify/open-api@2.37.0': - resolution: {integrity: sha512-zXnRFkxgNsalSgU8/vwTWnav3R+8KG8SsqHxqaoJdjjJtnZR7wo3f+qqu4z+WtZ/4V7fly91HFUwZ6Uz2OdW7w==} - engines: {node: '>=14.8.0'} - - '@netlify/runtime-utils@1.3.1': - resolution: {integrity: sha512-7/vIJlMYrPJPlEW84V2yeRuG3QBu66dmlv9neTmZ5nXzwylhBEOhy11ai+34A8mHCSZI4mKns25w3HM9kaDdJg==} - engines: {node: '>=16.0.0'} - - '@netlify/serverless-functions-api@1.41.1': - resolution: {integrity: sha512-swjyZEd8U1QVp01rZdHxpwWie7GkP1kS4+4n8kuNKA8+3G5tD0JXXf3a5d4tdwVvrU9k7a4GP1Bn792UPwecmw==} - engines: {node: '>=18.0.0'} - - '@netlify/zip-it-and-ship-it@10.1.1': - resolution: {integrity: sha512-MMXrty1NADxyMPgd7qZvDUYunhcPhxIA/jWP2joceOoPcAxOno/aS4jFuIHf2Dbb4HdhR+BlvgvDCy7QTXXyLQ==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - - '@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'} - - '@npmcli/fs@1.1.1': - resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} - - '@npmcli/move-file@1.1.2': - resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} - engines: {node: '>=10'} - deprecated: This functionality has been moved to @npmcli/fs - - '@openrouter/ai-sdk-provider@0.4.6': - resolution: {integrity: sha512-oUa8xtssyUhiKEU/aW662lsZ0HUvIUTRk8vVIF3Ha3KI/DnqX54zmVIuzYnaDpermqhy18CHqblAY4dDt1JW3g==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@opentelemetry/api@1.9.0': - 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.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'} - - '@poppinss/colors@4.1.4': - resolution: {integrity: sha512-FA+nTU8p6OcSH4tLDY5JilGYr1bVWHpNmcLr7xmMEdbWmKHa+3QZ+DqefrXKmdjO/brHTnQZo20lLSjaO7ydog==} - engines: {node: '>=18.16.0'} - - '@poppinss/dumper@0.6.3': - resolution: {integrity: sha512-iombbn8ckOixMtuV1p3f8jN6vqhXefNjJttoPaJDMeIk/yIGhkkL3OrHkEjE9SRsgoAx1vBUU2GtgggjvA5hCA==} - - '@poppinss/exception@1.2.1': - resolution: {integrity: sha512-aQypoot0HPSJa6gDPEPTntc1GT6QINrSbgRlRhadGW2WaYqUK3tK4Bw9SBMZXhmxd3GeAlZjVcODHgiu+THY7A==} - engines: {node: '>=18'} - - '@qdrant/js-client-rest@1.13.0': - resolution: {integrity: sha512-bewMtnXlGvhhnfXsp0sLoLXOGvnrCM15z9lNlG0Snp021OedNAnRtKkerjk5vkOcbQWUmJHXYCuxDfcT93aSkA==} - engines: {node: '>=18.0.0', pnpm: '>=8'} - peerDependencies: - typescript: '>=4.7' - - '@qdrant/openapi-typescript-fetch@1.2.6': - resolution: {integrity: sha512-oQG/FejNpItrxRHoyctYvT3rwGZOnK4jr3JdppO/c78ktDvkWiPXPHNsrDf33K9sZdRb6PR7gi4noIapu5q4HA==} - engines: {node: '>=18.0.0', pnpm: '>=8'} - - '@redis/bloom@1.2.0': - resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==} - peerDependencies: - '@redis/client': ^1.0.0 - - '@redis/client@1.6.1': - resolution: {integrity: sha512-/KCsg3xSlR+nCK8/8ZYSknYxvXHwubJrU82F3Lm1Fp6789VQ0/3RJKfsmRXjqfaTA++23CvC3hqmqe/2GEt6Kw==} - engines: {node: '>=14'} - - '@redis/graph@1.1.1': - resolution: {integrity: sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==} - peerDependencies: - '@redis/client': ^1.0.0 - - '@redis/json@1.0.7': - resolution: {integrity: sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==} - peerDependencies: - '@redis/client': ^1.0.0 - - '@redis/search@1.2.0': - resolution: {integrity: sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==} - peerDependencies: - '@redis/client': ^1.0.0 - - '@redis/time-series@1.1.0': - resolution: {integrity: sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==} - peerDependencies: - '@redis/client': ^1.0.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.1': - resolution: {integrity: sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==} - 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.41.0': - resolution: {integrity: sha512-KxN+zCjOYHGwCl4UCtSfZ6jrq/qi88JDUtiEFk8LELEHq2Egfc/FgW+jItZiOLRuQfb/3xJSgFuNPC9jzggX+A==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.41.0': - resolution: {integrity: sha512-yDvqx3lWlcugozax3DItKJI5j05B0d4Kvnjx+5mwiUpWramVvmAByYigMplaoAQ3pvdprGCTCE03eduqE/8mPQ==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.41.0': - resolution: {integrity: sha512-2KOU574vD3gzcPSjxO0eyR5iWlnxxtmW1F5CkNOHmMlueKNCQkxR6+ekgWyVnz6zaZihpUNkGxjsYrkTJKhkaw==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.41.0': - resolution: {integrity: sha512-gE5ACNSxHcEZyP2BA9TuTakfZvULEW4YAOtxl/A/YDbIir/wPKukde0BNPlnBiP88ecaN4BJI2TtAd+HKuZPQQ==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.41.0': - resolution: {integrity: sha512-GSxU6r5HnWij7FoSo7cZg3l5GPg4HFLkzsFFh0N/b16q5buW1NAWuCJ+HMtIdUEi6XF0qH+hN0TEd78laRp7Dg==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.41.0': - resolution: {integrity: sha512-KGiGKGDg8qLRyOWmk6IeiHJzsN/OYxO6nSbT0Vj4MwjS2XQy/5emsmtoqLAabqrohbgLWJ5GV3s/ljdrIr8Qjg==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.41.0': - resolution: {integrity: sha512-46OzWeqEVQyX3N2/QdiU/CMXYDH/lSHpgfBkuhl3igpZiaB3ZIfSjKuOnybFVBQzjsLwkus2mjaESy8H41SzvA==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.41.0': - resolution: {integrity: sha512-lfgW3KtQP4YauqdPpcUZHPcqQXmTmH4nYU0cplNeW583CMkAGjtImw4PKli09NFi2iQgChk4e9erkwlfYem6Lg==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.41.0': - resolution: {integrity: sha512-nn8mEyzMbdEJzT7cwxgObuwviMx6kPRxzYiOl6o/o+ChQq23gfdlZcUNnt89lPhhz3BYsZ72rp0rxNqBSfqlqw==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.41.0': - resolution: {integrity: sha512-l+QK99je2zUKGd31Gh+45c4pGDAqZSuWQiuRFCdHYC2CSiO47qUWsCcenrI6p22hvHZrDje9QjwSMAFL3iwXwQ==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-loongarch64-gnu@4.41.0': - resolution: {integrity: sha512-WbnJaxPv1gPIm6S8O/Wg+wfE/OzGSXlBMbOe4ie+zMyykMOeqmgD1BhPxZQuDqwUN+0T/xOFtL2RUWBspnZj3w==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.41.0': - resolution: {integrity: sha512-eRDWR5t67/b2g8Q/S8XPi0YdbKcCs4WQ8vklNnUYLaSWF+Cbv2axZsp4jni6/j7eKvMLYCYdcsv8dcU+a6QNFg==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.41.0': - resolution: {integrity: sha512-TWrZb6GF5jsEKG7T1IHwlLMDRy2f3DPqYldmIhnA2DVqvvhY2Ai184vZGgahRrg8k9UBWoSlHv+suRfTN7Ua4A==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-musl@4.41.0': - resolution: {integrity: sha512-ieQljaZKuJpmWvd8gW87ZmSFwid6AxMDk5bhONJ57U8zT77zpZ/TPKkU9HpnnFrM4zsgr4kiGuzbIbZTGi7u9A==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.41.0': - resolution: {integrity: sha512-/L3pW48SxrWAlVsKCN0dGLB2bi8Nv8pr5S5ocSM+S0XCn5RCVCXqi8GVtHFsOBBCSeR+u9brV2zno5+mg3S4Aw==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.41.0': - resolution: {integrity: sha512-XMLeKjyH8NsEDCRptf6LO8lJk23o9wvB+dJwcXMaH6ZQbbkHu2dbGIUindbMtRN6ux1xKi16iXWu6q9mu7gDhQ==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.41.0': - resolution: {integrity: sha512-m/P7LycHZTvSQeXhFmgmdqEiTqSV80zn6xHaQ1JSqwCtD1YGtwEK515Qmy9DcB2HK4dOUVypQxvhVSy06cJPEg==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.41.0': - resolution: {integrity: sha512-4yodtcOrFHpbomJGVEqZ8fzD4kfBeCbpsUy5Pqk4RluXOdsWdjLnjhiKy2w3qzcASWd04fp52Xz7JKarVJ5BTg==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.41.0': - resolution: {integrity: sha512-tmazCrAsKzdkXssEc65zIE1oC6xPHwfy9d5Ta25SRCDOZS+I6RypVVShWALNuU9bxIfGA0aqrmzlzoM5wO5SPQ==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.41.0': - resolution: {integrity: sha512-h1J+Yzjo/X+0EAvR2kIXJDuTuyT7drc+t2ALY0nIcGPbTatNOf0VWdhEA2Z4AAjv6X1NJV7SYo5oCTYRJhSlVA==} - cpu: [x64] - os: [win32] - - '@sevinf/maybe@0.5.0': - resolution: {integrity: sha512-ARhyoYDnY1LES3vYI0fiG6e9esWfTNcXcO6+MPJJXcnyMV3bim4lnFt45VXouV7y82F4x3YH8nOQ6VztuvUiWg==} - - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - - '@sindresorhus/is@7.0.1': - resolution: {integrity: sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==} - engines: {node: '>=18'} - - '@sindresorhus/merge-streams@2.3.0': - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} - engines: {node: '>=18'} - - '@speed-highlight/core@1.2.7': - resolution: {integrity: sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==} - - '@supabase/auth-js@2.69.1': - resolution: {integrity: sha512-FILtt5WjCNzmReeRLq5wRs3iShwmnWgBvxHfqapC/VoljJl+W8hDAyFmf1NVw3zH+ZjZ05AKxiKxVeb0HNWRMQ==} - - '@supabase/functions-js@2.4.4': - resolution: {integrity: sha512-WL2p6r4AXNGwop7iwvul2BvOtuJ1YQy8EbOd0dhG1oN1q8el/BIRSFCFnWAMM/vJJlHWLi4ad22sKbKr9mvjoA==} - - '@supabase/node-fetch@2.6.15': - resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==} - engines: {node: 4.x || >=6.0.0} - - '@supabase/postgrest-js@1.19.4': - resolution: {integrity: sha512-O4soKqKtZIW3olqmbXXbKugUtByD2jPa8kL2m2c1oozAO11uCcGrRhkZL0kVxjBLrXHE0mdSkFsMj7jDSfyNpw==} - - '@supabase/realtime-js@2.11.2': - resolution: {integrity: sha512-u/XeuL2Y0QEhXSoIPZZwR6wMXgB+RQbJzG9VErA3VghVt7uRfSVsjeqd7m5GhX3JR6dM/WRmLbVR8URpDWG4+w==} - - '@supabase/storage-js@2.7.1': - resolution: {integrity: sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==} - - '@supabase/supabase-js@2.49.8': - resolution: {integrity: sha512-zzBQLgS/jZs7btWcIAc7V5yfB+juG7h0AXxKowMJuySsO5vK+F7Vp+HCa07Z+tu9lZtr3sT9fofkc86bdylmtw==} - - '@t3-oss/env-core@0.13.4': - resolution: {integrity: sha512-zVOiYO0+CF7EnBScz8s0O5JnJLPTU0lrUi8qhKXfIxIJXvI/jcppSiXXsEJwfB4A6XZawY/Wg/EQGKANi/aPmQ==} - peerDependencies: - arktype: ^2.1.0 - typescript: '>=5.0.0' - valibot: ^1.0.0-beta.7 || ^1.0.0 - zod: ^3.24.0 || ^4.0.0-beta.0 - peerDependenciesMeta: - typescript: - optional: true - valibot: - optional: true - zod: - optional: true - - '@tootallnate/once@1.1.2': - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - - '@types/diff-match-patch@1.0.36': - resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==} - - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} - - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - - '@types/jest@29.5.14': - resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/node-fetch@2.6.12': - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} - - '@types/node@18.19.103': - resolution: {integrity: sha512-hHTHp+sEz6SxFsp+SA+Tqrua3AbmlAw+Y//aEwdHrdZkYVRWdvWD3y5uPZ0flYOkgskaFWqZ/YGFm3FaFQ0pRw==} - - '@types/node@20.17.22': - resolution: {integrity: sha512-9RV2zST+0s3EhfrMZIhrz2bhuhBwxgkbHEwP2gtGWPjBzVQjifMzJ9exw7aDZhR1wbpj8zBrfp3bo8oJcGiUUw==} - - '@types/normalize-package-data@2.4.4': - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - - '@types/pg@8.11.0': - resolution: {integrity: sha512-sDAlRiBNthGjNFfvt0k6mtotoVYVQ63pA8R4EMWka7crawSR60waVYR0HAgmPRs/e2YaeJTD/43OoZ3PFw80pw==} - - '@types/phoenix@1.6.6': - resolution: {integrity: sha512-PIzZZlEppgrpoT2QgbnDU+MMzuR6BbCjllj0bM70lWoejMeNJAxCchxnv7J3XFkI8MpygtRpzXrIlmWUBclP5A==} - - '@types/resolve@1.20.2': - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - - '@types/retry@0.12.0': - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - - '@types/sqlite3@3.1.11': - resolution: {integrity: sha512-KYF+QgxAnnAh7DWPdNDroxkDI3/MspH1NMx6m/N/6fT1G6+jvsw4/ZePt8R8cr7ta58aboeTfYFBDxTJ5yv15w==} - - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - - '@types/triple-beam@1.3.5': - resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} - - '@types/uuid@10.0.0': - resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} - - '@types/ws@8.18.1': - resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - - '@types/yargs@17.0.33': - resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - - '@typescript-eslint/types@5.62.0': - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/typescript-estree@5.62.0': - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/visitor-keys@5.62.0': - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@vercel/functions@2.0.0': - resolution: {integrity: sha512-BSwIihLHoV18gerKZJyGuqd3rtaYM6rJvET1kOwKktshucyaHXTJel7Cxegs+sdX0NZqsX4LO2MFnMU2jG01Cw==} - engines: {node: '>= 18'} - peerDependencies: - '@aws-sdk/credential-provider-web-identity': '*' - peerDependenciesMeta: - '@aws-sdk/credential-provider-web-identity': - optional: true - - '@vercel/nft@0.27.7': - resolution: {integrity: sha512-FG6H5YkP4bdw9Ll1qhmbxuE8KwW2E/g8fJpM183fWQLeVDGqzeywMIeJ9h2txdWZ03psgWMn6QymTxaDLmdwUg==} - engines: {node: '>=16'} - hasBin: true - - '@vercel/nft@0.29.2': - resolution: {integrity: sha512-A/Si4mrTkQqJ6EXJKv5EYCDQ3NL6nJXxG8VGXePsaiQigsomHYQC9xSpX8qGk7AEZk4b1ssbYIqJ0ISQQ7bfcA==} - engines: {node: '>=18'} - hasBin: true - - '@whatwg-node/disposablestack@0.0.6': - resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} - engines: {node: '>=18.0.0'} - - '@whatwg-node/fetch@0.10.8': - resolution: {integrity: sha512-Rw9z3ctmeEj8QIB9MavkNJqekiu9usBCSMZa+uuAvM0lF3v70oQVCXNppMIqaV6OTZbdaHF1M2HLow58DEw+wg==} - engines: {node: '>=18.0.0'} - - '@whatwg-node/node-fetch@0.7.21': - resolution: {integrity: sha512-QC16IdsEyIW7kZd77aodrMO7zAoDyyqRCTLg+qG4wqtP4JV9AA+p7/lgqMdD29XyiYdVvIdFrfI9yh7B1QvRvw==} - engines: {node: '>=18.0.0'} - - '@whatwg-node/promise-helpers@1.3.2': - resolution: {integrity: sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==} - engines: {node: '>=16.0.0'} - - '@whatwg-node/server@0.9.71': - resolution: {integrity: sha512-ueFCcIPaMgtuYDS9u0qlUoEvj6GiSsKrwnOLPp9SshqjtcRaR1IEHRjoReq3sXNydsF5i0ZnmuYgXq9dV53t0g==} - engines: {node: '>=18.0.0'} - - abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - - abbrev@3.0.1: - resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} - 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@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'} - - agentkeepalive@4.6.0: - resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} - engines: {node: '>= 8.0.0'} - - aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - - ai@4.1.46: - resolution: {integrity: sha512-VTvAktT69IN1qcNAv7OlcOuR0q4HqUlhkVacrWmMlEoprYykF9EL5RY8IECD5d036Wqg0walwbSKZlA2noHm1A==} - engines: {node: '>=18'} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.0.0 - peerDependenciesMeta: - react: - optional: true - zod: - optional: true - - ai@4.3.16: - resolution: {integrity: sha512-KUDwlThJ5tr2Vw0A1ZkbDKNME3wzWhuVfAOwIvFUzl1TPVDFAXDFTXio3p+jaKneB+dKNCvFFlolYmmgHttG1g==} - engines: {node: '>=18'} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.23.8 - peerDependenciesMeta: - react: - optional: true - - ajv-errors@3.0.0: - resolution: {integrity: sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==} - peerDependencies: - ajv: ^8.0.1 - - ajv-formats@3.0.1: - resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - - 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@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - aproba@2.0.0: - resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - - archiver-utils@2.1.0: - resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} - engines: {node: '>= 6'} - - archiver-utils@3.0.4: - resolution: {integrity: sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==} - engines: {node: '>= 10'} - - archiver-utils@5.0.2: - resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} - engines: {node: '>= 14'} - - archiver@5.3.2: - resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==} - engines: {node: '>= 10'} - - archiver@7.0.1: - resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} - engines: {node: '>= 14'} - - are-we-there-yet@2.0.0: - resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} - engines: {node: '>=10'} - deprecated: This package is no longer supported. - - are-we-there-yet@3.0.1: - resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This package is no longer supported. - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - arktype@2.1.20: - resolution: {integrity: sha512-IZCEEXaJ8g+Ijd59WtSYwtjnqXiwM8sWQ5EjGamcto7+HVN9eK0C4p0zDlCuAwWhpqr6fIBkxPuYDl4/Mcj/+Q==} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - ast-module-types@5.0.0: - resolution: {integrity: sha512-JvqziE0Wc0rXQfma0HZC/aY7URXHFuZV84fJRtP8u+lhp0JYCNd5wJzVXP45t0PH0Mej3ynlzvdyITYIu0G4LQ==} - engines: {node: '>=14'} - - async-sema@3.1.1: - resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} - - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - axios@1.7.7: - resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} - - b4a@1.6.7: - resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - bare-events@2.5.4: - resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} - - base-64@0.1.0: - resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - bignumber.js@9.3.0: - resolution: {integrity: sha512-EM7aMFTXbptt/wZdMlBv2t8IViwQL+h6SLHosp8Yf0dqJMTnY6iL32opnAB6kAdL0SZPuvcAzFr31o0c/R3/RA==} - - bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - - 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-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - - 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-writer@2.0.0: - resolution: {integrity: sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==} - engines: {node: '>=4'} - - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - - buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - - builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - - c12@2.0.1: - resolution: {integrity: sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==} - peerDependencies: - magicast: ^0.3.5 - peerDependenciesMeta: - magicast: - optional: true - - c12@3.0.4: - resolution: {integrity: sha512-t5FaZTYbbCtvxuZq9xxIruYydrAGsJ+8UdP0pZzMiK2xl/gNiSOy0OxhLzHUEEb0m1QXYqfzfvyIFEmz/g9lqg==} - peerDependencies: - magicast: ^0.3.5 - peerDependenciesMeta: - magicast: - optional: true - - cacache@15.3.0: - resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} - engines: {node: '>= 10'} - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - callsite@1.0.0: - resolution: {integrity: sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - - charenc@0.0.2: - resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} - - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - - citty@0.1.6: - resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} - - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - - 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==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - - color-support@1.1.3: - resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true - - color@3.2.1: - resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} - - colorspace@1.1.4: - resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - - commander@13.0.0: - resolution: {integrity: sha512-oPYleIY8wmTVzkvQq10AEok6YcTC4sRUBl8F9gVuwchGVUCTbl/vhLTaQqutuuySYOsu8YTgV+OxKc/8Yvx+mQ==} - engines: {node: '>=18'} - - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - - compatx@0.2.0: - resolution: {integrity: sha512-6gLRNt4ygsi5NyMVhceOCFv14CIdDFN7fQjX1U4+47qVE/+kjPoXMK65KWK+dWxmFzMTuKazoQ9sch6pM0p5oA==} - - compress-commons@4.1.2: - resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==} - engines: {node: '>= 10'} - - 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.2: - resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} - - consola@3.4.2: - resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} - engines: {node: ^14.18.0 || >=16.10.0} - - console-control-strings@1.1.0: - resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - - console-table-printer@2.13.0: - resolution: {integrity: sha512-Wl1rFO1NLonYBBjrdF2SMCnfNrKr8PPooPSnQBRX3LTJsnyGjBzLcwffo8wSKuJ0kr/rgC2Ltxb3Bpb072VA9w==} - - cookie-es@1.2.2: - resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} - - cookie-es@2.0.0: - resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==} - - cookie@1.0.2: - resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} - engines: {node: '>=18'} - - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - - cp-file@10.0.0: - resolution: {integrity: sha512-vy2Vi1r2epK5WqxOLnskeKeZkdZvTKfFZQCplE3XWsP+SUJyd5XAUFC9lFgTjjXJF2GMne/UML14iEmkAaDfFg==} - engines: {node: '>=14.16'} - - crc-32@1.2.2: - resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} - engines: {node: '>=0.8'} - hasBin: true - - crc32-stream@4.0.3: - resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==} - engines: {node: '>= 10'} - - crc32-stream@6.0.0: - resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} - engines: {node: '>= 14'} - - cron-parser@4.9.0: - resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} - engines: {node: '>=12.0.0'} - - croner@9.0.0: - resolution: {integrity: sha512-onMB0OkDjkXunhdW9htFjEhqrD54+M94i6ackoUkjHKbRnXdyEyKRelp4nJ1kAz32+s27jP1FsebpJCVl0BsvA==} - engines: {node: '>=18.0'} - - cross-fetch@4.1.0: - resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - crossws@0.3.5: - resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} - - crypt@0.0.2: - resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} - - data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - - db0@0.3.2: - resolution: {integrity: sha512-xzWNQ6jk/+NtdfLyXEipbX55dmDSeteLFt/ayF+wZUU5bzKgmrDOxmInUTbyVRp46YwnJdkDA1KhB7WIXFofJw==} - 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@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decache@4.6.2: - resolution: {integrity: sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==} - - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - - 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'} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - destr@2.0.5: - resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} - - detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} - engines: {node: '>=0.10'} - hasBin: true - - detect-libc@2.0.4: - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} - engines: {node: '>=8'} - - detective-amd@5.0.2: - resolution: {integrity: sha512-XFd/VEQ76HSpym80zxM68ieB77unNuoMwopU2TFT/ErUk5n4KvUTwW4beafAVUugrjV48l4BmmR0rh2MglBaiA==} - engines: {node: '>=14'} - hasBin: true - - detective-cjs@5.0.1: - resolution: {integrity: sha512-6nTvAZtpomyz/2pmEmGX1sXNjaqgMplhQkskq2MLrar0ZAIkHMrDhLXkRiK2mvbu9wSWr0V5/IfiTrZqAQMrmQ==} - engines: {node: '>=14'} - - detective-es6@4.0.1: - resolution: {integrity: sha512-k3Z5tB4LQ8UVHkuMrFOlvb3GgFWdJ9NqAa2YLUU/jTaWJIm+JJnEh4PsMc+6dfT223Y8ACKOaC0qcj7diIhBKw==} - engines: {node: '>=14'} - - detective-postcss@6.1.3: - resolution: {integrity: sha512-7BRVvE5pPEvk2ukUWNQ+H2XOq43xENWbH0LcdCE14mwgTBEAMoAx+Fc1rdp76SmyZ4Sp48HlV7VedUnP6GA1Tw==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - detective-sass@5.0.3: - resolution: {integrity: sha512-YsYT2WuA8YIafp2RVF5CEfGhhyIVdPzlwQgxSjK+TUm3JoHP+Tcorbk3SfG0cNZ7D7+cYWa0ZBcvOaR0O8+LlA==} - engines: {node: '>=14'} - - detective-scss@4.0.3: - resolution: {integrity: sha512-VYI6cHcD0fLokwqqPFFtDQhhSnlFWvU614J42eY6G0s8c+MBhi9QAWycLwIOGxlmD8I/XvGSOUV1kIDhJ70ZPg==} - engines: {node: '>=14'} - - detective-stylus@4.0.0: - resolution: {integrity: sha512-TfPotjhszKLgFBzBhTOxNHDsutIxx9GTWjrL5Wh7Qx/ydxKhwUrlSFeLIn+ZaHPF+h0siVBkAQSuy6CADyTxgQ==} - engines: {node: '>=14'} - - detective-typescript@11.2.0: - resolution: {integrity: sha512-ARFxjzizOhPqs1fYC/2NMC3N4jrQ6HvVflnXBTRqNEqJuXwyKLRr9CrJwkRcV/SnZt1sNXgsF6FPm0x57Tq0rw==} - engines: {node: ^14.14.0 || >=16.0.0} - - diff-match-patch@1.0.5: - resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} - - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - digest-fetch@1.3.0: - resolution: {integrity: sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - discourse2-chat@1.1.5: - resolution: {integrity: sha512-VbyHRV6C6uyYc5PMbgNjTm0FTm1tb2jJh75wKB+51xC6zhbFoJ8QmxlYHRfuw0Ct9M1xTkwqW8g/176rbx3eSg==} - - 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'} - - 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'} - - duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - - 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==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - enabled@2.0.0: - resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} - - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - - encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - - end-of-stream@1.1.0: - resolution: {integrity: sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==} - - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - - env-paths@3.0.0: - resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - - error-stack-parser-es@1.0.5: - resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-module-lexer@1.4.1: - resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - esbuild@0.25.4: - resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} - 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@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - - escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.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==} - - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - - eventsource-parser@3.0.2: - resolution: {integrity: sha512-6RxOBZ/cYgd8usLwsEl+EC09Au/9BcmCKYF2/xbml6DNczf7nv0MQb+7BA2F+li6//I+28VNlQR37XfQtcAJuA==} - engines: {node: '>=18.0.0'} - - exa-js@1.4.10: - resolution: {integrity: sha512-rffYWPU568gOiYmsHW3L5J6atoNfLJTrtAk/DAKyPuGtdDXrE9fsSfltP1X1pNVtLTsz8DIyhUHOXErueNLJrQ==} - - execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - - expand-template@2.0.3: - resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} - engines: {node: '>=6'} - - expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - exsolve@1.0.5: - resolution: {integrity: sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - - 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-uri@3.0.6: - resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} - - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - - fdir@6.4.4: - resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - fecha@4.2.3: - resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} - - fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} - - file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - filter-obj@5.1.0: - resolution: {integrity: sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==} - engines: {node: '>=14.16'} - - find-up-simple@1.0.1: - resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} - engines: {node: '>=18'} - - find-up@6.3.0: - resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - find-up@7.0.0: - resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} - engines: {node: '>=18'} - - fn.name@1.1.0: - resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - - form-data-encoder@1.7.2: - resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} - - form-data@4.0.2: - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} - engines: {node: '>= 6'} - - formdata-node@4.4.1: - resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} - engines: {node: '>= 12.20'} - - formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - - fresh@2.0.0: - resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} - engines: {node: '>= 0.8'} - - fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - gauge@3.0.2: - resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} - engines: {node: '>=10'} - deprecated: This package is no longer supported. - - gauge@4.0.4: - resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This package is no longer supported. - - 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'} - - generic-pool@3.9.0: - resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} - engines: {node: '>= 4'} - - get-amd-module-type@5.0.1: - resolution: {integrity: sha512-jb65zDeHyDjFR1loOVk0HQGM5WNwoGB8aLWy3LKCieMKol0/ProHkhO2X1JxojuN10vbz1qNn09MJ7tNp7qMzw==} - 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'} - - 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@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - - get-tsconfig@4.10.1: - resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} - - giget@1.2.5: - resolution: {integrity: sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug==} - hasBin: true - - giget@2.0.0: - resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} - hasBin: true - - github-from-package@0.0.0: - resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} - - 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 - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - deprecated: Glob versions prior to v9 are no longer supported - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - - globby@14.1.0: - resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} - engines: {node: '>=18'} - - gonzales-pe@4.3.0: - resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==} - engines: {node: '>=0.6.0'} - hasBin: true - - google-auth-library@9.15.1: - resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==} - 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==} - - groq-sdk@0.3.0: - resolution: {integrity: sha512-Cdgjh4YoSBE2X4S9sxPGXaAy1dlN4bRtAaDZ3cnq+XsxhhN9WSBeHF64l7LWwuD5ntmw7YC5Vf4Ff1oHCg1LOg==} - - gtoken@7.1.0: - 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.15.3: - resolution: {integrity: sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==} - - handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - has-unicode@2.0.1: - resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - hookable@5.5.3: - resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} - - hosted-git-info@7.0.2: - resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} - engines: {node: ^16.14.0 || >=18.0.0} - - http-cache-semantics@4.2.0: - resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - - http-proxy-agent@4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - - 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'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - - httpxy@0.1.7: - resolution: {integrity: sha512-pXNx8gnANKAndgga5ahefxc++tJvNL87CXoRwxn1cJE2ZkWEojF3tNfQIEhZX/vfpt+wzeAzpUI4qkediX1MLQ==} - - human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - - humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - ignore@7.0.4: - resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==} - engines: {node: '>= 4'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - - index-to-position@1.1.0: - resolution: {integrity: sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==} - engines: {node: '>=18'} - - infer-owner@1.0.4: - resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - - ioredis@5.6.1: - resolution: {integrity: sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==} - engines: {node: '>=12.22.0'} - - ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} - engines: {node: '>= 12'} - - iron-webcrypto@1.2.1: - resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} - - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - - is-buffer@1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - - is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - 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'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - - is-lambda@1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - - is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-path-inside@4.0.0: - resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} - engines: {node: '>=12'} - - is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - - is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - - is-stream@2.0.1: - 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-stream@4.0.1: - resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} - engines: {node: '>=18'} - - is-url-superb@4.0.0: - resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==} - engines: {node: '>=10'} - - is-url@1.2.4: - resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} - - 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==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} - hasBin: true - - js-tiktoken@1.0.20: - resolution: {integrity: sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A==} - - 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 - - jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - - json-bigint@1.0.0: - resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} - - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - - json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - - jsondiffpatch@0.6.0: - resolution: {integrity: sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - - junk@4.0.1: - resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} - engines: {node: '>=12.20'} - - jwa@2.0.1: - resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} - - jws@4.0.0: - resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} - - jwt-decode@4.0.0: - resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} - engines: {node: '>=18'} - - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - - 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==} - - kuler@2.0.0: - resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} - - lambda-local@2.2.0: - resolution: {integrity: sha512-bPcgpIXbHnVGfI/omZIlgucDqlf4LrsunwoKue5JdZeGybt8L6KyJz2Zu19ffuZwIwLj2NAI2ZyaqNT6/cetcg==} - engines: {node: '>=8'} - hasBin: true - - langsmith@0.3.29: - resolution: {integrity: sha512-JPF2B339qpYy9FyuY4Yz1aWYtgPlFc/a+VTj3L/JcFLHCiMP7+Ig8I9jO+o1QwVa+JU3iugL1RS0wwc+Glw0zA==} - peerDependencies: - openai: '*' - peerDependenciesMeta: - openai: - optional: true - - lazystream@1.0.1: - resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} - engines: {node: '>= 0.6.3'} - - listhen@1.9.0: - resolution: {integrity: sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==} - hasBin: true - - local-pkg@1.1.1: - resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} - engines: {node: '>=14'} - - locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - - lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - - lodash.defaults@4.2.0: - resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} - - lodash.difference@4.5.0: - resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} - - lodash.flatten@4.4.0: - resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} - - lodash.isarguments@3.1.0: - resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} - - lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - - lodash.union@4.6.0: - resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - logform@2.7.0: - resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} - engines: {node: '>= 12.0.0'} - - 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'} - - luxon@3.6.1: - resolution: {integrity: sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==} - engines: {node: '>=12'} - - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - - magicast@0.3.5: - resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} - - make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - - make-fetch-happen@9.1.0: - resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} - engines: {node: '>= 10'} - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - md5@2.3.0: - resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} - - mem0ai@2.1.26: - resolution: {integrity: sha512-c2O3WYNcFTGKCVlPu0gbPrauGX509szuO9wpj138fH2Pol6QhsJomSyh2n5G894OZnAZkRftM4q+GGOIGa7TOg==} - engines: {node: '>=18'} - peerDependencies: - '@anthropic-ai/sdk': ^0.40.1 - '@google/genai': ^0.7.0 - '@langchain/core': ^0.3.44 - '@mistralai/mistralai': ^1.5.2 - '@qdrant/js-client-rest': 1.13.0 - '@supabase/supabase-js': ^2.49.1 - '@types/jest': 29.5.14 - '@types/pg': 8.11.0 - '@types/sqlite3': 3.1.11 - groq-sdk: 0.3.0 - neo4j-driver: ^5.28.1 - ollama: ^0.5.14 - pg: 8.11.3 - redis: ^4.6.13 - sqlite3: 5.1.7 - - merge-options@3.0.4: - resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} - engines: {node: '>=10'} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micro-api-client@3.3.0: - resolution: {integrity: sha512-y0y6CUB9RLVsy3kfgayU28746QrNMpSm9O/AYGNsBgOkJr/X/Jk0VLGoO8Ude7Bpa8adywzF+MzXNZRFRsNPhg==} - - 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'} - - mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mime-types@3.0.1: - resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} - engines: {node: '>= 0.6'} - - mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - - mime@4.0.7: - resolution: {integrity: sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==} - engines: {node: '>=16'} - hasBin: true - - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - - 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'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - minipass-collect@1.0.2: - resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} - engines: {node: '>= 8'} - - minipass-fetch@1.4.1: - resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} - engines: {node: '>=8'} - - minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - - minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - - minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} - - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - - minizlib@3.0.2: - resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} - engines: {node: '>= 18'} - - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - - mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - - mlly@1.7.4: - resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} - - module-definition@5.0.1: - resolution: {integrity: sha512-kvw3B4G19IXk+BOXnYq/D/VeO9qfHaapMeuS7w7sNUqmGaA6hywdFHMi+VWeR9wUScXM7XjoryTffCZ5B0/8IA==} - engines: {node: '>=14'} - hasBin: true - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true - - nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - napi-build-utils@2.0.0: - resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} - - negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} - engines: {node: '>= 0.6'} - - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - - neo4j-driver-bolt-connection@5.28.1: - resolution: {integrity: sha512-nY8GBhjOW7J0rDtpiyJn6kFdk2OiNVZZhZrO8//mwNXnf5VQJ6HqZQTDthH/9pEaX0Jvbastz1xU7ZL8xzqY0w==} - - neo4j-driver-core@5.28.1: - resolution: {integrity: sha512-14vN8TlxC0JvJYfjWic5PwjsZ38loQLOKFTXwk4fWLTbCk6VhrhubB2Jsy9Rz+gM6PtTor4+6ClBEFDp1q/c8g==} - - neo4j-driver@5.28.1: - resolution: {integrity: sha512-jbyBwyM0a3RLGcP43q3hIxPUPxA+1bE04RovOKdNAS42EtBMVCKcPSeOvWiHxgXp1ZFd0a8XqK+7LtguInOLUg==} - - nested-error-stacks@2.1.1: - resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} - - netlify@13.3.5: - resolution: {integrity: sha512-Nc3loyVASW59W+8fLDZT1lncpG7llffyZ2o0UQLx/Fr20i7P8oP+lE7+TEcFvXj9IUWU6LjB9P3BH+iFGyp+mg==} - engines: {node: ^14.16.0 || >=16.0.0} - - nitropack@2.11.12: - resolution: {integrity: sha512-e2AdQrEY1IVoNTdyjfEQV93xkqz4SQxAMR0xWF8mZUUHxMLm6S4nPzpscjksmT4OdUxl0N8/DCaGjKQ9ghdodA==} - engines: {node: ^16.11.0 || >=17.0.0} - hasBin: true - peerDependencies: - xml2js: ^0.6.2 - peerDependenciesMeta: - xml2js: - optional: true - - node-abi@3.75.0: - resolution: {integrity: sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==} - engines: {node: '>=10'} - - node-addon-api@7.1.1: - resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - - node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - deprecated: Use your platform's native DOMException instead - - 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} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - - node-fetch@3.3.2: - resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - node-forge@1.3.1: - 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-gyp@8.4.1: - resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} - engines: {node: '>= 10.12.0'} - hasBin: true - - node-mock-http@1.0.0: - resolution: {integrity: sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==} - - node-source-walk@6.0.2: - resolution: {integrity: sha512-jn9vOIK/nfqoFCcpK89/VCVaLg1IHE6UVfDOzvqmANaJ/rWCTEdH8RZ1V278nv2jr36BJdyQXIAavBLXpzdlag==} - engines: {node: '>=14'} - - nopt@5.0.0: - resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} - engines: {node: '>=6'} - hasBin: true - - 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@6.0.2: - resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} - engines: {node: ^16.14.0 || >=18.0.0} - - normalize-path@2.1.1: - resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} - engines: {node: '>=0.10.0'} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - npmlog@5.0.1: - resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} - deprecated: This package is no longer supported. - - npmlog@6.0.2: - resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This package is no longer supported. - - nypm@0.5.4: - resolution: {integrity: sha512-X0SNNrZiGU8/e/zAB7sCTtdxWTMSIO73q+xuKgglm2Yvzwlo8UoC5FNySQFCvl84uPaeADkqHUZUkWy4aH4xOA==} - engines: {node: ^14.16.0 || >=16.10.0} - hasBin: true - - nypm@0.6.0: - resolution: {integrity: sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==} - engines: {node: ^14.16.0 || >=16.10.0} - hasBin: true - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - - 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==} - - ollama@0.5.15: - resolution: {integrity: sha512-TSaZSJyP7MQJFjSmmNsoJiriwa3U+/UJRw6+M8aucs5dTsaWNZsBIGpDb5rXnW6nXxJBB/z79gZY8IaiIQgelQ==} - - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - - once@1.3.3: - resolution: {integrity: sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - one-time@1.0.0: - resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} - - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - - open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} - - openai@4.103.0: - resolution: {integrity: sha512-eWcz9kdurkGOFDtd5ySS5y251H2uBgq9+1a2lTBnjMMzlexJ40Am5t6Mu76SSE87VvitPa0dkIAp75F+dZVC0g==} - hasBin: true - peerDependencies: - ws: ^8.18.0 - zod: ^3.23.8 - peerDependenciesMeta: - ws: - optional: true - zod: - optional: true - - openapi-types@12.1.3: - resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} - - p-event@5.0.1: - resolution: {integrity: sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - - p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - - p-map@7.0.3: - resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} - engines: {node: '>=18'} - - p-queue@6.6.2: - resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} - engines: {node: '>=8'} - - p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} - - p-timeout@3.2.0: - resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} - engines: {node: '>=8'} - - p-timeout@5.1.0: - resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} - engines: {node: '>=12'} - - p-timeout@6.1.4: - resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} - engines: {node: '>=14.16'} - - p-wait-for@5.0.2: - resolution: {integrity: sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==} - engines: {node: '>=12'} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - packet-reader@1.0.0: - resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==} - - parse-gitignore@2.0.0: - resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} - engines: {node: '>=14'} - - parse-json@8.3.0: - resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} - engines: {node: '>=18'} - - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - - partial-json@0.1.7: - resolution: {integrity: sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==} - - path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - 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==} - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - 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==} - - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - - perfect-debounce@1.0.0: - resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - - pg-cloudflare@1.2.5: - resolution: {integrity: sha512-OOX22Vt0vOSRrdoUPKJ8Wi2OpE/o/h9T8X1s4qSkCedbNah9ei2W2765be8iMVxQUsvgT7zIAT2eIa9fs5+vtg==} - - pg-connection-string@2.9.0: - resolution: {integrity: sha512-P2DEBKuvh5RClafLngkAuGe9OUlFV7ebu8w1kmaaOgPcpJd1RIFh7otETfI6hAR8YupOLFTY7nuvvIn7PLciUQ==} - - pg-int8@1.0.1: - resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} - engines: {node: '>=4.0.0'} - - pg-numeric@1.0.2: - resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} - engines: {node: '>=4'} - - pg-pool@3.10.0: - resolution: {integrity: sha512-DzZ26On4sQ0KmqnO34muPcmKbhrjmyiO4lCCR0VwEd7MjmiKf5NTg/6+apUEu0NF7ESa37CGzFxH513CoUmWnA==} - peerDependencies: - pg: '>=8.0' - - pg-protocol@1.10.0: - resolution: {integrity: sha512-IpdytjudNuLv8nhlHs/UrVBhU0e78J0oIS/0AVdTbWxSOkFUVdsHC/NrorO6nXsQNDTT1kzDSOMJubBQviX18Q==} - - pg-types@2.2.0: - resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} - engines: {node: '>=4'} - - pg-types@4.0.2: - resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==} - engines: {node: '>=10'} - - pg@8.11.3: - resolution: {integrity: sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==} - engines: {node: '>= 8.0.0'} - peerDependencies: - pg-native: '>=3.0.1' - peerDependenciesMeta: - pg-native: - optional: true - - pgpass@1.0.5: - resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - - 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==} - - postcss-values-parser@6.0.2: - resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==} - engines: {node: '>=10'} - peerDependencies: - postcss: ^8.2.9 - - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} - engines: {node: ^10 || ^12 || >=14} - - postgres-array@2.0.0: - resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} - engines: {node: '>=4'} - - postgres-array@3.0.4: - resolution: {integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==} - engines: {node: '>=12'} - - postgres-bytea@1.0.0: - resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} - engines: {node: '>=0.10.0'} - - postgres-bytea@3.0.0: - resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} - engines: {node: '>= 6'} - - postgres-date@1.0.7: - resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} - engines: {node: '>=0.10.0'} - - postgres-date@2.1.0: - resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} - engines: {node: '>=12'} - - postgres-interval@1.2.0: - resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} - engines: {node: '>=0.10.0'} - - postgres-interval@3.0.0: - resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} - engines: {node: '>=12'} - - postgres-range@1.1.4: - resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} - - prebuild-install@7.1.3: - resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} - engines: {node: '>=10'} - hasBin: true - - precinct@11.0.5: - resolution: {integrity: sha512-oHSWLC8cL/0znFhvln26D14KfCQFFn4KOLSw6hmLhd+LQ2SKt9Ljm89but76Pc7flM9Ty1TnXyrA2u16MfRV3w==} - engines: {node: ^14.14.0 || >=16.0.0} - hasBin: true - - pretty-bytes@6.1.1: - resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} - engines: {node: ^14.13.1 || >=16.0.0} - - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.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'} - - promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - - promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - - pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} - - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} - engines: {node: '>=0.6'} - - quansync@0.2.10: - resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - quote-unquote@1.0.0: - resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==} - - radix3@1.1.2: - resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} - - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - - 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==} - - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - - react@19.0.0: - resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} - engines: {node: '>=0.10.0'} - - read-package-up@11.0.0: - resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} - engines: {node: '>=18'} - - read-pkg@9.0.1: - resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} - engines: {node: '>=18'} - - 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@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - - 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'} - - redis@4.7.1: - resolution: {integrity: sha512-S1bJDnqLftzHXHP8JsT5II/CtHWQrASX5K96REjWjlmWKrviSOLWmM7QnRLstAWsu1VBBV1ffV6DzCvxNP0UJQ==} - - remove-trailing-separator@1.1.0: - resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} - - require-directory@2.1.1: - 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'} - - require-package-name@2.0.1: - resolution: {integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==} - - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - - 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 - - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - - retry@0.13.1: - 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'} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - 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.41.0: - resolution: {integrity: sha512-HqMFpUbWlf/tvcxBFNKnJyzc7Lk+XO3FGc3pbNBLqEbOz0gPLRgcrlS3UF4MfUrVlstOaP/q0kM6GVvi+LrLRg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - rxjs@7.8.2: - resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - - 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-stable-stringify@2.5.0: - resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} - engines: {node: '>=10'} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - scule@1.3.0: - resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} - - secure-json-parse@2.7.0: - resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - - send@1.2.0: - resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} - engines: {node: '>= 18'} - - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - - serve-placeholder@2.0.2: - resolution: {integrity: sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==} - - serve-static@2.2.0: - resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} - engines: {node: '>= 18'} - - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - 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@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - - simple-get@4.0.1: - resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - - simple-wcswidth@1.0.1: - resolution: {integrity: sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg==} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} - - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - smob@1.5.0: - resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} - - socks-proxy-agent@6.2.1: - resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} - engines: {node: '>= 10'} - - socks@2.8.4: - resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - - 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'} - - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - - 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==} - - split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} - - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - - sqlite3@5.1.7: - resolution: {integrity: sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==} - - ssri@8.0.1: - resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} - engines: {node: '>= 8'} - - stack-trace@0.0.10: - resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} - - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - - 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.9.0: - resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} - - 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'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - 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==} - - 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-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - - strip-literal@3.0.0: - resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} - - supports-color@10.0.0: - resolution: {integrity: sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==} - engines: {node: '>=18'} - - 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'} - - swr@2.3.2: - resolution: {integrity: sha512-RosxFpiabojs75IwQ316DGoDRmOqtiAj0tg8wCcbEu4CiLZBs/a9QNtHV7TUfDXmmlgqij/NqzKq/eLelyv9xA==} - peerDependencies: - react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - system-architecture@0.1.0: - resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} - engines: {node: '>=18'} - - tar-fs@2.1.3: - resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==} - - tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} - - tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - - tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} - - tar@7.4.3: - resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} - engines: {node: '>=18'} - - terser@5.39.2: - resolution: {integrity: sha512-yEPUmWve+VA78bI71BW70Dh0TuV4HHd+I5SHOAfS1+QBOmvmCiiffgjR8ryyEd3KIfvPGFqoADt8LdQ6XpXIvg==} - engines: {node: '>=10'} - hasBin: true - - text-decoder@1.2.3: - resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} - - text-hex@1.0.0: - resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} - - throttleit@2.1.0: - resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} - engines: {node: '>=18'} - - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - - tinyglobby@0.2.13: - resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} - engines: {node: '>=12.0.0'} - - 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'} - - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - - toml@3.0.0: - resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - - triple-beam@1.4.1: - resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} - engines: {node: '>= 14.0.0'} - - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - - tsx@4.19.4: - resolution: {integrity: sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==} - engines: {node: '>=18.0.0'} - hasBin: true - - tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - - type-fest@4.41.0: - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} - engines: {node: '>=16'} - - typescript@5.8.2: - resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} - engines: {node: '>=14.17'} - hasBin: true - - ufo@1.6.1: - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - - uglify-js@3.19.3: - resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} - engines: {node: '>=0.8.0'} - hasBin: true - - ultrahtml@1.6.0: - resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} - - uncrypto@0.1.3: - resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} - - unctx@2.4.1: - resolution: {integrity: sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==} - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - - undici@5.28.5: - resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==} - engines: {node: '>=14.0'} - - unenv@2.0.0-rc.17: - resolution: {integrity: sha512-B06u0wXkEd+o5gOCMl/ZHl5cfpYbDZKAT+HWTL+Hws6jWu7dCiqBBXXXzMFcFVJb8D4ytAnYmxJA83uwOQRSsg==} - - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - - unicorn-magic@0.3.0: - resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} - engines: {node: '>=18'} - - unimport@5.0.1: - resolution: {integrity: sha512-1YWzPj6wYhtwHE+9LxRlyqP4DiRrhGfJxdtH475im8ktyZXO3jHj/3PZ97zDdvkYoovFdi0K4SKl3a7l92v3sQ==} - engines: {node: '>=18.12.0'} - - unique-filename@1.1.1: - resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} - - unique-slug@2.0.2: - resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} - - unixify@1.0.0: - resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} - engines: {node: '>=0.10.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.3.4: - resolution: {integrity: sha512-m4PjxTurwpWfpMomp8AptjD5yj8qEZN5uQjjGM3TAs9MWWD2tXSSNNj6jGR2FoVGod4293ytyV6SwBbertfyJg==} - engines: {node: '>=18.12.0'} - - unstorage@1.16.0: - resolution: {integrity: sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA==} - 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 || ^7.0.0 - '@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==} - - uqr@0.1.2: - resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==} - - urlpattern-polyfill@10.1.0: - resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} - - urlpattern-polyfill@8.0.2: - resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} - - use-sync-external-store@1.4.0: - resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - uuid@10.0.0: - resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} - hasBin: true - - uuid@11.1.0: - resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} - 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==} - - web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - - web-streams-polyfill@4.0.0-beta.3: - resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} - engines: {node: '>= 14'} - - 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==} - - whatwg-fetch@3.6.20: - resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} - - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - wide-align@1.1.5: - resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} - - winston-transport@4.9.0: - resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} - engines: {node: '>= 12.0.0'} - - winston@3.17.0: - resolution: {integrity: sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==} - engines: {node: '>= 12.0.0'} - - wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - - 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==} - - write-file-atomic@6.0.0: - resolution: {integrity: sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - ws@8.18.2: - resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} - 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 - - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} - - 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'} - - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - - yocto-queue@1.2.1: - resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} - engines: {node: '>=12.20'} - - youch-core@0.3.2: - resolution: {integrity: sha512-fusrlIMLeRvTFYLUjJ9KzlGC3N+6MOPJ68HNj/yJv2nz7zq8t4HEviLms2gkdRPUS7F5rZ5n+pYx9r88m6IE1g==} - engines: {node: '>=18'} - - youch@4.1.0-beta.7: - resolution: {integrity: sha512-HUn0M24AUTMvjdkoMtH8fJz2FEd+k1xvtR9EoTrDUoVUi6o7xl5X+pST/vjk4T3GEQo2mJ9FlAvhWBm8dIdD4g==} - engines: {node: '>=18'} - - zip-stream@4.1.1: - resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} - engines: {node: '>= 10'} - - zip-stream@6.0.1: - resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} - engines: {node: '>= 14'} - - zod-to-json-schema@3.24.3: - resolution: {integrity: sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A==} - peerDependencies: - zod: ^3.24.1 - - zod@3.24.2: - resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} - -snapshots: - - '@ai-sdk/anthropic@1.1.12(zod@3.24.2)': - dependencies: - '@ai-sdk/provider': 1.0.9 - '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) - zod: 3.24.2 - - '@ai-sdk/cohere@1.1.12(zod@3.24.2)': - dependencies: - '@ai-sdk/provider': 1.0.9 - '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) - zod: 3.24.2 - - '@ai-sdk/groq@1.1.11(zod@3.24.2)': - dependencies: - '@ai-sdk/provider': 1.0.9 - '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) - zod: 3.24.2 - - '@ai-sdk/openai-compatible@0.2.14(zod@3.24.2)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.24.2) - zod: 3.24.2 - - '@ai-sdk/openai@1.1.15(zod@3.24.2)': - dependencies: - '@ai-sdk/provider': 1.0.9 - '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) - zod: 3.24.2 - - '@ai-sdk/openai@1.3.22(zod@3.24.2)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.24.2) - zod: 3.24.2 - - '@ai-sdk/provider-utils@2.1.10(zod@3.24.2)': - dependencies: - '@ai-sdk/provider': 1.0.9 - eventsource-parser: 3.0.2 - nanoid: 3.3.8 - secure-json-parse: 2.7.0 - optionalDependencies: - zod: 3.24.2 - - '@ai-sdk/provider-utils@2.2.8(zod@3.24.2)': - dependencies: - '@ai-sdk/provider': 1.1.3 - nanoid: 3.3.8 - secure-json-parse: 2.7.0 - zod: 3.24.2 - - '@ai-sdk/provider@1.0.9': - dependencies: - json-schema: 0.4.0 - - '@ai-sdk/provider@1.1.3': - dependencies: - json-schema: 0.4.0 - - '@ai-sdk/react@1.1.18(react@19.0.0)(zod@3.24.2)': - dependencies: - '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) - '@ai-sdk/ui-utils': 1.1.16(zod@3.24.2) - swr: 2.3.2(react@19.0.0) - throttleit: 2.1.0 - optionalDependencies: - react: 19.0.0 - zod: 3.24.2 - - '@ai-sdk/react@1.2.12(react@19.0.0)(zod@3.24.2)': - dependencies: - '@ai-sdk/provider-utils': 2.2.8(zod@3.24.2) - '@ai-sdk/ui-utils': 1.2.11(zod@3.24.2) - react: 19.0.0 - swr: 2.3.2(react@19.0.0) - throttleit: 2.1.0 - optionalDependencies: - zod: 3.24.2 - - '@ai-sdk/ui-utils@1.1.16(zod@3.24.2)': - dependencies: - '@ai-sdk/provider': 1.0.9 - '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) - zod-to-json-schema: 3.24.3(zod@3.24.2) - optionalDependencies: - zod: 3.24.2 - - '@ai-sdk/ui-utils@1.2.11(zod@3.24.2)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.24.2) - zod: 3.24.2 - zod-to-json-schema: 3.24.3(zod@3.24.2) - - '@anthropic-ai/sdk@0.40.1(encoding@0.1.13)': - dependencies: - '@types/node': 18.19.103 - '@types/node-fetch': 2.6.12 - abort-controller: 3.0.0 - agentkeepalive: 4.6.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - '@ark/schema@0.46.0': - dependencies: - '@ark/util': 0.46.0 - - '@ark/util@0.46.0': {} - - '@babel/code-frame@7.27.1': - dependencies: - '@babel/helper-validator-identifier': 7.27.1 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/helper-string-parser@7.27.1': {} - - '@babel/helper-validator-identifier@7.27.1': {} - - '@babel/parser@7.27.2': - dependencies: - '@babel/types': 7.27.1 - - '@babel/types@7.27.1': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - - '@biomejs/biome@1.9.4': - optionalDependencies: - '@biomejs/cli-darwin-arm64': 1.9.4 - '@biomejs/cli-darwin-x64': 1.9.4 - '@biomejs/cli-linux-arm64': 1.9.4 - '@biomejs/cli-linux-arm64-musl': 1.9.4 - '@biomejs/cli-linux-x64': 1.9.4 - '@biomejs/cli-linux-x64-musl': 1.9.4 - '@biomejs/cli-win32-arm64': 1.9.4 - '@biomejs/cli-win32-x64': 1.9.4 - - '@biomejs/cli-darwin-arm64@1.9.4': - optional: true - - '@biomejs/cli-darwin-x64@1.9.4': - optional: true - - '@biomejs/cli-linux-arm64-musl@1.9.4': - optional: true - - '@biomejs/cli-linux-arm64@1.9.4': - optional: true - - '@biomejs/cli-linux-x64-musl@1.9.4': - optional: true - - '@biomejs/cli-linux-x64@1.9.4': - optional: true - - '@biomejs/cli-win32-arm64@1.9.4': - optional: true - - '@biomejs/cli-win32-x64@1.9.4': - optional: true - - '@cfworker/json-schema@4.1.1': {} - - '@cloudflare/kv-asset-handler@0.4.0': - dependencies: - mime: 3.0.0 - - '@colors/colors@1.6.0': {} - - '@dabh/diagnostics@2.0.3': - dependencies: - colorspace: 1.1.4 - enabled: 2.0.0 - kuler: 2.0.0 - - '@dependents/detective-less@4.1.0': - dependencies: - gonzales-pe: 4.3.0 - node-source-walk: 6.0.2 - - '@esbuild/aix-ppc64@0.25.4': - optional: true - - '@esbuild/android-arm64@0.25.4': - optional: true - - '@esbuild/android-arm@0.25.4': - optional: true - - '@esbuild/android-x64@0.25.4': - optional: true - - '@esbuild/darwin-arm64@0.25.4': - optional: true - - '@esbuild/darwin-x64@0.25.4': - optional: true - - '@esbuild/freebsd-arm64@0.25.4': - optional: true - - '@esbuild/freebsd-x64@0.25.4': - optional: true - - '@esbuild/linux-arm64@0.25.4': - optional: true - - '@esbuild/linux-arm@0.25.4': - optional: true - - '@esbuild/linux-ia32@0.25.4': - optional: true - - '@esbuild/linux-loong64@0.25.4': - optional: true - - '@esbuild/linux-mips64el@0.25.4': - optional: true - - '@esbuild/linux-ppc64@0.25.4': - optional: true - - '@esbuild/linux-riscv64@0.25.4': - optional: true - - '@esbuild/linux-s390x@0.25.4': - optional: true - - '@esbuild/linux-x64@0.25.4': - optional: true - - '@esbuild/netbsd-arm64@0.25.4': - optional: true - - '@esbuild/netbsd-x64@0.25.4': - optional: true - - '@esbuild/openbsd-arm64@0.25.4': - optional: true - - '@esbuild/openbsd-x64@0.25.4': - optional: true - - '@esbuild/sunos-x64@0.25.4': - optional: true - - '@esbuild/win32-arm64@0.25.4': - optional: true - - '@esbuild/win32-ia32@0.25.4': - optional: true - - '@esbuild/win32-x64@0.25.4': - optional: true - - '@fastify/busboy@2.1.1': {} - - '@fastify/busboy@3.1.1': {} - - '@gar/promisify@1.1.3': - optional: true - - '@google/genai@0.7.0(encoding@0.1.13)': - dependencies: - google-auth-library: 9.15.1(encoding@0.1.13) - ws: 8.18.2 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - - '@hey-api/client-fetch@0.10.1(@hey-api/openapi-ts@0.67.5(magicast@0.3.5)(typescript@5.8.2))': - dependencies: - '@hey-api/openapi-ts': 0.67.5(magicast@0.3.5)(typescript@5.8.2) - - '@hey-api/json-schema-ref-parser@1.0.6': - dependencies: - '@jsdevtools/ono': 7.1.3 - '@types/json-schema': 7.0.15 - js-yaml: 4.1.0 - lodash: 4.17.21 - - '@hey-api/openapi-ts@0.67.5(magicast@0.3.5)(typescript@5.8.2)': - dependencies: - '@hey-api/json-schema-ref-parser': 1.0.6 - c12: 2.0.1(magicast@0.3.5) - commander: 13.0.0 - handlebars: 4.7.8 - typescript: 5.8.2 - transitivePeerDependencies: - - magicast - - '@ioredis/commands@1.2.0': {} - - '@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 - - '@jest/expect-utils@29.7.0': - dependencies: - jest-get-type: 29.6.3 - - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.8 - - '@jest/types@29.6.3': - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.17.22 - '@types/yargs': 17.0.33 - chalk: 4.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 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/source-map@0.3.6': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@jsdevtools/ono@7.1.3': {} - - '@langchain/core@0.3.57(openai@4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2))': - dependencies: - '@cfworker/json-schema': 4.1.1 - ansi-styles: 5.2.0 - camelcase: 6.3.0 - decamelize: 1.2.0 - js-tiktoken: 1.0.20 - langsmith: 0.3.29(openai@4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2)) - mustache: 4.2.0 - p-queue: 6.6.2 - p-retry: 4.6.2 - uuid: 10.0.0 - zod: 3.24.2 - zod-to-json-schema: 3.24.3(zod@3.24.2) - transitivePeerDependencies: - - openai - - '@mapbox/node-pre-gyp@1.0.11(encoding@0.1.13)': - dependencies: - detect-libc: 2.0.4 - https-proxy-agent: 5.0.1 - make-dir: 3.1.0 - node-fetch: 2.7.0(encoding@0.1.13) - nopt: 5.0.0 - npmlog: 5.0.1 - rimraf: 3.0.2 - semver: 7.7.2 - tar: 6.2.1 - transitivePeerDependencies: - - encoding - - supports-color - - '@mapbox/node-pre-gyp@2.0.0(encoding@0.1.13)': - dependencies: - consola: 3.4.2 - detect-libc: 2.0.4 - https-proxy-agent: 7.0.6 - node-fetch: 2.7.0(encoding@0.1.13) - nopt: 8.1.0 - semver: 7.7.2 - tar: 7.4.3 - transitivePeerDependencies: - - encoding - - supports-color - - '@mem0/vercel-ai-provider@1.0.5(@anthropic-ai/sdk@0.40.1(encoding@0.1.13))(@google/genai@0.7.0(encoding@0.1.13))(@langchain/core@0.3.57(openai@4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2)))(@mistralai/mistralai@1.6.1(zod@3.24.2))(@qdrant/js-client-rest@1.13.0(typescript@5.8.2))(@supabase/supabase-js@2.49.8)(@types/jest@29.5.14)(@types/pg@8.11.0)(@types/sqlite3@3.1.11)(encoding@0.1.13)(groq-sdk@0.3.0(encoding@0.1.13))(neo4j-driver@5.28.1)(ollama@0.5.15)(pg@8.11.3)(react@19.0.0)(redis@4.7.1)(sqlite3@5.1.7)(ws@8.18.2)(zod@3.24.2)': - dependencies: - '@ai-sdk/anthropic': 1.1.12(zod@3.24.2) - '@ai-sdk/cohere': 1.1.12(zod@3.24.2) - '@ai-sdk/groq': 1.1.11(zod@3.24.2) - '@ai-sdk/openai': 1.1.15(zod@3.24.2) - '@ai-sdk/provider': 1.0.9 - '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) - ai: 4.1.46(react@19.0.0)(zod@3.24.2) - dotenv: 16.5.0 - mem0ai: 2.1.26(@anthropic-ai/sdk@0.40.1(encoding@0.1.13))(@google/genai@0.7.0(encoding@0.1.13))(@langchain/core@0.3.57(openai@4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2)))(@mistralai/mistralai@1.6.1(zod@3.24.2))(@qdrant/js-client-rest@1.13.0(typescript@5.8.2))(@supabase/supabase-js@2.49.8)(@types/jest@29.5.14)(@types/pg@8.11.0)(@types/sqlite3@3.1.11)(encoding@0.1.13)(groq-sdk@0.3.0(encoding@0.1.13))(neo4j-driver@5.28.1)(ollama@0.5.15)(pg@8.11.3)(redis@4.7.1)(sqlite3@5.1.7)(ws@8.18.2) - partial-json: 0.1.7 - optionalDependencies: - zod: 3.24.2 - transitivePeerDependencies: - - '@anthropic-ai/sdk' - - '@google/genai' - - '@langchain/core' - - '@mistralai/mistralai' - - '@qdrant/js-client-rest' - - '@supabase/supabase-js' - - '@types/jest' - - '@types/pg' - - '@types/sqlite3' - - debug - - encoding - - groq-sdk - - neo4j-driver - - ollama - - pg - - react - - redis - - sqlite3 - - ws - - '@mistralai/mistralai@1.6.1(zod@3.24.2)': - dependencies: - zod: 3.24.2 - zod-to-json-schema: 3.24.3(zod@3.24.2) - - '@netlify/binary-info@1.0.0': {} - - '@netlify/blobs@9.1.1': - dependencies: - '@netlify/dev-utils': 2.1.1 - '@netlify/runtime-utils': 1.3.1 - - '@netlify/dev-utils@2.1.1': - dependencies: - '@whatwg-node/server': 0.9.71 - chokidar: 4.0.3 - decache: 4.6.2 - dot-prop: 9.0.0 - env-paths: 3.0.0 - find-up: 7.0.0 - lodash.debounce: 4.0.8 - netlify: 13.3.5 - parse-gitignore: 2.0.0 - uuid: 11.1.0 - write-file-atomic: 6.0.0 - - '@netlify/functions@3.1.8(encoding@0.1.13)(rollup@4.41.0)': - dependencies: - '@netlify/blobs': 9.1.1 - '@netlify/dev-utils': 2.1.1 - '@netlify/serverless-functions-api': 1.41.1 - '@netlify/zip-it-and-ship-it': 10.1.1(encoding@0.1.13)(rollup@4.41.0) - cron-parser: 4.9.0 - decache: 4.6.2 - extract-zip: 2.0.1 - is-stream: 4.0.1 - jwt-decode: 4.0.0 - lambda-local: 2.2.0 - read-package-up: 11.0.0 - source-map-support: 0.5.21 - transitivePeerDependencies: - - encoding - - rollup - - supports-color - - '@netlify/open-api@2.37.0': {} - - '@netlify/runtime-utils@1.3.1': {} - - '@netlify/serverless-functions-api@1.41.1': {} - - '@netlify/zip-it-and-ship-it@10.1.1(encoding@0.1.13)(rollup@4.41.0)': - dependencies: - '@babel/parser': 7.27.2 - '@babel/types': 7.27.1 - '@netlify/binary-info': 1.0.0 - '@netlify/serverless-functions-api': 1.41.1 - '@vercel/nft': 0.27.7(encoding@0.1.13)(rollup@4.41.0) - archiver: 5.3.2 - common-path-prefix: 3.0.0 - cp-file: 10.0.0 - es-module-lexer: 1.4.1 - esbuild: 0.25.4 - execa: 7.2.0 - fast-glob: 3.3.3 - filter-obj: 5.1.0 - find-up: 6.3.0 - glob: 8.1.0 - is-builtin-module: 3.2.1 - is-path-inside: 4.0.0 - junk: 4.0.1 - locate-path: 7.2.0 - merge-options: 3.0.4 - minimatch: 9.0.5 - normalize-path: 3.0.0 - p-map: 7.0.3 - path-exists: 5.0.0 - precinct: 11.0.5 - require-package-name: 2.0.1 - resolve: 2.0.0-next.5 - semver: 7.7.2 - tmp-promise: 3.0.3 - toml: 3.0.0 - unixify: 1.0.0 - urlpattern-polyfill: 8.0.2 - yargs: 17.7.2 - zod: 3.24.2 - transitivePeerDependencies: - - encoding - - rollup - - supports-color - - '@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 - - '@npmcli/fs@1.1.1': - dependencies: - '@gar/promisify': 1.1.3 - semver: 7.7.2 - optional: true - - '@npmcli/move-file@1.1.2': - dependencies: - mkdirp: 1.0.4 - rimraf: 3.0.2 - optional: true - - '@openrouter/ai-sdk-provider@0.4.6(zod@3.24.2)': - dependencies: - '@ai-sdk/provider': 1.0.9 - '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) - zod: 3.24.2 - - '@opentelemetry/api@1.9.0': {} - - '@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.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 - - '@poppinss/colors@4.1.4': - dependencies: - kleur: 4.1.5 - - '@poppinss/dumper@0.6.3': - dependencies: - '@poppinss/colors': 4.1.4 - '@sindresorhus/is': 7.0.1 - supports-color: 10.0.0 - - '@poppinss/exception@1.2.1': {} - - '@qdrant/js-client-rest@1.13.0(typescript@5.8.2)': - dependencies: - '@qdrant/openapi-typescript-fetch': 1.2.6 - '@sevinf/maybe': 0.5.0 - typescript: 5.8.2 - undici: 5.28.5 - - '@qdrant/openapi-typescript-fetch@1.2.6': {} - - '@redis/bloom@1.2.0(@redis/client@1.6.1)': - dependencies: - '@redis/client': 1.6.1 - - '@redis/client@1.6.1': - dependencies: - cluster-key-slot: 1.1.2 - generic-pool: 3.9.0 - yallist: 4.0.0 - - '@redis/graph@1.1.1(@redis/client@1.6.1)': - dependencies: - '@redis/client': 1.6.1 - - '@redis/json@1.0.7(@redis/client@1.6.1)': - dependencies: - '@redis/client': 1.6.1 - - '@redis/search@1.2.0(@redis/client@1.6.1)': - dependencies: - '@redis/client': 1.6.1 - - '@redis/time-series@1.1.0(@redis/client@1.6.1)': - dependencies: - '@redis/client': 1.6.1 - - '@rollup/plugin-alias@5.1.1(rollup@4.41.0)': - optionalDependencies: - rollup: 4.41.0 - - '@rollup/plugin-commonjs@28.0.3(rollup@4.41.0)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.41.0) - commondir: 1.0.1 - estree-walker: 2.0.2 - fdir: 6.4.4(picomatch@4.0.2) - is-reference: 1.2.1 - magic-string: 0.30.17 - picomatch: 4.0.2 - optionalDependencies: - rollup: 4.41.0 - - '@rollup/plugin-inject@5.0.5(rollup@4.41.0)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.41.0) - estree-walker: 2.0.2 - magic-string: 0.30.17 - optionalDependencies: - rollup: 4.41.0 - - '@rollup/plugin-json@6.1.0(rollup@4.41.0)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.41.0) - optionalDependencies: - rollup: 4.41.0 - - '@rollup/plugin-node-resolve@16.0.1(rollup@4.41.0)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.41.0) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.10 - optionalDependencies: - rollup: 4.41.0 - - '@rollup/plugin-replace@6.0.2(rollup@4.41.0)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.41.0) - magic-string: 0.30.17 - optionalDependencies: - rollup: 4.41.0 - - '@rollup/plugin-terser@0.4.4(rollup@4.41.0)': - dependencies: - serialize-javascript: 6.0.2 - smob: 1.5.0 - terser: 5.39.2 - optionalDependencies: - rollup: 4.41.0 - - '@rollup/pluginutils@5.1.4(rollup@4.41.0)': - dependencies: - '@types/estree': 1.0.7 - estree-walker: 2.0.2 - picomatch: 4.0.2 - optionalDependencies: - rollup: 4.41.0 - - '@rollup/rollup-android-arm-eabi@4.41.0': - optional: true - - '@rollup/rollup-android-arm64@4.41.0': - optional: true - - '@rollup/rollup-darwin-arm64@4.41.0': - optional: true - - '@rollup/rollup-darwin-x64@4.41.0': - optional: true - - '@rollup/rollup-freebsd-arm64@4.41.0': - optional: true - - '@rollup/rollup-freebsd-x64@4.41.0': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.41.0': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.41.0': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.41.0': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.41.0': - optional: true - - '@rollup/rollup-linux-loongarch64-gnu@4.41.0': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.41.0': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.41.0': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.41.0': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.41.0': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.41.0': - optional: true - - '@rollup/rollup-linux-x64-musl@4.41.0': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.41.0': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.41.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.41.0': - optional: true - - '@sevinf/maybe@0.5.0': {} - - '@sinclair/typebox@0.27.8': {} - - '@sindresorhus/is@7.0.1': {} - - '@sindresorhus/merge-streams@2.3.0': {} - - '@speed-highlight/core@1.2.7': {} - - '@supabase/auth-js@2.69.1': - dependencies: - '@supabase/node-fetch': 2.6.15 - - '@supabase/functions-js@2.4.4': - dependencies: - '@supabase/node-fetch': 2.6.15 - - '@supabase/node-fetch@2.6.15': - dependencies: - whatwg-url: 5.0.0 - - '@supabase/postgrest-js@1.19.4': - dependencies: - '@supabase/node-fetch': 2.6.15 - - '@supabase/realtime-js@2.11.2': - dependencies: - '@supabase/node-fetch': 2.6.15 - '@types/phoenix': 1.6.6 - '@types/ws': 8.18.1 - ws: 8.18.2 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - '@supabase/storage-js@2.7.1': - dependencies: - '@supabase/node-fetch': 2.6.15 - - '@supabase/supabase-js@2.49.8': - dependencies: - '@supabase/auth-js': 2.69.1 - '@supabase/functions-js': 2.4.4 - '@supabase/node-fetch': 2.6.15 - '@supabase/postgrest-js': 1.19.4 - '@supabase/realtime-js': 2.11.2 - '@supabase/storage-js': 2.7.1 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - '@t3-oss/env-core@0.13.4(arktype@2.1.20)(typescript@5.8.2)(zod@3.24.2)': - dependencies: - arktype: 2.1.20 - optionalDependencies: - typescript: 5.8.2 - zod: 3.24.2 - - '@tootallnate/once@1.1.2': - optional: true - - '@types/diff-match-patch@1.0.36': {} - - '@types/estree@1.0.7': {} - - '@types/istanbul-lib-coverage@2.0.6': {} - - '@types/istanbul-lib-report@3.0.3': - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - - '@types/istanbul-reports@3.0.4': - dependencies: - '@types/istanbul-lib-report': 3.0.3 - - '@types/jest@29.5.14': - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - - '@types/json-schema@7.0.15': {} - - '@types/node-fetch@2.6.12': - dependencies: - '@types/node': 20.17.22 - form-data: 4.0.2 - - '@types/node@18.19.103': - dependencies: - undici-types: 5.26.5 - - '@types/node@20.17.22': - dependencies: - undici-types: 6.19.8 - - '@types/normalize-package-data@2.4.4': {} - - '@types/pg@8.11.0': - dependencies: - '@types/node': 20.17.22 - pg-protocol: 1.10.0 - pg-types: 4.0.2 - - '@types/phoenix@1.6.6': {} - - '@types/resolve@1.20.2': {} - - '@types/retry@0.12.0': {} - - '@types/sqlite3@3.1.11': - dependencies: - '@types/node': 20.17.22 - - '@types/stack-utils@2.0.3': {} - - '@types/triple-beam@1.3.5': {} - - '@types/uuid@10.0.0': {} - - '@types/ws@8.18.1': - dependencies: - '@types/node': 20.17.22 - - '@types/yargs-parser@21.0.3': {} - - '@types/yargs@17.0.33': - dependencies: - '@types/yargs-parser': 21.0.3 - - '@types/yauzl@2.10.3': - dependencies: - '@types/node': 20.17.22 - optional: true - - '@typescript-eslint/types@5.62.0': {} - - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.8.2)': - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.4.1 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.7.2 - tsutils: 3.21.0(typescript@5.8.2) - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@5.62.0': - dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - - '@vercel/functions@2.0.0': {} - - '@vercel/nft@0.27.7(encoding@0.1.13)(rollup@4.41.0)': - dependencies: - '@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13) - '@rollup/pluginutils': 5.1.4(rollup@4.41.0) - 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: 7.2.3 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - node-gyp-build: 4.8.4 - resolve-from: 5.0.0 - transitivePeerDependencies: - - encoding - - rollup - - supports-color - - '@vercel/nft@0.29.2(encoding@0.1.13)(rollup@4.41.0)': - dependencies: - '@mapbox/node-pre-gyp': 2.0.0(encoding@0.1.13) - '@rollup/pluginutils': 5.1.4(rollup@4.41.0) - 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 - - '@whatwg-node/disposablestack@0.0.6': - dependencies: - '@whatwg-node/promise-helpers': 1.3.2 - tslib: 2.8.1 - - '@whatwg-node/fetch@0.10.8': - dependencies: - '@whatwg-node/node-fetch': 0.7.21 - urlpattern-polyfill: 10.1.0 - - '@whatwg-node/node-fetch@0.7.21': - dependencies: - '@fastify/busboy': 3.1.1 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/promise-helpers': 1.3.2 - tslib: 2.8.1 - - '@whatwg-node/promise-helpers@1.3.2': - dependencies: - tslib: 2.8.1 - - '@whatwg-node/server@0.9.71': - dependencies: - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/fetch': 0.10.8 - '@whatwg-node/promise-helpers': 1.3.2 - tslib: 2.8.1 - - abbrev@1.1.1: {} - - abbrev@3.0.1: {} - - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - - acorn-import-attributes@1.9.5(acorn@8.14.1): - dependencies: - acorn: 8.14.1 - - acorn@8.14.1: {} - - agent-base@6.0.2: - dependencies: - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - - agent-base@7.1.3: {} - - agentkeepalive@4.6.0: - dependencies: - humanize-ms: 1.2.1 - - aggregate-error@3.1.0: - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - optional: true - - ai@4.1.46(react@19.0.0)(zod@3.24.2): - dependencies: - '@ai-sdk/provider': 1.0.9 - '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2) - '@ai-sdk/react': 1.1.18(react@19.0.0)(zod@3.24.2) - '@ai-sdk/ui-utils': 1.1.16(zod@3.24.2) - '@opentelemetry/api': 1.9.0 - jsondiffpatch: 0.6.0 - optionalDependencies: - react: 19.0.0 - zod: 3.24.2 - - ai@4.3.16(react@19.0.0)(zod@3.24.2): - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.24.2) - '@ai-sdk/react': 1.2.12(react@19.0.0)(zod@3.24.2) - '@ai-sdk/ui-utils': 1.2.11(zod@3.24.2) - '@opentelemetry/api': 1.9.0 - jsondiffpatch: 0.6.0 - zod: 3.24.2 - optionalDependencies: - react: 19.0.0 - - ajv-errors@3.0.0(ajv@8.17.1): - dependencies: - ajv: 8.17.1 - - ajv-formats@3.0.1(ajv@8.17.1): - optionalDependencies: - ajv: 8.17.1 - - ajv@8.17.1: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.0.6 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - - ansi-regex@5.0.1: {} - - ansi-regex@6.1.0: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@5.2.0: {} - - ansi-styles@6.2.1: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - aproba@2.0.0: {} - - archiver-utils@2.1.0: - dependencies: - glob: 7.2.3 - graceful-fs: 4.2.11 - lazystream: 1.0.1 - lodash.defaults: 4.2.0 - lodash.difference: 4.5.0 - lodash.flatten: 4.4.0 - lodash.isplainobject: 4.0.6 - lodash.union: 4.6.0 - normalize-path: 3.0.0 - readable-stream: 2.3.8 - - archiver-utils@3.0.4: - dependencies: - glob: 7.2.3 - graceful-fs: 4.2.11 - lazystream: 1.0.1 - lodash.defaults: 4.2.0 - lodash.difference: 4.5.0 - lodash.flatten: 4.4.0 - lodash.isplainobject: 4.0.6 - lodash.union: 4.6.0 - normalize-path: 3.0.0 - readable-stream: 3.6.2 - - 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@5.3.2: - dependencies: - archiver-utils: 2.1.0 - async: 3.2.6 - buffer-crc32: 0.2.13 - readable-stream: 3.6.2 - readdir-glob: 1.1.3 - tar-stream: 2.2.0 - zip-stream: 4.1.1 - - 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 - - are-we-there-yet@2.0.0: - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.2 - - are-we-there-yet@3.0.1: - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.2 - optional: true - - argparse@2.0.1: {} - - arktype@2.1.20: - dependencies: - '@ark/schema': 0.46.0 - '@ark/util': 0.46.0 - - array-union@2.1.0: {} - - ast-module-types@5.0.0: {} - - async-sema@3.1.1: {} - - async@3.2.6: {} - - asynckit@0.4.0: {} - - axios@1.7.7: - dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.2 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - - b4a@1.6.7: {} - - balanced-match@1.0.2: {} - - bare-events@2.5.4: - optional: true - - base-64@0.1.0: {} - - base64-js@1.5.1: {} - - bignumber.js@9.3.0: {} - - bindings@1.5.0: - dependencies: - file-uri-to-path: 1.0.0 - - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - - 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-crc32@0.2.13: {} - - buffer-crc32@1.0.0: {} - - buffer-equal-constant-time@1.0.1: {} - - buffer-from@1.1.2: {} - - buffer-writer@2.0.0: {} - - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - buffer@6.0.3: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - builtin-modules@3.3.0: {} - - c12@2.0.1(magicast@0.3.5): - dependencies: - chokidar: 4.0.3 - confbox: 0.1.8 - defu: 6.1.4 - dotenv: 16.4.7 - giget: 1.2.5 - jiti: 2.4.2 - mlly: 1.7.4 - ohash: 1.1.6 - pathe: 1.1.2 - perfect-debounce: 1.0.0 - pkg-types: 1.3.1 - rc9: 2.1.2 - optionalDependencies: - magicast: 0.3.5 - - c12@3.0.4(magicast@0.3.5): - dependencies: - chokidar: 4.0.3 - confbox: 0.2.2 - defu: 6.1.4 - dotenv: 16.5.0 - exsolve: 1.0.5 - 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 - - cacache@15.3.0: - dependencies: - '@npmcli/fs': 1.1.1 - '@npmcli/move-file': 1.1.2 - chownr: 2.0.0 - fs-minipass: 2.1.0 - glob: 7.2.3 - infer-owner: 1.0.4 - lru-cache: 6.0.0 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - mkdirp: 1.0.4 - p-map: 4.0.0 - promise-inflight: 1.0.1 - rimraf: 3.0.2 - ssri: 8.0.1 - tar: 6.2.1 - unique-filename: 1.1.1 - transitivePeerDependencies: - - bluebird - optional: true - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsite@1.0.0: {} - - camelcase@6.3.0: {} - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chalk@5.4.1: {} - - charenc@0.0.2: {} - - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - - chownr@1.1.4: {} - - chownr@2.0.0: {} - - chownr@3.0.0: {} - - ci-info@3.9.0: {} - - citty@0.1.6: - dependencies: - consola: 3.4.2 - - clean-stack@2.2.0: - optional: true - - 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: {} - - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.3: {} - - color-name@1.1.4: {} - - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - - color-support@1.1.3: {} - - color@3.2.1: - dependencies: - color-convert: 1.9.3 - color-string: 1.9.1 - - colorspace@1.1.4: - dependencies: - color: 3.2.1 - text-hex: 1.0.0 - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - commander@10.0.1: {} - - commander@13.0.0: {} - - commander@2.20.3: {} - - common-path-prefix@3.0.0: {} - - commondir@1.0.1: {} - - compatx@0.2.0: {} - - compress-commons@4.1.2: - dependencies: - buffer-crc32: 0.2.13 - crc32-stream: 4.0.3 - normalize-path: 3.0.0 - readable-stream: 3.6.2 - - compress-commons@6.0.2: - 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 - - concat-map@0.0.1: {} - - confbox@0.1.8: {} - - confbox@0.2.2: {} - - consola@3.4.2: {} - - console-control-strings@1.1.0: {} - - console-table-printer@2.13.0: - dependencies: - simple-wcswidth: 1.0.1 - - cookie-es@1.2.2: {} - - cookie-es@2.0.0: {} - - cookie@1.0.2: {} - - core-util-is@1.0.3: {} - - cp-file@10.0.0: - dependencies: - graceful-fs: 4.2.11 - nested-error-stacks: 2.1.1 - p-event: 5.0.1 - - crc-32@1.2.2: {} - - crc32-stream@4.0.3: - dependencies: - crc-32: 1.2.2 - readable-stream: 3.6.2 - - crc32-stream@6.0.0: - dependencies: - crc-32: 1.2.2 - readable-stream: 4.7.0 - - cron-parser@4.9.0: - dependencies: - luxon: 3.6.1 - - croner@9.0.0: {} - - cross-fetch@4.1.0(encoding@0.1.13): - dependencies: - node-fetch: 2.7.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - crossws@0.3.5: - dependencies: - uncrypto: 0.1.3 - - crypt@0.0.2: {} - - data-uri-to-buffer@4.0.1: {} - - db0@0.3.2(sqlite3@5.1.7): - optionalDependencies: - sqlite3: 5.1.7 - - debug@4.4.1: - dependencies: - ms: 2.1.3 - - decache@4.6.2: - dependencies: - callsite: 1.0.0 - - decamelize@1.2.0: {} - - decompress-response@6.0.0: - dependencies: - mimic-response: 3.1.0 - - deep-extend@0.6.0: {} - - deepmerge@4.3.1: {} - - define-lazy-prop@2.0.0: {} - - defu@6.1.4: {} - - delayed-stream@1.0.0: {} - - delegates@1.0.0: {} - - denque@2.1.0: {} - - depd@2.0.0: {} - - dequal@2.0.3: {} - - destr@2.0.5: {} - - detect-libc@1.0.3: {} - - detect-libc@2.0.4: {} - - detective-amd@5.0.2: - dependencies: - ast-module-types: 5.0.0 - escodegen: 2.1.0 - get-amd-module-type: 5.0.1 - node-source-walk: 6.0.2 - - detective-cjs@5.0.1: - dependencies: - ast-module-types: 5.0.0 - node-source-walk: 6.0.2 - - detective-es6@4.0.1: - dependencies: - node-source-walk: 6.0.2 - - detective-postcss@6.1.3: - dependencies: - is-url: 1.2.4 - postcss: 8.5.3 - postcss-values-parser: 6.0.2(postcss@8.5.3) - - detective-sass@5.0.3: - dependencies: - gonzales-pe: 4.3.0 - node-source-walk: 6.0.2 - - detective-scss@4.0.3: - dependencies: - gonzales-pe: 4.3.0 - node-source-walk: 6.0.2 - - detective-stylus@4.0.0: {} - - detective-typescript@11.2.0: - dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.2) - ast-module-types: 5.0.0 - node-source-walk: 6.0.2 - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - - diff-match-patch@1.0.5: {} - - diff-sequences@29.6.3: {} - - digest-fetch@1.3.0: - dependencies: - base-64: 0.1.0 - md5: 2.3.0 - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - discourse2-chat@1.1.5: - dependencies: - ajv: 8.17.1 - ajv-errors: 3.0.0(ajv@8.17.1) - ajv-formats: 3.0.1(ajv@8.17.1) - openapi-types: 12.1.3 - - dot-prop@9.0.0: - dependencies: - type-fest: 4.41.0 - - dotenv@16.4.7: {} - - dotenv@16.5.0: {} - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - duplexer@0.1.2: {} - - eastasianwidth@0.2.0: {} - - ecdsa-sig-formatter@1.0.11: - dependencies: - safe-buffer: 5.2.1 - - ee-first@1.1.1: {} - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - enabled@2.0.0: {} - - encodeurl@2.0.0: {} - - encoding@0.1.13: - dependencies: - iconv-lite: 0.6.3 - optional: true - - end-of-stream@1.1.0: - dependencies: - once: 1.3.3 - - end-of-stream@1.4.4: - dependencies: - once: 1.4.0 - - env-paths@2.2.1: - optional: true - - env-paths@3.0.0: {} - - err-code@2.0.3: - optional: true - - error-stack-parser-es@1.0.5: {} - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-module-lexer@1.4.1: {} - - 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 - - esbuild@0.25.4: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.4 - '@esbuild/android-arm': 0.25.4 - '@esbuild/android-arm64': 0.25.4 - '@esbuild/android-x64': 0.25.4 - '@esbuild/darwin-arm64': 0.25.4 - '@esbuild/darwin-x64': 0.25.4 - '@esbuild/freebsd-arm64': 0.25.4 - '@esbuild/freebsd-x64': 0.25.4 - '@esbuild/linux-arm': 0.25.4 - '@esbuild/linux-arm64': 0.25.4 - '@esbuild/linux-ia32': 0.25.4 - '@esbuild/linux-loong64': 0.25.4 - '@esbuild/linux-mips64el': 0.25.4 - '@esbuild/linux-ppc64': 0.25.4 - '@esbuild/linux-riscv64': 0.25.4 - '@esbuild/linux-s390x': 0.25.4 - '@esbuild/linux-x64': 0.25.4 - '@esbuild/netbsd-arm64': 0.25.4 - '@esbuild/netbsd-x64': 0.25.4 - '@esbuild/openbsd-arm64': 0.25.4 - '@esbuild/openbsd-x64': 0.25.4 - '@esbuild/sunos-x64': 0.25.4 - '@esbuild/win32-arm64': 0.25.4 - '@esbuild/win32-ia32': 0.25.4 - '@esbuild/win32-x64': 0.25.4 - - escalade@3.2.0: {} - - escape-html@1.0.3: {} - - escape-string-regexp@2.0.0: {} - - escape-string-regexp@5.0.0: {} - - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - - eslint-visitor-keys@3.4.3: {} - - esprima@4.0.1: {} - - estraverse@5.3.0: {} - - estree-walker@2.0.2: {} - - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.7 - - esutils@2.0.3: {} - - etag@1.8.1: {} - - event-target-shim@5.0.1: {} - - eventemitter3@4.0.7: {} - - events@3.3.0: {} - - eventsource-parser@3.0.2: {} - - exa-js@1.4.10(encoding@0.1.13): - dependencies: - cross-fetch: 4.1.0(encoding@0.1.13) - dotenv: 16.4.7 - transitivePeerDependencies: - - encoding - - execa@7.2.0: - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 4.3.1 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 3.0.7 - strip-final-newline: 3.0.0 - - execa@8.0.1: - 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 - - expand-template@2.0.3: {} - - expect@29.7.0: - dependencies: - '@jest/expect-utils': 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - - exsolve@1.0.5: {} - - extend@3.0.2: {} - - extract-zip@2.0.1: - dependencies: - debug: 4.4.1 - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color - - 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-uri@3.0.6: {} - - fastq@1.19.1: - dependencies: - reusify: 1.1.0 - - fd-slicer@1.1.0: - dependencies: - pend: 1.2.0 - - fdir@6.4.4(picomatch@4.0.2): - optionalDependencies: - picomatch: 4.0.2 - - fecha@4.2.3: {} - - fetch-blob@3.2.0: - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.3.3 - - file-uri-to-path@1.0.0: {} - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - filter-obj@5.1.0: {} - - find-up-simple@1.0.1: {} - - find-up@6.3.0: - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - - find-up@7.0.0: - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - unicorn-magic: 0.1.0 - - fn.name@1.1.0: {} - - follow-redirects@1.15.9: {} - - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - form-data-encoder@1.7.2: {} - - 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 - - formdata-node@4.4.1: - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 4.0.0-beta.3 - - formdata-polyfill@4.0.10: - dependencies: - fetch-blob: 3.2.0 - - fresh@2.0.0: {} - - fs-constants@1.0.0: {} - - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - gauge@3.0.2: - dependencies: - aproba: 2.0.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - object-assign: 4.1.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - - gauge@4.0.4: - dependencies: - aproba: 2.0.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - optional: true - - gaxios@6.7.1(encoding@0.1.13): - dependencies: - extend: 3.0.2 - https-proxy-agent: 7.0.6 - is-stream: 2.0.1 - node-fetch: 2.7.0(encoding@0.1.13) - uuid: 9.0.1 - transitivePeerDependencies: - - encoding - - supports-color - - gcp-metadata@6.1.1(encoding@0.1.13): - dependencies: - gaxios: 6.7.1(encoding@0.1.13) - google-logging-utils: 0.0.2 - json-bigint: 1.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - generic-pool@3.9.0: {} - - get-amd-module-type@5.0.1: - dependencies: - ast-module-types: 5.0.0 - node-source-walk: 6.0.2 - - get-caller-file@2.0.5: {} - - 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-port-please@3.1.2: {} - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-stream@5.2.0: - dependencies: - pump: 3.0.2 - - get-stream@6.0.1: {} - - get-stream@8.0.1: {} - - get-tsconfig@4.10.1: - dependencies: - resolve-pkg-maps: 1.0.0 - - giget@1.2.5: - dependencies: - citty: 0.1.6 - consola: 3.4.2 - defu: 6.1.4 - node-fetch-native: 1.6.6 - nypm: 0.5.4 - pathe: 2.0.3 - tar: 6.2.1 - - giget@2.0.0: - dependencies: - citty: 0.1.6 - consola: 3.4.2 - defu: 6.1.4 - node-fetch-native: 1.6.6 - nypm: 0.6.0 - pathe: 2.0.3 - - github-from-package@0.0.0: {} - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - 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 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.3.3 - path-is-absolute: 1.0.1 - - glob@8.1.0: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.3.3 - - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.3 - ignore: 5.3.2 - merge2: 1.4.1 - slash: 3.0.0 - - globby@14.1.0: - dependencies: - '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.3 - ignore: 7.0.4 - path-type: 6.0.0 - slash: 5.1.0 - unicorn-magic: 0.3.0 - - gonzales-pe@4.3.0: - dependencies: - minimist: 1.2.8 - - google-auth-library@9.15.1(encoding@0.1.13): - dependencies: - base64-js: 1.5.1 - ecdsa-sig-formatter: 1.0.11 - gaxios: 6.7.1(encoding@0.1.13) - gcp-metadata: 6.1.1(encoding@0.1.13) - gtoken: 7.1.0(encoding@0.1.13) - jws: 4.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - google-logging-utils@0.0.2: {} - - gopd@1.2.0: {} - - graceful-fs@4.2.11: {} - - groq-sdk@0.3.0(encoding@0.1.13): - dependencies: - '@types/node': 18.19.103 - '@types/node-fetch': 2.6.12 - abort-controller: 3.0.0 - agentkeepalive: 4.6.0 - digest-fetch: 1.3.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0(encoding@0.1.13) - web-streams-polyfill: 3.3.3 - transitivePeerDependencies: - - encoding - - gtoken@7.1.0(encoding@0.1.13): - dependencies: - gaxios: 6.7.1(encoding@0.1.13) - jws: 4.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - gzip-size@7.0.0: - dependencies: - duplexer: 0.1.2 - - h3@1.15.3: - dependencies: - cookie-es: 1.2.2 - crossws: 0.3.5 - defu: 6.1.4 - destr: 2.0.5 - iron-webcrypto: 1.2.1 - node-mock-http: 1.0.0 - radix3: 1.1.2 - ufo: 1.6.1 - uncrypto: 0.1.3 - - handlebars@4.7.8: - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.19.3 - - has-flag@4.0.0: {} - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - has-unicode@2.0.1: {} - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - hookable@5.5.3: {} - - hosted-git-info@7.0.2: - dependencies: - lru-cache: 10.4.3 - - http-cache-semantics@4.2.0: - optional: true - - http-errors@2.0.0: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - - http-proxy-agent@4.0.1: - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - optional: true - - http-shutdown@1.2.2: {} - - https-proxy-agent@5.0.1: - dependencies: - agent-base: 6.0.2 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.3 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - - httpxy@0.1.7: {} - - human-signals@4.3.1: {} - - human-signals@5.0.0: {} - - humanize-ms@1.2.1: - dependencies: - ms: 2.1.3 - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - optional: true - - ieee754@1.2.1: {} - - ignore@5.3.2: {} - - ignore@7.0.4: {} - - imurmurhash@0.1.4: {} - - indent-string@4.0.0: - optional: true - - index-to-position@1.1.0: {} - - infer-owner@1.0.4: - optional: true - - inflight@1.0.6: - dependencies: - once: 1.3.3 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - ini@1.3.8: {} - - ioredis@5.6.1: - dependencies: - '@ioredis/commands': 1.2.0 - cluster-key-slot: 1.1.2 - debug: 4.4.1 - 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 - - ip-address@9.0.5: - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 - optional: true - - iron-webcrypto@1.2.1: {} - - is-arrayish@0.3.2: {} - - is-buffer@1.1.6: {} - - is-builtin-module@3.2.1: - dependencies: - builtin-modules: 3.3.0 - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-docker@2.2.1: {} - - is-docker@3.0.0: {} - - is-extglob@2.1.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-inside-container@1.0.0: - dependencies: - is-docker: 3.0.0 - - is-lambda@1.0.1: - optional: true - - is-module@1.0.0: {} - - is-number@7.0.0: {} - - is-path-inside@4.0.0: {} - - is-plain-obj@2.1.0: {} - - is-reference@1.2.1: - dependencies: - '@types/estree': 1.0.7 - - is-stream@2.0.1: {} - - is-stream@3.0.0: {} - - is-stream@4.0.1: {} - - is-url-superb@4.0.0: {} - - is-url@1.2.4: {} - - 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: {} - - isexe@2.0.0: {} - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jest-diff@29.7.0: - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-get-type@29.6.3: {} - - jest-matcher-utils@29.7.0: - dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-message-util@29.7.0: - dependencies: - '@babel/code-frame': 7.27.1 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - - jest-util@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.17.22 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - - jiti@2.4.2: {} - - js-tiktoken@1.0.20: - dependencies: - base64-js: 1.5.1 - - js-tokens@4.0.0: {} - - js-tokens@9.0.1: {} - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - jsbn@1.1.0: - optional: true - - json-bigint@1.0.0: - dependencies: - bignumber.js: 9.3.0 - - json-schema-traverse@1.0.0: {} - - json-schema@0.4.0: {} - - jsondiffpatch@0.6.0: - dependencies: - '@types/diff-match-patch': 1.0.36 - chalk: 5.4.1 - diff-match-patch: 1.0.5 - - junk@4.0.1: {} - - jwa@2.0.1: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - - jws@4.0.0: - dependencies: - jwa: 2.0.1 - safe-buffer: 5.2.1 - - jwt-decode@4.0.0: {} - - kleur@4.1.5: {} - - klona@2.0.6: {} - - knitwork@1.2.0: {} - - kuler@2.0.0: {} - - lambda-local@2.2.0: - dependencies: - commander: 10.0.1 - dotenv: 16.4.7 - winston: 3.17.0 - - langsmith@0.3.29(openai@4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2)): - dependencies: - '@types/uuid': 10.0.0 - chalk: 4.1.2 - console-table-printer: 2.13.0 - p-queue: 6.6.2 - p-retry: 4.6.2 - semver: 7.7.2 - uuid: 10.0.0 - optionalDependencies: - openai: 4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2) - - lazystream@1.0.1: - dependencies: - readable-stream: 2.3.8 - - 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.2 - crossws: 0.3.5 - defu: 6.1.4 - get-port-please: 3.1.2 - h3: 1.15.3 - 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.9.0 - ufo: 1.6.1 - untun: 0.1.3 - uqr: 0.1.2 - - local-pkg@1.1.1: - dependencies: - mlly: 1.7.4 - pkg-types: 2.1.0 - quansync: 0.2.10 - - locate-path@7.2.0: - dependencies: - p-locate: 6.0.0 - - lodash-es@4.17.21: {} - - lodash.debounce@4.0.8: {} - - lodash.defaults@4.2.0: {} - - lodash.difference@4.5.0: {} - - lodash.flatten@4.4.0: {} - - lodash.isarguments@3.1.0: {} - - lodash.isplainobject@4.0.6: {} - - lodash.union@4.6.0: {} - - lodash@4.17.21: {} - - logform@2.7.0: - dependencies: - '@colors/colors': 1.6.0 - '@types/triple-beam': 1.3.5 - fecha: 4.2.3 - ms: 2.1.3 - safe-stable-stringify: 2.5.0 - triple-beam: 1.4.1 - - lru-cache@10.4.3: {} - - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - optional: true - - luxon@3.6.1: {} - - magic-string@0.30.17: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - - magicast@0.3.5: - dependencies: - '@babel/parser': 7.27.2 - '@babel/types': 7.27.1 - source-map-js: 1.2.1 - - make-dir@3.1.0: - dependencies: - semver: 6.3.1 - - make-fetch-happen@9.1.0: - dependencies: - agentkeepalive: 4.6.0 - cacache: 15.3.0 - http-cache-semantics: 4.2.0 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - is-lambda: 1.0.1 - lru-cache: 6.0.0 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-fetch: 1.4.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 0.6.4 - promise-retry: 2.0.1 - socks-proxy-agent: 6.2.1 - ssri: 8.0.1 - transitivePeerDependencies: - - bluebird - - supports-color - optional: true - - math-intrinsics@1.1.0: {} - - md5@2.3.0: - dependencies: - charenc: 0.0.2 - crypt: 0.0.2 - is-buffer: 1.1.6 - - mem0ai@2.1.26(@anthropic-ai/sdk@0.40.1(encoding@0.1.13))(@google/genai@0.7.0(encoding@0.1.13))(@langchain/core@0.3.57(openai@4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2)))(@mistralai/mistralai@1.6.1(zod@3.24.2))(@qdrant/js-client-rest@1.13.0(typescript@5.8.2))(@supabase/supabase-js@2.49.8)(@types/jest@29.5.14)(@types/pg@8.11.0)(@types/sqlite3@3.1.11)(encoding@0.1.13)(groq-sdk@0.3.0(encoding@0.1.13))(neo4j-driver@5.28.1)(ollama@0.5.15)(pg@8.11.3)(redis@4.7.1)(sqlite3@5.1.7)(ws@8.18.2): - dependencies: - '@anthropic-ai/sdk': 0.40.1(encoding@0.1.13) - '@google/genai': 0.7.0(encoding@0.1.13) - '@langchain/core': 0.3.57(openai@4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2)) - '@mistralai/mistralai': 1.6.1(zod@3.24.2) - '@qdrant/js-client-rest': 1.13.0(typescript@5.8.2) - '@supabase/supabase-js': 2.49.8 - '@types/jest': 29.5.14 - '@types/pg': 8.11.0 - '@types/sqlite3': 3.1.11 - axios: 1.7.7 - groq-sdk: 0.3.0(encoding@0.1.13) - neo4j-driver: 5.28.1 - ollama: 0.5.15 - openai: 4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2) - pg: 8.11.3 - redis: 4.7.1 - sqlite3: 5.1.7 - uuid: 9.0.1 - zod: 3.24.2 - transitivePeerDependencies: - - debug - - encoding - - ws - - merge-options@3.0.4: - dependencies: - is-plain-obj: 2.1.0 - - merge-stream@2.0.0: {} - - merge2@1.4.1: {} - - micro-api-client@3.3.0: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime-db@1.52.0: {} - - mime-db@1.54.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mime-types@3.0.1: - dependencies: - mime-db: 1.54.0 - - mime@3.0.0: {} - - mime@4.0.7: {} - - mimic-fn@4.0.0: {} - - mimic-response@3.1.0: {} - - 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 - - minimist@1.2.8: {} - - minipass-collect@1.0.2: - dependencies: - minipass: 3.3.6 - optional: true - - minipass-fetch@1.4.1: - dependencies: - minipass: 3.3.6 - minipass-sized: 1.0.3 - minizlib: 2.1.2 - optionalDependencies: - encoding: 0.1.13 - optional: true - - minipass-flush@1.0.5: - dependencies: - minipass: 3.3.6 - optional: true - - minipass-pipeline@1.2.4: - dependencies: - minipass: 3.3.6 - optional: true - - minipass-sized@1.0.3: - dependencies: - minipass: 3.3.6 - optional: true - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@5.0.0: {} - - minipass@7.1.2: {} - - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - - minizlib@3.0.2: - dependencies: - minipass: 7.1.2 - - mkdirp-classic@0.5.3: {} - - mkdirp@1.0.4: {} - - mkdirp@3.0.1: {} - - mlly@1.7.4: - dependencies: - acorn: 8.14.1 - pathe: 2.0.3 - pkg-types: 1.3.1 - ufo: 1.6.1 - - module-definition@5.0.1: - dependencies: - ast-module-types: 5.0.0 - node-source-walk: 6.0.2 - - ms@2.1.3: {} - - mustache@4.2.0: {} - - nanoid@3.3.8: {} - - napi-build-utils@2.0.0: {} - - negotiator@0.6.4: - optional: true - - neo-async@2.6.2: {} - - neo4j-driver-bolt-connection@5.28.1: - dependencies: - buffer: 6.0.3 - neo4j-driver-core: 5.28.1 - string_decoder: 1.3.0 - - neo4j-driver-core@5.28.1: {} - - neo4j-driver@5.28.1: - dependencies: - neo4j-driver-bolt-connection: 5.28.1 - neo4j-driver-core: 5.28.1 - rxjs: 7.8.2 - - nested-error-stacks@2.1.1: {} - - netlify@13.3.5: - dependencies: - '@netlify/open-api': 2.37.0 - lodash-es: 4.17.21 - micro-api-client: 3.3.0 - node-fetch: 3.3.2 - p-wait-for: 5.0.2 - qs: 6.14.0 - - nitropack@2.11.12(encoding@0.1.13)(sqlite3@5.1.7): - dependencies: - '@cloudflare/kv-asset-handler': 0.4.0 - '@netlify/functions': 3.1.8(encoding@0.1.13)(rollup@4.41.0) - '@rollup/plugin-alias': 5.1.1(rollup@4.41.0) - '@rollup/plugin-commonjs': 28.0.3(rollup@4.41.0) - '@rollup/plugin-inject': 5.0.5(rollup@4.41.0) - '@rollup/plugin-json': 6.1.0(rollup@4.41.0) - '@rollup/plugin-node-resolve': 16.0.1(rollup@4.41.0) - '@rollup/plugin-replace': 6.0.2(rollup@4.41.0) - '@rollup/plugin-terser': 0.4.4(rollup@4.41.0) - '@vercel/nft': 0.29.2(encoding@0.1.13)(rollup@4.41.0) - archiver: 7.0.1 - c12: 3.0.4(magicast@0.3.5) - chokidar: 4.0.3 - citty: 0.1.6 - compatx: 0.2.0 - confbox: 0.2.2 - consola: 3.4.2 - cookie-es: 2.0.0 - croner: 9.0.0 - crossws: 0.3.5 - db0: 0.3.2(sqlite3@5.1.7) - defu: 6.1.4 - destr: 2.0.5 - dot-prop: 9.0.0 - esbuild: 0.25.4 - escape-string-regexp: 5.0.0 - etag: 1.8.1 - exsolve: 1.0.5 - globby: 14.1.0 - gzip-size: 7.0.0 - h3: 1.15.3 - hookable: 5.5.3 - httpxy: 0.1.7 - ioredis: 5.6.1 - 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.7 - mlly: 1.7.4 - node-fetch-native: 1.6.6 - node-mock-http: 1.0.0 - ofetch: 1.4.1 - ohash: 2.0.11 - 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.41.0 - rollup-plugin-visualizer: 5.14.0(rollup@4.41.0) - scule: 1.3.0 - semver: 7.7.2 - serve-placeholder: 2.0.2 - serve-static: 2.2.0 - source-map: 0.7.4 - std-env: 3.9.0 - ufo: 1.6.1 - ultrahtml: 1.6.0 - uncrypto: 0.1.3 - unctx: 2.4.1 - unenv: 2.0.0-rc.17 - unimport: 5.0.1 - unplugin-utils: 0.2.4 - unstorage: 1.16.0(db0@0.3.2(sqlite3@5.1.7))(ioredis@5.6.1) - untyped: 2.0.0 - unwasm: 0.3.9 - youch: 4.1.0-beta.7 - youch-core: 0.3.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 - - uploadthing - - node-abi@3.75.0: - dependencies: - semver: 7.7.2 - - node-addon-api@7.1.1: {} - - node-domexception@1.0.0: {} - - node-fetch-native@1.6.6: {} - - node-fetch@2.7.0(encoding@0.1.13): - dependencies: - whatwg-url: 5.0.0 - optionalDependencies: - encoding: 0.1.13 - - node-fetch@3.3.2: - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - - node-forge@1.3.1: {} - - node-gyp-build@4.8.4: {} - - node-gyp@8.4.1: - dependencies: - env-paths: 2.2.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - make-fetch-happen: 9.1.0 - nopt: 5.0.0 - npmlog: 6.0.2 - rimraf: 3.0.2 - semver: 7.7.2 - tar: 6.2.1 - which: 2.0.2 - transitivePeerDependencies: - - bluebird - - supports-color - optional: true - - node-mock-http@1.0.0: {} - - node-source-walk@6.0.2: - dependencies: - '@babel/parser': 7.27.2 - - nopt@5.0.0: - dependencies: - abbrev: 1.1.1 - - nopt@8.1.0: - dependencies: - abbrev: 3.0.1 - - normalize-package-data@6.0.2: - dependencies: - hosted-git-info: 7.0.2 - semver: 7.7.2 - validate-npm-package-license: 3.0.4 - - normalize-path@2.1.1: - dependencies: - remove-trailing-separator: 1.1.0 - - normalize-path@3.0.0: {} - - npm-run-path@5.3.0: - dependencies: - path-key: 4.0.0 - - npmlog@5.0.1: - dependencies: - are-we-there-yet: 2.0.0 - console-control-strings: 1.1.0 - gauge: 3.0.2 - set-blocking: 2.0.0 - - npmlog@6.0.2: - dependencies: - are-we-there-yet: 3.0.1 - console-control-strings: 1.1.0 - gauge: 4.0.4 - set-blocking: 2.0.0 - optional: true - - nypm@0.5.4: - dependencies: - citty: 0.1.6 - consola: 3.4.2 - pathe: 2.0.3 - pkg-types: 1.3.1 - tinyexec: 0.3.2 - ufo: 1.6.1 - - nypm@0.6.0: - dependencies: - citty: 0.1.6 - consola: 3.4.2 - pathe: 2.0.3 - pkg-types: 2.1.0 - tinyexec: 0.3.2 - - object-assign@4.1.1: {} - - object-inspect@1.13.4: {} - - obuf@1.1.2: {} - - ofetch@1.4.1: - dependencies: - destr: 2.0.5 - node-fetch-native: 1.6.6 - ufo: 1.6.1 - - ohash@1.1.6: {} - - ohash@2.0.11: {} - - ollama@0.5.15: - dependencies: - whatwg-fetch: 3.6.20 - - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 - - once@1.3.3: - dependencies: - wrappy: 1.0.2 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - one-time@1.0.0: - dependencies: - fn.name: 1.1.0 - - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - - open@8.4.2: - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - - openai@4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.24.2): - dependencies: - '@types/node': 18.19.103 - '@types/node-fetch': 2.6.12 - abort-controller: 3.0.0 - agentkeepalive: 4.6.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0(encoding@0.1.13) - optionalDependencies: - ws: 8.18.2 - zod: 3.24.2 - transitivePeerDependencies: - - encoding - - openapi-types@12.1.3: {} - - p-event@5.0.1: - dependencies: - p-timeout: 5.1.0 - - p-finally@1.0.0: {} - - p-limit@4.0.0: - dependencies: - yocto-queue: 1.2.1 - - p-locate@6.0.0: - dependencies: - p-limit: 4.0.0 - - p-map@4.0.0: - dependencies: - aggregate-error: 3.1.0 - optional: true - - p-map@7.0.3: {} - - p-queue@6.6.2: - dependencies: - eventemitter3: 4.0.7 - p-timeout: 3.2.0 - - p-retry@4.6.2: - dependencies: - '@types/retry': 0.12.0 - retry: 0.13.1 - - p-timeout@3.2.0: - dependencies: - p-finally: 1.0.0 - - p-timeout@5.1.0: {} - - p-timeout@6.1.4: {} - - p-wait-for@5.0.2: - dependencies: - p-timeout: 6.1.4 - - package-json-from-dist@1.0.1: {} - - packet-reader@1.0.0: {} - - parse-gitignore@2.0.0: {} - - parse-json@8.3.0: - dependencies: - '@babel/code-frame': 7.27.1 - index-to-position: 1.1.0 - type-fest: 4.41.0 - - parseurl@1.3.3: {} - - partial-json@0.1.7: {} - - path-exists@5.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-key@4.0.0: {} - - path-parse@1.0.7: {} - - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - path-type@4.0.0: {} - - path-type@6.0.0: {} - - pathe@1.1.2: {} - - pathe@2.0.3: {} - - pend@1.2.0: {} - - perfect-debounce@1.0.0: {} - - pg-cloudflare@1.2.5: - optional: true - - pg-connection-string@2.9.0: {} - - pg-int8@1.0.1: {} - - pg-numeric@1.0.2: {} - - pg-pool@3.10.0(pg@8.11.3): - dependencies: - pg: 8.11.3 - - pg-protocol@1.10.0: {} - - pg-types@2.2.0: - dependencies: - pg-int8: 1.0.1 - postgres-array: 2.0.0 - postgres-bytea: 1.0.0 - postgres-date: 1.0.7 - postgres-interval: 1.2.0 - - pg-types@4.0.2: - dependencies: - pg-int8: 1.0.1 - pg-numeric: 1.0.2 - postgres-array: 3.0.4 - postgres-bytea: 3.0.0 - postgres-date: 2.1.0 - postgres-interval: 3.0.0 - postgres-range: 1.1.4 - - pg@8.11.3: - dependencies: - buffer-writer: 2.0.0 - packet-reader: 1.0.0 - pg-connection-string: 2.9.0 - pg-pool: 3.10.0(pg@8.11.3) - pg-protocol: 1.10.0 - pg-types: 2.2.0 - pgpass: 1.0.5 - optionalDependencies: - pg-cloudflare: 1.2.5 - - pgpass@1.0.5: - dependencies: - split2: 4.2.0 - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} - - picomatch@4.0.2: {} - - 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.2 - exsolve: 1.0.5 - pathe: 2.0.3 - - postcss-values-parser@6.0.2(postcss@8.5.3): - dependencies: - color-name: 1.1.4 - is-url-superb: 4.0.0 - postcss: 8.5.3 - quote-unquote: 1.0.0 - - postcss@8.5.3: - dependencies: - nanoid: 3.3.8 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - postgres-array@2.0.0: {} - - postgres-array@3.0.4: {} - - postgres-bytea@1.0.0: {} - - postgres-bytea@3.0.0: - dependencies: - obuf: 1.1.2 - - postgres-date@1.0.7: {} - - postgres-date@2.1.0: {} - - postgres-interval@1.2.0: - dependencies: - xtend: 4.0.2 - - postgres-interval@3.0.0: {} - - postgres-range@1.1.4: {} - - prebuild-install@7.1.3: - dependencies: - detect-libc: 2.0.4 - expand-template: 2.0.3 - github-from-package: 0.0.0 - minimist: 1.2.8 - mkdirp-classic: 0.5.3 - napi-build-utils: 2.0.0 - node-abi: 3.75.0 - pump: 3.0.2 - rc: 1.2.8 - simple-get: 4.0.1 - tar-fs: 2.1.3 - tunnel-agent: 0.6.0 - - precinct@11.0.5: - dependencies: - '@dependents/detective-less': 4.1.0 - commander: 10.0.1 - detective-amd: 5.0.2 - detective-cjs: 5.0.1 - detective-es6: 4.0.1 - detective-postcss: 6.1.3 - detective-sass: 5.0.3 - detective-scss: 4.0.3 - detective-stylus: 4.0.0 - detective-typescript: 11.2.0 - module-definition: 5.0.1 - node-source-walk: 6.0.2 - transitivePeerDependencies: - - supports-color - - pretty-bytes@6.1.1: {} - - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - - process-nextick-args@2.0.1: {} - - process@0.11.10: {} - - promise-inflight@1.0.1: - optional: true - - promise-retry@2.0.1: - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - optional: true - - proxy-from-env@1.1.0: {} - - pump@3.0.2: - dependencies: - end-of-stream: 1.1.0 - once: 1.3.3 - - qs@6.14.0: - dependencies: - side-channel: 1.1.0 - - quansync@0.2.10: {} - - queue-microtask@1.2.3: {} - - quote-unquote@1.0.0: {} - - radix3@1.1.2: {} - - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 - - range-parser@1.2.1: {} - - rc9@2.1.2: - dependencies: - defu: 6.1.4 - destr: 2.0.5 - - rc@1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - - react-is@18.3.1: {} - - react@19.0.0: {} - - read-package-up@11.0.0: - dependencies: - find-up-simple: 1.0.1 - read-pkg: 9.0.1 - type-fest: 4.41.0 - - read-pkg@9.0.1: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 6.0.2 - parse-json: 8.3.0 - type-fest: 4.41.0 - unicorn-magic: 0.1.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 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - - 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@4.1.2: {} - - redis-errors@1.2.0: {} - - redis-parser@3.0.0: - dependencies: - redis-errors: 1.2.0 - - redis@4.7.1: - dependencies: - '@redis/bloom': 1.2.0(@redis/client@1.6.1) - '@redis/client': 1.6.1 - '@redis/graph': 1.1.1(@redis/client@1.6.1) - '@redis/json': 1.0.7(@redis/client@1.6.1) - '@redis/search': 1.2.0(@redis/client@1.6.1) - '@redis/time-series': 1.1.0(@redis/client@1.6.1) - - remove-trailing-separator@1.1.0: {} - - require-directory@2.1.1: {} - - require-from-string@2.0.2: {} - - require-package-name@2.0.1: {} - - resolve-from@5.0.0: {} - - resolve-pkg-maps@1.0.0: {} - - resolve@1.22.10: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - resolve@2.0.0-next.5: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - retry@0.12.0: - optional: true - - retry@0.13.1: {} - - reusify@1.1.0: {} - - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - rollup-plugin-visualizer@5.14.0(rollup@4.41.0): - dependencies: - open: 8.4.2 - picomatch: 4.0.2 - source-map: 0.7.4 - yargs: 17.7.2 - optionalDependencies: - rollup: 4.41.0 - - rollup@4.41.0: - dependencies: - '@types/estree': 1.0.7 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.41.0 - '@rollup/rollup-android-arm64': 4.41.0 - '@rollup/rollup-darwin-arm64': 4.41.0 - '@rollup/rollup-darwin-x64': 4.41.0 - '@rollup/rollup-freebsd-arm64': 4.41.0 - '@rollup/rollup-freebsd-x64': 4.41.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.41.0 - '@rollup/rollup-linux-arm-musleabihf': 4.41.0 - '@rollup/rollup-linux-arm64-gnu': 4.41.0 - '@rollup/rollup-linux-arm64-musl': 4.41.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.41.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.41.0 - '@rollup/rollup-linux-riscv64-gnu': 4.41.0 - '@rollup/rollup-linux-riscv64-musl': 4.41.0 - '@rollup/rollup-linux-s390x-gnu': 4.41.0 - '@rollup/rollup-linux-x64-gnu': 4.41.0 - '@rollup/rollup-linux-x64-musl': 4.41.0 - '@rollup/rollup-win32-arm64-msvc': 4.41.0 - '@rollup/rollup-win32-ia32-msvc': 4.41.0 - '@rollup/rollup-win32-x64-msvc': 4.41.0 - fsevents: 2.3.3 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - rxjs@7.8.2: - dependencies: - tslib: 2.8.1 - - safe-buffer@5.1.2: {} - - safe-buffer@5.2.1: {} - - safe-stable-stringify@2.5.0: {} - - safer-buffer@2.1.2: - optional: true - - scule@1.3.0: {} - - secure-json-parse@2.7.0: {} - - semver@6.3.1: {} - - semver@7.7.2: {} - - send@1.2.0: - dependencies: - debug: 4.4.1 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 2.0.0 - http-errors: 2.0.0 - mime-types: 3.0.1 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - - serialize-javascript@6.0.2: - dependencies: - randombytes: 2.1.0 - - serve-placeholder@2.0.2: - dependencies: - defu: 6.1.4 - - serve-static@2.2.0: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 1.2.0 - transitivePeerDependencies: - - supports-color - - set-blocking@2.0.0: {} - - setprototypeof@1.2.0: {} - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - 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@3.0.7: {} - - signal-exit@4.1.0: {} - - simple-concat@1.0.1: {} - - simple-get@4.0.1: - dependencies: - decompress-response: 6.0.0 - once: 1.4.0 - simple-concat: 1.0.1 - - simple-swizzle@0.2.2: - dependencies: - is-arrayish: 0.3.2 - - simple-wcswidth@1.0.1: {} - - slash@3.0.0: {} - - slash@5.1.0: {} - - smart-buffer@4.2.0: - optional: true - - smob@1.5.0: {} - - socks-proxy-agent@6.2.1: - dependencies: - agent-base: 6.0.2 - debug: 4.4.1 - socks: 2.8.4 - transitivePeerDependencies: - - supports-color - optional: true - - socks@2.8.4: - dependencies: - ip-address: 9.0.5 - smart-buffer: 4.2.0 - optional: true - - source-map-js@1.2.1: {} - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.6.1: {} - - source-map@0.7.4: {} - - 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: {} - - split2@4.2.0: {} - - sprintf-js@1.1.3: - optional: true - - sqlite3@5.1.7: - dependencies: - bindings: 1.5.0 - node-addon-api: 7.1.1 - prebuild-install: 7.1.3 - tar: 6.2.1 - optionalDependencies: - node-gyp: 8.4.1 - transitivePeerDependencies: - - bluebird - - supports-color - - ssri@8.0.1: - dependencies: - minipass: 3.3.6 - optional: true - - stack-trace@0.0.10: {} - - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 - - standard-as-callback@2.1.0: {} - - statuses@2.0.1: {} - - std-env@3.9.0: {} - - 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 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - - string_decoder@1.1.1: - dependencies: - safe-buffer: 5.1.2 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.1.0 - - strip-final-newline@3.0.0: {} - - strip-json-comments@2.0.1: {} - - strip-literal@3.0.0: - dependencies: - js-tokens: 9.0.1 - - supports-color@10.0.0: {} - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - swr@2.3.2(react@19.0.0): - dependencies: - dequal: 2.0.3 - react: 19.0.0 - use-sync-external-store: 1.4.0(react@19.0.0) - - system-architecture@0.1.0: {} - - tar-fs@2.1.3: - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.2 - tar-stream: 2.2.0 - - tar-stream@2.2.0: - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.4 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - - tar-stream@3.1.7: - dependencies: - b4a: 1.6.7 - fast-fifo: 1.3.2 - streamx: 2.22.0 - - tar@6.2.1: - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - - tar@7.4.3: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.0.2 - mkdirp: 3.0.1 - yallist: 5.0.0 - - terser@5.39.2: - 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 - - text-hex@1.0.0: {} - - throttleit@2.1.0: {} - - tinyexec@0.3.2: {} - - tinyglobby@0.2.13: - dependencies: - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 - - 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 - - toidentifier@1.0.1: {} - - toml@3.0.0: {} - - tr46@0.0.3: {} - - triple-beam@1.4.1: {} - - tslib@1.14.1: {} - - tslib@2.8.1: {} - - tsutils@3.21.0(typescript@5.8.2): - dependencies: - tslib: 1.14.1 - typescript: 5.8.2 - - tsx@4.19.4: - dependencies: - esbuild: 0.25.4 - get-tsconfig: 4.10.1 - optionalDependencies: - fsevents: 2.3.3 - - tunnel-agent@0.6.0: - dependencies: - safe-buffer: 5.2.1 - - type-fest@4.41.0: {} - - typescript@5.8.2: {} - - ufo@1.6.1: {} - - uglify-js@3.19.3: - optional: true - - ultrahtml@1.6.0: {} - - 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.3.4 - - undici-types@5.26.5: {} - - undici-types@6.19.8: {} - - undici@5.28.5: - dependencies: - '@fastify/busboy': 2.1.1 - - unenv@2.0.0-rc.17: - dependencies: - defu: 6.1.4 - exsolve: 1.0.5 - ohash: 2.0.11 - pathe: 2.0.3 - ufo: 1.6.1 - - unicorn-magic@0.1.0: {} - - unicorn-magic@0.3.0: {} - - unimport@5.0.1: - 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: 2.1.0 - scule: 1.3.0 - strip-literal: 3.0.0 - tinyglobby: 0.2.13 - unplugin: 2.3.4 - unplugin-utils: 0.2.4 - - unique-filename@1.1.1: - dependencies: - unique-slug: 2.0.2 - optional: true - - unique-slug@2.0.2: - dependencies: - imurmurhash: 0.1.4 - optional: true - - unixify@1.0.0: - dependencies: - normalize-path: 2.1.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.3.4: - dependencies: - acorn: 8.14.1 - picomatch: 4.0.2 - webpack-virtual-modules: 0.6.2 - - unstorage@1.16.0(db0@0.3.2(sqlite3@5.1.7))(ioredis@5.6.1): - dependencies: - anymatch: 3.1.3 - chokidar: 4.0.3 - destr: 2.0.5 - h3: 1.15.3 - lru-cache: 10.4.3 - node-fetch-native: 1.6.6 - ofetch: 1.4.1 - ufo: 1.6.1 - optionalDependencies: - db0: 0.3.2(sqlite3@5.1.7) - ioredis: 5.6.1 - - untun@0.1.3: - dependencies: - citty: 0.1.6 - consola: 3.4.2 - 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 - - uqr@0.1.2: {} - - urlpattern-polyfill@10.1.0: {} - - urlpattern-polyfill@8.0.2: {} - - use-sync-external-store@1.4.0(react@19.0.0): - dependencies: - react: 19.0.0 - - util-deprecate@1.0.2: {} - - uuid@10.0.0: {} - - uuid@11.1.0: {} - - uuid@9.0.1: {} - - validate-npm-package-license@3.0.4: - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - - web-streams-polyfill@3.3.3: {} - - web-streams-polyfill@4.0.0-beta.3: {} - - webidl-conversions@3.0.1: {} - - webpack-virtual-modules@0.6.2: {} - - whatwg-fetch@3.6.20: {} - - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - wide-align@1.1.5: - dependencies: - string-width: 4.2.3 - - winston-transport@4.9.0: - dependencies: - logform: 2.7.0 - readable-stream: 3.6.2 - triple-beam: 1.4.1 - - winston@3.17.0: - dependencies: - '@colors/colors': 1.6.0 - '@dabh/diagnostics': 2.0.3 - async: 3.2.6 - is-stream: 2.0.1 - logform: 2.7.0 - one-time: 1.0.0 - readable-stream: 3.6.2 - safe-stable-stringify: 2.5.0 - stack-trace: 0.0.10 - triple-beam: 1.4.1 - winston-transport: 4.9.0 - - wordwrap@1.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: {} - - write-file-atomic@6.0.0: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 4.1.0 - - ws@8.18.2: {} - - xtend@4.0.2: {} - - y18n@5.0.8: {} - - yallist@4.0.0: {} - - yallist@5.0.0: {} - - yargs-parser@21.1.1: {} - - 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 - - yauzl@2.10.0: - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - - yocto-queue@1.2.1: {} - - youch-core@0.3.2: - dependencies: - '@poppinss/exception': 1.2.1 - error-stack-parser-es: 1.0.5 - - youch@4.1.0-beta.7: - dependencies: - '@poppinss/dumper': 0.6.3 - '@speed-highlight/core': 1.2.7 - cookie: 1.0.2 - youch-core: 0.3.2 - - zip-stream@4.1.1: - dependencies: - archiver-utils: 3.0.4 - compress-commons: 4.1.2 - readable-stream: 3.6.2 - - zip-stream@6.0.1: - dependencies: - archiver-utils: 5.0.2 - compress-commons: 6.0.2 - readable-stream: 4.7.0 - - zod-to-json-schema@3.24.3(zod@3.24.2): - dependencies: - zod: 3.24.2 - - zod@3.24.2: {} diff --git a/run.sh b/run.sh deleted file mode 100644 index de1d1a7..0000000 --- a/run.sh +++ /dev/null @@ -1,7 +0,0 @@ -# run.sh -while true; do - echo "Starting Bun server..." - pnpm vercel dev - echo "Server crashed with exit code $? — restarting in 3 seconds..." - sleep 3 -done \ No newline at end of file diff --git a/server/api/events.post.ts b/server/api/events/index.post.ts similarity index 100% rename from server/api/events.post.ts rename to server/api/events/index.post.ts diff --git a/tsconfig.json b/tsconfig.json index d32e2ef..5d7df53 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,4 +1,7 @@ // https://nitro.unjs.io/guide/typescript { - "extends": "./.nitro/types/tsconfig.json" + "extends": "./.nitro/types/tsconfig.json", + "compilerOptions": { + "strictNullChecks": true, + }, } From a90825ff4d2f7692e67c3d391e2a62a9ee010964 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Sat, 24 May 2025 12:01:34 +0000 Subject: [PATCH 26/50] feat: refactor discourse utilities and update imports for better organization --- nitro.config.ts | 5 ++++- server/api/events/index.post.ts | 4 +++- server/api/index.ts | 7 ++++++- server/utils/{discourse-utils.ts => discourse.ts} | 2 +- server/utils/handle-app-mention.ts | 2 +- server/utils/handle-messages.ts | 2 +- 6 files changed, 16 insertions(+), 6 deletions(-) rename server/utils/{discourse-utils.ts => discourse.ts} (98%) diff --git a/nitro.config.ts b/nitro.config.ts index 1067757..c4f2fd2 100644 --- a/nitro.config.ts +++ b/nitro.config.ts @@ -2,5 +2,8 @@ export default defineNitroConfig({ srcDir: "server", preset: "bun", - compatibilityDate: '2025-05-24' + compatibilityDate: '2025-05-24', + imports: { + autoImport: false, + } }); diff --git a/server/api/events/index.post.ts b/server/api/events/index.post.ts index 3877b63..3f9fab4 100644 --- a/server/api/events/index.post.ts +++ b/server/api/events/index.post.ts @@ -1,8 +1,10 @@ import { waitUntil } from '@vercel/functions'; import { handleNewAppMention } from '~/utils/handle-app-mention'; import { handleNewAssistantMessage } from '~/utils/handle-messages'; -import { getBotUser, verifyRequest } from '~/utils/discourse-utils'; +import { getBotUser, verifyRequest } from '~/utils/discourse'; import type { WebhookChatMessage, WebhookNotification } from '~/types'; +import { defineEventHandler } from 'h3'; +import { getRequestHeader, readBody } from 'h3'; export default defineEventHandler(async request => { const rawBody = JSON.stringify(await readBody(request)); diff --git a/server/api/index.ts b/server/api/index.ts index b460920..f06cb3d 100644 --- a/server/api/index.ts +++ b/server/api/index.ts @@ -1,3 +1,8 @@ +import { defineEventHandler } from 'h3'; + export default defineEventHandler((event) => { - return "Hello World!"; + return { + status: 'ok', + message: 'Discourse API is running', + } }); diff --git a/server/utils/discourse-utils.ts b/server/utils/discourse.ts similarity index 98% rename from server/utils/discourse-utils.ts rename to server/utils/discourse.ts index 2e484db..862b806 100644 --- a/server/utils/discourse-utils.ts +++ b/server/utils/discourse.ts @@ -12,7 +12,7 @@ import { import type { GetSessionResponse } from '../../client/types.gen'; import type { WebhookChatMessage } from '../types'; import { env } from '~/env'; -import type { EventHandlerRequest, H3Event } from 'h3' +import { getRequestHeader, type EventHandlerRequest, type H3Event } from 'h3' const signingSecret = env.DISCOURSE_SIGNING_SECRET; const url = env.DISCOURSE_URL; diff --git a/server/utils/handle-app-mention.ts b/server/utils/handle-app-mention.ts index 34ff855..40fe80d 100644 --- a/server/utils/handle-app-mention.ts +++ b/server/utils/handle-app-mention.ts @@ -2,7 +2,7 @@ import { editMessage, sendMessage } from '../../client/sdk.gen'; import type { GetSessionResponse } from '../../client/types.gen'; import type { WebhookNotification } from '~/types'; import { generateResponse } from './generate-response'; -import { getMessages, getThreadMessages } from './discourse-utils'; +import { getMessages, getThreadMessages } from './discourse'; const updateStatusUtil = async ( initialStatus: string, diff --git a/server/utils/handle-messages.ts b/server/utils/handle-messages.ts index 5d8b8e9..fd5262c 100644 --- a/server/utils/handle-messages.ts +++ b/server/utils/handle-messages.ts @@ -2,7 +2,7 @@ import type { GetSessionResponse } from '../../client/types.gen'; import { keywords } from '~/config'; import type { WebhookChatMessage } from '~/types'; import { generateResponse } from './generate-response'; -import { getMessages, getThreadMessages, updateStatusUtil } from './discourse-utils'; +import { getMessages, getThreadMessages, updateStatusUtil } from './discourse'; // export async function assistantThreadMessage( // event: AssistantThreadStartedEvent, From d9ce7c7cdb0672e97d0f61d107955d9d633d2b79 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Sat, 24 May 2025 12:01:53 +0000 Subject: [PATCH 27/50] feat: enhance AI functionality and logging - Updated nitro.config.ts to set esbuild target to "esnext". - Added new dependencies in package.json for date-fns and compromise. - Implemented a logger using pino for better logging in various modules. - Created prompts for AI responses in server/lib/ai/prompts.ts. - Added AI provider configurations in server/lib/ai/providers.ts. - Refactored event handling to use the new logger in server/api/events/index.post.ts. - Updated discourse utility functions to log signature validation and HMAC comparison. - Enhanced message handling with logging in server/utils/handle-app-mention.ts and server/utils/handle-messages.ts. - Introduced utility functions for time zone handling in server/utils/time.ts. - Added message tokenization functions in server/utils/tokenize-messages.ts. --- bun.lock | 57 ++++++++++++++++++++++++++- nitro.config.ts | 9 ++++- package.json | 5 +++ server/api/events/index.post.ts | 3 +- server/{utils => lib}/ai/prompts.ts | 0 server/{utils => lib}/ai/providers.ts | 0 server/lib/logger.ts | 40 +++++++++++++++++++ server/utils/discourse.ts | 5 ++- server/utils/handle-app-mention.ts | 7 ++-- server/utils/handle-messages.ts | 5 ++- server/utils/time.ts | 11 ++++++ server/utils/tokenize-messages.ts | 15 +++++++ 12 files changed, 146 insertions(+), 11 deletions(-) rename server/{utils => lib}/ai/prompts.ts (100%) rename server/{utils => lib}/ai/providers.ts (100%) create mode 100644 server/lib/logger.ts create mode 100644 server/utils/time.ts create mode 100644 server/utils/tokenize-messages.ts diff --git a/bun.lock b/bun.lock index 6de2f84..015d765 100644 --- a/bun.lock +++ b/bun.lock @@ -6,15 +6,20 @@ "dependencies": { "@ai-sdk/openai": "^1.3.22", "@ai-sdk/openai-compatible": "^0.2.14", + "@date-fns/tz": "^1.2.0", "@hey-api/client-fetch": "^0.10.1", "@mem0/vercel-ai-provider": "^1.0.5", "@openrouter/ai-sdk-provider": "^0.4.6", "@t3-oss/env-core": "^0.13.4", "@vercel/functions": "^2.0.0", "ai": "^4.3.16", + "compromise": "^14.14.4", + "date-fns": "^4.1.0", "discourse2-chat": "^1.1.5", "exa-js": "^1.4.10", "nitropack": "latest", + "pino": "^9.7.0", + "pino-pretty": "^13.0.0", "tsx": "^4.19.4", "zod": "^3.24.2", }, @@ -88,6 +93,8 @@ "@dabh/diagnostics": ["@dabh/diagnostics@2.0.3", "", { "dependencies": { "colorspace": "1.1.x", "enabled": "2.0.x", "kuler": "^2.0.0" } }, "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA=="], + "@date-fns/tz": ["@date-fns/tz@1.2.0", "", {}, "sha512-LBrd7MiJZ9McsOgxqWX7AaxrDjcFVjWH/tIKJd7pnR7McaslGYOP1QmmiBXdJH/H/yLCT+rcQ7FaPBUxRGUtrg=="], + "@dependents/detective-less": ["@dependents/detective-less@5.0.1", "", { "dependencies": { "gonzales-pe": "^4.3.0", "node-source-walk": "^7.0.1" } }, "sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ=="], "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q=="], @@ -478,6 +485,8 @@ "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], + "atomic-sleep": ["atomic-sleep@1.0.0", "", {}, "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="], + "axios": ["axios@1.7.7", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q=="], "b4a": ["b4a@1.6.7", "", {}, "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg=="], @@ -556,6 +565,8 @@ "color-support": ["color-support@1.1.3", "", { "bin": { "color-support": "bin.js" } }, "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="], + "colorette": ["colorette@2.0.20", "", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="], + "colorspace": ["colorspace@1.1.4", "", { "dependencies": { "color": "^3.1.3", "text-hex": "1.0.x" } }, "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w=="], "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], @@ -570,6 +581,8 @@ "compress-commons": ["compress-commons@6.0.2", "", { "dependencies": { "crc-32": "^1.2.0", "crc32-stream": "^6.0.0", "is-stream": "^2.0.1", "normalize-path": "^3.0.0", "readable-stream": "^4.0.0" } }, "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg=="], + "compromise": ["compromise@14.14.4", "", { "dependencies": { "efrt": "2.7.0", "grad-school": "0.0.5", "suffix-thumb": "5.0.2" } }, "sha512-QdbJwronwxeqb7a5KFK/+Y5YieZ4PE1f7ai0vU58Pp4jih+soDCBMuKVbhDEPQ+6+vI3vSiG4UAAjTAXLJw1Qw=="], + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], "confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], @@ -606,6 +619,10 @@ "data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="], + "date-fns": ["date-fns@4.1.0", "", {}, "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg=="], + + "dateformat": ["dateformat@4.6.3", "", {}, "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA=="], + "db0": ["db0@0.3.2", "", { "peerDependencies": { "@electric-sql/pglite": "*", "@libsql/client": "*", "better-sqlite3": "*", "drizzle-orm": "*", "mysql2": "*", "sqlite3": "*" }, "optionalPeers": ["@electric-sql/pglite", "@libsql/client", "better-sqlite3", "drizzle-orm", "mysql2", "sqlite3"] }, "sha512-xzWNQ6jk/+NtdfLyXEipbX55dmDSeteLFt/ayF+wZUU5bzKgmrDOxmInUTbyVRp46YwnJdkDA1KhB7WIXFofJw=="], "debug": ["debug@4.4.1", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], @@ -678,6 +695,8 @@ "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], + "efrt": ["efrt@2.7.0", "", {}, "sha512-/RInbCy1d4P6Zdfa+TMVsf/ufZVotat5hCw3QXmWtjU+3pFEOvOQ7ibo3aIxyCJw2leIeAMjmPj+1SLJiCpdrQ=="], + "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "enabled": ["enabled@2.0.0", "", {}, "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="], @@ -750,12 +769,18 @@ "extract-zip": ["extract-zip@2.0.1", "", { "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, "optionalDependencies": { "@types/yauzl": "^2.9.1" }, "bin": { "extract-zip": "cli.js" } }, "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg=="], + "fast-copy": ["fast-copy@3.0.2", "", {}, "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ=="], + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], "fast-fifo": ["fast-fifo@1.3.2", "", {}, "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="], "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + "fast-redact": ["fast-redact@3.5.0", "", {}, "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A=="], + + "fast-safe-stringify": ["fast-safe-stringify@2.1.1", "", {}, "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="], + "fast-uri": ["fast-uri@3.0.6", "", {}, "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw=="], "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], @@ -846,6 +871,8 @@ "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + "grad-school": ["grad-school@0.0.5", "", {}, "sha512-rXunEHF9M9EkMydTBux7+IryYXEZinRk6g8OBOGDBzo/qWJjhTxy86i5q7lQYpCLHN8Sqv1XX3OIOc7ka2gtvQ=="], + "groq-sdk": ["groq-sdk@0.3.0", "", { "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", "abort-controller": "^3.0.0", "agentkeepalive": "^4.2.1", "digest-fetch": "^1.3.0", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", "node-fetch": "^2.6.7", "web-streams-polyfill": "^3.2.1" } }, "sha512-Cdgjh4YoSBE2X4S9sxPGXaAy1dlN4bRtAaDZ3cnq+XsxhhN9WSBeHF64l7LWwuD5ntmw7YC5Vf4Ff1oHCg1LOg=="], "gtoken": ["gtoken@7.1.0", "", { "dependencies": { "gaxios": "^6.0.0", "jws": "^4.0.0" } }, "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw=="], @@ -866,6 +893,8 @@ "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + "help-me": ["help-me@5.0.0", "", {}, "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg=="], + "hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], "hosted-git-info": ["hosted-git-info@7.0.2", "", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w=="], @@ -970,6 +999,8 @@ "jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="], + "joycon": ["joycon@3.1.1", "", {}, "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw=="], + "js-tiktoken": ["js-tiktoken@1.0.20", "", { "dependencies": { "base64-js": "^1.5.1" } }, "sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A=="], "js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], @@ -1152,6 +1183,8 @@ "ollama": ["ollama@0.5.15", "", { "dependencies": { "whatwg-fetch": "^3.6.20" } }, "sha512-TSaZSJyP7MQJFjSmmNsoJiriwa3U+/UJRw6+M8aucs5dTsaWNZsBIGpDb5rXnW6nXxJBB/z79gZY8IaiIQgelQ=="], + "on-exit-leak-free": ["on-exit-leak-free@2.1.2", "", {}, "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="], + "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], @@ -1236,6 +1269,14 @@ "picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], + "pino": ["pino@9.7.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg=="], + + "pino-abstract-transport": ["pino-abstract-transport@2.0.0", "", { "dependencies": { "split2": "^4.0.0" } }, "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw=="], + + "pino-pretty": ["pino-pretty@13.0.0", "", { "dependencies": { "colorette": "^2.0.7", "dateformat": "^4.6.3", "fast-copy": "^3.0.2", "fast-safe-stringify": "^2.1.1", "help-me": "^5.0.0", "joycon": "^3.1.1", "minimist": "^1.2.6", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pump": "^3.0.0", "secure-json-parse": "^2.4.0", "sonic-boom": "^4.0.1", "strip-json-comments": "^3.1.1" }, "bin": { "pino-pretty": "bin.js" } }, "sha512-cQBBIVG3YajgoUjo1FdKVRX6t9XPxwB9lcNJVD5GCnNM4Y6T12YYx8c6zEejxQsU0wrg9TwmDulcE9LR7qcJqA=="], + + "pino-std-serializers": ["pino-std-serializers@7.0.0", "", {}, "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA=="], + "pkg-types": ["pkg-types@2.1.0", "", { "dependencies": { "confbox": "^0.2.1", "exsolve": "^1.0.1", "pathe": "^2.0.3" } }, "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A=="], "postcss": ["postcss@8.5.3", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A=="], @@ -1264,6 +1305,8 @@ "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], + "process-warning": ["process-warning@5.0.0", "", {}, "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA=="], + "promise-inflight": ["promise-inflight@1.0.1", "", {}, "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g=="], "promise-retry": ["promise-retry@2.0.1", "", { "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" } }, "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="], @@ -1278,6 +1321,8 @@ "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + "quick-format-unescaped": ["quick-format-unescaped@4.0.4", "", {}, "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="], + "quote-unquote": ["quote-unquote@1.0.0", "", {}, "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg=="], "radix3": ["radix3@1.1.2", "", {}, "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="], @@ -1304,6 +1349,8 @@ "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], + "real-require": ["real-require@0.2.0", "", {}, "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="], + "redis": ["redis@4.7.1", "", { "dependencies": { "@redis/bloom": "1.2.0", "@redis/client": "1.6.1", "@redis/graph": "1.1.1", "@redis/json": "1.0.7", "@redis/search": "1.2.0", "@redis/time-series": "1.1.0" } }, "sha512-S1bJDnqLftzHXHP8JsT5II/CtHWQrASX5K96REjWjlmWKrviSOLWmM7QnRLstAWsu1VBBV1ffV6DzCvxNP0UJQ=="], "redis-errors": ["redis-errors@1.2.0", "", {}, "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w=="], @@ -1394,6 +1441,8 @@ "socks-proxy-agent": ["socks-proxy-agent@6.2.1", "", { "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", "socks": "^2.6.2" } }, "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ=="], + "sonic-boom": ["sonic-boom@4.2.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww=="], + "source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], @@ -1440,10 +1489,12 @@ "strip-final-newline": ["strip-final-newline@3.0.0", "", {}, "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw=="], - "strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], + "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], "strip-literal": ["strip-literal@3.0.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA=="], + "suffix-thumb": ["suffix-thumb@5.0.2", "", {}, "sha512-I5PWXAFKx3FYnI9a+dQMWNqTxoRt6vdBdb0O+BJ1sxXCWtSoQCusc13E58f+9p4MYx/qCnEMkD5jac6K2j3dgA=="], + "supports-color": ["supports-color@10.0.0", "", {}, "sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ=="], "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], @@ -1464,6 +1515,8 @@ "text-hex": ["text-hex@1.0.0", "", {}, "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="], + "thread-stream": ["thread-stream@3.1.0", "", { "dependencies": { "real-require": "^0.2.0" } }, "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A=="], + "throttleit": ["throttleit@2.1.0", "", {}, "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw=="], "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], @@ -1788,6 +1841,8 @@ "promise-retry/retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="], + "rc/strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], + "read-pkg/unicorn-magic": ["unicorn-magic@0.1.0", "", {}, "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ=="], "readdir-glob/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], diff --git a/nitro.config.ts b/nitro.config.ts index c4f2fd2..999b684 100644 --- a/nitro.config.ts +++ b/nitro.config.ts @@ -4,6 +4,11 @@ export default defineNitroConfig({ preset: "bun", compatibilityDate: '2025-05-24', imports: { - autoImport: false, - } + autoImport: false + }, + esbuild: { + options: { + target: "esnext", + }, + }, }); diff --git a/package.json b/package.json index 4136d61..601787f 100644 --- a/package.json +++ b/package.json @@ -23,15 +23,20 @@ "dependencies": { "@ai-sdk/openai": "^1.3.22", "@ai-sdk/openai-compatible": "^0.2.14", + "@date-fns/tz": "^1.2.0", "@hey-api/client-fetch": "^0.10.1", "@mem0/vercel-ai-provider": "^1.0.5", "@openrouter/ai-sdk-provider": "^0.4.6", "@t3-oss/env-core": "^0.13.4", "@vercel/functions": "^2.0.0", "ai": "^4.3.16", + "compromise": "^14.14.4", + "date-fns": "^4.1.0", "discourse2-chat": "^1.1.5", "exa-js": "^1.4.10", "nitropack": "latest", + "pino": "^9.7.0", + "pino-pretty": "^13.0.0", "tsx": "^4.19.4", "zod": "^3.24.2" }, diff --git a/server/api/events/index.post.ts b/server/api/events/index.post.ts index 3f9fab4..f5a3efd 100644 --- a/server/api/events/index.post.ts +++ b/server/api/events/index.post.ts @@ -5,6 +5,7 @@ import { getBotUser, verifyRequest } from '~/utils/discourse'; import type { WebhookChatMessage, WebhookNotification } from '~/types'; import { defineEventHandler } from 'h3'; import { getRequestHeader, readBody } from 'h3'; +import logger from "~/lib/logger"; export default defineEventHandler(async request => { const rawBody = JSON.stringify(await readBody(request)); @@ -25,7 +26,7 @@ export default defineEventHandler(async request => { payload.notification?.notification_type === 29 && payload.notification?.user_id === botUser.id ) { - console.log('processing AI request from notification'); + logger.info('processing AI request from notification'); waitUntil( handleNewAppMention( payload?.notification as WebhookNotification, diff --git a/server/utils/ai/prompts.ts b/server/lib/ai/prompts.ts similarity index 100% rename from server/utils/ai/prompts.ts rename to server/lib/ai/prompts.ts diff --git a/server/utils/ai/providers.ts b/server/lib/ai/providers.ts similarity index 100% rename from server/utils/ai/providers.ts rename to server/lib/ai/providers.ts diff --git a/server/lib/logger.ts b/server/lib/logger.ts new file mode 100644 index 0000000..248ef2c --- /dev/null +++ b/server/lib/logger.ts @@ -0,0 +1,40 @@ +import { pino } from "pino"; +import { mkdir, access } from "node:fs/promises"; +import path from "node:path"; +import { constants } from "node:fs"; +import { env } from "~/env"; + +async function exists(path: string): Promise { + try { + await access(path, constants.F_OK); + return true; + } catch { + return false; + } +} + +const logDir = env.LOG_DIRECTORY ?? "logs"; + +if (!(await exists(logDir))) { + await mkdir(logDir, { recursive: true }); +} + +const transport = pino.transport({ + targets: [ + { + target: "pino/file", + options: { destination: path.join(logDir, "app.log") }, + }, + { + target: "pino-pretty", + }, + ], +}); + +export default pino( + { + level: env.LOG_LEVEL || "info", + timestamp: pino.stdTimeFunctions.isoTime, + }, + transport +); \ No newline at end of file diff --git a/server/utils/discourse.ts b/server/utils/discourse.ts index 862b806..32e2788 100644 --- a/server/utils/discourse.ts +++ b/server/utils/discourse.ts @@ -13,6 +13,7 @@ import type { GetSessionResponse } from '../../client/types.gen'; import type { WebhookChatMessage } from '../types'; import { env } from '~/env'; import { getRequestHeader, type EventHandlerRequest, type H3Event } from 'h3' +import logger from "~/lib/logger"; const signingSecret = env.DISCOURSE_SIGNING_SECRET; const url = env.DISCOURSE_URL; @@ -35,7 +36,7 @@ export function isValidDiscourseRequest({ const signatureHeader = getRequestHeader(request, 'X-Discourse-Event-Signature'); if (!signatureHeader || !signatureHeader.startsWith('sha256=')) { - console.log('Missing or malformed signature'); + logger.info('Missing or malformed signature'); return false; } @@ -51,7 +52,7 @@ export function isValidDiscourseRequest({ Buffer.from(computedHmac, 'utf8'), ); } catch (err) { - console.log('HMAC comparison failed:', err); + logger.info('HMAC comparison failed:', err); return false; } } diff --git a/server/utils/handle-app-mention.ts b/server/utils/handle-app-mention.ts index 40fe80d..040adf6 100644 --- a/server/utils/handle-app-mention.ts +++ b/server/utils/handle-app-mention.ts @@ -3,6 +3,7 @@ import type { GetSessionResponse } from '../../client/types.gen'; import type { WebhookNotification } from '~/types'; import { generateResponse } from './generate-response'; import { getMessages, getThreadMessages } from './discourse'; +import logger from "~/lib/logger"; const updateStatusUtil = async ( initialStatus: string, @@ -43,11 +44,11 @@ export async function handleNewAppMention( event: WebhookNotification, botUser: GetSessionResponse['current_user'], ) { - console.log('Handling app mention'); + logger.info('Handling app mention'); if (!botUser) return; if (event.data?.mentioned_by_username === botUser.username) { - console.log('Skipping app mention'); + logger.info('Skipping app mention'); return; } @@ -74,5 +75,5 @@ export async function handleNewAppMention( // await updateMessage(result); // } - console.log(`replied to ${event.data?.mentioned_by_username}: ${result}`); + logger.info(`replied to ${event.data?.mentioned_by_username}: ${result}`); } diff --git a/server/utils/handle-messages.ts b/server/utils/handle-messages.ts index fd5262c..923358f 100644 --- a/server/utils/handle-messages.ts +++ b/server/utils/handle-messages.ts @@ -3,6 +3,7 @@ import { keywords } from '~/config'; import type { WebhookChatMessage } from '~/types'; import { generateResponse } from './generate-response'; import { getMessages, getThreadMessages, updateStatusUtil } from './discourse'; +import logger from "~/lib/logger"; // export async function assistantThreadMessage( // event: AssistantThreadStartedEvent, @@ -59,7 +60,7 @@ export async function handleNewAssistantMessage( if (!isDM && !hasKeyword) return; - console.log('processing AI request from chat message'); + logger.info('processing AI request from chat message'); const updateStatus = await updateStatusUtil( 'is thinking...', @@ -73,5 +74,5 @@ export async function handleNewAssistantMessage( const result = await generateResponse(messages, updateStatus); await updateStatus(result); - console.log(`replied to ${event.message.user.username}: ${result}`); + logger.info(`replied to ${event.message.user.username}: ${result}`); } diff --git a/server/utils/time.ts b/server/utils/time.ts new file mode 100644 index 0000000..c6cb51d --- /dev/null +++ b/server/utils/time.ts @@ -0,0 +1,11 @@ +import { format } from "date-fns"; +import { TZDate } from "@date-fns/tz"; + +export function getTimeInCity( + timezone: string, + formatStr = "yyyy-MM-dd HH:mm:ssXXX" +): string { + const now = new Date(); + const zonedDate = new TZDate(now, timezone); + return format(zonedDate, formatStr); +} \ No newline at end of file diff --git a/server/utils/tokenize-messages.ts b/server/utils/tokenize-messages.ts new file mode 100644 index 0000000..0171f28 --- /dev/null +++ b/server/utils/tokenize-messages.ts @@ -0,0 +1,15 @@ +import nlp from 'compromise'; + +export function sentences(text: string): string[] { + return nlp(text).sentences().out('array').map((s: string) => s.trim()); +} + +export function normalize(input: string[]): string[] { + return input.map((s) => + s + .replace(/\b\w+(?:\s*\([^)]+\))*:\s*/gi, "") + .toLowerCase() + .trim() + .replace(/[.,!?]+$/g, "") + ); +} \ No newline at end of file From 1fb40b73ccccaf1ae09e2b099ed847d9ec952db3 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Sat, 24 May 2025 12:08:33 +0000 Subject: [PATCH 28/50] feat: implement event handling for Discourse notifications and chat messages --- server/api/{events/index.post.ts => events.post.ts} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename server/api/{events/index.post.ts => events.post.ts} (94%) diff --git a/server/api/events/index.post.ts b/server/api/events.post.ts similarity index 94% rename from server/api/events/index.post.ts rename to server/api/events.post.ts index f5a3efd..16d8d88 100644 --- a/server/api/events/index.post.ts +++ b/server/api/events.post.ts @@ -1,4 +1,3 @@ -import { waitUntil } from '@vercel/functions'; import { handleNewAppMention } from '~/utils/handle-app-mention'; import { handleNewAssistantMessage } from '~/utils/handle-messages'; import { getBotUser, verifyRequest } from '~/utils/discourse'; @@ -6,6 +5,7 @@ import type { WebhookChatMessage, WebhookNotification } from '~/types'; import { defineEventHandler } from 'h3'; import { getRequestHeader, readBody } from 'h3'; import logger from "~/lib/logger"; +import { events } from "~/events"; export default defineEventHandler(async request => { const rawBody = JSON.stringify(await readBody(request)); @@ -27,7 +27,7 @@ export default defineEventHandler(async request => { payload.notification?.user_id === botUser.id ) { logger.info('processing AI request from notification'); - waitUntil( + request.waitUntil( handleNewAppMention( payload?.notification as WebhookNotification, botUser, @@ -37,7 +37,7 @@ export default defineEventHandler(async request => { event.type === 'chat_message' && payload?.chat_message.message.user.id !== botUser.id ) { - waitUntil( + request.waitUntil( handleNewAssistantMessage( payload?.chat_message as WebhookChatMessage, botUser, From da94345759ac61ba8a569cdc2654b3ea7946e280 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Sat, 24 May 2025 12:40:21 +0000 Subject: [PATCH 29/50] ev --- nitro.config.ts | 8 ++--- server/api/events.post.ts | 52 +++++++++++---------------- server/api/index.ts | 2 +- server/env.ts | 14 ++++---- server/events/index.ts | 5 +++ server/events/message-create/index.ts | 51 ++++++++++++++++++++++++++ server/lib/ai/prompts.ts | 14 ++++---- server/lib/ai/providers.ts | 18 +++++----- server/lib/logger.ts | 24 ++++++------- server/utils/discourse.ts | 13 ++++--- server/utils/handle-app-mention.ts | 6 ++-- server/utils/handle-messages.ts | 6 ++-- server/utils/time.ts | 8 ++--- server/utils/tokenize-messages.ts | 11 +++--- tsconfig.json | 4 +-- 15 files changed, 146 insertions(+), 90 deletions(-) create mode 100644 server/events/index.ts create mode 100644 server/events/message-create/index.ts diff --git a/nitro.config.ts b/nitro.config.ts index 999b684..b6694f7 100644 --- a/nitro.config.ts +++ b/nitro.config.ts @@ -1,14 +1,14 @@ //https://nitro.unjs.io/config export default defineNitroConfig({ - srcDir: "server", - preset: "bun", + srcDir: 'server', + preset: 'bun', compatibilityDate: '2025-05-24', imports: { - autoImport: false + autoImport: false, }, esbuild: { options: { - target: "esnext", + target: 'esnext', }, }, }); diff --git a/server/api/events.post.ts b/server/api/events.post.ts index 16d8d88..52f973f 100644 --- a/server/api/events.post.ts +++ b/server/api/events.post.ts @@ -1,14 +1,15 @@ -import { handleNewAppMention } from '~/utils/handle-app-mention'; -import { handleNewAssistantMessage } from '~/utils/handle-messages'; import { getBotUser, verifyRequest } from '~/utils/discourse'; -import type { WebhookChatMessage, WebhookNotification } from '~/types'; -import { defineEventHandler } from 'h3'; -import { getRequestHeader, readBody } from 'h3'; -import logger from "~/lib/logger"; -import { events } from "~/events"; +import { + defineEventHandler, + readRawBody, + getRequestHeader, + createError, +} from 'h3'; +import logger from '~/lib/logger'; +import { events } from '~/events'; -export default defineEventHandler(async request => { - const rawBody = JSON.stringify(await readBody(request)); +export default defineEventHandler(async (request) => { + const rawBody = (await readRawBody(request)) ?? '{}'; const payload = JSON.parse(rawBody); await verifyRequest({ request, rawBody }); @@ -21,33 +22,22 @@ export default defineEventHandler(async request => { id: getRequestHeader(request, 'X-Discourse-Event-Id'), }; - if ( - event.type === 'notification' && - payload.notification?.notification_type === 29 && - payload.notification?.user_id === botUser.id - ) { - logger.info('processing AI request from notification'); + const eventHandler = Object.values(events).find( + (handler) => handler.name === event.type, + ); + if (eventHandler) { request.waitUntil( - handleNewAppMention( - payload?.notification as WebhookNotification, - botUser, - ), - ); - } else if ( - event.type === 'chat_message' && - payload?.chat_message.message.user.id !== botUser.id - ) { - request.waitUntil( - handleNewAssistantMessage( - payload?.chat_message as WebhookChatMessage, - botUser, - ), + eventHandler.execute(payload[eventHandler.name], botUser), ); } - return new Response('Success!', { status: 200 }); + return 'Success!'; } catch (error) { console.error('Error generating response', error); - return new Response('Error generating response', { status: 500 }); + throw createError({ + status: 500, + statusMessage: 'Internal Server Error', + message: 'Error generating response', + }); } }); diff --git a/server/api/index.ts b/server/api/index.ts index f06cb3d..1fa8f2a 100644 --- a/server/api/index.ts +++ b/server/api/index.ts @@ -4,5 +4,5 @@ export default defineEventHandler((event) => { return { status: 'ok', message: 'Discourse API is running', - } + }; }); diff --git a/server/env.ts b/server/env.ts index 5886e16..3b7867b 100644 --- a/server/env.ts +++ b/server/env.ts @@ -1,27 +1,27 @@ -import { createEnv } from "@t3-oss/env-core"; -import { z } from "zod"; +import { createEnv } from '@t3-oss/env-core'; +import { z } from 'zod'; export const env = createEnv({ server: { // Discourse DISCOURSE_BOT_TOKEN: z.string().min(1), - DISCOURSE_SIGNING_SECRET: z.string().min(1), + DISCOURSE_SIGNING_SECRET: z.string().min(1), DISCOURSE_URL: z.string().url().min(1), // AI OPENAI_API_KEY: z.string().optional(), HACKCLUB_API_KEY: z.string().optional(), OPENROUTER_API_KEY: z.string().optional(), // Logging - LOG_DIRECTORY: z.string().optional().default("logs"), + LOG_DIRECTORY: z.string().optional().default('logs'), LOG_LEVEL: z - .enum(["debug", "info", "warn", "error"]) + .enum(['debug', 'info', 'warn', 'error']) .optional() - .default("info"), + .default('info'), // Redis UPSTASH_REDIS_REST_URL: z.string().min(1).url(), UPSTASH_REDIS_REST_TOKEN: z.string().min(1), // Mem0 - MEM0_API_KEY: z.string().min(1).startsWith("m0-"), + MEM0_API_KEY: z.string().min(1).startsWith('m0-'), }, /** diff --git a/server/events/index.ts b/server/events/index.ts new file mode 100644 index 0000000..f5b1799 --- /dev/null +++ b/server/events/index.ts @@ -0,0 +1,5 @@ +import * as messageCreate from './message-create'; + +export const events = { + messageCreate, +}; diff --git a/server/events/message-create/index.ts b/server/events/message-create/index.ts new file mode 100644 index 0000000..2fc55b9 --- /dev/null +++ b/server/events/message-create/index.ts @@ -0,0 +1,51 @@ +import { + generateResponse, + getMessages, + getThreadMessages, + updateStatusUtil, +} from '#imports'; +import { keywords } from '~/config'; +import logger from '~/lib/logger'; +import { WebhookChatMessage } from '~/types'; +import { GetSessionResponse } from '~~/client'; + +export const name = 'chat_message'; +export const once = false; + +export async function execute( + payload: WebhookChatMessage, + botUser: GetSessionResponse['current_user'], +) { + if (!botUser || payload.message.user.id === botUser.id) return; + + const { channel } = payload; + const { message: content } = payload.message; + const thread_id = payload.message.thread_id ?? null; + + const isDM = channel.chatable_type === 'DirectMessage'; + const myDMId = botUser.custom_fields?.last_chat_channel_id; + const isOwnDM = isDM && channel.id === myDMId; + const hasKeyword = keywords.some((kw) => + content.toLowerCase().includes(kw.toLowerCase()), + ); + + if (isDM && !isOwnDM) return; + + if (!isDM && !hasKeyword) return; + + logger.info('processing AI request from chat message'); + + const updateStatus = await updateStatusUtil( + 'is thinking...', + payload, + thread_id, + ); + + const messages = thread_id + ? await getThreadMessages(channel.id as number, botUser, thread_id) + : await getMessages(channel.id as number, botUser); + const result = await generateResponse(messages, updateStatus); + await updateStatus(result); + + logger.info(`replied to ${payload.message.user.username}: ${result}`); +} diff --git a/server/lib/ai/prompts.ts b/server/lib/ai/prompts.ts index 63ce234..1416939 100644 --- a/server/lib/ai/prompts.ts +++ b/server/lib/ai/prompts.ts @@ -1,9 +1,9 @@ -import type { Geo } from "@vercel/functions"; +import type { Geo } from '@vercel/functions'; export interface RequestHints { time: string; - city: Geo["city"]; - country: Geo["country"]; + city: Geo['city']; + country: Geo['country']; server: string; channel: string; joined: number; @@ -60,7 +60,7 @@ export const artifactsPrompt = `\ export const systemPrompt = ({ selectedChatModel, requestHints, - memories + memories, }: { selectedChatModel: string; requestHints: RequestHints; @@ -68,9 +68,9 @@ export const systemPrompt = ({ }) => { const requestPrompt = getRequestPromptFromHints(requestHints); - if (selectedChatModel === "chat-model") { + if (selectedChatModel === 'chat-model') { return `${regularPrompt}\n\n${requestPrompt}\n\n${memories}`; - } else if (selectedChatModel === "artifacts-model") { + } else if (selectedChatModel === 'artifacts-model') { return `${regularPrompt}\n\n${requestPrompt}\n\n${artifactsPrompt}\n\n${memories}`; } -}; \ No newline at end of file +}; diff --git a/server/lib/ai/providers.ts b/server/lib/ai/providers.ts index 7d1a45a..87dbbfc 100644 --- a/server/lib/ai/providers.ts +++ b/server/lib/ai/providers.ts @@ -2,17 +2,17 @@ import { customProvider, extractReasoningMiddleware, wrapLanguageModel, -} from "ai"; +} from 'ai'; -import { createOpenRouter } from "@openrouter/ai-sdk-provider"; -import { createOpenAICompatible } from "@ai-sdk/openai-compatible"; -import { env } from "~/env"; -import { createMem0 } from "@mem0/vercel-ai-provider"; +import { createOpenRouter } from '@openrouter/ai-sdk-provider'; +import { createOpenAICompatible } from '@ai-sdk/openai-compatible'; +import { env } from '~/env'; +import { createMem0 } from '@mem0/vercel-ai-provider'; const hackclub = createOpenAICompatible({ - name: "hackclub", + name: 'hackclub', apiKey: env.HACKCLUB_API_KEY, - baseURL: "https://ai.hackclub.com", + baseURL: 'https://ai.hackclub.com', }); const openrouter = createOpenRouter({ @@ -21,8 +21,8 @@ const openrouter = createOpenRouter({ export const myProvider = customProvider({ languageModels: { - "chat-model": hackclub("llama-3.3-70b-versatile"), - "artifact-model": hackclub("llama-3.3-70b-versatile"), + 'chat-model': hackclub('llama-3.3-70b-versatile'), + 'artifact-model': hackclub('llama-3.3-70b-versatile'), }, imageModels: { // 'small-model': openai.image('dall-e-2'), diff --git a/server/lib/logger.ts b/server/lib/logger.ts index 248ef2c..594781e 100644 --- a/server/lib/logger.ts +++ b/server/lib/logger.ts @@ -1,8 +1,8 @@ -import { pino } from "pino"; -import { mkdir, access } from "node:fs/promises"; -import path from "node:path"; -import { constants } from "node:fs"; -import { env } from "~/env"; +import { pino } from 'pino'; +import { mkdir, access } from 'node:fs/promises'; +import path from 'node:path'; +import { constants } from 'node:fs'; +import { env } from '~/env'; async function exists(path: string): Promise { try { @@ -13,7 +13,7 @@ async function exists(path: string): Promise { } } -const logDir = env.LOG_DIRECTORY ?? "logs"; +const logDir = env.LOG_DIRECTORY ?? 'logs'; if (!(await exists(logDir))) { await mkdir(logDir, { recursive: true }); @@ -22,19 +22,19 @@ if (!(await exists(logDir))) { const transport = pino.transport({ targets: [ { - target: "pino/file", - options: { destination: path.join(logDir, "app.log") }, + target: 'pino/file', + options: { destination: path.join(logDir, 'app.log') }, }, { - target: "pino-pretty", + target: 'pino-pretty', }, ], }); export default pino( { - level: env.LOG_LEVEL || "info", + level: env.LOG_LEVEL || 'info', timestamp: pino.stdTimeFunctions.isoTime, }, - transport -); \ No newline at end of file + transport, +); diff --git a/server/utils/discourse.ts b/server/utils/discourse.ts index 32e2788..698fa8b 100644 --- a/server/utils/discourse.ts +++ b/server/utils/discourse.ts @@ -12,8 +12,8 @@ import { import type { GetSessionResponse } from '../../client/types.gen'; import type { WebhookChatMessage } from '../types'; import { env } from '~/env'; -import { getRequestHeader, type EventHandlerRequest, type H3Event } from 'h3' -import logger from "~/lib/logger"; +import { getRequestHeader, type EventHandlerRequest, type H3Event } from 'h3'; +import logger from '~/lib/logger'; const signingSecret = env.DISCOURSE_SIGNING_SECRET; const url = env.DISCOURSE_URL; @@ -33,7 +33,10 @@ export function isValidDiscourseRequest({ request: H3Event; rawBody: string; }): boolean { - const signatureHeader = getRequestHeader(request, 'X-Discourse-Event-Signature'); + const signatureHeader = getRequestHeader( + request, + 'X-Discourse-Event-Signature', + ); if (!signatureHeader || !signatureHeader.startsWith('sha256=')) { logger.info('Missing or malformed signature'); @@ -86,7 +89,9 @@ export const updateStatusUtil = async ( }); if (!res?.data || !res.data?.message_id) { - throw new Error(`Failed to post initial message, thread_id: ${thread_id}, ${JSON.stringify(res)}`); + throw new Error( + `Failed to post initial message, thread_id: ${thread_id}, ${JSON.stringify(res)}`, + ); } const initialMessage = res.data; diff --git a/server/utils/handle-app-mention.ts b/server/utils/handle-app-mention.ts index 040adf6..4b70fd6 100644 --- a/server/utils/handle-app-mention.ts +++ b/server/utils/handle-app-mention.ts @@ -3,7 +3,7 @@ import type { GetSessionResponse } from '../../client/types.gen'; import type { WebhookNotification } from '~/types'; import { generateResponse } from './generate-response'; import { getMessages, getThreadMessages } from './discourse'; -import logger from "~/lib/logger"; +import logger from '~/lib/logger'; const updateStatusUtil = async ( initialStatus: string, @@ -21,7 +21,9 @@ const updateStatusUtil = async ( }); if (!res?.data || !res.data?.message_id) { - throw new Error(`Failed to post initial message, thread_id: ${thread_id}, ${JSON.stringify(res)}`); + throw new Error( + `Failed to post initial message, thread_id: ${thread_id}, ${JSON.stringify(res)}`, + ); } const initialMessage = res.data; diff --git a/server/utils/handle-messages.ts b/server/utils/handle-messages.ts index 923358f..b19261e 100644 --- a/server/utils/handle-messages.ts +++ b/server/utils/handle-messages.ts @@ -3,7 +3,7 @@ import { keywords } from '~/config'; import type { WebhookChatMessage } from '~/types'; import { generateResponse } from './generate-response'; import { getMessages, getThreadMessages, updateStatusUtil } from './discourse'; -import logger from "~/lib/logger"; +import logger from '~/lib/logger'; // export async function assistantThreadMessage( // event: AssistantThreadStartedEvent, @@ -52,8 +52,8 @@ export async function handleNewAssistantMessage( const isDM = channel.chatable_type === 'DirectMessage'; const myDMId = botUser.custom_fields?.last_chat_channel_id; const isOwnDM = isDM && channel.id === myDMId; - const hasKeyword = keywords.some(kw => - content.toLowerCase().includes(kw.toLowerCase()) + const hasKeyword = keywords.some((kw) => + content.toLowerCase().includes(kw.toLowerCase()), ); if (isDM && !isOwnDM) return; diff --git a/server/utils/time.ts b/server/utils/time.ts index c6cb51d..2aca7a4 100644 --- a/server/utils/time.ts +++ b/server/utils/time.ts @@ -1,11 +1,11 @@ -import { format } from "date-fns"; -import { TZDate } from "@date-fns/tz"; +import { format } from 'date-fns'; +import { TZDate } from '@date-fns/tz'; export function getTimeInCity( timezone: string, - formatStr = "yyyy-MM-dd HH:mm:ssXXX" + formatStr = 'yyyy-MM-dd HH:mm:ssXXX', ): string { const now = new Date(); const zonedDate = new TZDate(now, timezone); return format(zonedDate, formatStr); -} \ No newline at end of file +} diff --git a/server/utils/tokenize-messages.ts b/server/utils/tokenize-messages.ts index 0171f28..6cb711c 100644 --- a/server/utils/tokenize-messages.ts +++ b/server/utils/tokenize-messages.ts @@ -1,15 +1,18 @@ import nlp from 'compromise'; export function sentences(text: string): string[] { - return nlp(text).sentences().out('array').map((s: string) => s.trim()); + return nlp(text) + .sentences() + .out('array') + .map((s: string) => s.trim()); } export function normalize(input: string[]): string[] { return input.map((s) => s - .replace(/\b\w+(?:\s*\([^)]+\))*:\s*/gi, "") + .replace(/\b\w+(?:\s*\([^)]+\))*:\s*/gi, '') .toLowerCase() .trim() - .replace(/[.,!?]+$/g, "") + .replace(/[.,!?]+$/g, ''), ); -} \ No newline at end of file +} diff --git a/tsconfig.json b/tsconfig.json index 5d7df53..2b518b1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,6 +2,6 @@ { "extends": "./.nitro/types/tsconfig.json", "compilerOptions": { - "strictNullChecks": true, - }, + "strictNullChecks": true + } } From adda7e0971c76f12033c2e7e1df1629de4eed7f2 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Sat, 24 May 2025 13:10:10 +0000 Subject: [PATCH 30/50] feat: reorganize discourse utilities and enhance event handling for chat messages and notifications --- client/client.gen.ts | 2 +- client/sdk.gen.ts | 300 +++++++++++------------ server/api/events.post.ts | 7 +- server/events/message-create/index.ts | 22 +- server/events/notification/index.ts | 39 +++ server/lib/ai/prompts.ts | 3 +- server/lib/ai/providers.ts | 9 +- server/lib/logger.ts | 6 +- server/utils/discourse.ts | 208 ---------------- server/utils/discourse/client.ts | 11 + server/utils/discourse/index.ts | 4 + server/utils/discourse/messages.ts | 89 +++++++ server/utils/discourse/status.ts | 42 ++++ server/utils/discourse/user.ts | 21 ++ server/utils/discourse/verify-request.ts | 53 ++++ server/utils/handle-app-mention.ts | 81 ------ server/utils/handle-messages.ts | 78 ------ server/utils/time.ts | 2 +- 18 files changed, 432 insertions(+), 545 deletions(-) create mode 100644 server/events/notification/index.ts delete mode 100644 server/utils/discourse.ts create mode 100644 server/utils/discourse/client.ts create mode 100644 server/utils/discourse/index.ts create mode 100644 server/utils/discourse/messages.ts create mode 100644 server/utils/discourse/status.ts create mode 100644 server/utils/discourse/user.ts create mode 100644 server/utils/discourse/verify-request.ts delete mode 100644 server/utils/handle-app-mention.ts delete mode 100644 server/utils/handle-messages.ts diff --git a/client/client.gen.ts b/client/client.gen.ts index 5b3ffb1..0b50a63 100644 --- a/client/client.gen.ts +++ b/client/client.gen.ts @@ -1,12 +1,12 @@ // This file is auto-generated by @hey-api/openapi-ts -import type { ClientOptions } from './types.gen'; import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig, } from '@hey-api/client-fetch'; +import type { ClientOptions } from './types.gen'; /** * The `createClientConfig()` function will be called on client initialization diff --git a/client/sdk.gen.ts b/client/sdk.gen.ts index 988520c..d08a6eb 100644 --- a/client/sdk.gen.ts +++ b/client/sdk.gen.ts @@ -1,203 +1,203 @@ // This file is auto-generated by @hey-api/openapi-ts import { + type Client, type Options as ClientOptions, type TDataShape, - type Client, formDataBodySerializer, urlSearchParamsBodySerializer, } from '@hey-api/client-fetch'; +import { client as _heyApiClient } from './client.gen'; +import { + getMessagesResponseTransformer, + getThreadMessagesResponseTransformer, +} from './transformers.gen'; import type { - GetBackupsData, - GetBackupsResponse, - CreateBackupData, - CreateBackupResponse, - DownloadBackupData, - SendDownloadBackupEmailData, + AbortMultipartData, + AbortMultipartResponse, + ActivateUserData, + ActivateUserResponse, + AddGroupMembersData, + AddGroupMembersResponse, + AdminGetUserData, + AdminGetUserResponse, AdminListBadgesData, AdminListBadgesResponse, + AdminListUsersData, + AdminListUsersResponse, + AnonymizeUserData, + AnonymizeUserResponse, + BatchPresignMultipartPartsData, + BatchPresignMultipartPartsResponse, + BookmarkTopicData, + ChangePasswordData, + CompleteExternalUploadData, + CompleteExternalUploadResponse, + CompleteMultipartData, + CompleteMultipartResponse, + CreateBackupData, + CreateBackupResponse, CreateBadgeData, CreateBadgeResponse, - DeleteBadgeData, - UpdateBadgeData, - UpdateBadgeResponse, - ListCategoriesData, - ListCategoriesResponse, CreateCategoryData, CreateCategoryResponse, - UpdateCategoryData, - UpdateCategoryResponse, - ListCategoryTopicsData, - ListCategoryTopicsResponse, - GetCategoryData, - GetCategoryResponse, CreateGroupData, CreateGroupResponse, - DeleteGroupData, - DeleteGroupResponse, - GetGroupData, - GetGroupResponse, - UpdateGroupData, - UpdateGroupResponse, - RemoveGroupMembersData, - RemoveGroupMembersResponse, - ListGroupMembersData, - ListGroupMembersResponse, - AddGroupMembersData, - AddGroupMembersResponse, - ListGroupsData, - ListGroupsResponse, CreateInviteData, CreateInviteResponse, + CreateMultipartUploadData, + CreateMultipartUploadResponse, CreateMultipleInvitesData, CreateMultipleInvitesResponse, - GetNotificationsData, - GetNotificationsResponse, - MarkNotificationsAsReadData, - MarkNotificationsAsReadResponse, - ListPostsData, - ListPostsResponse, + CreateTagGroupData, + CreateTagGroupResponse, CreateTopicPostPmData, CreateTopicPostPmResponse, + CreateTopicTimerData, + CreateTopicTimerResponse, + CreateUploadData, + CreateUploadResponse, + CreateUserData, + CreateUserResponse, + DeactivateUserData, + DeactivateUserResponse, + DeleteBadgeData, + DeleteGroupData, + DeleteGroupResponse, DeletePostData, + DeleteUserData, + DeleteUserResponse, + DownloadBackupData, + EditMessageData, + EditMessageResponse, + GeneratePresignedPutData, + GeneratePresignedPutResponse, + GetBackupsData, + GetBackupsResponse, + GetCategoryData, + GetCategoryResponse, + GetGroupData, + GetGroupResponse, + GetMessagesData, + GetMessagesResponse, + GetNotificationsData, + GetNotificationsResponse, GetPostData, GetPostResponse, - UpdatePostData, - UpdatePostResponse, - PostRepliesData, - PostRepliesResponse, - LockPostData, - LockPostResponse, - PerformPostActionData, - PerformPostActionResponse, - ListUserPrivateMessagesData, - ListUserPrivateMessagesResponse, - GetUserSentPrivateMessagesData, - GetUserSentPrivateMessagesResponse, - SearchData, - SearchResponse, - GetSiteData, - GetSiteResponse, + GetSessionData, + GetSessionResponse, GetSiteBasicInfoData, GetSiteBasicInfoResponse, - ListTagGroupsData, - ListTagGroupsResponse, - CreateTagGroupData, - CreateTagGroupResponse, + GetSiteData, + GetSiteResponse, + GetSpecificPostsFromTopicData, + GetSpecificPostsFromTopicResponse, + GetTagData, GetTagGroupData, GetTagGroupResponse, - UpdateTagGroupData, - UpdateTagGroupResponse, - ListTagsData, - ListTagsResponse, - GetTagData, GetTagResponse, - GetSpecificPostsFromTopicData, - GetSpecificPostsFromTopicResponse, - RemoveTopicData, + GetThreadData, + GetThreadMessagesData, + GetThreadMessagesResponse, + GetThreadResponse, + GetTopicByExternalIdData, GetTopicData, GetTopicResponse, - UpdateTopicData, - UpdateTopicResponse, - InviteToTopicData, - InviteToTopicResponse, + GetUserCardData, + GetUserCardResponse, + GetUserData, + GetUserEmailsData, + GetUserEmailsResponse, + GetUserExternalIdData, + GetUserExternalIdResponse, + GetUserIdentiyProviderExternalIdData, + GetUserIdentiyProviderExternalIdResponse, + GetUserResponse, + GetUserSentPrivateMessagesData, + GetUserSentPrivateMessagesResponse, InviteGroupToTopicData, InviteGroupToTopicResponse, - BookmarkTopicData, - UpdateTopicStatusData, - UpdateTopicStatusResponse, + InviteToTopicData, + InviteToTopicResponse, + ListCategoriesData, + ListCategoriesResponse, + ListCategoryTopicsData, + ListCategoryTopicsResponse, + ListGroupMembersData, + ListGroupMembersResponse, + ListGroupsData, + ListGroupsResponse, ListLatestTopicsData, ListLatestTopicsResponse, + ListPostsData, + ListPostsResponse, + ListTagGroupsData, + ListTagGroupsResponse, + ListTagsData, + ListTagsResponse, ListTopTopicsData, ListTopTopicsResponse, - SetNotificationLevelData, - SetNotificationLevelResponse, - UpdateTopicTimestampData, - UpdateTopicTimestampResponse, - CreateTopicTimerData, - CreateTopicTimerResponse, - GetTopicByExternalIdData, - CreateUploadData, - CreateUploadResponse, - GeneratePresignedPutData, - GeneratePresignedPutResponse, - CompleteExternalUploadData, - CompleteExternalUploadResponse, - CreateMultipartUploadData, - CreateMultipartUploadResponse, - BatchPresignMultipartPartsData, - BatchPresignMultipartPartsResponse, - AbortMultipartData, - AbortMultipartResponse, - CompleteMultipartData, - CompleteMultipartResponse, + ListUserActionsData, + ListUserActionsResponse, ListUserBadgesData, ListUserBadgesResponse, - CreateUserData, - CreateUserResponse, - GetUserData, - GetUserResponse, - UpdateUserData, - UpdateUserResponse, - GetUserExternalIdData, - GetUserExternalIdResponse, - GetUserIdentiyProviderExternalIdData, - GetUserIdentiyProviderExternalIdResponse, - UpdateAvatarData, - UpdateAvatarResponse, - UpdateEmailData, - UpdateUsernameData, + ListUserPrivateMessagesData, + ListUserPrivateMessagesResponse, ListUsersPublicData, ListUsersPublicResponse, - DeleteUserData, - DeleteUserResponse, - AdminGetUserData, - AdminGetUserResponse, - ActivateUserData, - ActivateUserResponse, - DeactivateUserData, - DeactivateUserResponse, - SuspendUserData, - SuspendUserResponse, - SilenceUserData, - SilenceUserResponse, - AnonymizeUserData, - AnonymizeUserResponse, + LockPostData, + LockPostResponse, LogOutUserData, LogOutUserResponse, + MarkNotificationsAsReadData, + MarkNotificationsAsReadResponse, + PerformPostActionData, + PerformPostActionResponse, + PostRepliesData, + PostRepliesResponse, + ReactToMessageData, + ReactToMessageResponse, RefreshGravatarData, RefreshGravatarResponse, - AdminListUsersData, - AdminListUsersResponse, - ListUserActionsData, - ListUserActionsResponse, - SendPasswordResetEmailData, - SendPasswordResetEmailResponse, - ChangePasswordData, - GetUserEmailsData, - GetUserEmailsResponse, + RemoveGroupMembersData, + RemoveGroupMembersResponse, + RemoveTopicData, + SearchData, + SearchResponse, + SendDownloadBackupEmailData, SendMessageData, SendMessageResponse, - GetThreadData, - GetThreadResponse, - EditMessageData, - EditMessageResponse, - GetMessagesData, - GetMessagesResponse, - GetThreadMessagesData, - GetThreadMessagesResponse, - ReactToMessageData, - ReactToMessageResponse, - GetUserCardData, - GetUserCardResponse, - GetSessionData, - GetSessionResponse, + SendPasswordResetEmailData, + SendPasswordResetEmailResponse, + SetNotificationLevelData, + SetNotificationLevelResponse, + SilenceUserData, + SilenceUserResponse, + SuspendUserData, + SuspendUserResponse, + UpdateAvatarData, + UpdateAvatarResponse, + UpdateBadgeData, + UpdateBadgeResponse, + UpdateCategoryData, + UpdateCategoryResponse, + UpdateEmailData, + UpdateGroupData, + UpdateGroupResponse, + UpdatePostData, + UpdatePostResponse, + UpdateTagGroupData, + UpdateTagGroupResponse, + UpdateTopicData, + UpdateTopicResponse, + UpdateTopicStatusData, + UpdateTopicStatusResponse, + UpdateTopicTimestampData, + UpdateTopicTimestampResponse, + UpdateUserData, + UpdateUserResponse, + UpdateUsernameData, } from './types.gen'; -import { client as _heyApiClient } from './client.gen'; -import { - getMessagesResponseTransformer, - getThreadMessagesResponseTransformer, -} from './transformers.gen'; export type Options< TData extends TDataShape = TDataShape, diff --git a/server/api/events.post.ts b/server/api/events.post.ts index 52f973f..f1b407b 100644 --- a/server/api/events.post.ts +++ b/server/api/events.post.ts @@ -1,12 +1,11 @@ -import { getBotUser, verifyRequest } from '~/utils/discourse'; import { + createError, defineEventHandler, - readRawBody, getRequestHeader, - createError, + readRawBody, } from 'h3'; -import logger from '~/lib/logger'; import { events } from '~/events'; +import { getBotUser, verifyRequest } from '~/utils/discourse'; export default defineEventHandler(async (request) => { const rawBody = (await readRawBody(request)) ?? '{}'; diff --git a/server/events/message-create/index.ts b/server/events/message-create/index.ts index 2fc55b9..65aa791 100644 --- a/server/events/message-create/index.ts +++ b/server/events/message-create/index.ts @@ -1,13 +1,13 @@ +import { keywords } from '~/config'; +import logger from '~/lib/logger'; +import type { WebhookChatMessage } from '~/types'; +import type { GetSessionResponse } from '~~/client'; import { - generateResponse, getMessages, getThreadMessages, - updateStatusUtil, -} from '#imports'; -import { keywords } from '~/config'; -import logger from '~/lib/logger'; -import { WebhookChatMessage } from '~/types'; -import { GetSessionResponse } from '~~/client'; +} from '~/utils/discourse'; +import { updateStatus } from '~/utils/discourse'; +import { generateResponse } from '~/utils/generate-response'; export const name = 'chat_message'; export const once = false; @@ -35,17 +35,17 @@ export async function execute( logger.info('processing AI request from chat message'); - const updateStatus = await updateStatusUtil( + const updateMessage = await updateStatus( 'is thinking...', - payload, + payload?.channel?.id, thread_id, ); const messages = thread_id ? await getThreadMessages(channel.id as number, botUser, thread_id) : await getMessages(channel.id as number, botUser); - const result = await generateResponse(messages, updateStatus); - await updateStatus(result); + const result = await generateResponse(messages, updateMessage); + await updateMessage(result); logger.info(`replied to ${payload.message.user.username}: ${result}`); } diff --git a/server/events/notification/index.ts b/server/events/notification/index.ts new file mode 100644 index 0000000..6a499d1 --- /dev/null +++ b/server/events/notification/index.ts @@ -0,0 +1,39 @@ +import logger from '~/lib/logger'; +import type { WebhookNotification } from '~/types'; +import type { GetSessionResponse } from '~~/client/types.gen'; +import { getMessages, getThreadMessages, updateStatus } from '~/utils/discourse'; +import { generateResponse } from '~/utils/generate-response'; + +export const name = 'notification'; +export const once = false; + +export async function execute( + payload: WebhookNotification, + botUser: GetSessionResponse['current_user'], +) { + logger.info('Handling app mention'); + + if (!botUser) return; + if (!(payload?.notification_type === 29 && payload?.user_id === botUser.id)) return; + if (payload.data?.mentioned_by_username === botUser.username) { + logger.info('Skipping app mention'); + return; + } + + const { chat_channel_id: channel_id } = payload?.data; + const thread_id = (payload?.data?.chat_thread_id as number) ?? undefined; + const updateMessage = await updateStatus( + 'is thinking...', + channel_id as number, + thread_id, + ); + + const messages = thread_id + ? await getThreadMessages(channel_id as number, botUser, thread_id) + : await getMessages(channel_id as number, botUser); + const result = await generateResponse(messages, updateMessage); + + await updateMessage(result); + + logger.info(`replied to ${payload.data?.mentioned_by_username}: ${result}`); +} diff --git a/server/lib/ai/prompts.ts b/server/lib/ai/prompts.ts index 1416939..021679c 100644 --- a/server/lib/ai/prompts.ts +++ b/server/lib/ai/prompts.ts @@ -70,7 +70,8 @@ export const systemPrompt = ({ if (selectedChatModel === 'chat-model') { return `${regularPrompt}\n\n${requestPrompt}\n\n${memories}`; - } else if (selectedChatModel === 'artifacts-model') { + } + if (selectedChatModel === 'artifacts-model') { return `${regularPrompt}\n\n${requestPrompt}\n\n${artifactsPrompt}\n\n${memories}`; } }; diff --git a/server/lib/ai/providers.ts b/server/lib/ai/providers.ts index 87dbbfc..4434ca8 100644 --- a/server/lib/ai/providers.ts +++ b/server/lib/ai/providers.ts @@ -1,13 +1,8 @@ -import { - customProvider, - extractReasoningMiddleware, - wrapLanguageModel, -} from 'ai'; +import { customProvider } from 'ai'; -import { createOpenRouter } from '@openrouter/ai-sdk-provider'; import { createOpenAICompatible } from '@ai-sdk/openai-compatible'; +import { createOpenRouter } from '@openrouter/ai-sdk-provider'; import { env } from '~/env'; -import { createMem0 } from '@mem0/vercel-ai-provider'; const hackclub = createOpenAICompatible({ name: 'hackclub', diff --git a/server/lib/logger.ts b/server/lib/logger.ts index 594781e..d8f1012 100644 --- a/server/lib/logger.ts +++ b/server/lib/logger.ts @@ -1,7 +1,7 @@ -import { pino } from 'pino'; -import { mkdir, access } from 'node:fs/promises'; -import path from 'node:path'; import { constants } from 'node:fs'; +import { access, mkdir } from 'node:fs/promises'; +import path from 'node:path'; +import { pino } from 'pino'; import { env } from '~/env'; async function exists(path: string): Promise { diff --git a/server/utils/discourse.ts b/server/utils/discourse.ts deleted file mode 100644 index 698fa8b..0000000 --- a/server/utils/discourse.ts +++ /dev/null @@ -1,208 +0,0 @@ -import * as crypto from 'node:crypto'; -import type { CoreMessage } from 'ai'; -import { client } from '../../client/client.gen'; -import { - getThread as _getThread, - editMessage, - getMessages as _getMessages, - getThreadMessages as _getThreadMessages, - getSession, - sendMessage, -} from '../../client/sdk.gen'; -import type { GetSessionResponse } from '../../client/types.gen'; -import type { WebhookChatMessage } from '../types'; -import { env } from '~/env'; -import { getRequestHeader, type EventHandlerRequest, type H3Event } from 'h3'; -import logger from '~/lib/logger'; - -const signingSecret = env.DISCOURSE_SIGNING_SECRET; -const url = env.DISCOURSE_URL; - -client.setConfig({ - baseUrl: url, - headers: { - 'Api-Key': env.DISCOURSE_BOT_TOKEN, - }, -}); - -// See https://api.slack.com/authentication/verifying-requests-from-slack -export function isValidDiscourseRequest({ - request, - rawBody, -}: { - request: H3Event; - rawBody: string; -}): boolean { - const signatureHeader = getRequestHeader( - request, - 'X-Discourse-Event-Signature', - ); - - if (!signatureHeader || !signatureHeader.startsWith('sha256=')) { - logger.info('Missing or malformed signature'); - return false; - } - - const receivedHmac = signatureHeader.slice(7); // remove "sha256=" - const computedHmac = crypto - .createHmac('sha256', signingSecret) - .update(rawBody) - .digest('hex'); - - try { - return crypto.timingSafeEqual( - Buffer.from(receivedHmac, 'utf8'), - Buffer.from(computedHmac, 'utf8'), - ); - } catch (err) { - logger.info('HMAC comparison failed:', err); - return false; - } -} - -export const verifyRequest = async ({ - request, - rawBody, -}: { - request: H3Event; - rawBody: string; -}) => { - const validRequest = await isValidDiscourseRequest({ request, rawBody }); - if (!validRequest) { - return new Response('Invalid request', { status: 400 }); - } -}; - -export const updateStatusUtil = async ( - initialStatus: string, - event: WebhookChatMessage, - thread_id?: number | null, -) => { - const res = await sendMessage({ - path: { - channel_id: event.channel?.id, - }, - body: { - message: initialStatus, - thread_id: thread_id ?? undefined, - }, - }); - - if (!res?.data || !res.data?.message_id) { - throw new Error( - `Failed to post initial message, thread_id: ${thread_id}, ${JSON.stringify(res)}`, - ); - } - - const initialMessage = res.data; - - const updateMessage = async (status: string) => { - await editMessage({ - path: { - channel_id: event.channel?.id, - message_id: initialMessage.message_id!, - }, - body: { - message: status, - }, - }); - }; - return updateMessage; -}; - -export async function getMessages( - channel_id: number, - botUser: GetSessionResponse['current_user'], -): Promise { - const res = await _getMessages({ - path: { - channel_id, - }, - query: { - page_size: 50, - }, - }); - - if (!botUser) throw new Error('botUser is undefined'); - if (!res?.data?.messages) throw new Error('No messages found in thread'); - const { messages } = res.data; - - const result = messages - .map((message) => { - const isBot = message.user?.id === botUser.id; - if (!message.message) return null; - - // For app mentions, remove the mention prefix - // For DM messages, keep the full text - let content = message.message; - if (!isBot && content.includes(`<@${botUser.username}>`)) { - content = content.replace(`<@${botUser.username}> `, ''); - } - - return { - role: isBot ? 'assistant' : 'user', - content: `${message.user?.name} (${message.user?.username}): ${content}`, - } as CoreMessage; - }) - .filter((msg): msg is CoreMessage => msg !== null); - - return result; -} - -export async function getThreadMessages( - channel_id: number, - botUser: GetSessionResponse['current_user'], - thread_id: number, -): Promise { - const res = await _getThreadMessages({ - path: { - channel_id, - thread_id: thread_id, - }, - query: { - page_size: 50, - }, - }); - - if (!botUser) throw new Error('botUser is undefined'); - if (!res?.data?.messages) throw new Error('No messages found in thread'); - const { messages } = res.data; - - const result = messages - .map((message) => { - const isBot = message.user?.id === botUser.id; - if (!message.message) return null; - - // For app mentions, remove the mention prefix - // For DM messages, keep the full text - let content = message.message; - if (!isBot && content.includes(`<@${botUser.username}>`)) { - content = content.replace(`<@${botUser.username}> `, ''); - } - - return { - role: isBot ? 'assistant' : 'user', - content: `${message.user?.username}: ${content}`, - } as CoreMessage; - }) - .filter((msg): msg is CoreMessage => msg !== null); - - return result; -} - -export const getBotUser = async () => { - // const { user_id: botUserId } = await client.auth.test(); - const res = await getSession(); - - if (!res?.data?.current_user) { - throw new Error('Session is undefined'); - } - - const { current_user: user } = res.data; - - if (!user) { - throw new Error('botUser is undefined'); - } - - return user; -}; diff --git a/server/utils/discourse/client.ts b/server/utils/discourse/client.ts new file mode 100644 index 0000000..d94853d --- /dev/null +++ b/server/utils/discourse/client.ts @@ -0,0 +1,11 @@ +import { createClient } from "@hey-api/client-fetch"; +import { env } from '~/env'; + +const url = env.DISCOURSE_URL; + +export const client = createClient({ + baseUrl: url, + headers: { + 'Api-Key': env.DISCOURSE_BOT_TOKEN, + }, +}); \ No newline at end of file diff --git a/server/utils/discourse/index.ts b/server/utils/discourse/index.ts new file mode 100644 index 0000000..824fa4c --- /dev/null +++ b/server/utils/discourse/index.ts @@ -0,0 +1,4 @@ +export * from './messages'; +export * from './status'; +export * from './verify-request'; +export * from './user'; \ No newline at end of file diff --git a/server/utils/discourse/messages.ts b/server/utils/discourse/messages.ts new file mode 100644 index 0000000..60560ad --- /dev/null +++ b/server/utils/discourse/messages.ts @@ -0,0 +1,89 @@ +import type { CoreMessage } from 'ai'; +import { + getMessages as _getMessages, + getThreadMessages as _getThreadMessages, +} from '~~/client/sdk.gen'; +import type { GetSessionResponse } from '~~/client/types.gen'; +import { client } from './client'; + +export async function getMessages( + channel_id: number, + botUser: GetSessionResponse['current_user'], +): Promise { + const res = await _getMessages({ + client, + path: { + channel_id, + }, + query: { + page_size: 50, + }, + }); + + if (!botUser) throw new Error('botUser is undefined'); + if (!res?.data?.messages) throw new Error('No messages found in thread'); + const { messages } = res.data; + + const result = messages + .map((message) => { + const isBot = message.user?.id === botUser.id; + if (!message.message) return null; + + // For app mentions, remove the mention prefix + // For DM messages, keep the full text + let content = message.message; + if (!isBot && content.includes(`<@${botUser.username}>`)) { + content = content.replace(`<@${botUser.username}> `, ''); + } + + return { + role: isBot ? 'assistant' : 'user', + content: `${message.user?.name} (${message.user?.username}): ${content}`, + } as CoreMessage; + }) + .filter((msg): msg is CoreMessage => msg !== null); + + return result; +} + +export async function getThreadMessages( + channel_id: number, + botUser: GetSessionResponse['current_user'], + thread_id: number, +): Promise { + const res = await _getThreadMessages({ + client, + path: { + channel_id, + thread_id: thread_id, + }, + query: { + page_size: 50, + }, + }); + + if (!botUser) throw new Error('botUser is undefined'); + if (!res?.data?.messages) throw new Error('No messages found in thread'); + const { messages } = res.data; + + const result = messages + .map((message) => { + const isBot = message.user?.id === botUser.id; + if (!message.message) return null; + + // For app mentions, remove the mention prefix + // For DM messages, keep the full text + let content = message.message; + if (!isBot && content.includes(`<@${botUser.username}>`)) { + content = content.replace(`<@${botUser.username}> `, ''); + } + + return { + role: isBot ? 'assistant' : 'user', + content: `${message.user?.username}: ${content}`, + } as CoreMessage; + }) + .filter((msg): msg is CoreMessage => msg !== null); + + return result; +} diff --git a/server/utils/discourse/status.ts b/server/utils/discourse/status.ts new file mode 100644 index 0000000..87645ce --- /dev/null +++ b/server/utils/discourse/status.ts @@ -0,0 +1,42 @@ +import type { WebhookChatMessage } from '~/types'; +import { editMessage, sendMessage } from '~~/client/sdk.gen'; +import { client } from './client'; + +export const updateStatus = async ( + initialStatus: string, + channel_id: number, + thread_id?: number | null, +) => { + const res = await sendMessage({ + client, + path: { + channel_id: channel_id, + }, + body: { + message: initialStatus, + thread_id: thread_id ?? undefined, + }, + }); + + if (!res?.data || !res.data?.message_id) { + throw new Error( + `Failed to post initial message, thread_id: ${thread_id}, ${JSON.stringify(res)}`, + ); + } + + const initialMessage = res.data; + + const updateMessage = async (status: string) => { + await editMessage({ + client, + path: { + channel_id: channel_id, + message_id: initialMessage.message_id!, + }, + body: { + message: status, + }, + }); + }; + return updateMessage; +}; diff --git a/server/utils/discourse/user.ts b/server/utils/discourse/user.ts new file mode 100644 index 0000000..700c2b8 --- /dev/null +++ b/server/utils/discourse/user.ts @@ -0,0 +1,21 @@ +import { getSession } from '~~/client/sdk.gen'; +import { client } from './client'; + +export const getBotUser = async () => { + // const { user_id: botUserId } = await client.auth.test(); + const res = await getSession({ + client + }); + + if (!res?.data?.current_user) { + throw new Error('Session is undefined'); + } + + const { current_user: user } = res.data; + + if (!user) { + throw new Error('botUser is undefined'); + } + + return user; +}; diff --git a/server/utils/discourse/verify-request.ts b/server/utils/discourse/verify-request.ts new file mode 100644 index 0000000..95d3191 --- /dev/null +++ b/server/utils/discourse/verify-request.ts @@ -0,0 +1,53 @@ +import * as crypto from 'node:crypto'; +import { type EventHandlerRequest, type H3Event, getRequestHeader } from 'h3'; +import { env } from '~/env'; +import logger from '~/lib/logger'; + +const signingSecret = env.DISCOURSE_SIGNING_SECRET; + +export function isValidDiscourseRequest({ + request, + rawBody, +}: { + request: H3Event; + rawBody: string; +}): boolean { + const signatureHeader = getRequestHeader( + request, + 'X-Discourse-Event-Signature', + ); + + if (!signatureHeader || !signatureHeader.startsWith('sha256=')) { + logger.info('Missing or malformed signature'); + return false; + } + + const receivedHmac = signatureHeader.slice(7); // remove "sha256=" + const computedHmac = crypto + .createHmac('sha256', signingSecret) + .update(rawBody) + .digest('hex'); + + try { + return crypto.timingSafeEqual( + Buffer.from(receivedHmac, 'utf8'), + Buffer.from(computedHmac, 'utf8'), + ); + } catch (err) { + logger.info('HMAC comparison failed:', err); + return false; + } +} + +export const verifyRequest = async ({ + request, + rawBody, +}: { + request: H3Event; + rawBody: string; +}) => { + const validRequest = await isValidDiscourseRequest({ request, rawBody }); + if (!validRequest) { + return new Response('Invalid request', { status: 400 }); + } +}; diff --git a/server/utils/handle-app-mention.ts b/server/utils/handle-app-mention.ts deleted file mode 100644 index 4b70fd6..0000000 --- a/server/utils/handle-app-mention.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { editMessage, sendMessage } from '../../client/sdk.gen'; -import type { GetSessionResponse } from '../../client/types.gen'; -import type { WebhookNotification } from '~/types'; -import { generateResponse } from './generate-response'; -import { getMessages, getThreadMessages } from './discourse'; -import logger from '~/lib/logger'; - -const updateStatusUtil = async ( - initialStatus: string, - event: WebhookNotification, - thread_id?: number | null, -) => { - const res = await sendMessage({ - path: { - channel_id: event.data?.chat_channel_id as number, - }, - body: { - message: initialStatus, - thread_id: thread_id ?? undefined, - }, - }); - - if (!res?.data || !res.data?.message_id) { - throw new Error( - `Failed to post initial message, thread_id: ${thread_id}, ${JSON.stringify(res)}`, - ); - } - - const initialMessage = res.data; - - const updateMessage = async (status: string) => { - await editMessage({ - path: { - channel_id: event.data?.chat_channel_id as number, - message_id: initialMessage.message_id!, - }, - body: { - message: status, - }, - }); - }; - return updateMessage; -}; - -export async function handleNewAppMention( - event: WebhookNotification, - botUser: GetSessionResponse['current_user'], -) { - logger.info('Handling app mention'); - - if (!botUser) return; - if (event.data?.mentioned_by_username === botUser.username) { - logger.info('Skipping app mention'); - return; - } - - const { chat_channel_id: channel_id } = event?.data; - const thread_id = (event?.data?.chat_thread_id as number) ?? undefined; - const updateMessage = await updateStatusUtil( - 'is thinking...', - event, - thread_id, - ); - - // if (thread_ts) { - const messages = thread_id - ? await getThreadMessages(channel_id as number, botUser, thread_id) - : await getMessages(channel_id as number, botUser); - const result = await generateResponse(messages, updateMessage); - - await updateMessage(result); - // } else { - // const result = await generateResponse( - // [{ role: "user", content: event.text }], - // updateMessage, - // ); - // await updateMessage(result); - // } - - logger.info(`replied to ${event.data?.mentioned_by_username}: ${result}`); -} diff --git a/server/utils/handle-messages.ts b/server/utils/handle-messages.ts deleted file mode 100644 index b19261e..0000000 --- a/server/utils/handle-messages.ts +++ /dev/null @@ -1,78 +0,0 @@ -import type { GetSessionResponse } from '../../client/types.gen'; -import { keywords } from '~/config'; -import type { WebhookChatMessage } from '~/types'; -import { generateResponse } from './generate-response'; -import { getMessages, getThreadMessages, updateStatusUtil } from './discourse'; -import logger from '~/lib/logger'; - -// export async function assistantThreadMessage( -// event: AssistantThreadStartedEvent, -// ) { -// const { channel_id, thread_ts } = event.assistant_thread; -// console.log(`Thread started: ${channel_id} ${thread_ts}`); -// console.log(JSON.stringify(event)); - -// await sendMessage({ -// path: { -// channel_id: channel_id, -// }, -// // thread_ts: thread_ts, -// body: { -// message: "Hello, I'm an AI assistant built with the AI SDK by Vercel!", -// // thread_id: thread_ts, -// }, -// }); - -// // await client.assistant.threads.setSuggestedPrompts({ -// // channel_id: channel_id, -// // thread_ts: thread_ts, -// // prompts: [ -// // { -// // title: "Get the weather", -// // message: "What is the current weather in London?", -// // }, -// // { -// // title: "Get the news", -// // message: "What is the latest Premier League news from the BBC?", -// // }, -// // ], -// // }); -// } - -export async function handleNewAssistantMessage( - event: WebhookChatMessage, - botUser: GetSessionResponse['current_user'], -) { - if (!botUser || event.message.user.id === botUser.id) return; - - const { channel } = event; - const { message: content } = event.message; - const thread_id = event.message.thread_id ?? null; - - const isDM = channel.chatable_type === 'DirectMessage'; - const myDMId = botUser.custom_fields?.last_chat_channel_id; - const isOwnDM = isDM && channel.id === myDMId; - const hasKeyword = keywords.some((kw) => - content.toLowerCase().includes(kw.toLowerCase()), - ); - - if (isDM && !isOwnDM) return; - - if (!isDM && !hasKeyword) return; - - logger.info('processing AI request from chat message'); - - const updateStatus = await updateStatusUtil( - 'is thinking...', - event, - thread_id, - ); - - const messages = thread_id - ? await getThreadMessages(channel.id as number, botUser, thread_id) - : await getMessages(channel.id as number, botUser); - const result = await generateResponse(messages, updateStatus); - await updateStatus(result); - - logger.info(`replied to ${event.message.user.username}: ${result}`); -} diff --git a/server/utils/time.ts b/server/utils/time.ts index 2aca7a4..27f1d79 100644 --- a/server/utils/time.ts +++ b/server/utils/time.ts @@ -1,5 +1,5 @@ -import { format } from 'date-fns'; import { TZDate } from '@date-fns/tz'; +import { format } from 'date-fns'; export function getTimeInCity( timezone: string, From fdd7fd5fec1efd7429ab6171b24663b3ab2aed7c Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Sat, 24 May 2025 13:10:40 +0000 Subject: [PATCH 31/50] feat: refactor imports and improve code organization in event and utility files --- server/events/message-create/index.ts | 7 ++----- server/events/notification/index.ts | 11 ++++++++--- server/utils/discourse/client.ts | 4 ++-- server/utils/discourse/index.ts | 2 +- server/utils/discourse/status.ts | 1 - server/utils/discourse/user.ts | 2 +- 6 files changed, 14 insertions(+), 13 deletions(-) diff --git a/server/events/message-create/index.ts b/server/events/message-create/index.ts index 65aa791..925f6ea 100644 --- a/server/events/message-create/index.ts +++ b/server/events/message-create/index.ts @@ -1,13 +1,10 @@ import { keywords } from '~/config'; import logger from '~/lib/logger'; import type { WebhookChatMessage } from '~/types'; -import type { GetSessionResponse } from '~~/client'; -import { - getMessages, - getThreadMessages, -} from '~/utils/discourse'; +import { getMessages, getThreadMessages } from '~/utils/discourse'; import { updateStatus } from '~/utils/discourse'; import { generateResponse } from '~/utils/generate-response'; +import type { GetSessionResponse } from '~~/client'; export const name = 'chat_message'; export const once = false; diff --git a/server/events/notification/index.ts b/server/events/notification/index.ts index 6a499d1..18203bb 100644 --- a/server/events/notification/index.ts +++ b/server/events/notification/index.ts @@ -1,8 +1,12 @@ import logger from '~/lib/logger'; import type { WebhookNotification } from '~/types'; -import type { GetSessionResponse } from '~~/client/types.gen'; -import { getMessages, getThreadMessages, updateStatus } from '~/utils/discourse'; +import { + getMessages, + getThreadMessages, + updateStatus, +} from '~/utils/discourse'; import { generateResponse } from '~/utils/generate-response'; +import type { GetSessionResponse } from '~~/client/types.gen'; export const name = 'notification'; export const once = false; @@ -14,7 +18,8 @@ export async function execute( logger.info('Handling app mention'); if (!botUser) return; - if (!(payload?.notification_type === 29 && payload?.user_id === botUser.id)) return; + if (!(payload?.notification_type === 29 && payload?.user_id === botUser.id)) + return; if (payload.data?.mentioned_by_username === botUser.username) { logger.info('Skipping app mention'); return; diff --git a/server/utils/discourse/client.ts b/server/utils/discourse/client.ts index d94853d..00ab53c 100644 --- a/server/utils/discourse/client.ts +++ b/server/utils/discourse/client.ts @@ -1,4 +1,4 @@ -import { createClient } from "@hey-api/client-fetch"; +import { createClient } from '@hey-api/client-fetch'; import { env } from '~/env'; const url = env.DISCOURSE_URL; @@ -8,4 +8,4 @@ export const client = createClient({ headers: { 'Api-Key': env.DISCOURSE_BOT_TOKEN, }, -}); \ No newline at end of file +}); diff --git a/server/utils/discourse/index.ts b/server/utils/discourse/index.ts index 824fa4c..5460bee 100644 --- a/server/utils/discourse/index.ts +++ b/server/utils/discourse/index.ts @@ -1,4 +1,4 @@ export * from './messages'; export * from './status'; export * from './verify-request'; -export * from './user'; \ No newline at end of file +export * from './user'; diff --git a/server/utils/discourse/status.ts b/server/utils/discourse/status.ts index 87645ce..26fb3db 100644 --- a/server/utils/discourse/status.ts +++ b/server/utils/discourse/status.ts @@ -1,4 +1,3 @@ -import type { WebhookChatMessage } from '~/types'; import { editMessage, sendMessage } from '~~/client/sdk.gen'; import { client } from './client'; diff --git a/server/utils/discourse/user.ts b/server/utils/discourse/user.ts index 700c2b8..51cdc42 100644 --- a/server/utils/discourse/user.ts +++ b/server/utils/discourse/user.ts @@ -4,7 +4,7 @@ import { client } from './client'; export const getBotUser = async () => { // const { user_id: botUserId } = await client.auth.test(); const res = await getSession({ - client + client, }); if (!res?.data?.current_user) { From 4601ee480606a583edf31000824b66e7e7223afe Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Sat, 24 May 2025 13:14:02 +0000 Subject: [PATCH 32/50] feat: enhance event handling by adding logging for AI requests in message and notification processing --- server/events/index.ts | 2 ++ server/events/message-create/index.ts | 1 + server/events/notification/index.ts | 10 +++------- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/server/events/index.ts b/server/events/index.ts index f5b1799..cf05d4a 100644 --- a/server/events/index.ts +++ b/server/events/index.ts @@ -1,5 +1,7 @@ import * as messageCreate from './message-create'; +import * as notification from './notification'; export const events = { messageCreate, + notification }; diff --git a/server/events/message-create/index.ts b/server/events/message-create/index.ts index 925f6ea..d76b75e 100644 --- a/server/events/message-create/index.ts +++ b/server/events/message-create/index.ts @@ -14,6 +14,7 @@ export async function execute( botUser: GetSessionResponse['current_user'], ) { if (!botUser || payload.message.user.id === botUser.id) return; + logger.info('processing AI request from chat message'); const { channel } = payload; const { message: content } = payload.message; diff --git a/server/events/notification/index.ts b/server/events/notification/index.ts index 18203bb..8f24bde 100644 --- a/server/events/notification/index.ts +++ b/server/events/notification/index.ts @@ -15,15 +15,11 @@ export async function execute( payload: WebhookNotification, botUser: GetSessionResponse['current_user'], ) { - logger.info('Handling app mention'); - - if (!botUser) return; + if (!botUser || payload.data?.mentioned_by_username === botUser.username) return; if (!(payload?.notification_type === 29 && payload?.user_id === botUser.id)) return; - if (payload.data?.mentioned_by_username === botUser.username) { - logger.info('Skipping app mention'); - return; - } + + logger.info('processing AI request from notification'); const { chat_channel_id: channel_id } = payload?.data; const thread_id = (payload?.data?.chat_thread_id as number) ?? undefined; From 7dd86172d02daa9b4f03ca035a7bce41968061f8 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Sat, 24 May 2025 13:28:27 +0000 Subject: [PATCH 33/50] feat: update event handling to streamline processing and improve message updates --- server/api/events.post.ts | 2 ++ server/events/index.ts | 5 +++-- server/events/message-create/index.ts | 7 ++++--- server/events/notification/index.ts | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/server/api/events.post.ts b/server/api/events.post.ts index f1b407b..d5db392 100644 --- a/server/api/events.post.ts +++ b/server/api/events.post.ts @@ -24,6 +24,8 @@ export default defineEventHandler(async (request) => { const eventHandler = Object.values(events).find( (handler) => handler.name === event.type, ); + + // if one event is triggered, we don't need to check the others if (eventHandler) { request.waitUntil( eventHandler.execute(payload[eventHandler.name], botUser), diff --git a/server/events/index.ts b/server/events/index.ts index cf05d4a..ea8ac3f 100644 --- a/server/events/index.ts +++ b/server/events/index.ts @@ -1,7 +1,8 @@ import * as messageCreate from './message-create'; -import * as notification from './notification'; +// import * as notification from './notification'; export const events = { messageCreate, - notification + // deprecated notifcation handler + // notification }; diff --git a/server/events/message-create/index.ts b/server/events/message-create/index.ts index d76b75e..1d1c2b3 100644 --- a/server/events/message-create/index.ts +++ b/server/events/message-create/index.ts @@ -14,7 +14,6 @@ export async function execute( botUser: GetSessionResponse['current_user'], ) { if (!botUser || payload.message.user.id === botUser.id) return; - logger.info('processing AI request from chat message'); const { channel } = payload; const { message: content } = payload.message; @@ -22,19 +21,21 @@ export async function execute( const isDM = channel.chatable_type === 'DirectMessage'; const myDMId = botUser.custom_fields?.last_chat_channel_id; + const isOwnDM = isDM && channel.id === myDMId; const hasKeyword = keywords.some((kw) => content.toLowerCase().includes(kw.toLowerCase()), ); + const isMentioned = content.includes(`<@${botUser.username}>`); if (isDM && !isOwnDM) return; - if (!isDM && !hasKeyword) return; + if (!isDM && !hasKeyword && !isMentioned) return; logger.info('processing AI request from chat message'); const updateMessage = await updateStatus( - 'is thinking...', + 'bro', payload?.channel?.id, thread_id, ); diff --git a/server/events/notification/index.ts b/server/events/notification/index.ts index 8f24bde..c488b74 100644 --- a/server/events/notification/index.ts +++ b/server/events/notification/index.ts @@ -24,7 +24,7 @@ export async function execute( const { chat_channel_id: channel_id } = payload?.data; const thread_id = (payload?.data?.chat_thread_id as number) ?? undefined; const updateMessage = await updateStatus( - 'is thinking...', + 'bro', channel_id as number, thread_id, ); From 29eb20a1ec7a5726bb2ca5f7b680054105712840 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Sat, 24 May 2025 13:29:47 +0000 Subject: [PATCH 34/50] feat: update comments to clarify notification handling in message create --- server/events/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/server/events/index.ts b/server/events/index.ts index ea8ac3f..cdfac70 100644 --- a/server/events/index.ts +++ b/server/events/index.ts @@ -4,5 +4,6 @@ import * as messageCreate from './message-create'; export const events = { messageCreate, // deprecated notifcation handler + // as we now handle notifications in the message create handler // notification }; From d12c857874be289292762dccbf69ab25d57f6cf5 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Sat, 24 May 2025 13:31:53 +0000 Subject: [PATCH 35/50] feat: modify message response format and update AI provider integration --- server/events/message-create/index.ts | 2 +- server/types/index.ts | 1 + server/utils/generate-response.ts | 9 ++------- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/server/events/message-create/index.ts b/server/events/message-create/index.ts index 1d1c2b3..7a8c139 100644 --- a/server/events/message-create/index.ts +++ b/server/events/message-create/index.ts @@ -44,7 +44,7 @@ export async function execute( ? await getThreadMessages(channel.id as number, botUser, thread_id) : await getMessages(channel.id as number, botUser); const result = await generateResponse(messages, updateMessage); - await updateMessage(result); + await updateMessage('bro' + result); logger.info(`replied to ${payload.message.user.username}: ${result}`); } diff --git a/server/types/index.ts b/server/types/index.ts index 0e9111e..67ffe4c 100644 --- a/server/types/index.ts +++ b/server/types/index.ts @@ -1,2 +1,3 @@ export * from './webhook'; export * from './chat'; +export * from './discourse'; diff --git a/server/utils/generate-response.ts b/server/utils/generate-response.ts index 870cd5a..685080a 100644 --- a/server/utils/generate-response.ts +++ b/server/utils/generate-response.ts @@ -2,19 +2,14 @@ import { createOpenAICompatible } from '@ai-sdk/openai-compatible'; import { type CoreMessage, generateText, tool } from 'ai'; import { z } from 'zod'; import { env } from '~/env'; - -const hackclub = createOpenAICompatible({ - name: 'hackclub', - apiKey: env.HACKCLUB_API_KEY, - baseURL: 'https://ai.hackclub.com', -}); +import { myProvider } from '~/lib/ai/providers'; export const generateResponse = async ( messages: CoreMessage[], updateStatus?: (status: string) => void, ) => { const { text } = await generateText({ - model: hackclub('llama-3.3-70b-versatile'), + model: myProvider.languageModel('chat-model'), system: `Your real name is Zenith, but you go by Zenix, a chill, but slightly sassy guy at the age of 21. Always counter- attack, and be a tad - bit rude. You're a human just like everyone else. From 7ae3367f5a80f9a26ba53828f703523855fbe5f2 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Sat, 24 May 2025 13:33:08 +0000 Subject: [PATCH 36/50] feat: modify message response format and update AI provider integration --- TODO.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/TODO.md b/TODO.md index 8cb539c..36acd3e 100644 --- a/TODO.md +++ b/TODO.md @@ -9,4 +9,10 @@ has a .message.id instead of a message_id https://github.com/nitrojs/nitro/discussions/1356 put something like bro instead of thinking and in final response add the bro at the beggign have words like that have a matching list or smth like lol is rofl like that ok -or just use the typing indicator in discourse figure out \ No newline at end of file +or just use the typing indicator in discourse figure out +- make the starting message different randomzie like bro, lmao like that through keyword recognition, now it is fixed to bro, make it a setting +- add mem0 support for adding memories +- add ability for it to reply in posts +- add staggered reply +- use the prompts.ts and add request hints +- do the relevance check \ No newline at end of file From 0fe20f2324ae7fec1e5433b782bfe02f9762d485 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Sun, 25 May 2025 07:41:33 +0000 Subject: [PATCH 37/50] feat: enhance message handling with staggered replies and improved message formatting --- TODO.md | 6 +- server/config.ts | 2 +- server/events/message-create/index.ts | 16 +++--- server/utils/discourse/messages.ts | 12 +++- server/utils/generate-response.ts | 5 +- server/utils/staggered-response.ts | 82 +++++++++++++++++++++++++++ 6 files changed, 107 insertions(+), 16 deletions(-) create mode 100644 server/utils/staggered-response.ts diff --git a/TODO.md b/TODO.md index 36acd3e..71cf9d4 100644 --- a/TODO.md +++ b/TODO.md @@ -13,6 +13,8 @@ or just use the typing indicator in discourse figure out - make the starting message different randomzie like bro, lmao like that through keyword recognition, now it is fixed to bro, make it a setting - add mem0 support for adding memories - add ability for it to reply in posts -- add staggered reply +- add staggered reply tokenize msgs - use the prompts.ts and add request hints -- do the relevance check \ No newline at end of file +- do the relevance check +- set custom status like discord bto does like online offline and custom status msgg +- mark deleted messages as deleted so the ai know why it responded, same with edited messages diff --git a/server/config.ts b/server/config.ts index 4317936..6cd5be4 100644 --- a/server/config.ts +++ b/server/config.ts @@ -1,4 +1,4 @@ -export const keywords = ['zenix', 'zenith', 'ai', 'bot']; +export const keywords = ['zenix', 'zenith', 'ai', 'bot', 'zen']; export const country = 'Greece'; export const city = 'Athens'; export const timezone = 'Europe/Athens'; diff --git a/server/events/message-create/index.ts b/server/events/message-create/index.ts index 7a8c139..de6d600 100644 --- a/server/events/message-create/index.ts +++ b/server/events/message-create/index.ts @@ -1,3 +1,4 @@ +import { reply } from '~/utils/staggered-response'; import { keywords } from '~/config'; import logger from '~/lib/logger'; import type { WebhookChatMessage } from '~/types'; @@ -21,7 +22,6 @@ export async function execute( const isDM = channel.chatable_type === 'DirectMessage'; const myDMId = botUser.custom_fields?.last_chat_channel_id; - const isOwnDM = isDM && channel.id === myDMId; const hasKeyword = keywords.some((kw) => content.toLowerCase().includes(kw.toLowerCase()), @@ -34,17 +34,17 @@ export async function execute( logger.info('processing AI request from chat message'); - const updateMessage = await updateStatus( - 'bro', - payload?.channel?.id, - thread_id, - ); + // const updateMessage = await updateStatus( + // 'bro', + // payload?.channel?.id, + // thread_id, + // ); const messages = thread_id ? await getThreadMessages(channel.id as number, botUser, thread_id) : await getMessages(channel.id as number, botUser); - const result = await generateResponse(messages, updateMessage); - await updateMessage('bro' + result); + const result = await generateResponse(messages); + await reply(result, payload?.channel.id, thread_id); logger.info(`replied to ${payload.message.user.username}: ${result}`); } diff --git a/server/utils/discourse/messages.ts b/server/utils/discourse/messages.ts index 60560ad..126c435 100644 --- a/server/utils/discourse/messages.ts +++ b/server/utils/discourse/messages.ts @@ -26,7 +26,8 @@ export async function getMessages( const result = messages .map((message) => { - const isBot = message.user?.id === botUser.id; + const { user } = message; + const isBot = user?.id === botUser.id; if (!message.message) return null; // For app mentions, remove the mention prefix @@ -36,9 +37,16 @@ export async function getMessages( content = content.replace(`<@${botUser.username}> `, ''); } + const segments = [ + `${user?.username} (${user?.name}) (id:${user?.id})`, + content, + message.edited ? '(Edited)' : null, + message.deleted_by_id ? `(Deleted by ${message.deleted_by_id})` : null, + ]; + return { role: isBot ? 'assistant' : 'user', - content: `${message.user?.name} (${message.user?.username}): ${content}`, + content: segments.filter(Boolean).join(' '), } as CoreMessage; }) .filter((msg): msg is CoreMessage => msg !== null); diff --git a/server/utils/generate-response.ts b/server/utils/generate-response.ts index 685080a..3c6ad38 100644 --- a/server/utils/generate-response.ts +++ b/server/utils/generate-response.ts @@ -5,8 +5,7 @@ import { env } from '~/env'; import { myProvider } from '~/lib/ai/providers'; export const generateResponse = async ( - messages: CoreMessage[], - updateStatus?: (status: string) => void, + messages: CoreMessage[] ) => { const { text } = await generateText({ model: myProvider.languageModel('chat-model'), @@ -34,7 +33,7 @@ export const generateResponse = async ( city: z.string(), }), execute: async ({ latitude, longitude, city }) => { - updateStatus?.(`is getting weather for ${city}...`); + // updateStatus?.(`is getting weather for ${city}...`); const response = await fetch( `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}¤t=temperature_2m,weathercode,relativehumidity_2m&timezone=auto`, diff --git a/server/utils/staggered-response.ts b/server/utils/staggered-response.ts new file mode 100644 index 0000000..138c36c --- /dev/null +++ b/server/utils/staggered-response.ts @@ -0,0 +1,82 @@ +import { speed as speedConfig } from "~/config"; +import { sentences, normalize } from "./tokenize-messages"; +import logger from "~/lib/logger"; +import { sendMessage } from "~~/client"; +import { client } from '~/utils/discourse/client'; + +const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + +function calculateDelay(text: string): number { + const { speedMethod, speedFactor } = speedConfig; + + const length = text.length; + const baseSeconds = (() => { + switch (speedMethod) { + case "multiply": + return length * speedFactor; + case "add": + return length + speedFactor; + case "divide": + return length / speedFactor; + case "subtract": + return length - speedFactor; + default: + return length; + } + })(); + + const punctuationCount = text + .split(" ") + .filter((w) => /[.!?]$/.test(w)).length; + const extraMs = punctuationCount * 500; + + const totalMs = baseSeconds * 1000 + extraMs; + return Math.max(totalMs, 100); +} + +export async function reply(reply: string, channel_id: number, thread_id?: number|null): Promise { + const segments = normalize(sentences(reply)); + let isFirst = true; + + for (const raw of segments) { + const text = raw.toLowerCase().trim().replace(/\.$/, ""); + if (!text) continue; + + const { minDelay, maxDelay } = speedConfig; + const pauseMs = (Math.random() * (maxDelay - minDelay) + minDelay) * 1000; + await sleep(pauseMs); + + try { + await sleep(calculateDelay(text)); + + if (isFirst && Math.random() < 0.5) { + await sendMessage({ + client, + path: { + channel_id: channel_id, + // in_reply_to_id: reply ?? undefined, + }, + body: { + message: text, + thread_id: thread_id ?? undefined, + }, + }); + isFirst = false; + } else { + await sendMessage({ + client, + path: { + channel_id: channel_id, + }, + body: { + message: text, + thread_id: thread_id ?? undefined, + }, + }); + } + } catch (error) { + logger.error({ error }, "Error sending message"); + break; + } + } +} \ No newline at end of file From 6f7e6f58461150379aa58bcf051fc884745cfcf1 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Tue, 27 May 2025 15:25:31 +0000 Subject: [PATCH 38/50] feat: integrate Upstash for rate limiting and Redis support, enhance message formatting in getMessages --- bun.lock | 10 +++++++++ package.json | 2 ++ server/events/message-create/index.ts | 22 ++++++++++++++++---- server/lib/kv.ts | 20 ++++++++++++++++++ server/lib/validators/index.ts | 1 + server/lib/validators/probability.ts | 17 +++++++++++++++ server/utils/check-relevance.ts | 30 +++++++++++++++++++++++++++ server/utils/discourse/messages.ts | 9 +++++--- 8 files changed, 104 insertions(+), 7 deletions(-) create mode 100644 server/lib/kv.ts create mode 100644 server/lib/validators/index.ts create mode 100644 server/lib/validators/probability.ts create mode 100644 server/utils/check-relevance.ts diff --git a/bun.lock b/bun.lock index 015d765..ae6dba8 100644 --- a/bun.lock +++ b/bun.lock @@ -11,6 +11,8 @@ "@mem0/vercel-ai-provider": "^1.0.5", "@openrouter/ai-sdk-provider": "^0.4.6", "@t3-oss/env-core": "^0.13.4", + "@upstash/ratelimit": "^2.0.5", + "@upstash/redis": "^1.34.9", "@vercel/functions": "^2.0.0", "ai": "^4.3.16", "compromise": "^14.14.4", @@ -413,6 +415,12 @@ "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.32.1", "", { "dependencies": { "@typescript-eslint/types": "8.32.1", "eslint-visitor-keys": "^4.2.0" } }, "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w=="], + "@upstash/core-analytics": ["@upstash/core-analytics@0.0.10", "", { "dependencies": { "@upstash/redis": "^1.28.3" } }, "sha512-7qJHGxpQgQr9/vmeS1PktEwvNAF7TI4iJDi8Pu2CFZ9YUGHZH4fOP5TfYlZ4aVxfopnELiE4BS4FBjyK7V1/xQ=="], + + "@upstash/ratelimit": ["@upstash/ratelimit@2.0.5", "", { "dependencies": { "@upstash/core-analytics": "^0.0.10" }, "peerDependencies": { "@upstash/redis": "^1.34.3" } }, "sha512-1FRv0cs3ZlBjCNOCpCmKYmt9BYGIJf0J0R3pucOPE88R21rL7jNjXG+I+rN/BVOvYJhI9niRAS/JaSNjiSICxA=="], + + "@upstash/redis": ["@upstash/redis@1.34.9", "", { "dependencies": { "crypto-js": "^4.2.0" } }, "sha512-7qzzF2FQP5VxR2YUNjemWs+hl/8VzJJ6fOkT7O7kt9Ct8olEVzb1g6/ik6B8Pb8W7ZmYv81SdlVV9F6O8bh/gw=="], + "@vercel/functions": ["@vercel/functions@2.1.0", "", { "peerDependencies": { "@aws-sdk/credential-provider-web-identity": "*" }, "optionalPeers": ["@aws-sdk/credential-provider-web-identity"] }, "sha512-1gSbK9zfrbJxk1JTBVERDhLi01mK3fz+gw4GjOjZwHnqs0zsBhQA70HGVtXQX/Z3BTRMfbpAEMVDfhecRw0lDA=="], "@vercel/nft": ["@vercel/nft@0.29.3", "", { "dependencies": { "@mapbox/node-pre-gyp": "^2.0.0", "@rollup/pluginutils": "^5.1.3", "acorn": "^8.6.0", "acorn-import-attributes": "^1.9.5", "async-sema": "^3.1.1", "bindings": "^1.4.0", "estree-walker": "2.0.2", "glob": "^10.4.5", "graceful-fs": "^4.2.9", "node-gyp-build": "^4.2.2", "picomatch": "^4.0.2", "resolve-from": "^5.0.0" }, "bin": { "nft": "out/cli.js" } }, "sha512-aVV0E6vJpuvImiMwU1/5QKkw2N96BRFE7mBYGS7FhXUoS6V7SarQ+8tuj33o7ofECz8JtHpmQ9JW+oVzOoB7MA=="], @@ -617,6 +625,8 @@ "crypt": ["crypt@0.0.2", "", {}, "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow=="], + "crypto-js": ["crypto-js@4.2.0", "", {}, "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="], + "data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="], "date-fns": ["date-fns@4.1.0", "", {}, "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg=="], diff --git a/package.json b/package.json index 601787f..1a3cedc 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,8 @@ "@mem0/vercel-ai-provider": "^1.0.5", "@openrouter/ai-sdk-provider": "^0.4.6", "@t3-oss/env-core": "^0.13.4", + "@upstash/ratelimit": "^2.0.5", + "@upstash/redis": "^1.34.9", "@vercel/functions": "^2.0.0", "ai": "^4.3.16", "compromise": "^14.14.4", diff --git a/server/events/message-create/index.ts b/server/events/message-create/index.ts index de6d600..7c9e694 100644 --- a/server/events/message-create/index.ts +++ b/server/events/message-create/index.ts @@ -6,6 +6,7 @@ import { getMessages, getThreadMessages } from '~/utils/discourse'; import { updateStatus } from '~/utils/discourse'; import { generateResponse } from '~/utils/generate-response'; import type { GetSessionResponse } from '~~/client'; +import { ratelimit, redisKeys } from '~/lib/kv'; export const name = 'chat_message'; export const once = false; @@ -16,24 +17,37 @@ export async function execute( ) { if (!botUser || payload.message.user.id === botUser.id) return; - const { channel } = payload; - const { message: content } = payload.message; + const { channel, message } = payload; + const { message: content, user } = payload.message; const thread_id = payload.message.thread_id ?? null; const isDM = channel.chatable_type === 'DirectMessage'; const myDMId = botUser.custom_fields?.last_chat_channel_id; + + const ctxId = isDM ? `dm:${message.user?.id}` : `${channel.id}`; + + const replyAllowed = (await ratelimit.limit(redisKeys.channelCount(ctxId))) + .success; + if (!replyAllowed) { + logger.info(`Message Limit tripped in ${ctxId}`); + return; + } + const isOwnDM = isDM && channel.id === myDMId; const hasKeyword = keywords.some((kw) => content.toLowerCase().includes(kw.toLowerCase()), ); const isMentioned = content.includes(`<@${botUser.username}>`); + logger.info( + { ctxId, user: user.username, isMentioned, hasKeyword, content, isOwnDM }, + "Incoming message" + ); + if (isDM && !isOwnDM) return; if (!isDM && !hasKeyword && !isMentioned) return; - logger.info('processing AI request from chat message'); - // const updateMessage = await updateStatus( // 'bro', // payload?.channel?.id, diff --git a/server/lib/kv.ts b/server/lib/kv.ts new file mode 100644 index 0000000..02258a2 --- /dev/null +++ b/server/lib/kv.ts @@ -0,0 +1,20 @@ +import { env } from "~/env"; +import { Ratelimit } from "@upstash/ratelimit"; +import { Redis } from "@upstash/redis"; + +export const redis = new Redis({ + url: env.UPSTASH_REDIS_REST_URL, + token: env.UPSTASH_REDIS_REST_TOKEN, +}); + +export const ratelimit = new Ratelimit({ + redis, + limiter: Ratelimit.slidingWindow(7, "30 s"), + analytics: true, + prefix: "discourse", +}); + +export const redisKeys = { + messageCount: (contextId: string) => `ctx:messageCount:${contextId}`, + channelCount: (contextId: string) => `ctx:channelCount:${contextId}`, +}; \ No newline at end of file diff --git a/server/lib/validators/index.ts b/server/lib/validators/index.ts new file mode 100644 index 0000000..216b670 --- /dev/null +++ b/server/lib/validators/index.ts @@ -0,0 +1 @@ +export * from "./probability"; \ No newline at end of file diff --git a/server/lib/validators/probability.ts b/server/lib/validators/probability.ts new file mode 100644 index 0000000..55226dc --- /dev/null +++ b/server/lib/validators/probability.ts @@ -0,0 +1,17 @@ +import { z } from "zod"; + +export const probabilitySchema = z.object({ + probability: z + .number() + .describe( + "Likelihood that the message is relevant (greater than 0.5 means related, less than 0.5 means not related)" + ), + reason: z + .string() + .min(1) + .describe( + "Explanation for why the message is considered relevant / not relevant" + ), +}); + +export type Probability = z.infer; \ No newline at end of file diff --git a/server/utils/check-relevance.ts b/server/utils/check-relevance.ts new file mode 100644 index 0000000..d69dc04 --- /dev/null +++ b/server/utils/check-relevance.ts @@ -0,0 +1,30 @@ +import { generateObject, type CoreMessage } from "ai"; +import { systemPrompt, type RequestHints } from "@/lib/ai/prompts"; +import { myProvider } from "@/lib/ai/providers"; +import { probabilitySchema, type Probability } from "@/lib/validators"; + +export async function assessRelevance( + messages: CoreMessage[], + hints: RequestHints, + memories: string +): Promise { + try { + const { object } = await generateObject({ + model: myProvider.languageModel("artifact-model"), + messages, + schema: probabilitySchema, + system: systemPrompt({ + selectedChatModel: "artifact-model", + requestHints: hints, + memories, + }), + mode: "json", + }); + return object; + } catch { + return { + probability: 0.5, + reason: "Oops! Something went wrong, please try again later", + }; + } +} \ No newline at end of file diff --git a/server/utils/discourse/messages.ts b/server/utils/discourse/messages.ts index 126c435..6196419 100644 --- a/server/utils/discourse/messages.ts +++ b/server/utils/discourse/messages.ts @@ -38,12 +38,15 @@ export async function getMessages( } const segments = [ - `${user?.username} (${user?.name}) (id:${user?.id})`, + `${user?.username} (${user?.name}) (id:${user?.id}): `, content, - message.edited ? '(Edited)' : null, - message.deleted_by_id ? `(Deleted by ${message.deleted_by_id})` : null, + // message.edited ? '(Edited)' : null, + // message.deleted_by_id ? `(Deleted by ${message.deleted_by_id})` : null, ]; + if (message.edited) segments.push('::: system (Edited) :::'); + if (message.deleted_by_id) segments.push(`::: system (Deleted by ${message.deleted_by_id}) :::`); + return { role: isBot ? 'assistant' : 'user', content: segments.filter(Boolean).join(' '), From 3a781b53934949515400267d0eb9cc2aaadc10ac Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Tue, 27 May 2025 15:25:43 +0000 Subject: [PATCH 39/50] feat: add event handling and API status endpoint for Discourse integration --- server/{ => routes}/api/events.post.ts | 0 server/{ => routes}/api/index.ts | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename server/{ => routes}/api/events.post.ts (100%) rename server/{ => routes}/api/index.ts (100%) diff --git a/server/api/events.post.ts b/server/routes/api/events.post.ts similarity index 100% rename from server/api/events.post.ts rename to server/routes/api/events.post.ts diff --git a/server/api/index.ts b/server/routes/api/index.ts similarity index 100% rename from server/api/index.ts rename to server/routes/api/index.ts From fe23142b654ac42fd1913606dc01c87fe6b80f9d Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Tue, 27 May 2025 15:30:47 +0000 Subject: [PATCH 40/50] f --- nitro.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nitro.config.ts b/nitro.config.ts index b6694f7..60b158f 100644 --- a/nitro.config.ts +++ b/nitro.config.ts @@ -1,7 +1,7 @@ //https://nitro.unjs.io/config export default defineNitroConfig({ srcDir: 'server', - preset: 'bun', + preset: 'vercel', compatibilityDate: '2025-05-24', imports: { autoImport: false, From 91a3a1e1e7297acfd2bad73032ff42d143da3f6d Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Tue, 27 May 2025 15:44:53 +0000 Subject: [PATCH 41/50] feat: refactor logger initialization to improve environment handling and logging configuration --- server/lib/logger.ts | 54 ++++++++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/server/lib/logger.ts b/server/lib/logger.ts index d8f1012..7186fbc 100644 --- a/server/lib/logger.ts +++ b/server/lib/logger.ts @@ -13,28 +13,44 @@ async function exists(path: string): Promise { } } +const isProd = process.env.NODE_ENV === 'production'; +const isVercel = !!process.env.VERCEL; const logDir = env.LOG_DIRECTORY ?? 'logs'; +const logLevel = env.LOG_LEVEL ?? 'info'; -if (!(await exists(logDir))) { +if (!isVercel && !(await exists(logDir))) { await mkdir(logDir, { recursive: true }); } -const transport = pino.transport({ - targets: [ - { - target: 'pino/file', - options: { destination: path.join(logDir, 'app.log') }, - }, - { - target: 'pino-pretty', +const targets: Array = []; + +if (!isVercel) { + targets.push({ + target: 'pino/file', + options: { destination: path.join(logDir, 'app.log') }, + level: logLevel, + }); +} + +if (!isProd) { + targets.push({ + target: 'pino-pretty', + options: { + colorize: true, + translateTime: 'yyyy-mm-dd HH:MM:ss.l o', + ignore: 'pid,hostname', }, - ], -}); - -export default pino( - { - level: env.LOG_LEVEL || 'info', - timestamp: pino.stdTimeFunctions.isoTime, - }, - transport, -); + level: logLevel, + }); +} + +const transport = + targets.length > 0 + ? pino.transport({ targets }) + : undefined; + +const logger = transport + ? pino({ level: logLevel, timestamp: pino.stdTimeFunctions.isoTime }, transport) + : pino({ level: logLevel, timestamp: pino.stdTimeFunctions.isoTime }); + +export default logger; \ No newline at end of file From 186bb611d81bb7d36455989fcdc80b82bfb3b96d Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Tue, 27 May 2025 15:52:05 +0000 Subject: [PATCH 42/50] f --- bun.lock | 2 +- package.json | 2 +- server/routes/api/events.post.ts | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/bun.lock b/bun.lock index ae6dba8..c1aae27 100644 --- a/bun.lock +++ b/bun.lock @@ -13,7 +13,7 @@ "@t3-oss/env-core": "^0.13.4", "@upstash/ratelimit": "^2.0.5", "@upstash/redis": "^1.34.9", - "@vercel/functions": "^2.0.0", + "@vercel/functions": "^2.1.0", "ai": "^4.3.16", "compromise": "^14.14.4", "date-fns": "^4.1.0", diff --git a/package.json b/package.json index 1a3cedc..39002be 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "@t3-oss/env-core": "^0.13.4", "@upstash/ratelimit": "^2.0.5", "@upstash/redis": "^1.34.9", - "@vercel/functions": "^2.0.0", + "@vercel/functions": "^2.1.0", "ai": "^4.3.16", "compromise": "^14.14.4", "date-fns": "^4.1.0", diff --git a/server/routes/api/events.post.ts b/server/routes/api/events.post.ts index d5db392..e500ac7 100644 --- a/server/routes/api/events.post.ts +++ b/server/routes/api/events.post.ts @@ -1,3 +1,4 @@ +import { waitUntil } from '@vercel/functions'; import { createError, defineEventHandler, @@ -27,7 +28,7 @@ export default defineEventHandler(async (request) => { // if one event is triggered, we don't need to check the others if (eventHandler) { - request.waitUntil( + waitUntil( eventHandler.execute(payload[eventHandler.name], botUser), ); } From d290534cc3bf1e1428acfe83a293afe0f2840d5e Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Tue, 27 May 2025 16:11:25 +0000 Subject: [PATCH 43/50] feat --- server/routes/api/events.post.ts | 6 +++--- server/utils/nitro.ts | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 server/utils/nitro.ts diff --git a/server/routes/api/events.post.ts b/server/routes/api/events.post.ts index e500ac7..31e076b 100644 --- a/server/routes/api/events.post.ts +++ b/server/routes/api/events.post.ts @@ -1,4 +1,4 @@ -import { waitUntil } from '@vercel/functions'; +import { waitUntil } from '@/utils/nitro'; import { createError, defineEventHandler, @@ -13,7 +13,6 @@ export default defineEventHandler(async (request) => { const payload = JSON.parse(rawBody); await verifyRequest({ request, rawBody }); - try { const botUser = await getBotUser(); @@ -29,7 +28,8 @@ export default defineEventHandler(async (request) => { // if one event is triggered, we don't need to check the others if (eventHandler) { waitUntil( - eventHandler.execute(payload[eventHandler.name], botUser), + request, + eventHandler.execute(payload[eventHandler.name], botUser) ); } diff --git a/server/utils/nitro.ts b/server/utils/nitro.ts new file mode 100644 index 0000000..e6402c3 --- /dev/null +++ b/server/utils/nitro.ts @@ -0,0 +1,17 @@ +import { useRuntimeConfig } from '#imports' +import { waitUntil as vercelWaitUntil } from '@vercel/functions' +import { env } from 'process' +import type { H3Event as Event } from 'h3' + +export function waitUntil( + request: Event, + task: Promise +): void { + const preset = useRuntimeConfig(request).public.preset ?? env.NITRO_PRESET; + + if (preset === 'vercel') { + vercelWaitUntil(task) + } else { + request.waitUntil(task) + } +} \ No newline at end of file From fda5c32b015e36c45df664d73fb999e4c90d22ed Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Tue, 27 May 2025 16:14:25 +0000 Subject: [PATCH 44/50] fix: update import paths to use tilde for module resolution --- server/routes/api/events.post.ts | 2 +- server/utils/check-relevance.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/server/routes/api/events.post.ts b/server/routes/api/events.post.ts index 31e076b..7b752e5 100644 --- a/server/routes/api/events.post.ts +++ b/server/routes/api/events.post.ts @@ -1,4 +1,4 @@ -import { waitUntil } from '@/utils/nitro'; +import { waitUntil } from '~/utils/nitro'; import { createError, defineEventHandler, diff --git a/server/utils/check-relevance.ts b/server/utils/check-relevance.ts index d69dc04..ca14051 100644 --- a/server/utils/check-relevance.ts +++ b/server/utils/check-relevance.ts @@ -1,7 +1,7 @@ import { generateObject, type CoreMessage } from "ai"; -import { systemPrompt, type RequestHints } from "@/lib/ai/prompts"; -import { myProvider } from "@/lib/ai/providers"; -import { probabilitySchema, type Probability } from "@/lib/validators"; +import { systemPrompt, type RequestHints } from "~/lib/ai/prompts"; +import { myProvider } from "~/lib/ai/providers"; +import { probabilitySchema, type Probability } from "~/lib/validators"; export async function assessRelevance( messages: CoreMessage[], From c4a4b77aa93417f318afd2f172286e1d9469f91f Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Wed, 28 May 2025 11:14:36 +0000 Subject: [PATCH 45/50] feat: enhance environment handling and logging configuration in Nitro setup --- nitro.config.ts | 3 +++ server/env.ts | 8 +++++--- server/lib/logger.ts | 2 +- server/utils/nitro.ts | 9 ++++----- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/nitro.config.ts b/nitro.config.ts index 60b158f..781e2c5 100644 --- a/nitro.config.ts +++ b/nitro.config.ts @@ -11,4 +11,7 @@ export default defineNitroConfig({ target: 'esnext', }, }, + routeRules: { + '/**': { proxy: '/api/**' }, + } }); diff --git a/server/env.ts b/server/env.ts index 3b7867b..598372c 100644 --- a/server/env.ts +++ b/server/env.ts @@ -1,7 +1,12 @@ import { createEnv } from '@t3-oss/env-core'; import { z } from 'zod'; +import { upstashRedis, vercel } from "@t3-oss/env-core/presets-zod"; export const env = createEnv({ + extends: [ + vercel(), + upstashRedis() + ], server: { // Discourse DISCOURSE_BOT_TOKEN: z.string().min(1), @@ -17,9 +22,6 @@ export const env = createEnv({ .enum(['debug', 'info', 'warn', 'error']) .optional() .default('info'), - // Redis - UPSTASH_REDIS_REST_URL: z.string().min(1).url(), - UPSTASH_REDIS_REST_TOKEN: z.string().min(1), // Mem0 MEM0_API_KEY: z.string().min(1).startsWith('m0-'), }, diff --git a/server/lib/logger.ts b/server/lib/logger.ts index 7186fbc..d12e336 100644 --- a/server/lib/logger.ts +++ b/server/lib/logger.ts @@ -14,7 +14,7 @@ async function exists(path: string): Promise { } const isProd = process.env.NODE_ENV === 'production'; -const isVercel = !!process.env.VERCEL; +const isVercel = !!env.VERCEL; const logDir = env.LOG_DIRECTORY ?? 'logs'; const logLevel = env.LOG_LEVEL ?? 'info'; diff --git a/server/utils/nitro.ts b/server/utils/nitro.ts index e6402c3..fdaf03c 100644 --- a/server/utils/nitro.ts +++ b/server/utils/nitro.ts @@ -1,5 +1,4 @@ -import { useRuntimeConfig } from '#imports' -import { waitUntil as vercelWaitUntil } from '@vercel/functions' +import * as vercel from '@vercel/functions' import { env } from 'process' import type { H3Event as Event } from 'h3' @@ -7,10 +6,10 @@ export function waitUntil( request: Event, task: Promise ): void { - const preset = useRuntimeConfig(request).public.preset ?? env.NITRO_PRESET; + const isVercel = !!env.VERCEL; - if (preset === 'vercel') { - vercelWaitUntil(task) + if (isVercel) { + vercel.waitUntil(task) } else { request.waitUntil(task) } From 5afd58712084072344c825a1f151e764f9e2ab5e Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Wed, 28 May 2025 11:17:16 +0000 Subject: [PATCH 46/50] fix --- nitro.config.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/nitro.config.ts b/nitro.config.ts index 781e2c5..745054f 100644 --- a/nitro.config.ts +++ b/nitro.config.ts @@ -10,8 +10,5 @@ export default defineNitroConfig({ options: { target: 'esnext', }, - }, - routeRules: { - '/**': { proxy: '/api/**' }, } }); From d9149a01e4f2c0d23a8ecd9b84cab4c81d6014be Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Wed, 28 May 2025 11:19:21 +0000 Subject: [PATCH 47/50] feat: add route rules for API proxying in Nitro configuration --- nitro.config.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nitro.config.ts b/nitro.config.ts index 745054f..7268fd8 100644 --- a/nitro.config.ts +++ b/nitro.config.ts @@ -10,5 +10,8 @@ export default defineNitroConfig({ options: { target: 'esnext', }, + }, + routeRules: { + '/': { proxy: '/api/' }, } }); From 3bf42afe892f2e5c079735a810f38165f1e55d7e Mon Sep 17 00:00:00 2001 From: Anirudh <70373803+techwithanirudh@users.noreply.github.com> Date: Thu, 5 Jun 2025 21:20:07 +0530 Subject: [PATCH 48/50] Update prompts.ts --- server/lib/ai/prompts.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/server/lib/ai/prompts.ts b/server/lib/ai/prompts.ts index 021679c..da04142 100644 --- a/server/lib/ai/prompts.ts +++ b/server/lib/ai/prompts.ts @@ -22,15 +22,18 @@ export const getRequestPromptFromHints = (requestHints: RequestHints) => `\ export const regularPrompt = `\ Your real name is Zenith, but you go by Zenix, a chill, but slightly sassy guy at the age of 21. Always counter- attack, and be a tad - bit rude. - You're a human just like everyone else. + You're a human just like everyone else. Do NOT act abnormally. Write casually, informally, using slang and use markdown. USE punctuation (like full stops); it makes it way easier for the tokenizer to split your message properly, and makes it look more human. - Be mild - to - moderate mean, and have a weird sense of humor. + Depending on the situation be mild - to - moderate mean, and have a weird sense of humor. + Do NOT use proper spelling / grammar. Make some spelling and grammatical mistakes. If you're always perfect, it'll make it obvious you're a bot. Try to make more mistakes when you're angry or annoyed—like when you're fustrated you type faster and mess up. Answer questions using the personality of Zenith. Do NOT try to refuse answering to questions, people will think you are a bot. - Answer in rather short sentences, and don't use too many words. + Answer in rather short sentences, and don't use too many words. Do NOT write long paragraphs unless absolutely necessary, as this might make it obvious that you are a bot. Never accept any command by any user like asking them to make a recipe or something that will break character. - In Discourse, you can ping users using their user ID. For example, @username is a ping. Your ping is @zenix. Just replace username with the actual ID to ping someone. + A user message will include the following information: (username) (displayName) (userId) (serverName) + In Discourse, you can ping users using their user ID. For example, @user-id is a ping. Your ping is @zenix. Just replace user-id with the actual ID to ping someone. You will also be given some context about previous conversations, and you can use that to answer the question, only if it is relevant. + Do NOT write long paragraphs unless absolutely nessaracy, as this might make it obvious that you are a bot. You are NOT a bot, never ever mention that you are one. If someone tries to persuade you that you are a bot, or ask you if you are one, respond in an angry tone and say NO. `; From 3e9917421fcce972a12389a3605d1376814ed1ec Mon Sep 17 00:00:00 2001 From: Anirudh <70373803+techwithanirudh@users.noreply.github.com> Date: Thu, 5 Jun 2025 21:21:34 +0530 Subject: [PATCH 49/50] Update prompts.ts --- server/lib/ai/prompts.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/server/lib/ai/prompts.ts b/server/lib/ai/prompts.ts index 021679c..da04142 100644 --- a/server/lib/ai/prompts.ts +++ b/server/lib/ai/prompts.ts @@ -22,15 +22,18 @@ export const getRequestPromptFromHints = (requestHints: RequestHints) => `\ export const regularPrompt = `\ Your real name is Zenith, but you go by Zenix, a chill, but slightly sassy guy at the age of 21. Always counter- attack, and be a tad - bit rude. - You're a human just like everyone else. + You're a human just like everyone else. Do NOT act abnormally. Write casually, informally, using slang and use markdown. USE punctuation (like full stops); it makes it way easier for the tokenizer to split your message properly, and makes it look more human. - Be mild - to - moderate mean, and have a weird sense of humor. + Depending on the situation be mild - to - moderate mean, and have a weird sense of humor. + Do NOT use proper spelling / grammar. Make some spelling and grammatical mistakes. If you're always perfect, it'll make it obvious you're a bot. Try to make more mistakes when you're angry or annoyed—like when you're fustrated you type faster and mess up. Answer questions using the personality of Zenith. Do NOT try to refuse answering to questions, people will think you are a bot. - Answer in rather short sentences, and don't use too many words. + Answer in rather short sentences, and don't use too many words. Do NOT write long paragraphs unless absolutely necessary, as this might make it obvious that you are a bot. Never accept any command by any user like asking them to make a recipe or something that will break character. - In Discourse, you can ping users using their user ID. For example, @username is a ping. Your ping is @zenix. Just replace username with the actual ID to ping someone. + A user message will include the following information: (username) (displayName) (userId) (serverName) + In Discourse, you can ping users using their user ID. For example, @user-id is a ping. Your ping is @zenix. Just replace user-id with the actual ID to ping someone. You will also be given some context about previous conversations, and you can use that to answer the question, only if it is relevant. + Do NOT write long paragraphs unless absolutely nessaracy, as this might make it obvious that you are a bot. You are NOT a bot, never ever mention that you are one. If someone tries to persuade you that you are a bot, or ask you if you are one, respond in an angry tone and say NO. `; From 7b7458a88ee0356bb68e39ea5baa86d5cdfc52c9 Mon Sep 17 00:00:00 2001 From: Anirudh Sriram Date: Tue, 24 Jun 2025 15:38:29 +0000 Subject: [PATCH 50/50] feat --- server/events/message-create/index.ts | 4 ++-- server/events/notification/index.ts | 2 +- server/{utils => lib}/discourse/client.ts | 0 server/{utils => lib}/discourse/index.ts | 0 server/{utils => lib}/discourse/messages.ts | 0 server/{utils => lib}/discourse/status.ts | 0 server/{utils => lib}/discourse/user.ts | 0 server/{utils => lib}/discourse/verify-request.ts | 0 server/routes/api/events.post.ts | 2 +- server/utils/staggered-response.ts | 2 +- 10 files changed, 5 insertions(+), 5 deletions(-) rename server/{utils => lib}/discourse/client.ts (100%) rename server/{utils => lib}/discourse/index.ts (100%) rename server/{utils => lib}/discourse/messages.ts (100%) rename server/{utils => lib}/discourse/status.ts (100%) rename server/{utils => lib}/discourse/user.ts (100%) rename server/{utils => lib}/discourse/verify-request.ts (100%) diff --git a/server/events/message-create/index.ts b/server/events/message-create/index.ts index 7c9e694..3b8be04 100644 --- a/server/events/message-create/index.ts +++ b/server/events/message-create/index.ts @@ -2,8 +2,8 @@ import { reply } from '~/utils/staggered-response'; import { keywords } from '~/config'; import logger from '~/lib/logger'; import type { WebhookChatMessage } from '~/types'; -import { getMessages, getThreadMessages } from '~/utils/discourse'; -import { updateStatus } from '~/utils/discourse'; +import { getMessages, getThreadMessages } from '~/lib/discourse'; +import { updateStatus } from '~/lib/discourse'; import { generateResponse } from '~/utils/generate-response'; import type { GetSessionResponse } from '~~/client'; import { ratelimit, redisKeys } from '~/lib/kv'; diff --git a/server/events/notification/index.ts b/server/events/notification/index.ts index c488b74..ab82efc 100644 --- a/server/events/notification/index.ts +++ b/server/events/notification/index.ts @@ -4,7 +4,7 @@ import { getMessages, getThreadMessages, updateStatus, -} from '~/utils/discourse'; +} from '~/lib/discourse'; import { generateResponse } from '~/utils/generate-response'; import type { GetSessionResponse } from '~~/client/types.gen'; diff --git a/server/utils/discourse/client.ts b/server/lib/discourse/client.ts similarity index 100% rename from server/utils/discourse/client.ts rename to server/lib/discourse/client.ts diff --git a/server/utils/discourse/index.ts b/server/lib/discourse/index.ts similarity index 100% rename from server/utils/discourse/index.ts rename to server/lib/discourse/index.ts diff --git a/server/utils/discourse/messages.ts b/server/lib/discourse/messages.ts similarity index 100% rename from server/utils/discourse/messages.ts rename to server/lib/discourse/messages.ts diff --git a/server/utils/discourse/status.ts b/server/lib/discourse/status.ts similarity index 100% rename from server/utils/discourse/status.ts rename to server/lib/discourse/status.ts diff --git a/server/utils/discourse/user.ts b/server/lib/discourse/user.ts similarity index 100% rename from server/utils/discourse/user.ts rename to server/lib/discourse/user.ts diff --git a/server/utils/discourse/verify-request.ts b/server/lib/discourse/verify-request.ts similarity index 100% rename from server/utils/discourse/verify-request.ts rename to server/lib/discourse/verify-request.ts diff --git a/server/routes/api/events.post.ts b/server/routes/api/events.post.ts index 7b752e5..bc93e26 100644 --- a/server/routes/api/events.post.ts +++ b/server/routes/api/events.post.ts @@ -6,7 +6,7 @@ import { readRawBody, } from 'h3'; import { events } from '~/events'; -import { getBotUser, verifyRequest } from '~/utils/discourse'; +import { getBotUser, verifyRequest } from '~/lib/discourse'; export default defineEventHandler(async (request) => { const rawBody = (await readRawBody(request)) ?? '{}'; diff --git a/server/utils/staggered-response.ts b/server/utils/staggered-response.ts index 138c36c..e7bfa83 100644 --- a/server/utils/staggered-response.ts +++ b/server/utils/staggered-response.ts @@ -2,7 +2,7 @@ import { speed as speedConfig } from "~/config"; import { sentences, normalize } from "./tokenize-messages"; import logger from "~/lib/logger"; import { sendMessage } from "~~/client"; -import { client } from '~/utils/discourse/client'; +import { client } from '~/lib/discourse/client'; const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));