├── .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 |
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 | |  |  |
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 |
--------------------------------------------------------------------------------