├── .npmrc ├── src ├── lib │ ├── index.js │ └── api-url.js ├── routes │ ├── +page.svelte │ ├── webhook │ │ ├── status │ │ │ └── +server.js │ │ ├── activate │ │ │ └── +server.js │ │ └── receive │ │ │ └── +server.js │ └── verify │ │ └── [request_id] │ │ ├── +page.svelte │ │ └── +page.server.js ├── app.html └── hooks.server.js ├── static ├── s1.png ├── s2.jpeg └── favicon.png ├── .prettierignore ├── vite.config.js ├── .env.example ├── .prettierrc ├── .gitignore ├── db.sql ├── bot-get-update ├── package.json ├── index.mjs └── package-lock.json ├── svelte.config.js ├── package.json ├── README.md └── wrangler.toml /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /src/lib/index.js: -------------------------------------------------------------------------------- 1 | // place files you want to import through the `$lib` alias in this folder. 2 | -------------------------------------------------------------------------------- /static/s1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codenoid/sveltekit-telegram-captcha-bot/HEAD/static/s1.png -------------------------------------------------------------------------------- /static/s2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codenoid/sveltekit-telegram-captcha-bot/HEAD/static/s2.jpeg -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Ignore files for PNPM, NPM and YARN 2 | pnpm-lock.yaml 3 | package-lock.json 4 | yarn.lock 5 | -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codenoid/sveltekit-telegram-captcha-bot/HEAD/static/favicon.png -------------------------------------------------------------------------------- /src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 |

Welcome to SvelteKit

2 |

Visit kit.svelte.dev to read the documentation

3 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { sveltekit } from '@sveltejs/kit/vite'; 2 | import { defineConfig } from 'vite'; 3 | 4 | export default defineConfig({ 5 | plugins: [sveltekit()] 6 | }); 7 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | TG_WEBHOOK_VERIFY_SECRET="max256token" 2 | TG_BOT_TOKEN="" 3 | TURNSTILE_SECRET_KEY="" 4 | PUBLIC_TURNSTILE_SITE_KEY="" 5 | BASELIME_API_KEY="" 6 | ADMIN_USERNAME="" 7 | ADMIN_PASSWORD="" -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "singleQuote": true, 4 | "trailingComma": "none", 5 | "printWidth": 100, 6 | "plugins": ["prettier-plugin-svelte"], 7 | "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] 8 | } 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | vite.config.js.timestamp-* 10 | vite.config.ts.timestamp-* 11 | 12 | # wrangler files 13 | .wrangler 14 | .dev.vars 15 | -------------------------------------------------------------------------------- /db.sql: -------------------------------------------------------------------------------- 1 | PRAGMA defer_foreign_keys=TRUE; 2 | CREATE TABLE [tg_user] ("user_id" integer,"first_name" text,"last_name" text,"data" text,"automated_account" integer DEFAULT 0); 3 | CREATE TABLE [tg_waitlist] ("request_id" text PRIMARY KEY,"user_id" integer,"group_id" integer,"join_date" integer,"status" text, "code" TEXT, "bot_message_id" INTEGER); 4 | -------------------------------------------------------------------------------- /bot-get-update/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bot-get-update", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "MIT", 11 | "dependencies": { 12 | "nanoid": "^5.0.7", 13 | "node-telegram-bot-api": "^0.65.1" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %sveltekit.head% 8 | 9 | 10 |
%sveltekit.body%
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/lib/api-url.js: -------------------------------------------------------------------------------- 1 | import { env } from '$env/dynamic/private'; 2 | 3 | /** 4 | * Return url to telegram api, optionally with parameters added 5 | * https://github.com/cvzi/telegram-bot-cloudflare/blob/b149ea8d0300c5c879adee1a48f4841169ac64d8/bot4.js#L126 6 | */ 7 | function apiUrl(methodName, params = null) { 8 | let query = ''; 9 | if (params) { 10 | query = '?' + new URLSearchParams(params).toString(); 11 | } 12 | return `https://api.telegram.org/bot${env.TG_BOT_TOKEN}/${methodName}${query}`; 13 | } 14 | 15 | export { apiUrl }; 16 | -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from '@sveltejs/adapter-cloudflare'; 2 | 3 | /** @type {import('@sveltejs/kit').Config} */ 4 | const config = { 5 | kit: { 6 | // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. 7 | // If your environment is not supported or you settled on a specific environment, switch out the adapter. 8 | // See https://kit.svelte.dev/docs/adapters for more information about adapters. 9 | adapter: adapter(), 10 | csrf: { checkOrigin: false } 11 | } 12 | }; 13 | 14 | export default config; 15 | -------------------------------------------------------------------------------- /src/routes/webhook/status/+server.js: -------------------------------------------------------------------------------- 1 | import { env } from '$env/dynamic/private'; 2 | import { apiUrl } from '$lib/api-url.js'; 3 | import { error, json } from '@sveltejs/kit'; 4 | 5 | export async function GET({ request, url }) { 6 | const authorization = request.headers.get('Authorization'); 7 | 8 | if (!authorization || !authorization.startsWith('Basic ')) 9 | return new Response('Unauthorized', { 10 | status: 401, 11 | headers: { 12 | 'WWW-Authenticate': 'Basic realm="Protected"' 13 | } 14 | }); 15 | 16 | const token = authorization.replace('Basic ', ''); 17 | 18 | const [username, password] = atob(token).split(':'); 19 | 20 | if (username != env.ADMIN_USERNAME || password != env.ADMIN_PASSWORD) { 21 | error(401, 'unauthorized'); 22 | } 23 | 24 | const webhookUrl = `${url.protocol}//${url.hostname}/webhook/receive`; 25 | const r = await ( 26 | await fetch( 27 | apiUrl('getWebhookInfo', { url: webhookUrl, secret_token: env.TG_WEBHOOK_VERIFY_SECRET }) 28 | ) 29 | ).json(); 30 | return json(r); 31 | } 32 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-telegram-captcha-bot", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "dev": "vite dev", 7 | "build": "CF_PAGES=1 vite build", 8 | "preview": "npm run build && wrangler pages dev .svelte-kit/cloudflare", 9 | "lint": "prettier --check .", 10 | "format": "prettier --write .", 11 | "deploy": "npm run build && wrangler pages deploy .svelte-kit/cloudflare" 12 | }, 13 | "devDependencies": { 14 | "@sveltejs/adapter-auto": "^3.0.0", 15 | "@sveltejs/adapter-cloudflare": "^4.4.0", 16 | "@sveltejs/kit": "^2.0.0", 17 | "@sveltejs/vite-plugin-svelte": "^3.0.0", 18 | "prettier": "^3.1.1", 19 | "prettier-plugin-svelte": "^3.1.2", 20 | "svelte": "^4.2.7", 21 | "vite": "^5.0.3", 22 | "wrangler": "^3.50.0" 23 | }, 24 | "type": "module", 25 | "dependencies": { 26 | "@baselime/edge-logger": "^0.2.2", 27 | "@opentelemetry/api": "^1.8.0", 28 | "@telegram-auth/server": "^1.0.3", 29 | "ascii-text-generator": "^1.0.5", 30 | "is-in-subnet": "^4.0.1", 31 | "nanoid": "^5.0.7" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/routes/verify/[request_id]/+page.svelte: -------------------------------------------------------------------------------- 1 | 23 | 24 | 25 | Verifikasi Captcha Grup Telegram 26 | 27 | 28 |

Halo {data.name}, Lakukan verifikasi captcha

29 | 30 | {#if form} 31 | {form.message} 32 | {:else} 33 | lakukan verifikasi untuk bisa berdiskusi di grup. 34 | 35 |
36 |
37 | {#if clickMe} 38 | 39 | {:else} 40 | 41 | {/if} 42 |
43 | {/if} 44 | -------------------------------------------------------------------------------- /src/hooks.server.js: -------------------------------------------------------------------------------- 1 | import { BaselimeLogger } from '@baselime/edge-logger'; 2 | import { env } from '$env/dynamic/private'; 3 | import { dev } from '$app/environment'; 4 | 5 | export async function handle({ event, resolve }) { 6 | const context = event.platform?.context || { 7 | waitUntil: () => {}, 8 | passThroughOnException: () => {} 9 | }; 10 | 11 | var namespace = event.url.pathname; 12 | if (namespace.startsWith('/verify')) { 13 | namespace = '/verify'; 14 | } 15 | const logger = new BaselimeLogger({ 16 | ctx: context, 17 | namespace: namespace, 18 | dataset: 'tgcaptchabot-ds', 19 | apiKey: env.BASELIME_API_KEY, 20 | service: 'tgcaptchabot', 21 | isLocalDev: dev, 22 | requestId: crypto.randomUUID() 23 | }); 24 | 25 | event.locals.logger = logger; 26 | const response = await resolve(event); 27 | if (response.status >= 500) { 28 | const { url } = event; 29 | const ip = event.request.headers.get('cf-connecting-ip'); 30 | logger.error('WebAppError', { 31 | url: { 32 | href: url.href, 33 | origin: url.origin, 34 | protocol: url.protocol, 35 | hostname: url.hostname, 36 | port: url.port, 37 | pathname: url.pathname, 38 | search: url.search, 39 | hash: url.hash 40 | }, 41 | ip 42 | }); 43 | } 44 | 45 | context.waitUntil(logger.flush()); 46 | return response; 47 | } 48 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Telegram Captcha Bot /w Cloudflare Turnstile 2 | 3 | a captcha bot that leveraging telegram login api and cloudflare turnstile, add [@SvelteCaptchabot](https://t.me/@SvelteCaptchabot) to your group! 4 | 5 | | Chat Preview | Site Preview | 6 | | -------------------- | :-------------------: | 7 | | ![s1](static/s1.png) | ![s2](static/s2.jpeg) | 8 | 9 | ## Edit 10 | 11 | Due to worst quality of Telegram Webhook (sometimes Telegram just stop sending updates), I made another part that having task to getting the join service message, check the `bot-get-update` folder 12 | 13 | ## Technology 14 | 15 | - [x] Telegram API 16 | - [x] Baselime.io 17 | - [x] Cloudflare D1 18 | - [x] Cloudflare Pages 19 | - [ ] Cloudflare Durable Object 20 | 21 | ## Schema Init 22 | 23 | ```sh 24 | npm i 25 | npx wrangler d1 create db-name 26 | # paste the output inside wrangler.toml file 27 | npx wrangler d1 execute db-name --remote --file=db.sql 28 | ``` 29 | 30 | ## Bot Config @BotFather 31 | 32 | 1. make sure you turn off privacy config 33 | 2. setting's bot login domain with the same domain as webhook (for telegram auth purpose) 34 | 35 | ## Deployment 36 | 37 | 1. Deploy using Cloudflare Pages GUI 38 | 2. connect the forked version of this project 39 | 3. select `SvelteKit` preset 40 | 4. set environment variable (basically the same as .env.example) 41 | 5. Click "Deploy" 42 | 6. Access `yoursite.com/webhook/activate` to activate Telegram Webhook 43 | -------------------------------------------------------------------------------- /src/routes/webhook/activate/+server.js: -------------------------------------------------------------------------------- 1 | import { env } from '$env/dynamic/private'; 2 | import { apiUrl } from '$lib/api-url.js'; 3 | import { error, json } from '@sveltejs/kit'; 4 | 5 | export async function GET({ request, url }) { 6 | const authorization = request.headers.get('Authorization'); 7 | 8 | if (!authorization || !authorization.startsWith('Basic ')) 9 | return new Response('Unauthorized', { 10 | status: 401, 11 | headers: { 12 | 'WWW-Authenticate': 'Basic realm="Protected"' 13 | } 14 | }); 15 | 16 | const token = authorization.replace('Basic ', ''); 17 | 18 | const [username, password] = atob(token).split(':'); 19 | 20 | if (username != env.ADMIN_USERNAME || password != env.ADMIN_PASSWORD) { 21 | error(401, 'unauthorized'); 22 | } 23 | 24 | await fetch(apiUrl('deleteWebhook', {})); 25 | 26 | const allowed_updates = [ 27 | 'update_id', 28 | 'message', 29 | 'edited_message', 30 | 'channel_post', 31 | 'edited_channel_post', 32 | 'business_connection', 33 | 'business_message', 34 | 'edited_business_message', 35 | 'deleted_business_messages', 36 | 'message_reaction', 37 | 'message_reaction_count', 38 | 'inline_query', 39 | 'chosen_inline_result', 40 | 'shipping_query', 41 | 'pre_checkout_query', 42 | 'poll', 43 | 'poll_answer', 44 | 'my_chat_member', 45 | 'chat_member', 46 | 'chat_join_request', 47 | 'chat_boost', 48 | 'removed_chat_boost' 49 | ]; 50 | const webhookUrl = `${url.protocol}//${url.hostname}/webhook/receive`; 51 | const r = await ( 52 | await fetch( 53 | apiUrl('setWebhook', { 54 | url: webhookUrl, 55 | allowed_updates, 56 | max_connections: 100, 57 | secret_token: env.TG_WEBHOOK_VERIFY_SECRET 58 | }) 59 | ) 60 | ).json(); 61 | return json(r); 62 | } 63 | -------------------------------------------------------------------------------- /wrangler.toml: -------------------------------------------------------------------------------- 1 | #:schema node_modules/wrangler/config-schema.json 2 | name = "svelte-telegram-captcha-bot" 3 | compatibility_date = "2024-04-05" 4 | 5 | logpush = true 6 | # Variable bindings. These are arbitrary, plaintext strings (similar to environment variables) 7 | # Note: Use secrets to store sensitive data. 8 | # Docs: https://developers.cloudflare.com/pages/functions/bindings/#environment-variables 9 | # [vars] 10 | # MY_VARIABLE = "production_value" 11 | 12 | # Bind the Workers AI model catalog. Run machine learning models, powered by serverless GPUs, on Cloudflare’s global network 13 | # Docs: https://developers.cloudflare.com/pages/functions/bindings/#workers-ai 14 | # [ai] 15 | # binding = "AI" 16 | 17 | # Bind a D1 database. D1 is Cloudflare’s native serverless SQL database. 18 | # Docs: https://developers.cloudflare.com/pages/functions/bindings/#d1-databases 19 | [[d1_databases]] 20 | binding = "DB" 21 | database_name = "tgcaptchabot" 22 | database_id = "0fb60fed-f03f-482e-8581-5459e35a6ab7" 23 | 24 | # Bind a Durable Object. Durable objects are a scale-to-zero compute primitive based on the actor model. 25 | # Durable Objects can live for as long as needed. Use these when you need a long-running "server", such as in realtime apps. 26 | # Docs: https://developers.cloudflare.com/workers/runtime-apis/durable-objects 27 | # [[durable_objects.bindings]] 28 | # name = "MY_DURABLE_OBJECT" 29 | # class_name = "MyDurableObject" 30 | # script_name = 'my-durable-object' 31 | 32 | # Bind a KV Namespace. Use KV as persistent storage for small key-value pairs. 33 | # Docs: https://developers.cloudflare.com/pages/functions/bindings/#kv-namespaces 34 | # [[kv_namespaces]] 35 | # binding = "MY_KV_NAMESPACE" 36 | # id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 37 | 38 | # Bind a Queue producer. Use this binding to schedule an arbitrary task that may be processed later by a Queue consumer. 39 | # Docs: https://developers.cloudflare.com/pages/functions/bindings/#queue-producers 40 | # [[queues.producers]] 41 | # binding = "MY_QUEUE" 42 | # queue = "my-queue" 43 | 44 | # Bind an R2 Bucket. Use R2 to store arbitrarily large blobs of data, such as files. 45 | # Docs: https://developers.cloudflare.com/pages/functions/bindings/#r2-buckets 46 | # [[r2_buckets]] 47 | # binding = "MY_BUCKET" 48 | # bucket_name = "my-bucket" 49 | 50 | # Bind another Worker service. Use this binding to call another Worker without network overhead. 51 | # Docs: https://developers.cloudflare.com/pages/functions/bindings/#service-bindings 52 | # [[services]] 53 | # binding = "MY_SERVICE" 54 | # service = "my-service" -------------------------------------------------------------------------------- /bot-get-update/index.mjs: -------------------------------------------------------------------------------- 1 | import TelegramBot from 'node-telegram-bot-api'; 2 | import { nanoid } from 'nanoid'; 3 | // replace the value below with the Telegram token you receive from @BotFather 4 | const token = process.env.TG_BOT_TOKEN; 5 | const D1_TOKEN = process.env.D1_TOKEN; 6 | const D1_ACCOUNT_ID = process.env.D1_ACCOUNT_ID; 7 | const D1_DB_ID = process.env.D1_DB_ID; 8 | const BASE_URL = process.env.BASE_URL; // url of sveltekit with https:// 9 | 10 | // Create a bot that uses 'polling' to fetch new updates 11 | const bot = new TelegramBot(token, { polling: true }); 12 | 13 | // Listen for any kind of message. There are different kinds of 14 | // messages. 15 | bot.on('message', async (message) => { 16 | // console.log(msg) 17 | // const chatId = msg.chat.id; 18 | 19 | if ('new_chat_member' in message) { 20 | try { 21 | await fetch( 22 | apiUrl('deleteMessage', { chat_id: message.chat.id, message_id: message.message_id }) 23 | ); 24 | } catch (e) { 25 | console.log(e); 26 | } 27 | 28 | const newMember = message['new_chat_member']; 29 | 30 | if (newMember['is_bot']) { 31 | return; 32 | } 33 | 34 | var tgUser = await ( 35 | await fetch(d1Url(), { 36 | method: 'POST', 37 | headers: { 38 | Authorization: D1_TOKEN 39 | }, 40 | body: JSON.stringify({ 41 | params: [newMember.id], 42 | sql: 'SELECT * from tg_user WHERE user_id = ?' 43 | }) 44 | }) 45 | ).json(); 46 | tgUser = tgUser['result'][0]['results']; 47 | 48 | if (tgUser.length == 0) { 49 | await fetch(d1Url(), { 50 | method: 'POST', 51 | headers: { 52 | Authorization: D1_TOKEN 53 | }, 54 | body: JSON.stringify({ 55 | params: [ 56 | newMember.id, 57 | newMember.first_name, 58 | newMember?.last_name || '', 59 | JSON.stringify(newMember), 60 | 0 61 | ], 62 | sql: 'INSERT INTO tg_user VALUES (?, ?, ?, ?, ?)' 63 | }) 64 | }); 65 | } 66 | 67 | const restrictUntil = parseInt(new Date().getTime() / 1000 + 3.024e7); // 350 days 68 | 69 | var responseJson = await ( 70 | await fetch( 71 | apiUrl('restrictChatMember', { 72 | chat_id: message.chat.id, 73 | user_id: newMember.id, 74 | until_date: restrictUntil, 75 | permissions: JSON.stringify({ 76 | can_send_messages: false, 77 | can_send_media_messages: false, 78 | can_send_other_messages: false, 79 | can_add_web_page_previews: false, 80 | can_send_polls: false, 81 | can_change_info: false, 82 | can_pin_messages: false, 83 | can_manage_topics: false, 84 | can_invite_users: false 85 | }) 86 | }) 87 | ) 88 | ).json(); 89 | if (!responseJson.ok) { 90 | console.log(responseJson); 91 | return; 92 | } 93 | 94 | const requestId = nanoid(); 95 | 96 | var responseJson = await ( 97 | await fetch( 98 | apiUrl('sendMessage', { 99 | chat_id: message.chat.id, 100 | parse_mode: 'MarkdownV2', 101 | protect_content: true, 102 | text: `Halo [${newMember.first_name}](tg://user?id=${newMember.id}), Klik Verifikasi untuk bisa mengirim pesan`, 103 | reply_markup: JSON.stringify({ 104 | inline_keyboard: [ 105 | [{ text: 'Verifikasi', login_url: { url: `${BASE_URL}/verify/${requestId}` } }] 106 | ] 107 | }) 108 | }) 109 | ) 110 | ).json(); 111 | if (!responseJson.ok) { 112 | console.log(responseJson); 113 | return; 114 | } 115 | 116 | if (responseJson.ok) { 117 | await fetch(d1Url(), { 118 | method: 'POST', 119 | headers: { 120 | Authorization: D1_TOKEN 121 | }, 122 | body: JSON.stringify({ 123 | params: [ 124 | requestId, 125 | newMember.id, 126 | message.chat.id, 127 | message.date, 128 | 'wait-for-verification', 129 | nanoid(4), 130 | responseJson.result.message_id 131 | ], 132 | sql: 'INSERT INTO tg_waitlist VALUES (?, ?, ?, ?, ?, ?, ?)' 133 | }) 134 | }); 135 | } 136 | } 137 | }); 138 | 139 | function apiUrl(methodName, params = null) { 140 | let query = ''; 141 | if (params) { 142 | query = '?' + new URLSearchParams(params).toString(); 143 | } 144 | return `https://api.telegram.org/bot${process.env.TG_BOT_TOKEN}/${methodName}${query}`; 145 | } 146 | 147 | function d1Url() { 148 | return `https://api.cloudflare.com/client/v4/accounts/${D1_ACCOUNT_ID}/d1/database/${D1_DB_ID}/query`; 149 | } 150 | -------------------------------------------------------------------------------- /src/routes/webhook/receive/+server.js: -------------------------------------------------------------------------------- 1 | import { env } from '$env/dynamic/private'; 2 | import { json } from '@sveltejs/kit'; 3 | import { apiUrl } from '$lib/api-url.js'; 4 | import { isInSubnet } from 'is-in-subnet'; 5 | import { customAlphabet } from 'nanoid'; 6 | 7 | const nanoid = customAlphabet('23456789ABCDEFGHJKLMNPRTWXYZ', 10); 8 | 9 | export async function POST({ request, url, platform, locals }) { 10 | const ip = request.headers.get('cf-connecting-ip'); 11 | 12 | const payload = await request.json(); 13 | 14 | if (!isInSubnet(ip, '149.154.160.0/20') && !isInSubnet(ip, '91.108.4.0/22')) { 15 | locals.logger.info('Request from outside allowed subnet', { ip }); 16 | return json({}); 17 | } 18 | 19 | if ('message' in payload) { 20 | const message = payload.message; 21 | 22 | if (message.from.is_bot) { 23 | return json({}); 24 | } 25 | 26 | if ('new_chat_member' in message) { 27 | locals.logger.info('new webhook request', { ...payload, ip }); 28 | locals.logger.flush(); 29 | 30 | try { 31 | await fetch( 32 | apiUrl('deleteMessage', { chat_id: message.chat.id, message_id: message.message_id }) 33 | ); 34 | } catch (e) { 35 | locals.logger.error('service message delete', e); 36 | } 37 | 38 | const newMember = message['new_chat_member']; 39 | 40 | if (newMember['is_bot']) { 41 | return json({}); 42 | } 43 | 44 | const tgUser = await platform.env.DB.prepare('SELECT * from tg_user WHERE user_id = ?') 45 | .bind(newMember.id) 46 | .first(); 47 | 48 | if (!tgUser) { 49 | await platform.env.DB.prepare('INSERT INTO tg_user VALUES (?, ?, ?, ?, ?)') 50 | .bind( 51 | newMember.id, 52 | newMember.first_name, 53 | newMember?.last_name || '', 54 | JSON.stringify(newMember), 55 | 0 56 | ) 57 | .run(); 58 | } else { 59 | switch (tgUser.automated_account) { 60 | case 1: 61 | await fetch( 62 | apiUrl('banChatMember', { 63 | chat_id: message.chat.id, 64 | user_id: newMember.id, 65 | until_date: 0, 66 | revoke_messages: true 67 | }) 68 | ); 69 | locals.logger.warn('Banned user with automated account', { payload: { newMember } }); 70 | return json({}); 71 | case 2: 72 | locals.logger.info('Allowing user with non-automated account', { 73 | payload: { newMember } 74 | }); 75 | return json({}); 76 | } 77 | } 78 | 79 | const restrictUntil = parseInt(new Date().getTime() / 1000 + 3.024e7); // 350 days 80 | 81 | var responseJson = await ( 82 | await fetch( 83 | apiUrl('restrictChatMember', { 84 | chat_id: message.chat.id, 85 | user_id: newMember.id, 86 | until_date: restrictUntil, 87 | permissions: JSON.stringify({ 88 | can_send_messages: false, 89 | can_send_media_messages: false, 90 | can_send_other_messages: false, 91 | can_add_web_page_previews: false, 92 | can_send_polls: false, 93 | can_change_info: false, 94 | can_pin_messages: false, 95 | can_manage_topics: false, 96 | can_invite_users: false 97 | }) 98 | }) 99 | ) 100 | ).json(); 101 | if (!responseJson.ok) { 102 | locals.logger.error('error restrict', { payload: { response: responseJson, request } }); 103 | error(500, 'error'); 104 | } 105 | 106 | const requestId = nanoid(); 107 | 108 | var responseJson = await ( 109 | await fetch( 110 | apiUrl('sendMessage', { 111 | chat_id: message.chat.id, 112 | parse_mode: 'MarkdownV2', 113 | protect_content: true, 114 | text: `Halo [${newMember.first_name}](tg://user?id=${newMember.id}), Klik Verifikasi untuk bisa mengirim pesan`, 115 | reply_markup: JSON.stringify({ 116 | inline_keyboard: [ 117 | [{ text: 'Verifikasi', login_url: { url: `${url.origin}/verify/${requestId}` } }] 118 | ] 119 | }) 120 | }) 121 | ) 122 | ).json(); 123 | if (!responseJson.ok) { 124 | locals.logger.error('error send greeting', { 125 | payload: { response: responseJson, request } 126 | }); 127 | error(500, 'error'); 128 | } 129 | 130 | if (responseJson.ok) { 131 | await platform.env.DB.prepare('INSERT INTO tg_waitlist VALUES (?, ?, ?, ?, ?, ?, ?)') 132 | .bind( 133 | requestId, 134 | newMember.id, 135 | message.chat.id, 136 | message.date, 137 | 'wait-for-verification', 138 | nanoid(4), 139 | responseJson.result.message_id 140 | ) 141 | .run(); 142 | } 143 | } 144 | } 145 | 146 | return json({}); 147 | } 148 | -------------------------------------------------------------------------------- /src/routes/verify/[request_id]/+page.server.js: -------------------------------------------------------------------------------- 1 | import { error } from '@sveltejs/kit'; 2 | import { env } from '$env/dynamic/private'; 3 | import { AuthDataValidator } from '@telegram-auth/server'; 4 | import { apiUrl } from '$lib/api-url.js'; 5 | 6 | /* 7 | * @type {import('./$types').PageServerLoad} 8 | */ 9 | export async function load({ params, platform, url, locals }) { 10 | const tgWaitlist = await platform.env.DB.prepare( 11 | `SELECT tg_waitlist.*, tg_user.first_name, tg_user.last_name 12 | FROM tg_waitlist 13 | JOIN tg_user ON tg_waitlist.user_id = tg_user.user_id 14 | WHERE tg_waitlist.request_id = ?;` 15 | ) 16 | .bind(params.request_id) 17 | .first(); 18 | 19 | if (!tgWaitlist) { 20 | error(404, 'invalid request id'); 21 | } 22 | 23 | try { 24 | const validator = new AuthDataValidator({ botToken: env.TG_BOT_TOKEN }); 25 | const user = await validator.validate(url.searchParams); 26 | 27 | if (user.id != tgWaitlist.user_id) { 28 | error(403, 'forbidden'); 29 | } 30 | } catch (e) { 31 | locals.logger.error('invalid signature', { payload: { error: e.message } }); 32 | return error(403, 'invalid signature ' + e.message); 33 | } 34 | 35 | return { 36 | urlParam: url.searchParams.toString(), 37 | name: tgWaitlist.first_name + (tgWaitlist.last_name || '') 38 | }; 39 | } 40 | 41 | export const actions = { 42 | default: async ({ request, params, platform, url, locals }) => { 43 | const form = await request.formData(); 44 | const token = form.get('cf-turnstile-response'); 45 | const ip = request.headers.get('CF-Connecting-IP'); 46 | 47 | let formData = new FormData(); 48 | formData.append('secret', env.TURNSTILE_SECRET_KEY); 49 | formData.append('response', token); 50 | formData.append('remoteip', ip); 51 | 52 | const cfUrl = 'https://challenges.cloudflare.com/turnstile/v0/siteverify'; 53 | const captchaRes = await fetch(cfUrl, { body: formData, method: 'POST' }); 54 | const outcome = await captchaRes.json(); 55 | 56 | if (outcome?.success != true) { 57 | locals.logger.warn('Failed to validate Captcha', { payload: { request } }); 58 | return { success: false, message: 'Gagal Memvalidasi Captcha' }; 59 | } 60 | 61 | const tgWaitlist = await platform.env.DB.prepare( 62 | `SELECT tg_waitlist.*, tg_user.first_name, tg_user.last_name 63 | FROM tg_waitlist 64 | JOIN tg_user ON tg_waitlist.user_id = tg_user.user_id 65 | WHERE tg_waitlist.request_id = ?;` 66 | ) 67 | .bind(params.request_id) 68 | .first(); 69 | 70 | if (!tgWaitlist) { 71 | error(404, 'invalid request id'); 72 | } 73 | 74 | try { 75 | const validator = new AuthDataValidator({ botToken: env.TG_BOT_TOKEN }); 76 | const user = await validator.validate(url.searchParams); 77 | 78 | if (user.id != tgWaitlist.user_id) { 79 | error(403, 'forbidden'); 80 | } 81 | } catch (e) { 82 | locals.logger.error('invalid signature', { payload: { error: e.message, request } }); 83 | return error(403, 'invalid signature ' + e.message); 84 | } 85 | 86 | var responseJson = await ( 87 | await fetch( 88 | apiUrl('restrictChatMember', { 89 | chat_id: tgWaitlist.group_id, 90 | user_id: tgWaitlist.user_id, 91 | permissions: JSON.stringify({ 92 | can_send_messages: true, 93 | can_send_audios: true, 94 | can_send_documents: true, 95 | can_send_photos: true, 96 | can_send_videos: true, 97 | can_send_video_notes: true, 98 | can_send_voice_notes: true, 99 | can_send_polls: true, 100 | can_send_other_message: true, 101 | can_add_web_page_previews: true, 102 | can_change_info: true, 103 | can_invite_users: true, 104 | can_pin_messages: true, 105 | can_manage_topics: true 106 | }) 107 | }) 108 | ) 109 | ).json(); 110 | 111 | if (!responseJson.ok) { 112 | locals.logger.error('error tg update', { payload: { response: responseJson, request } }); 113 | error(500, 'error tg update'); 114 | } 115 | 116 | var responseJson = await ( 117 | await fetch( 118 | apiUrl('deleteMessage', { 119 | chat_id: tgWaitlist.group_id, 120 | message_id: tgWaitlist.bot_message_id 121 | }) 122 | ) 123 | ).json(); 124 | 125 | if (!responseJson.ok) { 126 | locals.logger.error('error tg update', { payload: { response: responseJson, request } }); 127 | error(500, 'tg sudah di allow, namun error menghapus pesan robot'); 128 | } 129 | 130 | await platform.env.DB.prepare("UPDATE tg_waitlist SET status = 'verified' WHERE request_id = ?") 131 | .bind(params.request_id) 132 | .run(); 133 | 134 | return { success: true, message: 'Berhasil memverifikasi, silahkan kembali ke grup' }; 135 | } 136 | }; 137 | -------------------------------------------------------------------------------- /bot-get-update/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bot-get-update", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "bot-get-update", 9 | "version": "1.0.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "nanoid": "^5.0.7", 13 | "node-telegram-bot-api": "^0.65.1" 14 | } 15 | }, 16 | "node_modules/@cypress/request": { 17 | "version": "3.0.1", 18 | "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", 19 | "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", 20 | "dependencies": { 21 | "aws-sign2": "~0.7.0", 22 | "aws4": "^1.8.0", 23 | "caseless": "~0.12.0", 24 | "combined-stream": "~1.0.6", 25 | "extend": "~3.0.2", 26 | "forever-agent": "~0.6.1", 27 | "form-data": "~2.3.2", 28 | "http-signature": "~1.3.6", 29 | "is-typedarray": "~1.0.0", 30 | "isstream": "~0.1.2", 31 | "json-stringify-safe": "~5.0.1", 32 | "mime-types": "~2.1.19", 33 | "performance-now": "^2.1.0", 34 | "qs": "6.10.4", 35 | "safe-buffer": "^5.1.2", 36 | "tough-cookie": "^4.1.3", 37 | "tunnel-agent": "^0.6.0", 38 | "uuid": "^8.3.2" 39 | }, 40 | "engines": { 41 | "node": ">= 6" 42 | } 43 | }, 44 | "node_modules/@cypress/request-promise": { 45 | "version": "5.0.0", 46 | "resolved": "https://registry.npmjs.org/@cypress/request-promise/-/request-promise-5.0.0.tgz", 47 | "integrity": "sha512-eKdYVpa9cBEw2kTBlHeu1PP16Blwtum6QHg/u9s/MoHkZfuo1pRGka1VlUHXF5kdew82BvOJVVGk0x8X0nbp+w==", 48 | "dependencies": { 49 | "bluebird": "^3.5.0", 50 | "request-promise-core": "1.1.3", 51 | "stealthy-require": "^1.1.1", 52 | "tough-cookie": "^4.1.3" 53 | }, 54 | "engines": { 55 | "node": ">=0.10.0" 56 | }, 57 | "peerDependencies": { 58 | "@cypress/request": "^3.0.0" 59 | } 60 | }, 61 | "node_modules/ajv": { 62 | "version": "6.12.6", 63 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 64 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 65 | "peer": true, 66 | "dependencies": { 67 | "fast-deep-equal": "^3.1.1", 68 | "fast-json-stable-stringify": "^2.0.0", 69 | "json-schema-traverse": "^0.4.1", 70 | "uri-js": "^4.2.2" 71 | }, 72 | "funding": { 73 | "type": "github", 74 | "url": "https://github.com/sponsors/epoberezkin" 75 | } 76 | }, 77 | "node_modules/array-buffer-byte-length": { 78 | "version": "1.0.1", 79 | "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", 80 | "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", 81 | "dependencies": { 82 | "call-bind": "^1.0.5", 83 | "is-array-buffer": "^3.0.4" 84 | }, 85 | "engines": { 86 | "node": ">= 0.4" 87 | }, 88 | "funding": { 89 | "url": "https://github.com/sponsors/ljharb" 90 | } 91 | }, 92 | "node_modules/array.prototype.findindex": { 93 | "version": "2.2.3", 94 | "resolved": "https://registry.npmjs.org/array.prototype.findindex/-/array.prototype.findindex-2.2.3.tgz", 95 | "integrity": "sha512-Saz3pStJ2X5bg27GTWWLyhJrcwbMVLsnbho2zUVQFW2Pgrh0mSKKvAeZr6BPww7E1AygK33cX7w0W1YERC1RHA==", 96 | "dependencies": { 97 | "call-bind": "^1.0.7", 98 | "define-properties": "^1.2.1", 99 | "es-abstract": "^1.23.0", 100 | "es-object-atoms": "^1.0.0", 101 | "es-shim-unscopables": "^1.0.2" 102 | } 103 | }, 104 | "node_modules/arraybuffer.prototype.slice": { 105 | "version": "1.0.3", 106 | "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", 107 | "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", 108 | "dependencies": { 109 | "array-buffer-byte-length": "^1.0.1", 110 | "call-bind": "^1.0.5", 111 | "define-properties": "^1.2.1", 112 | "es-abstract": "^1.22.3", 113 | "es-errors": "^1.2.1", 114 | "get-intrinsic": "^1.2.3", 115 | "is-array-buffer": "^3.0.4", 116 | "is-shared-array-buffer": "^1.0.2" 117 | }, 118 | "engines": { 119 | "node": ">= 0.4" 120 | }, 121 | "funding": { 122 | "url": "https://github.com/sponsors/ljharb" 123 | } 124 | }, 125 | "node_modules/asn1": { 126 | "version": "0.2.6", 127 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", 128 | "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", 129 | "dependencies": { 130 | "safer-buffer": "~2.1.0" 131 | } 132 | }, 133 | "node_modules/assert-plus": { 134 | "version": "1.0.0", 135 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 136 | "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", 137 | "engines": { 138 | "node": ">=0.8" 139 | } 140 | }, 141 | "node_modules/asynckit": { 142 | "version": "0.4.0", 143 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 144 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 145 | }, 146 | "node_modules/available-typed-arrays": { 147 | "version": "1.0.7", 148 | "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", 149 | "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", 150 | "dependencies": { 151 | "possible-typed-array-names": "^1.0.0" 152 | }, 153 | "engines": { 154 | "node": ">= 0.4" 155 | }, 156 | "funding": { 157 | "url": "https://github.com/sponsors/ljharb" 158 | } 159 | }, 160 | "node_modules/aws-sign2": { 161 | "version": "0.7.0", 162 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 163 | "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", 164 | "engines": { 165 | "node": "*" 166 | } 167 | }, 168 | "node_modules/aws4": { 169 | "version": "1.12.0", 170 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", 171 | "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" 172 | }, 173 | "node_modules/bcrypt-pbkdf": { 174 | "version": "1.0.2", 175 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 176 | "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", 177 | "dependencies": { 178 | "tweetnacl": "^0.14.3" 179 | } 180 | }, 181 | "node_modules/bl": { 182 | "version": "1.2.3", 183 | "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", 184 | "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", 185 | "dependencies": { 186 | "readable-stream": "^2.3.5", 187 | "safe-buffer": "^5.1.1" 188 | } 189 | }, 190 | "node_modules/bluebird": { 191 | "version": "3.7.2", 192 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 193 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" 194 | }, 195 | "node_modules/call-bind": { 196 | "version": "1.0.7", 197 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", 198 | "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", 199 | "dependencies": { 200 | "es-define-property": "^1.0.0", 201 | "es-errors": "^1.3.0", 202 | "function-bind": "^1.1.2", 203 | "get-intrinsic": "^1.2.4", 204 | "set-function-length": "^1.2.1" 205 | }, 206 | "engines": { 207 | "node": ">= 0.4" 208 | }, 209 | "funding": { 210 | "url": "https://github.com/sponsors/ljharb" 211 | } 212 | }, 213 | "node_modules/caseless": { 214 | "version": "0.12.0", 215 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 216 | "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" 217 | }, 218 | "node_modules/combined-stream": { 219 | "version": "1.0.8", 220 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 221 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 222 | "dependencies": { 223 | "delayed-stream": "~1.0.0" 224 | }, 225 | "engines": { 226 | "node": ">= 0.8" 227 | } 228 | }, 229 | "node_modules/core-util-is": { 230 | "version": "1.0.3", 231 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 232 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 233 | }, 234 | "node_modules/dashdash": { 235 | "version": "1.14.1", 236 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 237 | "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", 238 | "dependencies": { 239 | "assert-plus": "^1.0.0" 240 | }, 241 | "engines": { 242 | "node": ">=0.10" 243 | } 244 | }, 245 | "node_modules/data-view-buffer": { 246 | "version": "1.0.1", 247 | "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", 248 | "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", 249 | "dependencies": { 250 | "call-bind": "^1.0.6", 251 | "es-errors": "^1.3.0", 252 | "is-data-view": "^1.0.1" 253 | }, 254 | "engines": { 255 | "node": ">= 0.4" 256 | }, 257 | "funding": { 258 | "url": "https://github.com/sponsors/ljharb" 259 | } 260 | }, 261 | "node_modules/data-view-byte-length": { 262 | "version": "1.0.1", 263 | "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", 264 | "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", 265 | "dependencies": { 266 | "call-bind": "^1.0.7", 267 | "es-errors": "^1.3.0", 268 | "is-data-view": "^1.0.1" 269 | }, 270 | "engines": { 271 | "node": ">= 0.4" 272 | }, 273 | "funding": { 274 | "url": "https://github.com/sponsors/ljharb" 275 | } 276 | }, 277 | "node_modules/data-view-byte-offset": { 278 | "version": "1.0.0", 279 | "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", 280 | "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", 281 | "dependencies": { 282 | "call-bind": "^1.0.6", 283 | "es-errors": "^1.3.0", 284 | "is-data-view": "^1.0.1" 285 | }, 286 | "engines": { 287 | "node": ">= 0.4" 288 | }, 289 | "funding": { 290 | "url": "https://github.com/sponsors/ljharb" 291 | } 292 | }, 293 | "node_modules/debug": { 294 | "version": "3.2.7", 295 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 296 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 297 | "dependencies": { 298 | "ms": "^2.1.1" 299 | } 300 | }, 301 | "node_modules/define-data-property": { 302 | "version": "1.1.4", 303 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", 304 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", 305 | "dependencies": { 306 | "es-define-property": "^1.0.0", 307 | "es-errors": "^1.3.0", 308 | "gopd": "^1.0.1" 309 | }, 310 | "engines": { 311 | "node": ">= 0.4" 312 | }, 313 | "funding": { 314 | "url": "https://github.com/sponsors/ljharb" 315 | } 316 | }, 317 | "node_modules/define-properties": { 318 | "version": "1.2.1", 319 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", 320 | "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", 321 | "dependencies": { 322 | "define-data-property": "^1.0.1", 323 | "has-property-descriptors": "^1.0.0", 324 | "object-keys": "^1.1.1" 325 | }, 326 | "engines": { 327 | "node": ">= 0.4" 328 | }, 329 | "funding": { 330 | "url": "https://github.com/sponsors/ljharb" 331 | } 332 | }, 333 | "node_modules/delayed-stream": { 334 | "version": "1.0.0", 335 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 336 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 337 | "engines": { 338 | "node": ">=0.4.0" 339 | } 340 | }, 341 | "node_modules/ecc-jsbn": { 342 | "version": "0.1.2", 343 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 344 | "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", 345 | "dependencies": { 346 | "jsbn": "~0.1.0", 347 | "safer-buffer": "^2.1.0" 348 | } 349 | }, 350 | "node_modules/end-of-stream": { 351 | "version": "1.4.4", 352 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 353 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 354 | "dependencies": { 355 | "once": "^1.4.0" 356 | } 357 | }, 358 | "node_modules/es-abstract": { 359 | "version": "1.23.3", 360 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", 361 | "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", 362 | "dependencies": { 363 | "array-buffer-byte-length": "^1.0.1", 364 | "arraybuffer.prototype.slice": "^1.0.3", 365 | "available-typed-arrays": "^1.0.7", 366 | "call-bind": "^1.0.7", 367 | "data-view-buffer": "^1.0.1", 368 | "data-view-byte-length": "^1.0.1", 369 | "data-view-byte-offset": "^1.0.0", 370 | "es-define-property": "^1.0.0", 371 | "es-errors": "^1.3.0", 372 | "es-object-atoms": "^1.0.0", 373 | "es-set-tostringtag": "^2.0.3", 374 | "es-to-primitive": "^1.2.1", 375 | "function.prototype.name": "^1.1.6", 376 | "get-intrinsic": "^1.2.4", 377 | "get-symbol-description": "^1.0.2", 378 | "globalthis": "^1.0.3", 379 | "gopd": "^1.0.1", 380 | "has-property-descriptors": "^1.0.2", 381 | "has-proto": "^1.0.3", 382 | "has-symbols": "^1.0.3", 383 | "hasown": "^2.0.2", 384 | "internal-slot": "^1.0.7", 385 | "is-array-buffer": "^3.0.4", 386 | "is-callable": "^1.2.7", 387 | "is-data-view": "^1.0.1", 388 | "is-negative-zero": "^2.0.3", 389 | "is-regex": "^1.1.4", 390 | "is-shared-array-buffer": "^1.0.3", 391 | "is-string": "^1.0.7", 392 | "is-typed-array": "^1.1.13", 393 | "is-weakref": "^1.0.2", 394 | "object-inspect": "^1.13.1", 395 | "object-keys": "^1.1.1", 396 | "object.assign": "^4.1.5", 397 | "regexp.prototype.flags": "^1.5.2", 398 | "safe-array-concat": "^1.1.2", 399 | "safe-regex-test": "^1.0.3", 400 | "string.prototype.trim": "^1.2.9", 401 | "string.prototype.trimend": "^1.0.8", 402 | "string.prototype.trimstart": "^1.0.8", 403 | "typed-array-buffer": "^1.0.2", 404 | "typed-array-byte-length": "^1.0.1", 405 | "typed-array-byte-offset": "^1.0.2", 406 | "typed-array-length": "^1.0.6", 407 | "unbox-primitive": "^1.0.2", 408 | "which-typed-array": "^1.1.15" 409 | }, 410 | "engines": { 411 | "node": ">= 0.4" 412 | }, 413 | "funding": { 414 | "url": "https://github.com/sponsors/ljharb" 415 | } 416 | }, 417 | "node_modules/es-define-property": { 418 | "version": "1.0.0", 419 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", 420 | "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", 421 | "dependencies": { 422 | "get-intrinsic": "^1.2.4" 423 | }, 424 | "engines": { 425 | "node": ">= 0.4" 426 | } 427 | }, 428 | "node_modules/es-errors": { 429 | "version": "1.3.0", 430 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 431 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 432 | "engines": { 433 | "node": ">= 0.4" 434 | } 435 | }, 436 | "node_modules/es-object-atoms": { 437 | "version": "1.0.0", 438 | "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", 439 | "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", 440 | "dependencies": { 441 | "es-errors": "^1.3.0" 442 | }, 443 | "engines": { 444 | "node": ">= 0.4" 445 | } 446 | }, 447 | "node_modules/es-set-tostringtag": { 448 | "version": "2.0.3", 449 | "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", 450 | "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", 451 | "dependencies": { 452 | "get-intrinsic": "^1.2.4", 453 | "has-tostringtag": "^1.0.2", 454 | "hasown": "^2.0.1" 455 | }, 456 | "engines": { 457 | "node": ">= 0.4" 458 | } 459 | }, 460 | "node_modules/es-shim-unscopables": { 461 | "version": "1.0.2", 462 | "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", 463 | "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", 464 | "dependencies": { 465 | "hasown": "^2.0.0" 466 | } 467 | }, 468 | "node_modules/es-to-primitive": { 469 | "version": "1.2.1", 470 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 471 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 472 | "dependencies": { 473 | "is-callable": "^1.1.4", 474 | "is-date-object": "^1.0.1", 475 | "is-symbol": "^1.0.2" 476 | }, 477 | "engines": { 478 | "node": ">= 0.4" 479 | }, 480 | "funding": { 481 | "url": "https://github.com/sponsors/ljharb" 482 | } 483 | }, 484 | "node_modules/eventemitter3": { 485 | "version": "3.1.2", 486 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", 487 | "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" 488 | }, 489 | "node_modules/extend": { 490 | "version": "3.0.2", 491 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 492 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 493 | }, 494 | "node_modules/extsprintf": { 495 | "version": "1.3.0", 496 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 497 | "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", 498 | "engines": [ 499 | "node >=0.6.0" 500 | ] 501 | }, 502 | "node_modules/fast-deep-equal": { 503 | "version": "3.1.3", 504 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 505 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 506 | "peer": true 507 | }, 508 | "node_modules/fast-json-stable-stringify": { 509 | "version": "2.1.0", 510 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 511 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 512 | "peer": true 513 | }, 514 | "node_modules/file-type": { 515 | "version": "3.9.0", 516 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", 517 | "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", 518 | "engines": { 519 | "node": ">=0.10.0" 520 | } 521 | }, 522 | "node_modules/for-each": { 523 | "version": "0.3.3", 524 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", 525 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", 526 | "dependencies": { 527 | "is-callable": "^1.1.3" 528 | } 529 | }, 530 | "node_modules/forever-agent": { 531 | "version": "0.6.1", 532 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 533 | "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", 534 | "engines": { 535 | "node": "*" 536 | } 537 | }, 538 | "node_modules/form-data": { 539 | "version": "2.3.3", 540 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 541 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 542 | "dependencies": { 543 | "asynckit": "^0.4.0", 544 | "combined-stream": "^1.0.6", 545 | "mime-types": "^2.1.12" 546 | }, 547 | "engines": { 548 | "node": ">= 0.12" 549 | } 550 | }, 551 | "node_modules/function-bind": { 552 | "version": "1.1.2", 553 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 554 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 555 | "funding": { 556 | "url": "https://github.com/sponsors/ljharb" 557 | } 558 | }, 559 | "node_modules/function.prototype.name": { 560 | "version": "1.1.6", 561 | "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", 562 | "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", 563 | "dependencies": { 564 | "call-bind": "^1.0.2", 565 | "define-properties": "^1.2.0", 566 | "es-abstract": "^1.22.1", 567 | "functions-have-names": "^1.2.3" 568 | }, 569 | "engines": { 570 | "node": ">= 0.4" 571 | }, 572 | "funding": { 573 | "url": "https://github.com/sponsors/ljharb" 574 | } 575 | }, 576 | "node_modules/functions-have-names": { 577 | "version": "1.2.3", 578 | "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", 579 | "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", 580 | "funding": { 581 | "url": "https://github.com/sponsors/ljharb" 582 | } 583 | }, 584 | "node_modules/get-intrinsic": { 585 | "version": "1.2.4", 586 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", 587 | "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", 588 | "dependencies": { 589 | "es-errors": "^1.3.0", 590 | "function-bind": "^1.1.2", 591 | "has-proto": "^1.0.1", 592 | "has-symbols": "^1.0.3", 593 | "hasown": "^2.0.0" 594 | }, 595 | "engines": { 596 | "node": ">= 0.4" 597 | }, 598 | "funding": { 599 | "url": "https://github.com/sponsors/ljharb" 600 | } 601 | }, 602 | "node_modules/get-symbol-description": { 603 | "version": "1.0.2", 604 | "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", 605 | "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", 606 | "dependencies": { 607 | "call-bind": "^1.0.5", 608 | "es-errors": "^1.3.0", 609 | "get-intrinsic": "^1.2.4" 610 | }, 611 | "engines": { 612 | "node": ">= 0.4" 613 | }, 614 | "funding": { 615 | "url": "https://github.com/sponsors/ljharb" 616 | } 617 | }, 618 | "node_modules/getpass": { 619 | "version": "0.1.7", 620 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 621 | "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", 622 | "dependencies": { 623 | "assert-plus": "^1.0.0" 624 | } 625 | }, 626 | "node_modules/globalthis": { 627 | "version": "1.0.3", 628 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", 629 | "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", 630 | "dependencies": { 631 | "define-properties": "^1.1.3" 632 | }, 633 | "engines": { 634 | "node": ">= 0.4" 635 | }, 636 | "funding": { 637 | "url": "https://github.com/sponsors/ljharb" 638 | } 639 | }, 640 | "node_modules/gopd": { 641 | "version": "1.0.1", 642 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 643 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 644 | "dependencies": { 645 | "get-intrinsic": "^1.1.3" 646 | }, 647 | "funding": { 648 | "url": "https://github.com/sponsors/ljharb" 649 | } 650 | }, 651 | "node_modules/har-schema": { 652 | "version": "2.0.0", 653 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 654 | "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", 655 | "peer": true, 656 | "engines": { 657 | "node": ">=4" 658 | } 659 | }, 660 | "node_modules/har-validator": { 661 | "version": "5.1.5", 662 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", 663 | "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", 664 | "deprecated": "this library is no longer supported", 665 | "peer": true, 666 | "dependencies": { 667 | "ajv": "^6.12.3", 668 | "har-schema": "^2.0.0" 669 | }, 670 | "engines": { 671 | "node": ">=6" 672 | } 673 | }, 674 | "node_modules/has-bigints": { 675 | "version": "1.0.2", 676 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", 677 | "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", 678 | "funding": { 679 | "url": "https://github.com/sponsors/ljharb" 680 | } 681 | }, 682 | "node_modules/has-property-descriptors": { 683 | "version": "1.0.2", 684 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", 685 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", 686 | "dependencies": { 687 | "es-define-property": "^1.0.0" 688 | }, 689 | "funding": { 690 | "url": "https://github.com/sponsors/ljharb" 691 | } 692 | }, 693 | "node_modules/has-proto": { 694 | "version": "1.0.3", 695 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", 696 | "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", 697 | "engines": { 698 | "node": ">= 0.4" 699 | }, 700 | "funding": { 701 | "url": "https://github.com/sponsors/ljharb" 702 | } 703 | }, 704 | "node_modules/has-symbols": { 705 | "version": "1.0.3", 706 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 707 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 708 | "engines": { 709 | "node": ">= 0.4" 710 | }, 711 | "funding": { 712 | "url": "https://github.com/sponsors/ljharb" 713 | } 714 | }, 715 | "node_modules/has-tostringtag": { 716 | "version": "1.0.2", 717 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", 718 | "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", 719 | "dependencies": { 720 | "has-symbols": "^1.0.3" 721 | }, 722 | "engines": { 723 | "node": ">= 0.4" 724 | }, 725 | "funding": { 726 | "url": "https://github.com/sponsors/ljharb" 727 | } 728 | }, 729 | "node_modules/hasown": { 730 | "version": "2.0.2", 731 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 732 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 733 | "dependencies": { 734 | "function-bind": "^1.1.2" 735 | }, 736 | "engines": { 737 | "node": ">= 0.4" 738 | } 739 | }, 740 | "node_modules/http-signature": { 741 | "version": "1.3.6", 742 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", 743 | "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", 744 | "dependencies": { 745 | "assert-plus": "^1.0.0", 746 | "jsprim": "^2.0.2", 747 | "sshpk": "^1.14.1" 748 | }, 749 | "engines": { 750 | "node": ">=0.10" 751 | } 752 | }, 753 | "node_modules/inherits": { 754 | "version": "2.0.4", 755 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 756 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 757 | }, 758 | "node_modules/internal-slot": { 759 | "version": "1.0.7", 760 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", 761 | "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", 762 | "dependencies": { 763 | "es-errors": "^1.3.0", 764 | "hasown": "^2.0.0", 765 | "side-channel": "^1.0.4" 766 | }, 767 | "engines": { 768 | "node": ">= 0.4" 769 | } 770 | }, 771 | "node_modules/is-array-buffer": { 772 | "version": "3.0.4", 773 | "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", 774 | "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", 775 | "dependencies": { 776 | "call-bind": "^1.0.2", 777 | "get-intrinsic": "^1.2.1" 778 | }, 779 | "engines": { 780 | "node": ">= 0.4" 781 | }, 782 | "funding": { 783 | "url": "https://github.com/sponsors/ljharb" 784 | } 785 | }, 786 | "node_modules/is-bigint": { 787 | "version": "1.0.4", 788 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", 789 | "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", 790 | "dependencies": { 791 | "has-bigints": "^1.0.1" 792 | }, 793 | "funding": { 794 | "url": "https://github.com/sponsors/ljharb" 795 | } 796 | }, 797 | "node_modules/is-boolean-object": { 798 | "version": "1.1.2", 799 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", 800 | "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", 801 | "dependencies": { 802 | "call-bind": "^1.0.2", 803 | "has-tostringtag": "^1.0.0" 804 | }, 805 | "engines": { 806 | "node": ">= 0.4" 807 | }, 808 | "funding": { 809 | "url": "https://github.com/sponsors/ljharb" 810 | } 811 | }, 812 | "node_modules/is-callable": { 813 | "version": "1.2.7", 814 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", 815 | "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", 816 | "engines": { 817 | "node": ">= 0.4" 818 | }, 819 | "funding": { 820 | "url": "https://github.com/sponsors/ljharb" 821 | } 822 | }, 823 | "node_modules/is-data-view": { 824 | "version": "1.0.1", 825 | "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", 826 | "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", 827 | "dependencies": { 828 | "is-typed-array": "^1.1.13" 829 | }, 830 | "engines": { 831 | "node": ">= 0.4" 832 | }, 833 | "funding": { 834 | "url": "https://github.com/sponsors/ljharb" 835 | } 836 | }, 837 | "node_modules/is-date-object": { 838 | "version": "1.0.5", 839 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", 840 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", 841 | "dependencies": { 842 | "has-tostringtag": "^1.0.0" 843 | }, 844 | "engines": { 845 | "node": ">= 0.4" 846 | }, 847 | "funding": { 848 | "url": "https://github.com/sponsors/ljharb" 849 | } 850 | }, 851 | "node_modules/is-negative-zero": { 852 | "version": "2.0.3", 853 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", 854 | "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", 855 | "engines": { 856 | "node": ">= 0.4" 857 | }, 858 | "funding": { 859 | "url": "https://github.com/sponsors/ljharb" 860 | } 861 | }, 862 | "node_modules/is-number-object": { 863 | "version": "1.0.7", 864 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", 865 | "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", 866 | "dependencies": { 867 | "has-tostringtag": "^1.0.0" 868 | }, 869 | "engines": { 870 | "node": ">= 0.4" 871 | }, 872 | "funding": { 873 | "url": "https://github.com/sponsors/ljharb" 874 | } 875 | }, 876 | "node_modules/is-regex": { 877 | "version": "1.1.4", 878 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", 879 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", 880 | "dependencies": { 881 | "call-bind": "^1.0.2", 882 | "has-tostringtag": "^1.0.0" 883 | }, 884 | "engines": { 885 | "node": ">= 0.4" 886 | }, 887 | "funding": { 888 | "url": "https://github.com/sponsors/ljharb" 889 | } 890 | }, 891 | "node_modules/is-shared-array-buffer": { 892 | "version": "1.0.3", 893 | "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", 894 | "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", 895 | "dependencies": { 896 | "call-bind": "^1.0.7" 897 | }, 898 | "engines": { 899 | "node": ">= 0.4" 900 | }, 901 | "funding": { 902 | "url": "https://github.com/sponsors/ljharb" 903 | } 904 | }, 905 | "node_modules/is-string": { 906 | "version": "1.0.7", 907 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", 908 | "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", 909 | "dependencies": { 910 | "has-tostringtag": "^1.0.0" 911 | }, 912 | "engines": { 913 | "node": ">= 0.4" 914 | }, 915 | "funding": { 916 | "url": "https://github.com/sponsors/ljharb" 917 | } 918 | }, 919 | "node_modules/is-symbol": { 920 | "version": "1.0.4", 921 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", 922 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", 923 | "dependencies": { 924 | "has-symbols": "^1.0.2" 925 | }, 926 | "engines": { 927 | "node": ">= 0.4" 928 | }, 929 | "funding": { 930 | "url": "https://github.com/sponsors/ljharb" 931 | } 932 | }, 933 | "node_modules/is-typed-array": { 934 | "version": "1.1.13", 935 | "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", 936 | "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", 937 | "dependencies": { 938 | "which-typed-array": "^1.1.14" 939 | }, 940 | "engines": { 941 | "node": ">= 0.4" 942 | }, 943 | "funding": { 944 | "url": "https://github.com/sponsors/ljharb" 945 | } 946 | }, 947 | "node_modules/is-typedarray": { 948 | "version": "1.0.0", 949 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 950 | "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" 951 | }, 952 | "node_modules/is-weakref": { 953 | "version": "1.0.2", 954 | "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", 955 | "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", 956 | "dependencies": { 957 | "call-bind": "^1.0.2" 958 | }, 959 | "funding": { 960 | "url": "https://github.com/sponsors/ljharb" 961 | } 962 | }, 963 | "node_modules/isarray": { 964 | "version": "1.0.0", 965 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 966 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" 967 | }, 968 | "node_modules/isstream": { 969 | "version": "0.1.2", 970 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 971 | "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" 972 | }, 973 | "node_modules/jsbn": { 974 | "version": "0.1.1", 975 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 976 | "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" 977 | }, 978 | "node_modules/json-schema": { 979 | "version": "0.4.0", 980 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", 981 | "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" 982 | }, 983 | "node_modules/json-schema-traverse": { 984 | "version": "0.4.1", 985 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 986 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 987 | "peer": true 988 | }, 989 | "node_modules/json-stringify-safe": { 990 | "version": "5.0.1", 991 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 992 | "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" 993 | }, 994 | "node_modules/jsprim": { 995 | "version": "2.0.2", 996 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", 997 | "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", 998 | "engines": [ 999 | "node >=0.6.0" 1000 | ], 1001 | "dependencies": { 1002 | "assert-plus": "1.0.0", 1003 | "extsprintf": "1.3.0", 1004 | "json-schema": "0.4.0", 1005 | "verror": "1.10.0" 1006 | } 1007 | }, 1008 | "node_modules/lodash": { 1009 | "version": "4.17.21", 1010 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1011 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1012 | }, 1013 | "node_modules/mime": { 1014 | "version": "1.6.0", 1015 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1016 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 1017 | "bin": { 1018 | "mime": "cli.js" 1019 | }, 1020 | "engines": { 1021 | "node": ">=4" 1022 | } 1023 | }, 1024 | "node_modules/mime-db": { 1025 | "version": "1.52.0", 1026 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1027 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1028 | "engines": { 1029 | "node": ">= 0.6" 1030 | } 1031 | }, 1032 | "node_modules/mime-types": { 1033 | "version": "2.1.35", 1034 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1035 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1036 | "dependencies": { 1037 | "mime-db": "1.52.0" 1038 | }, 1039 | "engines": { 1040 | "node": ">= 0.6" 1041 | } 1042 | }, 1043 | "node_modules/ms": { 1044 | "version": "2.1.3", 1045 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1046 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1047 | }, 1048 | "node_modules/nanoid": { 1049 | "version": "5.0.7", 1050 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.7.tgz", 1051 | "integrity": "sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==", 1052 | "funding": [ 1053 | { 1054 | "type": "github", 1055 | "url": "https://github.com/sponsors/ai" 1056 | } 1057 | ], 1058 | "bin": { 1059 | "nanoid": "bin/nanoid.js" 1060 | }, 1061 | "engines": { 1062 | "node": "^18 || >=20" 1063 | } 1064 | }, 1065 | "node_modules/node-telegram-bot-api": { 1066 | "version": "0.65.1", 1067 | "resolved": "https://registry.npmjs.org/node-telegram-bot-api/-/node-telegram-bot-api-0.65.1.tgz", 1068 | "integrity": "sha512-YhMSgUZCKWxI+MlCuh/2yuMvsqMnZGAA2QOjD10GWk8KszNN5LQOzO+kp1K1wMYuOJoZ7v0+epLpJsSrnmlyQQ==", 1069 | "dependencies": { 1070 | "@cypress/request": "^3.0.1", 1071 | "@cypress/request-promise": "^5.0.0", 1072 | "array.prototype.findindex": "^2.0.2", 1073 | "bl": "^1.2.3", 1074 | "debug": "^3.2.7", 1075 | "eventemitter3": "^3.0.0", 1076 | "file-type": "^3.9.0", 1077 | "mime": "^1.6.0", 1078 | "pump": "^2.0.0" 1079 | }, 1080 | "engines": { 1081 | "node": ">=0.12" 1082 | } 1083 | }, 1084 | "node_modules/oauth-sign": { 1085 | "version": "0.9.0", 1086 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 1087 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", 1088 | "peer": true, 1089 | "engines": { 1090 | "node": "*" 1091 | } 1092 | }, 1093 | "node_modules/object-inspect": { 1094 | "version": "1.13.1", 1095 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", 1096 | "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", 1097 | "funding": { 1098 | "url": "https://github.com/sponsors/ljharb" 1099 | } 1100 | }, 1101 | "node_modules/object-keys": { 1102 | "version": "1.1.1", 1103 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1104 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1105 | "engines": { 1106 | "node": ">= 0.4" 1107 | } 1108 | }, 1109 | "node_modules/object.assign": { 1110 | "version": "4.1.5", 1111 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", 1112 | "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", 1113 | "dependencies": { 1114 | "call-bind": "^1.0.5", 1115 | "define-properties": "^1.2.1", 1116 | "has-symbols": "^1.0.3", 1117 | "object-keys": "^1.1.1" 1118 | }, 1119 | "engines": { 1120 | "node": ">= 0.4" 1121 | }, 1122 | "funding": { 1123 | "url": "https://github.com/sponsors/ljharb" 1124 | } 1125 | }, 1126 | "node_modules/once": { 1127 | "version": "1.4.0", 1128 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1129 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1130 | "dependencies": { 1131 | "wrappy": "1" 1132 | } 1133 | }, 1134 | "node_modules/performance-now": { 1135 | "version": "2.1.0", 1136 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1137 | "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" 1138 | }, 1139 | "node_modules/possible-typed-array-names": { 1140 | "version": "1.0.0", 1141 | "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", 1142 | "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", 1143 | "engines": { 1144 | "node": ">= 0.4" 1145 | } 1146 | }, 1147 | "node_modules/process-nextick-args": { 1148 | "version": "2.0.1", 1149 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1150 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 1151 | }, 1152 | "node_modules/psl": { 1153 | "version": "1.9.0", 1154 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", 1155 | "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" 1156 | }, 1157 | "node_modules/pump": { 1158 | "version": "2.0.1", 1159 | "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", 1160 | "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", 1161 | "dependencies": { 1162 | "end-of-stream": "^1.1.0", 1163 | "once": "^1.3.1" 1164 | } 1165 | }, 1166 | "node_modules/punycode": { 1167 | "version": "2.3.1", 1168 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 1169 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 1170 | "engines": { 1171 | "node": ">=6" 1172 | } 1173 | }, 1174 | "node_modules/qs": { 1175 | "version": "6.10.4", 1176 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", 1177 | "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", 1178 | "dependencies": { 1179 | "side-channel": "^1.0.4" 1180 | }, 1181 | "engines": { 1182 | "node": ">=0.6" 1183 | }, 1184 | "funding": { 1185 | "url": "https://github.com/sponsors/ljharb" 1186 | } 1187 | }, 1188 | "node_modules/querystringify": { 1189 | "version": "2.2.0", 1190 | "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", 1191 | "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" 1192 | }, 1193 | "node_modules/readable-stream": { 1194 | "version": "2.3.8", 1195 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", 1196 | "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", 1197 | "dependencies": { 1198 | "core-util-is": "~1.0.0", 1199 | "inherits": "~2.0.3", 1200 | "isarray": "~1.0.0", 1201 | "process-nextick-args": "~2.0.0", 1202 | "safe-buffer": "~5.1.1", 1203 | "string_decoder": "~1.1.1", 1204 | "util-deprecate": "~1.0.1" 1205 | } 1206 | }, 1207 | "node_modules/readable-stream/node_modules/safe-buffer": { 1208 | "version": "5.1.2", 1209 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1210 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1211 | }, 1212 | "node_modules/regexp.prototype.flags": { 1213 | "version": "1.5.2", 1214 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", 1215 | "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", 1216 | "dependencies": { 1217 | "call-bind": "^1.0.6", 1218 | "define-properties": "^1.2.1", 1219 | "es-errors": "^1.3.0", 1220 | "set-function-name": "^2.0.1" 1221 | }, 1222 | "engines": { 1223 | "node": ">= 0.4" 1224 | }, 1225 | "funding": { 1226 | "url": "https://github.com/sponsors/ljharb" 1227 | } 1228 | }, 1229 | "node_modules/request": { 1230 | "version": "2.88.2", 1231 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", 1232 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", 1233 | "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", 1234 | "peer": true, 1235 | "dependencies": { 1236 | "aws-sign2": "~0.7.0", 1237 | "aws4": "^1.8.0", 1238 | "caseless": "~0.12.0", 1239 | "combined-stream": "~1.0.6", 1240 | "extend": "~3.0.2", 1241 | "forever-agent": "~0.6.1", 1242 | "form-data": "~2.3.2", 1243 | "har-validator": "~5.1.3", 1244 | "http-signature": "~1.2.0", 1245 | "is-typedarray": "~1.0.0", 1246 | "isstream": "~0.1.2", 1247 | "json-stringify-safe": "~5.0.1", 1248 | "mime-types": "~2.1.19", 1249 | "oauth-sign": "~0.9.0", 1250 | "performance-now": "^2.1.0", 1251 | "qs": "~6.5.2", 1252 | "safe-buffer": "^5.1.2", 1253 | "tough-cookie": "~2.5.0", 1254 | "tunnel-agent": "^0.6.0", 1255 | "uuid": "^3.3.2" 1256 | }, 1257 | "engines": { 1258 | "node": ">= 6" 1259 | } 1260 | }, 1261 | "node_modules/request-promise-core": { 1262 | "version": "1.1.3", 1263 | "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", 1264 | "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", 1265 | "dependencies": { 1266 | "lodash": "^4.17.15" 1267 | }, 1268 | "engines": { 1269 | "node": ">=0.10.0" 1270 | }, 1271 | "peerDependencies": { 1272 | "request": "^2.34" 1273 | } 1274 | }, 1275 | "node_modules/request/node_modules/http-signature": { 1276 | "version": "1.2.0", 1277 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 1278 | "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", 1279 | "peer": true, 1280 | "dependencies": { 1281 | "assert-plus": "^1.0.0", 1282 | "jsprim": "^1.2.2", 1283 | "sshpk": "^1.7.0" 1284 | }, 1285 | "engines": { 1286 | "node": ">=0.8", 1287 | "npm": ">=1.3.7" 1288 | } 1289 | }, 1290 | "node_modules/request/node_modules/jsprim": { 1291 | "version": "1.4.2", 1292 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", 1293 | "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", 1294 | "peer": true, 1295 | "dependencies": { 1296 | "assert-plus": "1.0.0", 1297 | "extsprintf": "1.3.0", 1298 | "json-schema": "0.4.0", 1299 | "verror": "1.10.0" 1300 | }, 1301 | "engines": { 1302 | "node": ">=0.6.0" 1303 | } 1304 | }, 1305 | "node_modules/request/node_modules/qs": { 1306 | "version": "6.5.3", 1307 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", 1308 | "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", 1309 | "peer": true, 1310 | "engines": { 1311 | "node": ">=0.6" 1312 | } 1313 | }, 1314 | "node_modules/request/node_modules/tough-cookie": { 1315 | "version": "2.5.0", 1316 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 1317 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 1318 | "peer": true, 1319 | "dependencies": { 1320 | "psl": "^1.1.28", 1321 | "punycode": "^2.1.1" 1322 | }, 1323 | "engines": { 1324 | "node": ">=0.8" 1325 | } 1326 | }, 1327 | "node_modules/request/node_modules/uuid": { 1328 | "version": "3.4.0", 1329 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 1330 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", 1331 | "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", 1332 | "peer": true, 1333 | "bin": { 1334 | "uuid": "bin/uuid" 1335 | } 1336 | }, 1337 | "node_modules/requires-port": { 1338 | "version": "1.0.0", 1339 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 1340 | "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" 1341 | }, 1342 | "node_modules/safe-array-concat": { 1343 | "version": "1.1.2", 1344 | "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", 1345 | "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", 1346 | "dependencies": { 1347 | "call-bind": "^1.0.7", 1348 | "get-intrinsic": "^1.2.4", 1349 | "has-symbols": "^1.0.3", 1350 | "isarray": "^2.0.5" 1351 | }, 1352 | "engines": { 1353 | "node": ">=0.4" 1354 | }, 1355 | "funding": { 1356 | "url": "https://github.com/sponsors/ljharb" 1357 | } 1358 | }, 1359 | "node_modules/safe-array-concat/node_modules/isarray": { 1360 | "version": "2.0.5", 1361 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", 1362 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" 1363 | }, 1364 | "node_modules/safe-buffer": { 1365 | "version": "5.2.1", 1366 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1367 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1368 | "funding": [ 1369 | { 1370 | "type": "github", 1371 | "url": "https://github.com/sponsors/feross" 1372 | }, 1373 | { 1374 | "type": "patreon", 1375 | "url": "https://www.patreon.com/feross" 1376 | }, 1377 | { 1378 | "type": "consulting", 1379 | "url": "https://feross.org/support" 1380 | } 1381 | ] 1382 | }, 1383 | "node_modules/safe-regex-test": { 1384 | "version": "1.0.3", 1385 | "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", 1386 | "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", 1387 | "dependencies": { 1388 | "call-bind": "^1.0.6", 1389 | "es-errors": "^1.3.0", 1390 | "is-regex": "^1.1.4" 1391 | }, 1392 | "engines": { 1393 | "node": ">= 0.4" 1394 | }, 1395 | "funding": { 1396 | "url": "https://github.com/sponsors/ljharb" 1397 | } 1398 | }, 1399 | "node_modules/safer-buffer": { 1400 | "version": "2.1.2", 1401 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1402 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1403 | }, 1404 | "node_modules/set-function-length": { 1405 | "version": "1.2.2", 1406 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", 1407 | "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", 1408 | "dependencies": { 1409 | "define-data-property": "^1.1.4", 1410 | "es-errors": "^1.3.0", 1411 | "function-bind": "^1.1.2", 1412 | "get-intrinsic": "^1.2.4", 1413 | "gopd": "^1.0.1", 1414 | "has-property-descriptors": "^1.0.2" 1415 | }, 1416 | "engines": { 1417 | "node": ">= 0.4" 1418 | } 1419 | }, 1420 | "node_modules/set-function-name": { 1421 | "version": "2.0.2", 1422 | "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", 1423 | "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", 1424 | "dependencies": { 1425 | "define-data-property": "^1.1.4", 1426 | "es-errors": "^1.3.0", 1427 | "functions-have-names": "^1.2.3", 1428 | "has-property-descriptors": "^1.0.2" 1429 | }, 1430 | "engines": { 1431 | "node": ">= 0.4" 1432 | } 1433 | }, 1434 | "node_modules/side-channel": { 1435 | "version": "1.0.6", 1436 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", 1437 | "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", 1438 | "dependencies": { 1439 | "call-bind": "^1.0.7", 1440 | "es-errors": "^1.3.0", 1441 | "get-intrinsic": "^1.2.4", 1442 | "object-inspect": "^1.13.1" 1443 | }, 1444 | "engines": { 1445 | "node": ">= 0.4" 1446 | }, 1447 | "funding": { 1448 | "url": "https://github.com/sponsors/ljharb" 1449 | } 1450 | }, 1451 | "node_modules/sshpk": { 1452 | "version": "1.18.0", 1453 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", 1454 | "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", 1455 | "dependencies": { 1456 | "asn1": "~0.2.3", 1457 | "assert-plus": "^1.0.0", 1458 | "bcrypt-pbkdf": "^1.0.0", 1459 | "dashdash": "^1.12.0", 1460 | "ecc-jsbn": "~0.1.1", 1461 | "getpass": "^0.1.1", 1462 | "jsbn": "~0.1.0", 1463 | "safer-buffer": "^2.0.2", 1464 | "tweetnacl": "~0.14.0" 1465 | }, 1466 | "bin": { 1467 | "sshpk-conv": "bin/sshpk-conv", 1468 | "sshpk-sign": "bin/sshpk-sign", 1469 | "sshpk-verify": "bin/sshpk-verify" 1470 | }, 1471 | "engines": { 1472 | "node": ">=0.10.0" 1473 | } 1474 | }, 1475 | "node_modules/stealthy-require": { 1476 | "version": "1.1.1", 1477 | "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", 1478 | "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", 1479 | "engines": { 1480 | "node": ">=0.10.0" 1481 | } 1482 | }, 1483 | "node_modules/string_decoder": { 1484 | "version": "1.1.1", 1485 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1486 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1487 | "dependencies": { 1488 | "safe-buffer": "~5.1.0" 1489 | } 1490 | }, 1491 | "node_modules/string_decoder/node_modules/safe-buffer": { 1492 | "version": "5.1.2", 1493 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1494 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1495 | }, 1496 | "node_modules/string.prototype.trim": { 1497 | "version": "1.2.9", 1498 | "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", 1499 | "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", 1500 | "dependencies": { 1501 | "call-bind": "^1.0.7", 1502 | "define-properties": "^1.2.1", 1503 | "es-abstract": "^1.23.0", 1504 | "es-object-atoms": "^1.0.0" 1505 | }, 1506 | "engines": { 1507 | "node": ">= 0.4" 1508 | }, 1509 | "funding": { 1510 | "url": "https://github.com/sponsors/ljharb" 1511 | } 1512 | }, 1513 | "node_modules/string.prototype.trimend": { 1514 | "version": "1.0.8", 1515 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", 1516 | "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", 1517 | "dependencies": { 1518 | "call-bind": "^1.0.7", 1519 | "define-properties": "^1.2.1", 1520 | "es-object-atoms": "^1.0.0" 1521 | }, 1522 | "funding": { 1523 | "url": "https://github.com/sponsors/ljharb" 1524 | } 1525 | }, 1526 | "node_modules/string.prototype.trimstart": { 1527 | "version": "1.0.8", 1528 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", 1529 | "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", 1530 | "dependencies": { 1531 | "call-bind": "^1.0.7", 1532 | "define-properties": "^1.2.1", 1533 | "es-object-atoms": "^1.0.0" 1534 | }, 1535 | "engines": { 1536 | "node": ">= 0.4" 1537 | }, 1538 | "funding": { 1539 | "url": "https://github.com/sponsors/ljharb" 1540 | } 1541 | }, 1542 | "node_modules/tough-cookie": { 1543 | "version": "4.1.3", 1544 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", 1545 | "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", 1546 | "dependencies": { 1547 | "psl": "^1.1.33", 1548 | "punycode": "^2.1.1", 1549 | "universalify": "^0.2.0", 1550 | "url-parse": "^1.5.3" 1551 | }, 1552 | "engines": { 1553 | "node": ">=6" 1554 | } 1555 | }, 1556 | "node_modules/tunnel-agent": { 1557 | "version": "0.6.0", 1558 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1559 | "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", 1560 | "dependencies": { 1561 | "safe-buffer": "^5.0.1" 1562 | }, 1563 | "engines": { 1564 | "node": "*" 1565 | } 1566 | }, 1567 | "node_modules/tweetnacl": { 1568 | "version": "0.14.5", 1569 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1570 | "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" 1571 | }, 1572 | "node_modules/typed-array-buffer": { 1573 | "version": "1.0.2", 1574 | "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", 1575 | "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", 1576 | "dependencies": { 1577 | "call-bind": "^1.0.7", 1578 | "es-errors": "^1.3.0", 1579 | "is-typed-array": "^1.1.13" 1580 | }, 1581 | "engines": { 1582 | "node": ">= 0.4" 1583 | } 1584 | }, 1585 | "node_modules/typed-array-byte-length": { 1586 | "version": "1.0.1", 1587 | "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", 1588 | "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", 1589 | "dependencies": { 1590 | "call-bind": "^1.0.7", 1591 | "for-each": "^0.3.3", 1592 | "gopd": "^1.0.1", 1593 | "has-proto": "^1.0.3", 1594 | "is-typed-array": "^1.1.13" 1595 | }, 1596 | "engines": { 1597 | "node": ">= 0.4" 1598 | }, 1599 | "funding": { 1600 | "url": "https://github.com/sponsors/ljharb" 1601 | } 1602 | }, 1603 | "node_modules/typed-array-byte-offset": { 1604 | "version": "1.0.2", 1605 | "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", 1606 | "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", 1607 | "dependencies": { 1608 | "available-typed-arrays": "^1.0.7", 1609 | "call-bind": "^1.0.7", 1610 | "for-each": "^0.3.3", 1611 | "gopd": "^1.0.1", 1612 | "has-proto": "^1.0.3", 1613 | "is-typed-array": "^1.1.13" 1614 | }, 1615 | "engines": { 1616 | "node": ">= 0.4" 1617 | }, 1618 | "funding": { 1619 | "url": "https://github.com/sponsors/ljharb" 1620 | } 1621 | }, 1622 | "node_modules/typed-array-length": { 1623 | "version": "1.0.6", 1624 | "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", 1625 | "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", 1626 | "dependencies": { 1627 | "call-bind": "^1.0.7", 1628 | "for-each": "^0.3.3", 1629 | "gopd": "^1.0.1", 1630 | "has-proto": "^1.0.3", 1631 | "is-typed-array": "^1.1.13", 1632 | "possible-typed-array-names": "^1.0.0" 1633 | }, 1634 | "engines": { 1635 | "node": ">= 0.4" 1636 | }, 1637 | "funding": { 1638 | "url": "https://github.com/sponsors/ljharb" 1639 | } 1640 | }, 1641 | "node_modules/unbox-primitive": { 1642 | "version": "1.0.2", 1643 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", 1644 | "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", 1645 | "dependencies": { 1646 | "call-bind": "^1.0.2", 1647 | "has-bigints": "^1.0.2", 1648 | "has-symbols": "^1.0.3", 1649 | "which-boxed-primitive": "^1.0.2" 1650 | }, 1651 | "funding": { 1652 | "url": "https://github.com/sponsors/ljharb" 1653 | } 1654 | }, 1655 | "node_modules/universalify": { 1656 | "version": "0.2.0", 1657 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", 1658 | "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", 1659 | "engines": { 1660 | "node": ">= 4.0.0" 1661 | } 1662 | }, 1663 | "node_modules/uri-js": { 1664 | "version": "4.4.1", 1665 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1666 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1667 | "peer": true, 1668 | "dependencies": { 1669 | "punycode": "^2.1.0" 1670 | } 1671 | }, 1672 | "node_modules/url-parse": { 1673 | "version": "1.5.10", 1674 | "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", 1675 | "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", 1676 | "dependencies": { 1677 | "querystringify": "^2.1.1", 1678 | "requires-port": "^1.0.0" 1679 | } 1680 | }, 1681 | "node_modules/util-deprecate": { 1682 | "version": "1.0.2", 1683 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1684 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 1685 | }, 1686 | "node_modules/uuid": { 1687 | "version": "8.3.2", 1688 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 1689 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 1690 | "bin": { 1691 | "uuid": "dist/bin/uuid" 1692 | } 1693 | }, 1694 | "node_modules/verror": { 1695 | "version": "1.10.0", 1696 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1697 | "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", 1698 | "engines": [ 1699 | "node >=0.6.0" 1700 | ], 1701 | "dependencies": { 1702 | "assert-plus": "^1.0.0", 1703 | "core-util-is": "1.0.2", 1704 | "extsprintf": "^1.2.0" 1705 | } 1706 | }, 1707 | "node_modules/verror/node_modules/core-util-is": { 1708 | "version": "1.0.2", 1709 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1710 | "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" 1711 | }, 1712 | "node_modules/which-boxed-primitive": { 1713 | "version": "1.0.2", 1714 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", 1715 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", 1716 | "dependencies": { 1717 | "is-bigint": "^1.0.1", 1718 | "is-boolean-object": "^1.1.0", 1719 | "is-number-object": "^1.0.4", 1720 | "is-string": "^1.0.5", 1721 | "is-symbol": "^1.0.3" 1722 | }, 1723 | "funding": { 1724 | "url": "https://github.com/sponsors/ljharb" 1725 | } 1726 | }, 1727 | "node_modules/which-typed-array": { 1728 | "version": "1.1.15", 1729 | "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", 1730 | "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", 1731 | "dependencies": { 1732 | "available-typed-arrays": "^1.0.7", 1733 | "call-bind": "^1.0.7", 1734 | "for-each": "^0.3.3", 1735 | "gopd": "^1.0.1", 1736 | "has-tostringtag": "^1.0.2" 1737 | }, 1738 | "engines": { 1739 | "node": ">= 0.4" 1740 | }, 1741 | "funding": { 1742 | "url": "https://github.com/sponsors/ljharb" 1743 | } 1744 | }, 1745 | "node_modules/wrappy": { 1746 | "version": "1.0.2", 1747 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1748 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 1749 | } 1750 | } 1751 | } 1752 | --------------------------------------------------------------------------------