diff --git a/README.md b/README.md index 11b5678..e5ee3c7 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,7 @@ 6. [Встановлення NGINX](#6-встановлення-nginx) 7. [Налаштування IP адреси CloudFlare](#7-настройка-ip-адреси-cloudflare) 8. [Налаштування NGINX для веб](#8-настройка-nginx-для-веб) -9. [Встановлення Certbot](#9-встановлення-certbot) -10. [CRONTAB Backup](#10-crontab-backup) +9. [Встановлення Certbot](#9-встановлення-certbot) --- @@ -267,27 +266,5 @@ sudo /opt/certbot/bin/pip install --upgrade certbot certbot-nginx --- -## 10. CRONTAB Backup - -Редагування cron для резервного копіювання бази даних: - -```bash -crontab -e -``` - -Додати завдання: - -```cron -##################### -# Щоденне збереження резервної копії бази Sheep-Service о 22:30 -30 22 * * * cd /home/username/webapps/sheep-service.com && /usr/bin/python3 backup.py >> /home/username/webapps/sheep-service.com/log/backup.log 2>&1 -##################### -``` - -Встановлення Python-залежностей: - -```bash -sudo pip3 install python-dotenv -``` 💡 **Порада:** Переконайтесь, що всі шляхи до директорій відповідають вашому користувачу та що всі сервіси працюють після перезавантаження Docker або сервера. \ No newline at end of file diff --git a/api/Dockerfile b/api/Dockerfile index a4a524d..7fa3191 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -6,7 +6,7 @@ COPY package.json package-lock.json ./ RUN npm install -RUN apt-get update && apt-get install -y chromium +RUN apt-get update COPY . . diff --git a/api/config/db.js b/api/config/db.js index be8ec60..21ce99a 100644 --- a/api/config/db.js +++ b/api/config/db.js @@ -197,7 +197,8 @@ db.serialize(() => { week_days TEXT DEFAULT '[0, 1, 2, 3, 4, 5, 6]', processing_time REAL DEFAULT 1, status INTEGER DEFAULT 0, - updated_at TIMESTAMP + updated_at TIMESTAMP, + created_at TIMESTAMP ) `); @@ -210,6 +211,7 @@ db.serialize(() => { sheep_id INTEGER, number_sheep TEXT, updated_at TIMESTAMP, + created_at TIMESTAMP, FOREIGN KEY (stand_id) REFERENCES stand_list(id), FOREIGN KEY (sheep_id) REFERENCES sheeps(id) ) diff --git a/api/package-lock.json b/api/package-lock.json index 1a2fe1b..ae6fddf 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -1,12 +1,12 @@ { "name": "API Sheep Service", - "version": "1.0.1", + "version": "2.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "API Sheep Service", - "version": "1.0.1", + "version": "2.0.1", "license": "ISC", "dependencies": { "cors": "^2.8.5", diff --git a/api/package.json b/api/package.json index 4edc293..f996548 100644 --- a/api/package.json +++ b/api/package.json @@ -1,6 +1,6 @@ { "name": "API Sheep Service", - "version": "1.0.1", + "version": "2.0.1", "main": "app.js", "scripts": { "start": "node app.js" diff --git a/api/services/history.entrance.service.js b/api/services/history.entrance.service.js index 9b99af7..e27e8e2 100644 --- a/api/services/history.entrance.service.js +++ b/api/services/history.entrance.service.js @@ -1,4 +1,5 @@ const db = require("../config/db"); +const Notification = require("../utils/notification.js"); class HistoryEntranceService { getHistoryEntrance(entrance_id) { @@ -58,6 +59,21 @@ class HistoryEntranceService { } else if (this.changes === 0) { return res(false); } else { + if (Number(data.sheep_id) > 0) { + Notification.sendSheep({ + sheep_id: Number(data.sheep_id), + title: "Нова територія", + body: "Вам призначено нову територію" + }); + } else if (Number(data.sheep_id) == 0 && Number(data.group_id) > 0) { + Notification.sendGroup({ + group_id: Number(data.group_id), + title: "Нова територія", + body: "Призначено нову групову територію" + }); + } + + res({ "create": "ok", "id": this.lastID }); } }); diff --git a/api/services/history.homestead.service.js b/api/services/history.homestead.service.js index b3462bc..e5921ec 100644 --- a/api/services/history.homestead.service.js +++ b/api/services/history.homestead.service.js @@ -28,10 +28,10 @@ class HistoryHomesteadService { "sheep_id": Number(row.sheep_id), "working": Number(row.working) == 0 ? false : true, "date": { - "start": Number(row.date_start), - "end": row.date_end ? Number(row.date_end) : null + "start": Number(row.date_start), + "end": row.date_end ? Number(row.date_end) : null } - } + } }) return res(data); @@ -43,7 +43,7 @@ class HistoryHomesteadService { createHistoryHomestead(homestead_id, data) { return new Promise((res, rej) => { let sql = 'INSERT INTO homestead_history(homestead_id, name, date_start, group_id, sheep_id, working) VALUES (?, ?, ?, ?, ?, ?)'; - + db.run(sql, [ homestead_id, data.name, @@ -51,13 +51,27 @@ class HistoryHomesteadService { Number(data.group_id), Number(data.sheep_id), 1 - ], function(err) { + ], function (err) { if (err) { console.error(err.message); return res(false); } else if (this.changes === 0) { return res(false); } else { + if (Number(data.sheep_id) > 0) { + Notification.sendSheep({ + sheep_id: Number(data.sheep_id), + title: "Нова територія", + body: "Вам призначено нову територію" + }); + } else if (Number(data.sheep_id) == 0 && Number(data.group_id) > 0) { + Notification.sendGroup({ + group_id: Number(data.group_id), + title: "Нова територія", + body: "Призначено нову групову територію" + }); + } + res({ "create": "ok", "id": this.lastID }); } }); @@ -71,7 +85,7 @@ class HistoryHomesteadService { Math.floor(new Date(Date.now()).getTime()), 0, Number(homestead_id) - ], function(err) { + ], function (err) { if (err) { console.error(err.message); return res(false); @@ -86,7 +100,7 @@ class HistoryHomesteadService { deleteHistoryHomestead(data) { return new Promise((res, rej) => { - db.run('DELETE FROM homestead_history WHERE id = ?', [Number(homestead_id)], function(err) { + db.run('DELETE FROM homestead_history WHERE id = ?', [Number(homestead_id)], function (err) { if (err) { console.error(err.message); return res(false); diff --git a/api/services/stand.service.js b/api/services/stand.service.js index aec6a40..9c57190 100644 --- a/api/services/stand.service.js +++ b/api/services/stand.service.js @@ -1,5 +1,5 @@ -const crypto = require('crypto'); const db = require("../config/db"); +const Notification = require("../utils/notification.js"); class StandService { getStand(id) { @@ -27,7 +27,8 @@ class StandService { "week_days": JSON.parse(row.week_days), "processing_time": Number(row.processing_time), "status": row.status == 1 ? true : false, - "updated_at": Number(row.updated_at) + "updated_at": Number(row.updated_at), + "created_at": Number(row.created_at) } return res(data); @@ -62,7 +63,8 @@ class StandService { "week_days": JSON.parse(row.week_days), "processing_time": Number(row.processing_time), "status": row.status == 1 ? true : false, - "updated_at": Number(row.updated_at) + "updated_at": Number(row.updated_at), + "created_at": Number(row.created_at) } }) @@ -74,7 +76,7 @@ class StandService { createStand(data) { return new Promise((res, rej) => { - let sql = 'INSERT INTO stand_list(title, geo, hour_start, hour_end, quantity_sheep, week_days, processing_time, status, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)'; + let sql = 'INSERT INTO stand_list(title, geo, hour_start, hour_end, quantity_sheep, week_days, processing_time, status, updated_at, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; db.run(sql, [ data.title, @@ -85,6 +87,7 @@ class StandService { JSON.stringify(data.week_days || [1]), Number(data.processing_time) || 1, 1, + Math.floor(Date.now()), Math.floor(Date.now()) ], function (err) { if (err) { @@ -106,6 +109,7 @@ class StandService { hour_start = COALESCE(?, hour_start), hour_end = COALESCE(?, hour_end), quantity_sheep = COALESCE(?, quantity_sheep), + processing_time = COALESCE(?, processing_time), week_days = COALESCE(?, week_days), status = COALESCE(?, status), updated_at = ? @@ -118,6 +122,7 @@ class StandService { data.hour_start !== undefined ? Number(data.hour_start) : null, data.hour_end !== undefined ? Number(data.hour_end) : null, data.quantity_sheep !== undefined ? Number(data.quantity_sheep) : null, + data.processing_time !== undefined ? Number(data.processing_time) : null, data.week_days !== undefined ? JSON.stringify(data.week_days) : null, data.status !== undefined ? (data.status ? 1 : 0) : null, Date.now(), @@ -153,17 +158,35 @@ class StandService { createSchedule(stand_id) { return new Promise((res, rej) => { let date_start; - let getNextMonday = (ts) => { + + const MS_DAY = 24 * 60 * 60 * 1000; + + // Нормализует timestamp из БД: если в секундах — умножает на 1000 + const normalizeTs = (ts) => { + if (!ts) return null; + // если строка — привести к числу + const n = Number(ts); + if (Number.isNaN(n)) return null; + // если кажется секундами (меньше ~1e12) — умножаем + return n < 1e12 ? n * 1000 : n; + }; + + // Возвращает timestamp (ms) следующего понедельника после ts + const getNextMonday = (ts) => { let date = new Date(ts); - // следующий день после max_date + // нормализуем на начало дня + date.setHours(0, 0, 0, 0); + + // всегда переходить к следующему дню (чтобы гарантированно получить следующий понедельник, + // даже если ts уже в понедельник) date.setDate(date.getDate() + 1); - // пока не понедельник – добавляем дни + // пока не понедельник (в JS: 1 — понедельник) while (date.getDay() !== 1) { date.setDate(date.getDate() + 1); } return date.getTime(); - } + }; // 1. Получаем стенд db.get(`SELECT * FROM stand_list WHERE id = ?`, [stand_id], (err, stand) => { @@ -176,8 +199,16 @@ class StandService { return res(false); } - stand.geo = JSON.parse(stand.geo); - stand.week_days = JSON.parse(stand.week_days) + try { + stand.geo = JSON.parse(stand.geo); + } catch (e) { + stand.geo = stand.geo; + } + try { + stand.week_days = JSON.parse(stand.week_days); + } catch (e) { + stand.week_days = Array.isArray(stand.week_days) ? stand.week_days : []; + } // 2. Берём последний date из расписания db.get( @@ -189,27 +220,35 @@ class StandService { return res(false); } - if (row && row.max_date) { - date_start = getNextMonday(row.max_date); // заменить начальную дату + const normalized = normalizeTs(row && row.max_date ? row.max_date : null); + if (normalized) { + date_start = getNextMonday(normalized); } else { - date_start = getNextMonday(Date.now()); // заменить начальную дату + date_start = getNextMonday(Date.now()); } // 3. Генерация новых записей - const stand_length = (stand.hour_end - stand.hour_start) / stand.processing_time; - const timestamp = Math.floor(Date.now()); + // вычисляем количество слотов (целое) + const stand_length = Math.max(0, Math.floor((stand.hour_end - stand.hour_start) / stand.processing_time)); + const timestamp = Date.now(); const list = []; - for (const dayOffset of stand.week_days) { - const stand_date = date_start + (dayOffset * 24 * 60 * 60 * 1000); + // Ожидается, что stand.week_days — массив чисел 0..6, где 0 -> Понедельник, 6 -> Воскресенье + for (const dayOffsetRaw of stand.week_days) { + const dayOffset = Number(dayOffsetRaw); + if (!Number.isFinite(dayOffset) || dayOffset < 0 || dayOffset > 6) continue; + + // dayOffset: 0 => Monday, 6 => Sunday + const stand_date = date_start + (dayOffset * MS_DAY); for (let i = 0; i < stand_length; i++) { - for (let q = 0; q < stand.quantity_sheep; q++) { + for (let q = 0; q < (Number(stand.quantity_sheep) || 0); q++) { list.push([ stand.hour_start + (stand.processing_time * i), q, stand_date, stand.id, + timestamp, timestamp ]); } @@ -221,10 +260,10 @@ class StandService { } // 4. Массовая вставка - const placeholders = list.map(() => "(?, ?, ?, ?, ?)").join(","); + const placeholders = list.map(() => "(?, ?, ?, ?, ?, ?)").join(","); const values = list.flat(); const insertSQL = ` - INSERT INTO stand_schedule(hour, number_sheep, date, stand_id, updated_at) + INSERT INTO stand_schedule(hour, number_sheep, date, stand_id, updated_at, created_at) VALUES ${placeholders} `; @@ -233,7 +272,13 @@ class StandService { console.error(err.message); return res(false); } - res({ status: "ok", inserted: list.length}); + // Notification.sendStand({ + // title: "Додан новий день служіння", + // body: `Стенд «${stand.title}» поповнився, встигніть записатися.`, + // page: `/stand/card/${stand.id}` + // }); + + res({ status: "ok", inserted: list.length }); }); } ); @@ -255,6 +300,8 @@ class StandService { s.id = ss.sheep_id WHERE ss.stand_id = ? + AND + date(ss.date / 1000, 'unixepoch') >= date('now') ORDER BY ss.id; `; @@ -273,7 +320,8 @@ class StandService { "sheep_id": Number(row.sheep_id), "sheep_name": row.sheep_name, "number_sheep": Number(row.number_sheep), - "updated_at": Number(row.updated_at) + "updated_at": Number(row.updated_at), + "created_at": Number(row.created_at) } }) diff --git a/api/utils/notification.js b/api/utils/notification.js new file mode 100644 index 0000000..81351ed --- /dev/null +++ b/api/utils/notification.js @@ -0,0 +1,152 @@ +const db = require("../config/db"); +const webpush = require('web-push'); + +const VAPID_PUBLIC_KEY = process.env.VAPID_PUBLIC_KEY; +const VAPID_PRIVATE_KEY = process.env.VAPID_PRIVATE_KEY; + +webpush.setVapidDetails( + 'mailto:rozenrod320@gmail.com', + VAPID_PUBLIC_KEY, + VAPID_PRIVATE_KEY +); + +class Notification { + async sendSheep({ sheep_id, title, body, page }) { + const sql = ` + SELECT * FROM subscription + WHERE sheep_id = ? + ORDER BY id + `; + + db.all(sql, [sheep_id], async (err, rows) => { + if (err) { + console.error('DB error:', err.message); + return; + } + + if (!rows.length) { + console.log(`🐑 No subscriptions found for sheep_id: ${sheep_id}`); + return; + } + + console.log(`📨 Sending notification to ${rows.length} subscriptions...`); + + const payload = JSON.stringify({ + title: title ?? "Тестове повідомлення", + body: body ?? "Ви успішно підписалися на отримання push повідомлень!", + url: `https://${process.env.DOMAIN}${page ?? ""}` + }); + + const results = await Promise.allSettled(rows.map(row => { + const subscription = { + endpoint: row.endpoint, + keys: JSON.parse(row.keys), + }; + return webpush.sendNotification(subscription, payload); + })); + + const failed = results.filter(r => r.status === 'rejected').length; + console.log(`✅ Sent: ${rows.length - failed}, ❌ Failed: ${failed}`); + }); + } + + async sendGroup({ group_id, title, body, page }) { + const sql = ` + SELECT + subscription.* + FROM + subscription + JOIN + sheeps + ON + sheeps.id = subscription.sheep_id + WHERE + sheeps.group_id = ? + ORDER BY + subscription.id; + `; + + db.all(sql, [group_id], async (err, rows) => { + if (err) { + console.error('DB error:', err.message); + return; + } + + if (!rows.length) { + console.log(`🐑 No subscriptions found for sheep_id: ${sheep_id}`); + return; + } + + console.log(`📨 Sending notification to ${rows.length} subscriptions...`); + + const payload = JSON.stringify({ + title: title ?? "Тестове повідомлення", + body: body ?? "Ви успішно підписалися на отримання push повідомлень!", + url: `https://${process.env.DOMAIN}${page ?? ""}` + }); + + const results = await Promise.allSettled(rows.map(row => { + const subscription = { + endpoint: row.endpoint, + keys: JSON.parse(row.keys), + }; + return webpush.sendNotification(subscription, payload); + })); + + const failed = results.filter(r => r.status === 'rejected').length; + console.log(`✅ Sent: ${rows.length - failed}, ❌ Failed: ${failed}`); + }); + } + + async sendStand({ title, body, page }) { + const sql = ` + SELECT + subscription.* + FROM + subscription + JOIN + sheeps + ON sheeps.id = subscription.sheep_id + JOIN + possibilities + ON possibilities.sheep_id = sheeps.id + WHERE + possibilities.can_view_stand = '1' + ORDER BY + subscription.id; + `; + + db.all(sql, async (err, rows) => { + if (err) { + console.error('DB error:', err.message); + return; + } + + if (!rows.length) { + console.log(`🐑 No subscriptions found for sheep_id: ${sheep_id}`); + return; + } + + console.log(`📨 Sending notification to ${rows.length} subscriptions...`); + + const payload = JSON.stringify({ + title: title ?? "Тестове повідомлення", + body: body ?? "Ви успішно підписалися на отримання push повідомлень!", + url: `https://${process.env.DOMAIN}${page ?? ""}` + }); + + const results = await Promise.allSettled(rows.map(row => { + const subscription = { + endpoint: row.endpoint, + keys: JSON.parse(row.keys), + }; + return webpush.sendNotification(subscription, payload); + })); + + const failed = results.filter(r => r.status === 'rejected').length; + console.log(`✅ Sent: ${rows.length - failed}, ❌ Failed: ${failed}`); + }); + } +}; + +module.exports = new Notification(); \ No newline at end of file diff --git a/backup.py b/backup.py deleted file mode 100644 index 67e26bf..0000000 --- a/backup.py +++ /dev/null @@ -1,37 +0,0 @@ -import os -import requests -from datetime import datetime -from zipfile import ZipFile, ZIP_DEFLATED -from dotenv import load_dotenv - -# Загрузка переменных из .env -load_dotenv() - -TELEGRAM_TOKEN = os.getenv('TELEGRAM_TOKEN') -CHAT_ID = os.getenv('CHAT_ID') -DB_PATH = os.path.join(os.getenv('DB_PATH'), 'database.sqlite') - -def send_document(filename, caption): - url = f'https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendDocument' - with open(filename, 'rb') as f: - response = requests.post( - url, - data={'chat_id': CHAT_ID, 'caption': caption}, - files={'document': f} - ) - print(response.json()) - -def main(): - if not TELEGRAM_TOKEN or not CHAT_ID or not DB_PATH: - print("Помилка: TELEGRAM_TOKEN, CHAT_ID або DB_PATH не задано в .env.") - return - - if os.path.exists(DB_PATH): - timestamp = datetime.now().strftime("%d.%m.%Y %H:%M") - caption = f"Backup Sheep Service DB - {timestamp}" - send_document(DB_PATH, caption) - else: - print("ZIP file not created") - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/cron/Dockerfile b/cron/Dockerfile new file mode 100644 index 0000000..40a4f30 --- /dev/null +++ b/cron/Dockerfile @@ -0,0 +1,11 @@ +FROM node:20.18 + +WORKDIR /app + +COPY package.json package-lock.json ./ + +RUN npm install + +COPY . . + +CMD npm start diff --git a/cron/config/db.js b/cron/config/db.js new file mode 100644 index 0000000..f8b2480 --- /dev/null +++ b/cron/config/db.js @@ -0,0 +1,17 @@ +const sqlite3 = require("sqlite3"); +const path = require("path"); + +const dbPath = process.env.DATABASE_PATH || path.join(__dirname, ".."); +const fullPath = path.join(dbPath, "database.sqlite"); + +const db = new sqlite3.Database(fullPath, (err) => { + if (err) { + console.error("❌ Failed to open sqlite database:", err); + } else { + console.log("✅ SQLite DB opened at", fullPath); + } +}); + +db.exec("PRAGMA foreign_keys = ON;"); + +module.exports = db; \ No newline at end of file diff --git a/cron/cron.js b/cron/cron.js new file mode 100644 index 0000000..c2a7097 --- /dev/null +++ b/cron/cron.js @@ -0,0 +1,13 @@ +const cron = require("node-cron"); +const Backup = require("./tasks/backup"); + +// Завдання: резервна копія БД кожен день в 22:30 +cron.schedule("30 22 * * *", () => { + Backup.database(); + + const now = new Date().toLocaleString(); + console.log(`[${now}] Завдання «Backup» виконане!`); +}); + + +console.log("Cron-завдання запущено."); \ No newline at end of file diff --git a/cron/package-lock.json b/cron/package-lock.json new file mode 100644 index 0000000..b515d3d --- /dev/null +++ b/cron/package-lock.json @@ -0,0 +1,3594 @@ +{ + "name": "CRON Sheep Service", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "CRON Sheep Service", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dotenv": "^17.2.0", + "node-cron": "^4.2.1", + "node-telegram-bot-api": "^0.66.0", + "sqlite3": "^5.1.7", + "web-push": "^3.6.7" + } + }, + "node_modules/@cypress/request": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.9.tgz", + "integrity": "sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~4.0.4", + "http-signature": "~1.4.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "6.14.0", + "safe-buffer": "^5.1.2", + "tough-cookie": "^5.0.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/request-promise": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@cypress/request-promise/-/request-promise-5.0.0.tgz", + "integrity": "sha512-eKdYVpa9cBEw2kTBlHeu1PP16Blwtum6QHg/u9s/MoHkZfuo1pRGka1VlUHXF5kdew82BvOJVVGk0x8X0nbp+w==", + "dependencies": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.3", + "stealthy-require": "^1.1.1", + "tough-cookie": "^4.1.3" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "@cypress/request": "^3.0.0" + } + }, + "node_modules/@cypress/request-promise/node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "optional": true + }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "optional": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "optional": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "optional": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true + }, + "node_modules/agent-base": { + "version": "7.1.4", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "optional": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "optional": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/aproba": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", + "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", + "optional": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findindex": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.findindex/-/array.prototype.findindex-2.2.4.tgz", + "integrity": "sha512-LLm4mhxa9v8j0A/RPnpQAP4svXToJFh+Hp1pNYl5ZD5qpB4zdx/D4YjpVcETkhFbUKWO3iGMVLvrOnnmkAJT6A==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "optional": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/bn.js": { + "version": "4.12.2", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "license": "BSD-3-Clause" + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "optional": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "optional": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "optional": true + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "optional": true + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "optional": true + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "peer": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "peer": true + }, + "node_modules/file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "optional": true + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "optional": true + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "peer": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http_ece": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "optional": true + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "optional": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/http-signature": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.18.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "optional": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "optional": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "optional": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "optional": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ip-address": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "optional": true + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "optional": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "peer": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/jwa": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "optional": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "optional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "optional": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-abi": { + "version": "3.78.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.78.0.tgz", + "integrity": "sha512-E2wEyrgX/CqvicaQYU3Ze1PFGjc4QYPGsjUrlYkqAE0WjHEZwgOsGMPMzkMse4LjJbDmaEuDX3CM036j5K2DSQ==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==" + }, + "node_modules/node-cron": { + "version": "4.2.1", + "license": "ISC", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "optional": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-telegram-bot-api": { + "version": "0.66.0", + "resolved": "https://registry.npmjs.org/node-telegram-bot-api/-/node-telegram-bot-api-0.66.0.tgz", + "integrity": "sha512-s4Hrg5q+VPl4/tJVG++pImxF6eb8tNJNj4KnDqAOKL6zGU34lo9RXmyAN158njwGN+v8hdNf8s9fWIYW9hPb5A==", + "dependencies": { + "@cypress/request": "^3.0.1", + "@cypress/request-promise": "^5.0.0", + "array.prototype.findindex": "^2.0.2", + "bl": "^1.2.3", + "debug": "^3.2.7", + "eventemitter3": "^3.0.0", + "file-type": "^3.9.0", + "mime": "^1.6.0", + "pump": "^2.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/node-telegram-bot-api/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "optional": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prebuild-install/node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "optional": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "optional": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "peer": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", + "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", + "dependencies": { + "lodash": "^4.17.15" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "peer": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/request/node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "peer": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "peer": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "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.", + "peer": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "optional": true + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "optional": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "optional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "optional": true, + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "optional": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/sqlite3": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", + "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.5.0", + "node-addon-api": "^7.0.0", + "prebuild-install": "^7.1.1", + "tar": "^6.1.11" + }, + "optionalDependencies": { + "node-gyp": "8.x" + }, + "peerDependencies": { + "node-gyp": "8.x" + }, + "peerDependenciesMeta": { + "node-gyp": { + "optional": true + } + } + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "optional": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/tar-fs/node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==" + }, + "node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "optional": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "optional": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "peer": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "node_modules/web-push": { + "version": "3.6.7", + "license": "MPL-2.0", + "dependencies": { + "asn1.js": "^5.3.0", + "http_ece": "1.2.0", + "https-proxy-agent": "^7.0.0", + "jws": "^4.0.0", + "minimist": "^1.2.5" + }, + "bin": { + "web-push": "src/cli.js" + }, + "engines": { + "node": ">= 16" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "optional": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/cron/package.json b/cron/package.json new file mode 100644 index 0000000..53ece9a --- /dev/null +++ b/cron/package.json @@ -0,0 +1,18 @@ +{ + "name": "CRON Sheep Service", + "version": "1.0.0", + "main": "cron.js", + "scripts": { + "start": "node cron.js" + }, + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "node-cron": "^4.2.1", + "sqlite3": "^5.1.7", + "web-push": "^3.6.7", + "dotenv": "^17.2.0", + "node-telegram-bot-api": "^0.66.0" + } +} diff --git a/cron/tasks/backup.js b/cron/tasks/backup.js new file mode 100644 index 0000000..7ecbee7 --- /dev/null +++ b/cron/tasks/backup.js @@ -0,0 +1,33 @@ +const fs = require("fs"); +const path = require("path"); +const TelegramBot = require("node-telegram-bot-api"); + +const TOKEN = process.env.TELEGRAM_TOKEN; +const CHAT_ID = process.env.CHAT_ID; +const DB_PATH = process.env.DATABASE_PATH || "../"; +const FILE = path.join(DB_PATH, "database.sqlite"); + +const bot = new TelegramBot(TOKEN, { polling: false }); + +class Backup { + async database() { + try { + if (!fs.existsSync(FILE)) { + console.log("❌ Файл бази даних не знайдено:", FILE); + return; + } + + console.log(`📤 Надсилаю файл: ${FILE}`); + + await bot.sendDocument(CHAT_ID, fs.createReadStream(FILE), { + caption: "📦 Резервна копія бази даних", + }); + + console.log("✅ Файл успішно надіслано!"); + } catch (err) { + console.error("❌ Помилка при надсиланні файлу:", err.message); + } + } +} + +module.exports = new Backup(); \ No newline at end of file diff --git a/cron/utils/notification.js b/cron/utils/notification.js new file mode 100644 index 0000000..81351ed --- /dev/null +++ b/cron/utils/notification.js @@ -0,0 +1,152 @@ +const db = require("../config/db"); +const webpush = require('web-push'); + +const VAPID_PUBLIC_KEY = process.env.VAPID_PUBLIC_KEY; +const VAPID_PRIVATE_KEY = process.env.VAPID_PRIVATE_KEY; + +webpush.setVapidDetails( + 'mailto:rozenrod320@gmail.com', + VAPID_PUBLIC_KEY, + VAPID_PRIVATE_KEY +); + +class Notification { + async sendSheep({ sheep_id, title, body, page }) { + const sql = ` + SELECT * FROM subscription + WHERE sheep_id = ? + ORDER BY id + `; + + db.all(sql, [sheep_id], async (err, rows) => { + if (err) { + console.error('DB error:', err.message); + return; + } + + if (!rows.length) { + console.log(`🐑 No subscriptions found for sheep_id: ${sheep_id}`); + return; + } + + console.log(`📨 Sending notification to ${rows.length} subscriptions...`); + + const payload = JSON.stringify({ + title: title ?? "Тестове повідомлення", + body: body ?? "Ви успішно підписалися на отримання push повідомлень!", + url: `https://${process.env.DOMAIN}${page ?? ""}` + }); + + const results = await Promise.allSettled(rows.map(row => { + const subscription = { + endpoint: row.endpoint, + keys: JSON.parse(row.keys), + }; + return webpush.sendNotification(subscription, payload); + })); + + const failed = results.filter(r => r.status === 'rejected').length; + console.log(`✅ Sent: ${rows.length - failed}, ❌ Failed: ${failed}`); + }); + } + + async sendGroup({ group_id, title, body, page }) { + const sql = ` + SELECT + subscription.* + FROM + subscription + JOIN + sheeps + ON + sheeps.id = subscription.sheep_id + WHERE + sheeps.group_id = ? + ORDER BY + subscription.id; + `; + + db.all(sql, [group_id], async (err, rows) => { + if (err) { + console.error('DB error:', err.message); + return; + } + + if (!rows.length) { + console.log(`🐑 No subscriptions found for sheep_id: ${sheep_id}`); + return; + } + + console.log(`📨 Sending notification to ${rows.length} subscriptions...`); + + const payload = JSON.stringify({ + title: title ?? "Тестове повідомлення", + body: body ?? "Ви успішно підписалися на отримання push повідомлень!", + url: `https://${process.env.DOMAIN}${page ?? ""}` + }); + + const results = await Promise.allSettled(rows.map(row => { + const subscription = { + endpoint: row.endpoint, + keys: JSON.parse(row.keys), + }; + return webpush.sendNotification(subscription, payload); + })); + + const failed = results.filter(r => r.status === 'rejected').length; + console.log(`✅ Sent: ${rows.length - failed}, ❌ Failed: ${failed}`); + }); + } + + async sendStand({ title, body, page }) { + const sql = ` + SELECT + subscription.* + FROM + subscription + JOIN + sheeps + ON sheeps.id = subscription.sheep_id + JOIN + possibilities + ON possibilities.sheep_id = sheeps.id + WHERE + possibilities.can_view_stand = '1' + ORDER BY + subscription.id; + `; + + db.all(sql, async (err, rows) => { + if (err) { + console.error('DB error:', err.message); + return; + } + + if (!rows.length) { + console.log(`🐑 No subscriptions found for sheep_id: ${sheep_id}`); + return; + } + + console.log(`📨 Sending notification to ${rows.length} subscriptions...`); + + const payload = JSON.stringify({ + title: title ?? "Тестове повідомлення", + body: body ?? "Ви успішно підписалися на отримання push повідомлень!", + url: `https://${process.env.DOMAIN}${page ?? ""}` + }); + + const results = await Promise.allSettled(rows.map(row => { + const subscription = { + endpoint: row.endpoint, + keys: JSON.parse(row.keys), + }; + return webpush.sendNotification(subscription, payload); + })); + + const failed = results.filter(r => r.status === 'rejected').length; + console.log(`✅ Sent: ${rows.length - failed}, ❌ Failed: ${failed}`); + }); + } +}; + +module.exports = new Notification(); \ No newline at end of file diff --git a/cards/cache/T80.png b/data/cards/cache/T80.png similarity index 100% rename from cards/cache/T80.png rename to data/cards/cache/T80.png diff --git a/cards/homestead/H1.webp b/data/cards/homestead/H1.webp similarity index 100% rename from cards/homestead/H1.webp rename to data/cards/homestead/H1.webp diff --git a/cards/homestead/H10.webp b/data/cards/homestead/H10.webp similarity index 100% rename from cards/homestead/H10.webp rename to data/cards/homestead/H10.webp diff --git a/cards/homestead/H11.webp b/data/cards/homestead/H11.webp similarity index 100% rename from cards/homestead/H11.webp rename to data/cards/homestead/H11.webp diff --git a/cards/homestead/H12.webp b/data/cards/homestead/H12.webp similarity index 100% rename from cards/homestead/H12.webp rename to data/cards/homestead/H12.webp diff --git a/cards/homestead/H13.webp b/data/cards/homestead/H13.webp similarity index 100% rename from cards/homestead/H13.webp rename to data/cards/homestead/H13.webp diff --git a/cards/homestead/H14.webp b/data/cards/homestead/H14.webp similarity index 100% rename from cards/homestead/H14.webp rename to data/cards/homestead/H14.webp diff --git a/cards/homestead/H15.webp b/data/cards/homestead/H15.webp similarity index 100% rename from cards/homestead/H15.webp rename to data/cards/homestead/H15.webp diff --git a/cards/homestead/H16.webp b/data/cards/homestead/H16.webp similarity index 100% rename from cards/homestead/H16.webp rename to data/cards/homestead/H16.webp diff --git a/cards/homestead/H17.webp b/data/cards/homestead/H17.webp similarity index 100% rename from cards/homestead/H17.webp rename to data/cards/homestead/H17.webp diff --git a/cards/homestead/H18.webp b/data/cards/homestead/H18.webp similarity index 100% rename from cards/homestead/H18.webp rename to data/cards/homestead/H18.webp diff --git a/cards/homestead/H19.webp b/data/cards/homestead/H19.webp similarity index 100% rename from cards/homestead/H19.webp rename to data/cards/homestead/H19.webp diff --git a/cards/homestead/H2.webp b/data/cards/homestead/H2.webp similarity index 100% rename from cards/homestead/H2.webp rename to data/cards/homestead/H2.webp diff --git a/cards/homestead/H20.webp b/data/cards/homestead/H20.webp similarity index 100% rename from cards/homestead/H20.webp rename to data/cards/homestead/H20.webp diff --git a/cards/homestead/H21.webp b/data/cards/homestead/H21.webp similarity index 100% rename from cards/homestead/H21.webp rename to data/cards/homestead/H21.webp diff --git a/cards/homestead/H22.webp b/data/cards/homestead/H22.webp similarity index 100% rename from cards/homestead/H22.webp rename to data/cards/homestead/H22.webp diff --git a/cards/homestead/H23.webp b/data/cards/homestead/H23.webp similarity index 100% rename from cards/homestead/H23.webp rename to data/cards/homestead/H23.webp diff --git a/cards/homestead/H24.webp b/data/cards/homestead/H24.webp similarity index 100% rename from cards/homestead/H24.webp rename to data/cards/homestead/H24.webp diff --git a/cards/homestead/H25.webp b/data/cards/homestead/H25.webp similarity index 100% rename from cards/homestead/H25.webp rename to data/cards/homestead/H25.webp diff --git a/cards/homestead/H26.webp b/data/cards/homestead/H26.webp similarity index 100% rename from cards/homestead/H26.webp rename to data/cards/homestead/H26.webp diff --git a/cards/homestead/H27.webp b/data/cards/homestead/H27.webp similarity index 100% rename from cards/homestead/H27.webp rename to data/cards/homestead/H27.webp diff --git a/cards/homestead/H28.webp b/data/cards/homestead/H28.webp similarity index 100% rename from cards/homestead/H28.webp rename to data/cards/homestead/H28.webp diff --git a/cards/homestead/H29.webp b/data/cards/homestead/H29.webp similarity index 100% rename from cards/homestead/H29.webp rename to data/cards/homestead/H29.webp diff --git a/cards/homestead/H3.webp b/data/cards/homestead/H3.webp similarity index 100% rename from cards/homestead/H3.webp rename to data/cards/homestead/H3.webp diff --git a/cards/homestead/H30.webp b/data/cards/homestead/H30.webp similarity index 100% rename from cards/homestead/H30.webp rename to data/cards/homestead/H30.webp diff --git a/cards/homestead/H31.webp b/data/cards/homestead/H31.webp similarity index 100% rename from cards/homestead/H31.webp rename to data/cards/homestead/H31.webp diff --git a/cards/homestead/H32.webp b/data/cards/homestead/H32.webp similarity index 100% rename from cards/homestead/H32.webp rename to data/cards/homestead/H32.webp diff --git a/cards/homestead/H33.webp b/data/cards/homestead/H33.webp similarity index 100% rename from cards/homestead/H33.webp rename to data/cards/homestead/H33.webp diff --git a/cards/homestead/H34.webp b/data/cards/homestead/H34.webp similarity index 100% rename from cards/homestead/H34.webp rename to data/cards/homestead/H34.webp diff --git a/cards/homestead/H35.webp b/data/cards/homestead/H35.webp similarity index 100% rename from cards/homestead/H35.webp rename to data/cards/homestead/H35.webp diff --git a/cards/homestead/H36.webp b/data/cards/homestead/H36.webp similarity index 100% rename from cards/homestead/H36.webp rename to data/cards/homestead/H36.webp diff --git a/cards/homestead/H37.webp b/data/cards/homestead/H37.webp similarity index 100% rename from cards/homestead/H37.webp rename to data/cards/homestead/H37.webp diff --git a/cards/homestead/H38.webp b/data/cards/homestead/H38.webp similarity index 100% rename from cards/homestead/H38.webp rename to data/cards/homestead/H38.webp diff --git a/cards/homestead/H39.webp b/data/cards/homestead/H39.webp similarity index 100% rename from cards/homestead/H39.webp rename to data/cards/homestead/H39.webp diff --git a/cards/homestead/H4.webp b/data/cards/homestead/H4.webp similarity index 100% rename from cards/homestead/H4.webp rename to data/cards/homestead/H4.webp diff --git a/cards/homestead/H40.webp b/data/cards/homestead/H40.webp similarity index 100% rename from cards/homestead/H40.webp rename to data/cards/homestead/H40.webp diff --git a/cards/homestead/H41.webp b/data/cards/homestead/H41.webp similarity index 100% rename from cards/homestead/H41.webp rename to data/cards/homestead/H41.webp diff --git a/cards/homestead/H42.webp b/data/cards/homestead/H42.webp similarity index 100% rename from cards/homestead/H42.webp rename to data/cards/homestead/H42.webp diff --git a/cards/homestead/H43.webp b/data/cards/homestead/H43.webp similarity index 100% rename from cards/homestead/H43.webp rename to data/cards/homestead/H43.webp diff --git a/cards/homestead/H44.webp b/data/cards/homestead/H44.webp similarity index 100% rename from cards/homestead/H44.webp rename to data/cards/homestead/H44.webp diff --git a/cards/homestead/H45.webp b/data/cards/homestead/H45.webp similarity index 100% rename from cards/homestead/H45.webp rename to data/cards/homestead/H45.webp diff --git a/cards/homestead/H46.webp b/data/cards/homestead/H46.webp similarity index 100% rename from cards/homestead/H46.webp rename to data/cards/homestead/H46.webp diff --git a/cards/homestead/H47.webp b/data/cards/homestead/H47.webp similarity index 100% rename from cards/homestead/H47.webp rename to data/cards/homestead/H47.webp diff --git a/cards/homestead/H48.webp b/data/cards/homestead/H48.webp similarity index 100% rename from cards/homestead/H48.webp rename to data/cards/homestead/H48.webp diff --git a/cards/homestead/H49.webp b/data/cards/homestead/H49.webp similarity index 100% rename from cards/homestead/H49.webp rename to data/cards/homestead/H49.webp diff --git a/cards/homestead/H5.webp b/data/cards/homestead/H5.webp similarity index 100% rename from cards/homestead/H5.webp rename to data/cards/homestead/H5.webp diff --git a/cards/homestead/H50.webp b/data/cards/homestead/H50.webp similarity index 100% rename from cards/homestead/H50.webp rename to data/cards/homestead/H50.webp diff --git a/cards/homestead/H51.webp b/data/cards/homestead/H51.webp similarity index 100% rename from cards/homestead/H51.webp rename to data/cards/homestead/H51.webp diff --git a/cards/homestead/H52.webp b/data/cards/homestead/H52.webp similarity index 100% rename from cards/homestead/H52.webp rename to data/cards/homestead/H52.webp diff --git a/cards/homestead/H6.webp b/data/cards/homestead/H6.webp similarity index 100% rename from cards/homestead/H6.webp rename to data/cards/homestead/H6.webp diff --git a/cards/homestead/H7.webp b/data/cards/homestead/H7.webp similarity index 100% rename from cards/homestead/H7.webp rename to data/cards/homestead/H7.webp diff --git a/cards/homestead/H8.webp b/data/cards/homestead/H8.webp similarity index 100% rename from cards/homestead/H8.webp rename to data/cards/homestead/H8.webp diff --git a/cards/homestead/H9.webp b/data/cards/homestead/H9.webp similarity index 100% rename from cards/homestead/H9.webp rename to data/cards/homestead/H9.webp diff --git a/cards/house/T1.webp b/data/cards/house/T1.webp similarity index 100% rename from cards/house/T1.webp rename to data/cards/house/T1.webp diff --git a/cards/house/T10.webp b/data/cards/house/T10.webp similarity index 100% rename from cards/house/T10.webp rename to data/cards/house/T10.webp diff --git a/cards/house/T11.webp b/data/cards/house/T11.webp similarity index 100% rename from cards/house/T11.webp rename to data/cards/house/T11.webp diff --git a/cards/house/T12.webp b/data/cards/house/T12.webp similarity index 100% rename from cards/house/T12.webp rename to data/cards/house/T12.webp diff --git a/cards/house/T13.webp b/data/cards/house/T13.webp similarity index 100% rename from cards/house/T13.webp rename to data/cards/house/T13.webp diff --git a/cards/house/T14.webp b/data/cards/house/T14.webp similarity index 100% rename from cards/house/T14.webp rename to data/cards/house/T14.webp diff --git a/cards/house/T15.webp b/data/cards/house/T15.webp similarity index 100% rename from cards/house/T15.webp rename to data/cards/house/T15.webp diff --git a/cards/house/T16.webp b/data/cards/house/T16.webp similarity index 100% rename from cards/house/T16.webp rename to data/cards/house/T16.webp diff --git a/cards/house/T17.webp b/data/cards/house/T17.webp similarity index 100% rename from cards/house/T17.webp rename to data/cards/house/T17.webp diff --git a/cards/house/T18.webp b/data/cards/house/T18.webp similarity index 100% rename from cards/house/T18.webp rename to data/cards/house/T18.webp diff --git a/cards/house/T19.webp b/data/cards/house/T19.webp similarity index 100% rename from cards/house/T19.webp rename to data/cards/house/T19.webp diff --git a/cards/house/T2.webp b/data/cards/house/T2.webp similarity index 100% rename from cards/house/T2.webp rename to data/cards/house/T2.webp diff --git a/cards/house/T20.webp b/data/cards/house/T20.webp similarity index 100% rename from cards/house/T20.webp rename to data/cards/house/T20.webp diff --git a/cards/house/T21.webp b/data/cards/house/T21.webp similarity index 100% rename from cards/house/T21.webp rename to data/cards/house/T21.webp diff --git a/cards/house/T22.webp b/data/cards/house/T22.webp similarity index 100% rename from cards/house/T22.webp rename to data/cards/house/T22.webp diff --git a/cards/house/T23.webp b/data/cards/house/T23.webp similarity index 100% rename from cards/house/T23.webp rename to data/cards/house/T23.webp diff --git a/cards/house/T25.webp b/data/cards/house/T25.webp similarity index 100% rename from cards/house/T25.webp rename to data/cards/house/T25.webp diff --git a/cards/house/T26.webp b/data/cards/house/T26.webp similarity index 100% rename from cards/house/T26.webp rename to data/cards/house/T26.webp diff --git a/cards/house/T28.webp b/data/cards/house/T28.webp similarity index 100% rename from cards/house/T28.webp rename to data/cards/house/T28.webp diff --git a/cards/house/T29.webp b/data/cards/house/T29.webp similarity index 100% rename from cards/house/T29.webp rename to data/cards/house/T29.webp diff --git a/cards/house/T3.webp b/data/cards/house/T3.webp similarity index 100% rename from cards/house/T3.webp rename to data/cards/house/T3.webp diff --git a/cards/house/T30.webp b/data/cards/house/T30.webp similarity index 100% rename from cards/house/T30.webp rename to data/cards/house/T30.webp diff --git a/cards/house/T31.webp b/data/cards/house/T31.webp similarity index 100% rename from cards/house/T31.webp rename to data/cards/house/T31.webp diff --git a/cards/house/T32.webp b/data/cards/house/T32.webp similarity index 100% rename from cards/house/T32.webp rename to data/cards/house/T32.webp diff --git a/cards/house/T33.webp b/data/cards/house/T33.webp similarity index 100% rename from cards/house/T33.webp rename to data/cards/house/T33.webp diff --git a/cards/house/T34.webp b/data/cards/house/T34.webp similarity index 100% rename from cards/house/T34.webp rename to data/cards/house/T34.webp diff --git a/cards/house/T35.webp b/data/cards/house/T35.webp similarity index 100% rename from cards/house/T35.webp rename to data/cards/house/T35.webp diff --git a/cards/house/T36.webp b/data/cards/house/T36.webp similarity index 100% rename from cards/house/T36.webp rename to data/cards/house/T36.webp diff --git a/cards/house/T37.webp b/data/cards/house/T37.webp similarity index 100% rename from cards/house/T37.webp rename to data/cards/house/T37.webp diff --git a/cards/house/T38.webp b/data/cards/house/T38.webp similarity index 100% rename from cards/house/T38.webp rename to data/cards/house/T38.webp diff --git a/cards/house/T39.webp b/data/cards/house/T39.webp similarity index 100% rename from cards/house/T39.webp rename to data/cards/house/T39.webp diff --git a/cards/house/T4.webp b/data/cards/house/T4.webp similarity index 100% rename from cards/house/T4.webp rename to data/cards/house/T4.webp diff --git a/cards/house/T40.webp b/data/cards/house/T40.webp similarity index 100% rename from cards/house/T40.webp rename to data/cards/house/T40.webp diff --git a/cards/house/T41.webp b/data/cards/house/T41.webp similarity index 100% rename from cards/house/T41.webp rename to data/cards/house/T41.webp diff --git a/cards/house/T42.webp b/data/cards/house/T42.webp similarity index 100% rename from cards/house/T42.webp rename to data/cards/house/T42.webp diff --git a/cards/house/T43.webp b/data/cards/house/T43.webp similarity index 100% rename from cards/house/T43.webp rename to data/cards/house/T43.webp diff --git a/cards/house/T44.webp b/data/cards/house/T44.webp similarity index 100% rename from cards/house/T44.webp rename to data/cards/house/T44.webp diff --git a/cards/house/T45.webp b/data/cards/house/T45.webp similarity index 100% rename from cards/house/T45.webp rename to data/cards/house/T45.webp diff --git a/cards/house/T46.webp b/data/cards/house/T46.webp similarity index 100% rename from cards/house/T46.webp rename to data/cards/house/T46.webp diff --git a/cards/house/T47.webp b/data/cards/house/T47.webp similarity index 100% rename from cards/house/T47.webp rename to data/cards/house/T47.webp diff --git a/cards/house/T48.webp b/data/cards/house/T48.webp similarity index 100% rename from cards/house/T48.webp rename to data/cards/house/T48.webp diff --git a/cards/house/T49.webp b/data/cards/house/T49.webp similarity index 100% rename from cards/house/T49.webp rename to data/cards/house/T49.webp diff --git a/cards/house/T5.webp b/data/cards/house/T5.webp similarity index 100% rename from cards/house/T5.webp rename to data/cards/house/T5.webp diff --git a/cards/house/T50.webp b/data/cards/house/T50.webp similarity index 100% rename from cards/house/T50.webp rename to data/cards/house/T50.webp diff --git a/cards/house/T51.webp b/data/cards/house/T51.webp similarity index 100% rename from cards/house/T51.webp rename to data/cards/house/T51.webp diff --git a/cards/house/T52.webp b/data/cards/house/T52.webp similarity index 100% rename from cards/house/T52.webp rename to data/cards/house/T52.webp diff --git a/cards/house/T53.webp b/data/cards/house/T53.webp similarity index 100% rename from cards/house/T53.webp rename to data/cards/house/T53.webp diff --git a/cards/house/T54.webp b/data/cards/house/T54.webp similarity index 100% rename from cards/house/T54.webp rename to data/cards/house/T54.webp diff --git a/cards/house/T55.webp b/data/cards/house/T55.webp similarity index 100% rename from cards/house/T55.webp rename to data/cards/house/T55.webp diff --git a/cards/house/T56.webp b/data/cards/house/T56.webp similarity index 100% rename from cards/house/T56.webp rename to data/cards/house/T56.webp diff --git a/cards/house/T57.webp b/data/cards/house/T57.webp similarity index 100% rename from cards/house/T57.webp rename to data/cards/house/T57.webp diff --git a/cards/house/T58.webp b/data/cards/house/T58.webp similarity index 100% rename from cards/house/T58.webp rename to data/cards/house/T58.webp diff --git a/cards/house/T59.webp b/data/cards/house/T59.webp similarity index 100% rename from cards/house/T59.webp rename to data/cards/house/T59.webp diff --git a/cards/house/T6.webp b/data/cards/house/T6.webp similarity index 100% rename from cards/house/T6.webp rename to data/cards/house/T6.webp diff --git a/cards/house/T60.webp b/data/cards/house/T60.webp similarity index 100% rename from cards/house/T60.webp rename to data/cards/house/T60.webp diff --git a/cards/house/T61.webp b/data/cards/house/T61.webp similarity index 100% rename from cards/house/T61.webp rename to data/cards/house/T61.webp diff --git a/cards/house/T62.webp b/data/cards/house/T62.webp similarity index 100% rename from cards/house/T62.webp rename to data/cards/house/T62.webp diff --git a/cards/house/T63.webp b/data/cards/house/T63.webp similarity index 100% rename from cards/house/T63.webp rename to data/cards/house/T63.webp diff --git a/cards/house/T64.webp b/data/cards/house/T64.webp similarity index 100% rename from cards/house/T64.webp rename to data/cards/house/T64.webp diff --git a/cards/house/T65.webp b/data/cards/house/T65.webp similarity index 100% rename from cards/house/T65.webp rename to data/cards/house/T65.webp diff --git a/cards/house/T66.webp b/data/cards/house/T66.webp similarity index 100% rename from cards/house/T66.webp rename to data/cards/house/T66.webp diff --git a/cards/house/T67.webp b/data/cards/house/T67.webp similarity index 100% rename from cards/house/T67.webp rename to data/cards/house/T67.webp diff --git a/cards/house/T68.webp b/data/cards/house/T68.webp similarity index 100% rename from cards/house/T68.webp rename to data/cards/house/T68.webp diff --git a/cards/house/T69.webp b/data/cards/house/T69.webp similarity index 100% rename from cards/house/T69.webp rename to data/cards/house/T69.webp diff --git a/cards/house/T7.webp b/data/cards/house/T7.webp similarity index 100% rename from cards/house/T7.webp rename to data/cards/house/T7.webp diff --git a/cards/house/T70.webp b/data/cards/house/T70.webp similarity index 100% rename from cards/house/T70.webp rename to data/cards/house/T70.webp diff --git a/cards/house/T71.webp b/data/cards/house/T71.webp similarity index 100% rename from cards/house/T71.webp rename to data/cards/house/T71.webp diff --git a/cards/house/T72.webp b/data/cards/house/T72.webp similarity index 100% rename from cards/house/T72.webp rename to data/cards/house/T72.webp diff --git a/cards/house/T73.webp b/data/cards/house/T73.webp similarity index 100% rename from cards/house/T73.webp rename to data/cards/house/T73.webp diff --git a/cards/house/T74.webp b/data/cards/house/T74.webp similarity index 100% rename from cards/house/T74.webp rename to data/cards/house/T74.webp diff --git a/cards/house/T75.webp b/data/cards/house/T75.webp similarity index 100% rename from cards/house/T75.webp rename to data/cards/house/T75.webp diff --git a/cards/house/T76.webp b/data/cards/house/T76.webp similarity index 100% rename from cards/house/T76.webp rename to data/cards/house/T76.webp diff --git a/cards/house/T77.webp b/data/cards/house/T77.webp similarity index 100% rename from cards/house/T77.webp rename to data/cards/house/T77.webp diff --git a/cards/house/T78.webp b/data/cards/house/T78.webp similarity index 100% rename from cards/house/T78.webp rename to data/cards/house/T78.webp diff --git a/cards/house/T79.webp b/data/cards/house/T79.webp similarity index 100% rename from cards/house/T79.webp rename to data/cards/house/T79.webp diff --git a/cards/house/T8.webp b/data/cards/house/T8.webp similarity index 100% rename from cards/house/T8.webp rename to data/cards/house/T8.webp diff --git a/cards/house/T80.webp b/data/cards/house/T80.webp similarity index 100% rename from cards/house/T80.webp rename to data/cards/house/T80.webp diff --git a/cards/house/T9.webp b/data/cards/house/T9.webp similarity index 100% rename from cards/house/T9.webp rename to data/cards/house/T9.webp diff --git a/dock/Sheep-Service.dbml b/dock/Sheep-Service.dbml index 38801d2..1c85ec4 100644 --- a/dock/Sheep-Service.dbml +++ b/dock/Sheep-Service.dbml @@ -172,6 +172,7 @@ Table stand_list [note: 'Таблиця місць розташування ст processing_time real [default: 1, note: 'Час тривалості зміни вісників'] status bool [default: false, note: 'Активація чи деактивація стенду'] updated_at timestamp [note: 'Дата зміни запису'] + created_at timestamp [note: 'Дата створення запису'] } Table stand_schedule [note: 'Таблиця записів служіння зі стендом'] { @@ -182,13 +183,14 @@ Table stand_schedule [note: 'Таблиця записів служіння зі hour integer [note: 'Година запису'] number_sheep text [note: 'Номер вісника, що одночасно стоїть'] updated_at timestamp [note: 'Дата зміни запису'] + created_at timestamp [note: 'Дата створення запису'] } Table stand_schedule_history [note: 'Таблиця записів служіння зі стендом'] { id integer [primary key] stand_schedule_id integer [note: 'ID стенду'] sheep_id integer [note: 'ID вісника'] - created_at timestamp [note: 'Дата зміни запису'] + created_at timestamp [note: 'Дата створення запису'] } Ref: sheeps.id - possibilities.sheep_id // one-to-one diff --git a/docker-compose.yml b/docker-compose.yml index 17aa20e..3a9a534 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,9 +6,9 @@ services: expose: - "4002" volumes: - - "${CARDS_PATH:-./data}:/app/data/cards" - - "${MAP_PATH:-./data}:/app/data/map" + - "${DATA_PATH:-./data}:/app/data" environment: + - TZ=${TZ} - CARDS_PATH=/app/data/cards/ - MAP_PATH=/app/data/map/ networks: @@ -21,16 +21,15 @@ services: expose: - "4003" volumes: - - "${DB_PATH:-./data}:/app/data" - - "${CARDS_PATH:-./data}:/app/data/cards" + - "${DATA_PATH:-./data}:/app/data" environment: + - TZ=${TZ} - DATABASE_PATH=/app/data/ - CARDS_PATH=/app/data/cards/ - PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium - VAPID_PUBLIC_KEY=${VAPID_PUBLIC_KEY} - VAPID_PRIVATE_KEY=${VAPID_PRIVATE_KEY} - DOMAIN=${DOMAIN} - shm_size: '1gb' networks: - network @@ -41,8 +40,9 @@ services: expose: - "4004" volumes: - - "${DB_PATH:-./data}:/app/data" + - "${DATA_PATH:-./data}:/app/data" environment: + - TZ=${TZ} - DATABASE_PATH=/app/data/ networks: - network @@ -59,11 +59,26 @@ services: - ./nginx/html:/usr/share/nginx/html - ./nginx/log:/var/log/nginx environment: + - TZ=${TZ} - DOMAIN=${DOMAIN} command: /bin/sh -c "envsubst '\$DOMAIN' < /etc/nginx/templates/default.conf.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'" networks: - network + cron: + image: sheep-service/cron + build: ./cron + restart: always + volumes: + - "${DATA_PATH:-./data}:/app/data" + environment: + - TZ=${TZ} + - DATABASE_PATH=/app/data/ + - TELEGRAM_TOKEN=${TELEGRAM_TOKEN} + - CHAT_ID=${CHAT_ID} + networks: + - network + volumes: data: diff --git a/scripts/generatorExcel.js b/scripts/generatorExcel.js deleted file mode 100644 index cc6eba3..0000000 --- a/scripts/generatorExcel.js +++ /dev/null @@ -1,242 +0,0 @@ -const sqlite3 = require('sqlite3').verbose(); -const ExcelJS = require('exceljs'); - -async function exportData() { - const db = new sqlite3.Database('database.sqlite'); - const workbook = new ExcelJS.Workbook(); - const sheet = workbook.addWorksheet('Опрацювання територій'); - - // Обычная тонкая рамка - function setThinBorder(cell) { - cell.border = { - top: { style: 'thin', color: { argb: 'FF000000' } }, - left: { style: 'thin', color: { argb: 'FF000000' } }, - bottom: { style: 'thin', color: { argb: 'FF000000' } }, - right: { style: 'thin', color: { argb: 'FF000000' } }, - }; - } - - // Жирные рамки для Вісників - function setTopCellBorder(cell) { - cell.border = { - top: { style: 'thick', color: { argb: 'FF000000' } }, - left: { style: 'thick', color: { argb: 'FF000000' } }, - right: { style: 'thick', color: { argb: 'FF000000' } }, - bottom: { style: 'thin', color: { argb: 'FF000000' } }, - }; - } - - function setStartColBorder(cell) { - cell.border = { - top: { style: 'thin', color: { argb: 'FF000000' } }, - left: { style: 'thick', color: { argb: 'FF000000' } }, - bottom: { style: 'thick', color: { argb: 'FF000000' } }, - right: { style: 'thin', color: { argb: 'FF000000' } }, - }; - } - - function setEndColBorder(cell) { - cell.border = { - top: { style: 'thin', color: { argb: 'FF000000' } }, - left: { style: 'thin', color: { argb: 'FF000000' } }, - bottom: { style: 'thick', color: { argb: 'FF000000' } }, - right: { style: 'thick', color: { argb: 'FF000000' } }, - }; - } - - sheet.addRow([]); - sheet.addRow([]); - - // № объекта - sheet.getCell('A1').value = '№'; - sheet.mergeCells('A1:A2'); - sheet.getCell('A1').alignment = { vertical: 'middle', horizontal: 'center' }; - sheet.getCell('A1').font = { bold: true }; - setThinBorder(sheet.getCell('A1')); - sheet.getColumn(1).width = 5; - - // "Об’єкт" - sheet.getCell('B1').value = 'Територія'; - sheet.mergeCells('B1:B2'); - sheet.getCell('B1').alignment = { vertical: 'middle', horizontal: 'center' }; - sheet.getCell('B1').font = { bold: true }; - setThinBorder(sheet.getCell('B1')); - sheet.getColumn(2).width = 40; - - // "Остання дата опрацювання" - sheet.getCell('C1').value = 'Остання дата опрацювання'; - sheet.mergeCells('C1:C2'); - sheet.getCell('C1').alignment = { vertical: 'middle', horizontal: 'center', wrapText: true }; - sheet.getCell('C1').font = { bold: true }; - setThinBorder(sheet.getCell('C1')); - sheet.getColumn(3).width = 20; - - // Вісники - for (let i = 0; i < 10; i++) { - const startCol = 4 + i * 2; - const endCol = startCol + 1; - - sheet.mergeCells(1, startCol, 1, endCol); - const topCell = sheet.getCell(1, startCol); - topCell.value = `Вісник (група) ${i + 1}`; - topCell.alignment = { horizontal: 'center', vertical: 'middle' }; - topCell.font = { bold: true }; - setThinBorder(topCell); - - const recvCell = sheet.getCell(2, startCol); - recvCell.value = 'Дата отримання'; - recvCell.alignment = { horizontal: 'center', vertical: 'middle', wrapText: true }; - recvCell.font = { bold: true }; - setThinBorder(recvCell); - - const procCell = sheet.getCell(2, endCol); - procCell.value = 'Дата опрацювання'; - procCell.alignment = { horizontal: 'center', vertical: 'middle', wrapText: true }; - procCell.font = { bold: true }; - setThinBorder(procCell); - - sheet.getColumn(startCol).width = 16; - sheet.getColumn(endCol).width = 16; - } - - const objects = await new Promise((resolve, reject) => { - db.all(` - SELECT - e.id as object_id, - e.entrance_number as number, - h.number as house_number, - h.title as house_title, - NULL as settlement, - 'entrance' as type - FROM entrance e - JOIN house h ON e.house_id = h.id - UNION ALL - SELECT - hm.id as object_id, - hm.number as number, - NULL as house_number, - hm.title as house_title, - hm.settlement, - 'homestead' as type - FROM homestead hm - `, (err, rows) => { - if (err) return reject(err); - resolve(rows); - }); - }); - - let currentRow = 3; - let objIndex = 1; - - for (const obj of objects) { - const table = obj.type === 'entrance' ? 'entrance_history' : 'homestead_history'; - const idField = obj.type === 'entrance' ? 'entrance_id' : 'homestead_id'; - - const history = await new Promise((resolve, reject) => { - db.all(` - SELECT date_start, date_end, name, group_id - FROM ${table} - WHERE ${idField} = ? - ORDER BY date_start DESC - `, [obj.object_id], (err, rows) => { - if (err) return reject(err); - resolve(rows); - }); - }); - - // № объекта - const numCell = sheet.getCell(currentRow, 1); - numCell.value = objIndex; - numCell.alignment = { vertical: 'middle', horizontal: 'center' }; - setThinBorder(numCell); - sheet.mergeCells(currentRow, 1, currentRow + 1, 1); - - // Название объекта - let objectName; - if (obj.type === 'homestead' && obj.settlement) { - objectName = `(${obj.settlement}) ${obj.house_title} ${obj.number}`; - } else if (obj.type === 'homestead') { - objectName = `${obj.house_title} ${obj.number}`; - } else { - objectName = `${obj.house_title} ${obj.house_number} (П. ${obj.number + 1})`; - } - - const objCell = sheet.getCell(currentRow, 2); - objCell.value = objectName; - sheet.mergeCells(currentRow, 2, currentRow + 1, 2); - objCell.alignment = { vertical: 'middle', horizontal: 'left' }; - setThinBorder(objCell); - - // Последняя дата обработки - let lastDate = null; - for (const h of history) { - if (h.date_end && h.date_end !== 0) { - lastDate = new Date(h.date_end); - break; - } - } - const lastDateCell = sheet.getCell(currentRow, 3); - lastDateCell.value = lastDate; - lastDateCell.numFmt = 'dd.mm.yyyy'; - sheet.mergeCells(currentRow, 3, currentRow + 1, 3); - lastDateCell.alignment = { vertical: 'middle', horizontal: 'center' }; - setThinBorder(lastDateCell); - - // История Вісників - history.forEach((h, idx) => { - const startCol = 4 + idx * 2; - const endCol = startCol + 1; - - let name = h.name; - if (h.name === 'Групова') name = `${h.name} (${h.group_id})`; - - // Верхняя ячейка имени - const nameCell = sheet.getCell(currentRow, startCol); - sheet.mergeCells(currentRow, startCol, currentRow, endCol); - nameCell.value = name; - nameCell.alignment = { horizontal: 'center' }; - setTopCellBorder(nameCell); - - // Дата получения - const startDate = h.date_start ? new Date(h.date_start) : null; - const recvCell = sheet.getCell(currentRow + 1, startCol); - recvCell.value = startDate; - recvCell.numFmt = 'dd.mm.yyyy'; - recvCell.alignment = { horizontal: 'center' }; - setStartColBorder(recvCell); - - // Дата опрацювання - const endDate = h.date_end ? new Date(h.date_end) : null; - const procCell = sheet.getCell(currentRow + 1, endCol); - procCell.value = endDate; - procCell.numFmt = 'dd.mm.yyyy'; - procCell.alignment = { horizontal: 'center' }; - setEndColBorder(procCell); - }); - - // Чётное затемнение только для блока данных - if (objIndex % 2 === 0) { - for (let col = 1; col <= 11; col++) { - sheet.getCell(currentRow, col).fill = { - type: 'pattern', - pattern: 'solid', - fgColor: { argb: 'FFEFEFEF' }, - }; - sheet.getCell(currentRow + 1, col).fill = { - type: 'pattern', - pattern: 'solid', - fgColor: { argb: 'FFEFEFEF' }, - }; - } - } - - currentRow += 2; - objIndex++; - } - - await workbook.xlsx.writeFile('Опрацювання територій.xlsx'); - console.log('Файл создан: Опрацювання територій.xlsx'); - db.close(); -} - -exportData(); \ No newline at end of file diff --git a/scripts/import.js b/scripts/import.js deleted file mode 100644 index 4714f31..0000000 --- a/scripts/import.js +++ /dev/null @@ -1,170 +0,0 @@ -const sqlite3 = require('sqlite3'); -const crypto = require('crypto'); - -// Данные для записи -const data = [ - { "name": "Богданова Л.", "group": "1", "status": "lamb" }, - { "name": "Ботюк Л.", "group": "1", "status": "lamb" }, - { "name": "Ботюк М.", "group": "1", "status": "elder" }, - { "name": "Венгер С.", "group": "1", "status": "lamb" }, - { "name": "Гловюк С.", "group": "1", "status": "lamb" }, - { "name": "Гнатюк П.", "group": "1", "status": "lamb" }, - { "name": "Дуньковська Г.", "group": "1", "status": "lamb" }, - { "name": "Корінь О.", "group": "1", "status": "lamb" }, - { "name": "Медецька Л.", "group": "1", "status": "lamb" }, - { "name": "Меладзе А.", "group": "1", "status": "lamb" }, - { "name": "Меладзе М.", "group": "1", "status": "lamb" }, - { "name": "Нуждіна Н.", "group": "1", "status": "lamb" }, - { "name": "Сидорчук І.", "group": "1", "status": "lamb" }, - { "name": "Сидорчук О.", "group": "1", "status": "elder" }, - { "name": "Смірнов Б.", "group": "1", "status": "lamb" }, - { "name": "Смірнова В.", "group": "1", "status": "lamb" }, - { "name": "Смірнов Л.", "group": "1", "status": "lamb" }, - { "name": "Ткаченко Н.", "group": "1", "status": "lamb" }, - { "name": "Медецький Р.", "group": "1", "status": "lamb" }, - { "name": "Заболотний В.", "group": "1", "status": "lamb" }, - { "name": "Власюк Т.", "group": "2", "status": "lamb" }, - { "name": "Демків В.", "group": "2", "status": "lamb" }, - { "name": "Іващенко А.", "group": "2", "status": "lamb" }, - { "name": "Кіналь Г.", "group": "2", "status": "lamb" }, - { "name": "Кіналь М.", "group": "2", "status": "lamb" }, - { "name": "Кіналь Т.", "group": "2", "status": "lamb" }, - { "name": "Ковчук Д.", "group": "2", "status": "lamb" }, - { "name": "Кушнірук Н.", "group": "2", "status": "lamb" }, - { "name": "Муц М.", "group": "2", "status": "elder" }, - { "name": "Муц Н.", "group": "2", "status": "lamb" }, - { "name": "Муц О.", "group": "2", "status": "lamb" }, - { "name": "Подвірна О.", "group": "2", "status": "lamb" }, - { "name": "Позовиков М.", "group": "2", "status": "elder" }, - { "name": "Позовиков О.", "group": "2", "status": "lamb" }, - { "name": "Позовикова Е.", "group": "2", "status": "lamb" }, - { "name": "Позовикова Л.", "group": "2", "status": "lamb" }, - { "name": "Позовикова М.", "group": "2", "status": "lamb" }, - { "name": "Резніченко А.", "group": "2", "status": "lamb" }, - { "name": "Резніченко В.", "group": "2", "status": "lamb" }, - { "name": "Хоптій Л.", "group": "2", "status": "lamb" }, - { "name": "Авдєєва В.", "group": "3", "status": "lamb" }, - { "name": "Авдєєв П.", "group": "3", "status": "lamb" }, - { "name": "Гречило Л.", "group": "3", "status": "lamb" }, - { "name": "Гушатей З.", "group": "3", "status": "lamb" }, - { "name": "Дворянська Н.", "group": "3", "status": "lamb" }, - { "name": "Дворянський М.", "group": "3", "status": "lamb" }, - { "name": "Дворянська М.", "group": "3", "status": "lamb" }, - { "name": "Дуньковська Ол.", "group": "3", "status": "lamb" }, - { "name": "Дуньковський В.", "group": "3", "status": "elder" }, - { "name": "Дуньковська Л.", "group": "3", "status": "lamb" }, - { "name": "Кавюк Н.", "group": "3", "status": "lamb" }, - { "name": "Ковалюк Е.", "group": "3", "status": "lamb" }, - { "name": "Ковалюк С.", "group": "3", "status": "lamb" }, - { "name": "Липа А.", "group": "3", "status": "lamb" }, - { "name": "Липа Н.", "group": "3", "status": "lamb" }, - { "name": "Музика С.", "group": "3", "status": "elder" }, - { "name": "Музика Св.", "group": "3", "status": "lamb" }, - { "name": "Філь Н.", "group": "3", "status": "lamb" }, - { "name": "Червенко Л.", "group": "3", "status": "lamb" }, - { "name": "Майка М.", "group": "3", "status": "lamb" }, - { "name": "Петрович І.", "group": "3", "status": "lamb" }, - { "name": "Буняк Н.", "group": "4", "status": "lamb" }, - { "name": "Буярська А.", "group": "4", "status": "lamb" }, - { "name": "Буярська Н.", "group": "4", "status": "lamb" }, - { "name": "Буярський М.", "group": "4", "status": "elder" }, - { "name": "Грищук Т.", "group": "4", "status": "lamb" }, - { "name": "Карелін І.", "group": "4", "status": "lamb" }, - { "name": "Кареліна Ір.", "group": "4", "status": "lamb" }, - { "name": "Кареліна С.", "group": "4", "status": "lamb" }, - { "name": "Ковальчук Н.", "group": "4", "status": "lamb" }, - { "name": "Ковальчук Р.", "group": "4", "status": "lamb" }, - { "name": "Ковчук Р.", "group": "4", "status": "lamb" }, - { "name": "Резніченко Т.", "group": "4", "status": "lamb" }, - { "name": "Сергієнко О.", "group": "4", "status": "lamb" }, - { "name": "Сергієнко С.", "group": "4", "status": "lamb" }, - { "name": "Стойкевич М.", "group": "4", "status": "lamb" }, - { "name": "Чапайло Г.", "group": "4", "status": "lamb" }, - { "name": "Шептицька В.", "group": "4", "status": "lamb" }, - { "name": "Шептицький І.", "group": "4", "status": "lamb" }, - { "name": "Благов Я.", "group": "5", "status": "lamb" }, - { "name": "Благова П.", "group": "5", "status": "lamb" }, - { "name": "Богів Г.", "group": "5", "status": "lamb" }, - { "name": "Богів Т.", "group": "5", "status": "lamb" }, - { "name": "Галка А.", "group": "5", "status": "lamb" }, - { "name": "Домбрович О.", "group": "5", "status": "lamb" }, - { "name": "Кавюк А.", "group": "5", "status": "lamb" }, - { "name": "Кавюк В.", "group": "5", "status": "elder" }, - { "name": "Кузнєцова Н.", "group": "5", "status": "lamb" }, - { "name": "Луців І.", "group": "5", "status": "lamb" }, - { "name": "Луців О.", "group": "5", "status": "lamb" }, - { "name": "Сиротюк В.", "group": "5", "status": "lamb" }, - { "name": "Сиротюк О.", "group": "5", "status": "lamb" }, - { "name": "Солонинка С.", "group": "5", "status": "lamb" }, - { "name": "Ульянич І.", "group": "5", "status": "lamb" }, - { "name": "Ульянич О.", "group": "5", "status": "lamb" }, - { "name": "Шмигельська С.", "group": "5", "status": "lamb" }, - { "name": "Сидорчук Т.", "group": "5", "status": "lamb" }, - { "name": "Білоліпецький І.", "group": "6", "status": "lamb" }, - { "name": "Винниченко Г.", "group": "6", "status": "lamb" }, - { "name": "Воронцов Д.", "group": "6", "status": "lamb" }, - { "name": "Дуньковська О.", "group": "6", "status": "lamb" }, - { "name": "Загурська О.", "group": "6", "status": "lamb" }, - { "name": "Іваненко К.", "group": "6", "status": "lamb" }, - { "name": "Кравчук Н.", "group": "6", "status": "lamb" }, - { "name": "Кузюк В.", "group": "6", "status": "lamb" }, - { "name": "Кузюк С.", "group": "6", "status": "lamb" }, - { "name": "Маняхіна А.", "group": "6", "status": "lamb" }, - { "name": "Мельник Н.", "group": "6", "status": "lamb" }, - { "name": "Мінтенко М.", "group": "6", "status": "lamb" }, - { "name": "Мінтенко Н.", "group": "6", "status": "lamb" }, - { "name": "Наворинська Н.", "group": "6", "status": "lamb" }, - { "name": "Носевич І.", "group": "6", "status": "lamb" }, - { "name": "Носевич Т.", "group": "6", "status": "lamb" }, - { "name": "Страшок М.", "group": "6", "status": "elder" }, - { "name": "Страшок О.", "group": "6", "status": "lamb" }, - { "name": "Мельник О.", "group": "6", "status": "lamb" }, - { "name": "Бугайов Д.", "group": "7", "status": "lamb" }, - { "name": "Гергель Л.", "group": "7", "status": "lamb" }, - { "name": "Гергель О.", "group": "7", "status": "lamb" }, - { "name": "Горун А.", "group": "7", "status": "lamb" }, - { "name": "Ковчук Л.", "group": "7", "status": "lamb" }, - { "name": "Ковчук Н.", "group": "7", "status": "lamb" }, - { "name": "Михайлів С.", "group": "7", "status": "lamb" }, - { "name": "Музика І.", "group": "7", "status": "lamb" }, - { "name": "Музика О.", "group": "7", "status": "lamb" }, - { "name": "Наворинський Р.", "group": "7", "status": "lamb" }, - { "name": "Парила І.", "group": "7", "status": "lamb" }, - { "name": "Резніченко А.", "group": "7", "status": "elder" }, - { "name": "Резніченко В.", "group": "7", "status": "lamb" }, - { "name": "Семчишин Ф.", "group": "7", "status": "elder" }, - { "name": "Сувалко В.", "group": "7", "status": "elder" }, - { "name": "Сувалко Н.", "group": "7", "status": "lamb" }, - { "name": "Якубович Л.", "group": "7", "status": "lamb" } -]; - -// Подключение к базе данных (или создание, если не существует) -const db = new sqlite3.Database('../database.sqlite', (err) => { - if (err) { - console.error('Ошибка при подключении к БД:', err.message); - } else { - console.log('Подключение к SQLite успешно'); - } -}); - -// Вставка данных -const insertData = () => { - const stmt = db.prepare("INSERT INTO sheep (name, group_id, appointment, hash) VALUES (?, ?, ?, ?)"); - data.forEach(user => { - stmt.run(user.name, user.group, user.status, crypto.randomUUID()); - }); - stmt.finalize(); - console.log('Данные успешно записаны'); -}; - -// Запуск вставки данных после создания таблицы -insertData(); - -// Закрытие соединения с БД -db.close((err) => { - if (err) { - console.error('Ошибка при закрытии БД:', err.message); - } else { - console.log('Соединение с БД закрыто'); - } -}); \ No newline at end of file diff --git a/scripts/migrator.js b/scripts/migrator.js deleted file mode 100644 index 06dc977..0000000 --- a/scripts/migrator.js +++ /dev/null @@ -1,208 +0,0 @@ -const sqlite3 = require('sqlite3').verbose(); - -const db = new sqlite3.Database('database.sqlite'); -const db_old = new sqlite3.Database('db_old.sqlite'); - - -// Створення підїздів -// const sql_1 = `SELECT * FROM areas`; -// db_old.all(sql_1, [], (err, areas) => { -// if (err) { -// throw err; -// } - -// for (let i = 0; i < areas.length; i++) { -// const area = areas[i]; - -// if(area.type == "house"){ -// // console.log(JSON.parse(area.entrance)); - -// db.get('SELECT * FROM house WHERE title = ? AND number = ?', [area.address_title, area.address_number], (err, house) => { -// if (err) { -// console.error(err.message); -// } else { -// let entrances = JSON.parse(area.entrance); -// let entrance_numbers = JSON.parse(area.entrance_number); - -// for (let q = 0; q < entrances.length; q++) { -// const entrance = entrances[q]; -// const number = entrance_numbers[q]; -// console.log(entrance, number); - -// db.run(`INSERT INTO entrance(house_id, entrance_number, title, points, points_number) VALUES(?, ?, ?, ?, ?)`, -// [ -// house.id, -// q, -// `Під'їзд ${q+1}`, -// JSON.stringify(entrance), -// JSON.stringify(number) -// ], -// function (err) { -// if (err) { -// console.error(err.message); -// } else { -// console.log("New user entrance added with id " + this.lastID); -// } -// } -// ); -// } - -// // console.log(JSON.parse(area.entrance)); -// } -// }) -// } -// } -// }); - - - -// Міграція історії з старої БД в нову -// const sql_1 = `SELECT * FROM history WHERE date_start >= 1737667735000 ORDER BY date_start`; -// db_old.all(sql_1, [], (err, historys) => { -// if (err) { -// throw err; -// } - -// for (let i = 0; i < historys.length; i++) { -// const history = historys[i]; - -// db_old.get('SELECT * FROM territory WHERE number = ?', [history.territory_number], (err, territory) => { -// if (err) { -// console.error(err.message); -// } else { -// // console.log(territory); -// let areas_id = JSON.parse(territory.areas_id) - -// for (let index = 0; index < areas_id.length; index++) { -// const element = areas_id[index]; - -// db_old.get('SELECT * FROM areas WHERE id = ?', [element[0]], (err, area) => { -// if (err) { -// console.error(err.message); -// } else { -// if (area.type == "house") { -// console.log(area.address_title, area.address_number); - -// db.get('SELECT * FROM house WHERE title = ? AND number = ?', [area.address_title, area.address_number], (err, house) => { -// if (err) { -// console.error(err.message); -// } else { -// console.log(area.address_title, area.address_number); -// console.log(house.id, element[1]); - -// db.get('SELECT * FROM entrance WHERE house_id = ? AND entrance_number = ?', [house.id, element[1]], (err, entrance) => { -// if (err) { -// console.error(err.message); -// } else { -// console.log(house.id, element[1]); - -// console.log(entrance.id, house.title, house.number, entrance.title); - -// db.run(`INSERT INTO entrance_history(entrance_id, name, date_start, date_end, group_id, working) VALUES(?, ?, ?, ?, ?, ?)`, -// [ -// entrance.id, -// history.name, -// history.date_start, -// history.date_end, -// history.group_number, -// history.working, -// ], -// function (err) { -// if (err) { -// console.error(err.message); -// } else { -// console.log("New user history added with id " + this.lastID); -// } -// } -// ); -// } -// }) -// } -// }) - -// } else { -// db.get('SELECT * FROM homestead WHERE title = ? AND number = ?', [area.address_title, area.address_number], (err, homestead) => { -// if (err) { -// console.error(err.message); -// } else { -// // console.log(house.id, house.title, house.number); - -// db.run(`INSERT INTO homestead_history(homestead_id, name, date_start, date_end, group_id, working) VALUES(?, ?, ?, ?, ?, ?)`, -// [ -// homestead.id, -// history.name, -// history.date_start, -// history.date_end, -// history.group_number, -// history.working, -// ], -// function (err) { -// if (err) { -// console.error(err.message); -// } else { -// console.log("New user history added with id " + this.lastID); -// } -// } -// ); -// } -// }) -// } -// } -// }) - - -// } - - -// } -// }) -// } -// }); - - -// Додавання ID вісника в entrance_history -// Оновлення кожного запису в entrance_history -db.serialize(() => { - db.all(`SELECT id, name FROM entrance_history`, (err, rows) => { - if (err) return console.error('Read error:', err.message); - - const updateStmt = db.prepare(`UPDATE entrance_history SET sheep_id = ? WHERE id = ?`); - let pending = rows.length; - - if (pending === 0) { - updateStmt.finalize(); - db.close(); - console.log('Нема записів для оновлення.'); - return; - } - - rows.forEach((row) => { - db.get(`SELECT id FROM sheeps WHERE name = ?`, [row.name], (err, sheep) => { - if (err) { - console.error('Search error:', err.message); - if (--pending === 0) { - updateStmt.finalize(); - db.close(); - console.log('Оновлення завершено (з помилками).'); - } - return; - } - - const sheepId = sheep ? sheep.id : 0; - - updateStmt.run(sheepId, row.id, (err) => { - if (err) { - console.error(`Помилка оновлення запису ID ${row.id}:`, err.message); - } - - if (--pending === 0) { - updateStmt.finalize(); - db.close(); - console.log('Оновлення завершено'); - } - }); - }); - }); - }); -}); - diff --git a/scripts/package-lock.json b/scripts/package-lock.json deleted file mode 100644 index 3811614..0000000 --- a/scripts/package-lock.json +++ /dev/null @@ -1,1969 +0,0 @@ -{ - "name": "import", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "import", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "exceljs": "^4.4.0", - "sqlite3": "^5.1.7" - } - }, - "node_modules/@fast-csv/format": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz", - "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", - "dependencies": { - "@types/node": "^14.0.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.isboolean": "^3.0.3", - "lodash.isequal": "^4.5.0", - "lodash.isfunction": "^3.0.9", - "lodash.isnil": "^4.0.0" - } - }, - "node_modules/@fast-csv/parse": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz", - "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==", - "dependencies": { - "@types/node": "^14.0.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.groupby": "^4.6.0", - "lodash.isfunction": "^3.0.9", - "lodash.isnil": "^4.0.0", - "lodash.isundefined": "^3.0.1", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "optional": true - }, - "node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "optional": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "optional": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "optional": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "optional": true - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "optional": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", - "optional": true, - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "optional": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/aproba": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", - "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", - "optional": true - }, - "node_modules/archiver": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", - "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", - "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^3.2.4", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.1.2", - "tar-stream": "^2.2.0", - "zip-stream": "^4.1.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/archiver-utils/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/archiver-utils/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "deprecated": "This package is no longer supported.", - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", - "engines": { - "node": ">=0.2.0" - } - }, - "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "optional": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "optional": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/compress-commons": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", - "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", - "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "optional": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crc32-stream": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", - "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/dayjs": { - "version": "1.11.18", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.18.tgz", - "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==" - }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "optional": true, - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "optional": true - }, - "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/duplexer2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexer2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/duplexer2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "optional": true - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "optional": true - }, - "node_modules/exceljs": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-4.4.0.tgz", - "integrity": "sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg==", - "dependencies": { - "archiver": "^5.0.0", - "dayjs": "^1.8.34", - "fast-csv": "^4.3.1", - "jszip": "^3.10.1", - "readable-stream": "^3.6.0", - "saxes": "^5.0.1", - "tmp": "^0.2.0", - "unzipper": "^0.10.11", - "uuid": "^8.3.0" - }, - "engines": { - "node": ">=8.3.0" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/fast-csv": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz", - "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==", - "dependencies": { - "@fast-csv/format": "4.3.5", - "@fast-csv/parse": "4.3.6" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "deprecated": "This package is no longer supported.", - "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/fstream/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/fstream/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "deprecated": "This package is no longer supported.", - "optional": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "optional": true - }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", - "optional": true - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "optional": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "optional": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "optional": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "optional": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "optional": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/ip-address": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", - "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "optional": true - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "optional": true - }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/jszip/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/jszip/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/jszip/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==" - }, - "node_modules/lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" - }, - "node_modules/lodash.groupby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", - "integrity": "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead." - }, - "node_modules/lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" - }, - "node_modules/lodash.isnil": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", - "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "node_modules/lodash.isundefined": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", - "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==" - }, - "node_modules/lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "optional": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "optional": true, - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "optional": true - }, - "node_modules/napi-build-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", - "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==" - }, - "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "optional": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/node-abi": { - "version": "3.77.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.77.0.tgz", - "integrity": "sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==" - }, - "node_modules/node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", - "optional": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "optional": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "deprecated": "This package is no longer supported.", - "optional": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "optional": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prebuild-install": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", - "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^2.0.0", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "optional": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "optional": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdir-glob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", - "dependencies": { - "minimatch": "^5.1.0" - } - }, - "node_modules/readdir-glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/readdir-glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "optional": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "optional": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "optional": true - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "optional": true - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "optional": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "optional": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", - "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", - "optional": true, - "dependencies": { - "ip-address": "^10.0.1", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", - "optional": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sqlite3": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", - "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.5.0", - "node-addon-api": "^7.0.0", - "prebuild-install": "^7.1.1", - "tar": "^6.1.11" - }, - "optionalDependencies": { - "node-gyp": "8.x" - }, - "peerDependencies": { - "node-gyp": "8.x" - }, - "peerDependenciesMeta": { - "node-gyp": { - "optional": true - } - } - }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "optional": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "optional": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "optional": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar-fs": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", - "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", - "engines": { - "node": "*" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "optional": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "optional": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/unzipper": { - "version": "0.10.14", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", - "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", - "dependencies": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - } - }, - "node_modules/unzipper/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/unzipper/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/unzipper/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "optional": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "optional": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/zip-stream": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", - "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", - "dependencies": { - "archiver-utils": "^3.0.4", - "compress-commons": "^4.1.2", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/zip-stream/node_modules/archiver-utils": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", - "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", - "dependencies": { - "glob": "^7.2.3", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - } - } -} diff --git a/scripts/package.json b/scripts/package.json deleted file mode 100644 index 7e891ba..0000000 --- a/scripts/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "import", - "version": "1.0.0", - "main": "generatorExcel.js", - "scripts": { - "start": "node generatorExcel.js" - }, - "author": "", - "license": "ISC", - "description": "", - "dependencies": { - "exceljs": "^4.4.0", - "sqlite3": "^5.1.7" - } -} diff --git a/scripts/updateDB.py b/scripts/updateDB.py deleted file mode 100644 index dfa095a..0000000 --- a/scripts/updateDB.py +++ /dev/null @@ -1,181 +0,0 @@ -import sqlite3 - -def table_exists(cursor, table_name): - cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name=?;", (table_name,)) - return cursor.fetchone() is not None - -def create_tables(): - conn = sqlite3.connect("database.sqlite") - cursor = conn.cursor() - - tables = { - "sheep": """ - CREATE TABLE IF NOT EXISTS sheep ( - id INTEGER PRIMARY KEY, - group_id INTEGER, - name TEXT, - icon TEXT, - hash TEXT, - appointment TEXT DEFAULT 'lamb', - mode INTEGER DEFAULT 0, - cu_access INTEGER DEFAULT 0, - mt_access INTEGER DEFAULT 0, - ct_access INTEGER DEFAULT 0, - ms_access INTEGER DEFAULT 0, - sm_access INTEGER DEFAULT 0, - FOREIGN KEY (group_id) REFERENCES groups(id) - );""", - "groups": """ - CREATE TABLE IF NOT EXISTS groups ( - id INTEGER PRIMARY KEY, - group_number INTEGER, - share_hash TEXT - );""", - "subscription": """ - CREATE TABLE IF NOT EXISTS subscription ( - id INTEGER PRIMARY KEY, - sheep_id INTEGER, - token TEXT, - FOREIGN KEY (sheep_id) REFERENCES sheep(id) - );""", - "house": """ - CREATE TABLE IF NOT EXISTS house ( - id INTEGER PRIMARY KEY, - group_id INTEGER, - title TEXT, - number TEXT, - points TEXT DEFAULT '[]', - points_number TEXT DEFAULT '[]', - geo TEXT DEFAULT '[]', - osm_id TEXT DEFAULT '[]', - settlement TEXT, - description TEXT, - created_at TIMESTAMP, - updated_at TIMESTAMP, - FOREIGN KEY (group_id) REFERENCES groups(id) - );""", - "entrance": """ - CREATE TABLE IF NOT EXISTS entrance ( - id INTEGER PRIMARY KEY, - house_id INTEGER, - entrance_number INTEGER, - title TEXT, - points TEXT DEFAULT '[]', - points_number TEXT DEFAULT '[]', - floors_quantity TEXT, - apartments_quantity TEXT, - description TEXT, - created_at TIMESTAMP, - updated_at TIMESTAMP, - FOREIGN KEY (house_id) REFERENCES house(id) - );""", - "entrance_history": """ - CREATE TABLE IF NOT EXISTS entrance_history ( - id INTEGER PRIMARY KEY, - entrance_id INTEGER, - name TEXT, - date_start TIMESTAMP, - date_end TIMESTAMP, - group_number INTEGER, - sheep_id TEXT, - working INTEGER DEFAULT 0, - FOREIGN KEY (entrance_id) REFERENCES entrance(id), - FOREIGN KEY (sheep_id) REFERENCES sheep(id) - );""", - "apartments": """ - CREATE TABLE IF NOT EXISTS apartments ( - id INTEGER PRIMARY KEY, - entrance_id INTEGER, - apartment_number INTEGER, - title TEXT, - floors_number INTEGER, - status INTEGER, - description TEXT, - sheep_id TEXT, - updated_at TIMESTAMP, - FOREIGN KEY (entrance_id) REFERENCES entrance(id), - FOREIGN KEY (sheep_id) REFERENCES sheep(id) - );""", - "apartments_history": """ - CREATE TABLE IF NOT EXISTS apartments_history ( - id INTEGER PRIMARY KEY, - apartments_id INTEGER, - status INTEGER, - description TEXT, - sheep_id TEXT, - created_at TIMESTAMP, - FOREIGN KEY (apartments_id) REFERENCES apartments(id) - );""", - "homestead": """ - CREATE TABLE IF NOT EXISTS homestead ( - id INTEGER PRIMARY KEY, - group_id INTEGER, - title TEXT, - number TEXT, - points TEXT DEFAULT '[]', - point_icons TEXT DEFAULT '[]', - geo TEXT DEFAULT '[]', - osm_id TEXT DEFAULT '[]', - settlement TEXT, - description TEXT, - created_at TIMESTAMP, - updated_at TIMESTAMP, - FOREIGN KEY (group_id) REFERENCES groups(id) - );""", - "homestead_history": """ - CREATE TABLE IF NOT EXISTS homestead_history ( - id INTEGER PRIMARY KEY, - homestead_id INTEGER, - name TEXT, - date_start TIMESTAMP, - date_end TIMESTAMP, - group_number INTEGER, - sheep_id TEXT, - working INTEGER DEFAULT 0, - FOREIGN KEY (homestead_id) REFERENCES homestead(id), - FOREIGN KEY (sheep_id) REFERENCES sheep(id) - );""", - "meetings_schedule": """ - CREATE TABLE IF NOT EXISTS meetings_schedule ( - id INTEGER PRIMARY KEY, - date TIMESTAMP, - type INTEGER, - name TEXT, - sheep_id TEXT, - title TEXT, - number TEXT, - FOREIGN KEY (sheep_id) REFERENCES sheep(id) - );""", - "stand_list": """ - CREATE TABLE IF NOT EXISTS stand_list ( - id INTEGER PRIMARY KEY, - title TEXT, - hour_start INTEGER DEFAULT 10, - hour_end INTEGER DEFAULT 16, - quantity_sheep INTEGER DEFAULT 2, - week_days TEXT DEFAULT '[0, 1, 2, 3, 4, 5, 6]' - );""", - "stand_schedule": """ - CREATE TABLE IF NOT EXISTS stand_schedule ( - id INTEGER PRIMARY KEY, - stand INTEGER, - date TIMESTAMP, - hour INTEGER, - sheep_id TEXT, - number_sheep TEXT, - updated_at TIMESTAMP, - FOREIGN KEY (sheep_id) REFERENCES sheep(id), - FOREIGN KEY (stand) REFERENCES stand_list(id) - );""" - } - - for name, sql in tables.items(): - if not table_exists(cursor, name): - cursor.execute(sql) - - conn.commit() - conn.close() - -if __name__ == "__main__": - create_tables() - print("Database setup complete.") \ No newline at end of file diff --git a/web/css/main.css b/web/css/main.css index c1fe9a0..25ff46e 100644 --- a/web/css/main.css +++ b/web/css/main.css @@ -151,6 +151,12 @@ select { font-size: var(--FontSize2); } +details summary::-webkit-details-marker, +details summary::marker { + display: none; + content: ""; +} + .hold-button { user-select: none; } diff --git a/web/img/stand_0.png b/web/img/stand_0.png new file mode 100644 index 0000000..caa75c0 Binary files /dev/null and b/web/img/stand_0.png differ diff --git a/web/img/stand_1.png b/web/img/stand_1.png new file mode 100644 index 0000000..69b26d0 Binary files /dev/null and b/web/img/stand_1.png differ diff --git a/web/img/stand_2.png b/web/img/stand_2.png new file mode 100644 index 0000000..fbaf103 Binary files /dev/null and b/web/img/stand_2.png differ diff --git a/web/img/stand_3.png b/web/img/stand_3.png new file mode 100644 index 0000000..75e9d27 Binary files /dev/null and b/web/img/stand_3.png differ diff --git a/web/img/stand_4.png b/web/img/stand_4.png new file mode 100644 index 0000000..cc318ae Binary files /dev/null and b/web/img/stand_4.png differ diff --git a/web/img/stand_5.png b/web/img/stand_5.png new file mode 100644 index 0000000..db68d44 Binary files /dev/null and b/web/img/stand_5.png differ diff --git a/web/index.html b/web/index.html index 2967f9c..d5560a1 100644 --- a/web/index.html +++ b/web/index.html @@ -108,6 +108,9 @@ + + + diff --git a/web/lib/app.js b/web/lib/app.js index 6675c39..2257650 100644 --- a/web/lib/app.js +++ b/web/lib/app.js @@ -70,12 +70,12 @@ window.addEventListener('load', async function () { if (USER.possibilities.can_view_sheeps) await Sheeps.sheeps_list.loadAPI(); + if (Cloud.socket) Cloud.socket.close(1000, "Перезапуск з'єднання"); + Cloud.start(); + editFontStyle(); Router.check().listen().delegateLinks(); - - if (Cloud.socket) Cloud.socket.close(1000, "Перезапуск з'єднання"); - Cloud.start(); } }); diff --git a/web/lib/pages/auth/script.js b/web/lib/pages/auth/script.js index 32df166..d74cbdf 100644 --- a/web/lib/pages/auth/script.js +++ b/web/lib/pages/auth/script.js @@ -27,6 +27,7 @@ const Auth = { localStorage.removeItem("uuid"); Router.navigate(`/auth`); } else { + Cloud.start(); localStorage.setItem("uuid", uuid); Router.navigate(`/`, false); } @@ -42,8 +43,6 @@ const Auth = { if (USER.possibilities.can_manager_territory) document.getElementById("li-territory").style.display = ""; if (USER.possibilities.can_view_stand) document.getElementById("li-stand").style.display = ""; document.getElementById("li-options").style.display = ""; - - Cloud.start(); }); } } \ No newline at end of file diff --git a/web/lib/pages/home/style.css b/web/lib/pages/home/style.css index 8ddaf99..be2adc9 100644 --- a/web/lib/pages/home/style.css +++ b/web/lib/pages/home/style.css @@ -6,12 +6,12 @@ } .page-home details { - border-radius: 15px; + border-radius: var(--border-radius); width: 100%; display: flex; flex-direction: column; align-items: stretch; - margin-bottom: 20px; + margin-bottom: 10px; background: var(--ColorThemes1); color: var(--ColorThemes3); border: 1px solid var(--ColorThemes2); @@ -30,20 +30,22 @@ content: ""; } - .page-home summary { width: calc(100% - 40px); cursor: pointer; color: var(--ColorThemes3); border-radius: var(--border-radius); font-size: var(--FontSize5); - font-weight: 300; padding: 20px; position: relative; + display: flex; + justify-content: space-between; + align-items: center; } .page-home summary span { font-weight: 500; + width: 100%; } @@ -66,31 +68,36 @@ width: 300px; height: 200px; background-color: var(--ColorThemes2); - margin: 0px 10px 20px 10px; + margin: 10px; overflow: hidden; cursor: pointer; border-radius: 10px; } + @media (max-width: 2300px) { .page-home .card { width: calc((100% / 5) - 30px); } } + @media (max-width: 1960px) { .page-home .card { width: calc((100% / 4) - 30px); } } + @media (max-width: 1640px) { .page-home .card { width: calc((100% / 3) - 30px); } } + @media (max-width: 1280px) { .page-home .card { width: calc((100% / 2) - 30px); } } + @media (max-width: 650px) { .page-home .card { width: 100%; @@ -115,6 +122,7 @@ background-position: center; background-color: var(--PrimaryColor); } + .page-home .card>a { position: absolute; width: 100%; @@ -168,6 +176,6 @@ font-weight: 400; padding: 10px; z-index: 2; - width: 100%; + width: 100%; text-align: center; } \ No newline at end of file diff --git a/web/lib/pages/sheeps/script.js b/web/lib/pages/sheeps/script.js index eac8ec8..c8b7455 100644 --- a/web/lib/pages/sheeps/script.js +++ b/web/lib/pages/sheeps/script.js @@ -33,122 +33,127 @@ const SheepsEvents = { init() { if (this.initialized) return; - const sheepEditorForm = document.getElementById("sheep-editor"); - const sheepEditorButton = document.getElementById('sheep-editor-button'); - sheepEditorForm.addEventListener("submit", async (event) => { - event.preventDefault(); + document.addEventListener('submit', async (e) => { + const editorForm = e.target.closest('#sheep-editor'); + if (editorForm) { + e.preventDefault(); + const sheepEditorButton = document.getElementById('sheep-editor-button'); + const form = event.target; + const formData = new FormData(form); + const uuidValue = form.elements["uuid"].value; + const sheep = Sheeps.sheeps_list.list.find(item => item.uuid === uuidValue); - const form = event.target; - const formData = new FormData(form); - const uuidValue = form.elements["uuid"].value; - const sheep = Sheeps.sheeps_list.list.find(item => item.uuid === uuidValue); + if (!sheep) { + console.error("Sheep not found for uuid:", uuidValue); + return; + } - if (!sheep) { - console.error("Sheep not found for uuid:", uuidValue); + sheep.name = form.elements["name"].value; + sheep.group_id = Number(formData.get("group_id")); + sheep.mode = formData.get("mode"); + sheep.mode_title = ["Користувач", "Модератор", "Адміністратор"][sheep.mode] || "Користувач"; + + const permKeys = [ + "can_view_sheeps", + "can_view_schedule", + "can_view_stand", + "can_view_territory", + "can_add_sheeps", + "can_add_territory", + "can_manager_territory", + "can_add_stand", + "can_manager_stand", + "can_add_schedule" + ]; + for (const key of permKeys) { + sheep.possibilities[key] = form.elements[key].checked; + } + + sheepEditorButton.innerText = "Зачекайте..."; + + try { + const uuid = localStorage.getItem('uuid'); + const URL = `${CONFIG.api}sheep`; + const response = await fetch(URL, { + method: 'PUT', + headers: { + "Content-Type": "application/json", + "Authorization": uuid + }, + body: JSON.stringify(sheep) + }); + + if (response.ok) { + sheepEditorButton.innerText = "Успішно збережено"; + const data = await response.json(); + console.log(data); + + Sheeps.sheeps_list.list = []; + await Sheeps.sheeps_list.setHTML(); + + setTimeout(() => { + sheepEditorButton.innerText = "Зберегти"; + }, 3000); + } else { + console.error('Помилка збереження'); + sheepEditorButton.innerText = "Помилка збереження"; + } + } catch (err) { + console.error(err); + sheepEditorButton.innerText = "Помилка збереження"; + } + + // тот же код, что был в _onSheepEditorSubmit, но обращаемся к editorForm return; } - sheep.name = form.elements["name"].value; - sheep.group_id = Number(formData.get("group_id")); - sheep.mode = formData.get("mode"); - sheep.mode_title = ["Користувач", "Модератор", "Адміністратор"][sheep.mode] || "Користувач"; + const addedsForm = e.target.closest('#sheep-addeds'); + if (addedsForm) { + e.preventDefault(); + const sheepAddedsButton = document.getElementById('sheep-addeds-button'); - const permKeys = [ - "can_view_sheeps", - "can_view_schedule", - "can_view_stand", - "can_view_territory", - "can_add_sheeps", - "can_add_territory", - "can_manager_territory", - "can_add_stand", - "can_manager_stand", - "can_add_schedule" - ]; - for (const key of permKeys) { - sheep.possibilities[key] = form.elements[key].checked; - } + const form = event.target; + const formData = new FormData(form); + const data = Object.fromEntries(formData.entries()); - sheepEditorButton.innerText = "Зачекайте..."; + sheepAddedsButton.innerText = "Зачекайте..."; - try { - const uuid = localStorage.getItem('uuid'); - const URL = `${CONFIG.api}sheep`; - const response = await fetch(URL, { - method: 'PUT', - headers: { - "Content-Type": "application/json", - "Authorization": uuid - }, - body: JSON.stringify(sheep) - }); + try { + const uuid = localStorage.getItem('uuid'); + const URL = `${CONFIG.api}sheep`; + const response = await fetch(URL, { + method: 'POST', + headers: { + "Content-Type": "application/json", + "Authorization": uuid + }, + body: JSON.stringify(data) + }); - if (response.ok) { - sheepEditorButton.innerText = "Успішно збережено"; - const data = await response.json(); - console.log(data); + if (response.ok) { + sheepAddedsButton.innerText = "Вісника додано"; + const data = await response.json(); + console.log(data); - Sheeps.sheeps_list.list = []; - await Sheeps.sheeps_list.setHTML(); + Sheeps.sheeps_list.list = []; - setTimeout(() => { - sheepEditorButton.innerText = "Зберегти"; - }, 3000); - } else { - console.error('Помилка збереження'); - sheepEditorButton.innerText = "Помилка збереження"; - } - } catch (err) { - console.error(err); - sheepEditorButton.innerText = "Помилка збереження"; - } - }); + const randomNumber = Math.floor(Math.random() * Sheeps_icon.length); - const sheepAddedsForm = document.getElementById("sheep-addeds"); - const sheepAddedsButton = document.getElementById('sheep-addeds-button'); - sheepAddedsForm.addEventListener("submit", async (event) => { - event.preventDefault(); + Sheeps.addeds.close(); + await Sheeps.editor.setHTML(data.id, randomNumber); - const form = event.target; - const formData = new FormData(form); - const data = Object.fromEntries(formData.entries()); - - sheepAddedsButton.innerText = "Зачекайте..."; - - try { - const uuid = localStorage.getItem('uuid'); - const URL = `${CONFIG.api}sheep`; - const response = await fetch(URL, { - method: 'POST', - headers: { - "Content-Type": "application/json", - "Authorization": uuid - }, - body: JSON.stringify(data) - }); - - if (response.ok) { - sheepAddedsButton.innerText = "Вісника додано"; - const data = await response.json(); - console.log(data); - - Sheeps.sheeps_list.list = []; - - const randomNumber = Math.floor(Math.random() * Sheeps_icon.length); - - Sheeps.addeds.close(); - await Sheeps.editor.setHTML(data.id, randomNumber); - - setTimeout(() => { - sheepAddedsButton.innerText = "Додати"; - }, 3000); - } else { - console.error('Помилка додавання'); + setTimeout(() => { + sheepAddedsButton.innerText = "Додати"; + }, 3000); + } else { + console.error('Помилка додавання'); + sheepAddedsButton.innerText = "Помилка додавання"; + } + } catch (err) { + console.error(err); sheepAddedsButton.innerText = "Помилка додавання"; } - } catch (err) { - console.error(err); - sheepAddedsButton.innerText = "Помилка додавання"; + return; } }); @@ -469,7 +474,7 @@ const Sheeps = { const URL = `${CONFIG.api}house/list?mode=admin&sheep_id=${id}`; const list = await Sheeps.territory.loadAPI(URL); - if ((USER.possibilities.can_view_territory || USER.mode == 2) && list.length > 0){ + if ((USER.possibilities.can_view_territory || USER.mode == 2) && list.length > 0) { document.getElementById('editor-blocks-territory').style.display = ""; Sheeps.territory.renderCards(list, "house"); } @@ -479,7 +484,7 @@ const Sheeps = { const URL = `${CONFIG.api}homestead/list?mode=admin&sheep_id=${id}`; const list = await Sheeps.territory.loadAPI(URL); - if ((USER.possibilities.can_view_territory || USER.mode == 2) && list.length > 0){ + if ((USER.possibilities.can_view_territory || USER.mode == 2) && list.length > 0) { document.getElementById('editor-blocks-territory').style.display = ""; Sheeps.territory.renderCards(list, "homestead"); } diff --git a/web/lib/pages/stand/card/index.html b/web/lib/pages/stand/card/index.html index fbae17c..4f7188d 100644 --- a/web/lib/pages/stand/card/index.html +++ b/web/lib/pages/stand/card/index.html @@ -2,18 +2,57 @@ -
- Інформація про стенд +
+ + Інформація про стенд +
- Розташування: -

--

+ Розташування: +

--

- Геолокація: - -- + Геолокація: + --
-
+
+
+ + + +

Доступних днів поки немає

+
+ +
+ + + + + + +

Зачекайте ...

+
+
diff --git a/web/lib/pages/stand/card/script.js b/web/lib/pages/stand/card/script.js index 8322c49..6230f45 100644 --- a/web/lib/pages/stand/card/script.js +++ b/web/lib/pages/stand/card/script.js @@ -114,44 +114,6 @@ const Stand_card = { } }, - // update(msg) { - // console.log(msg.type, msg.data.id); - - // if (msg.type == "stand_locking") { - // const id = msg.data.id; - // const el = document.getElementById(`name-${id}`); - - // if (msg.user.id != USER.id) { - // el.disabled = true; - // el.style.border = "2px solid var(--PrimaryColor);" - // el.style.backgroundColor = "red" - // } - // } else if (msg.type == "stand_unlocking") { - // const id = msg.data.id; - // const el = document.getElementById(`name-${id}`); - // if (msg.user.id != USER.id || !msg.data.sheep_id) { - // el.style.border = ""; - // el.style.backgroundColor = "" - // el.removeAttribute('disabled'); - // } - // } else if (msg.type == "stand_update") { - // const id = msg.data.id; - // const el = document.getElementById(`name-${id}`); - // if (msg.data.sheep_id == USER.id) { - // el.innerHTML = ``; - // el.removeAttribute('disabled'); - // } else if (msg.data.sheep_id == "" || msg.data.sheep_id == null || msg.data.sheep_id == USER.id) { - // el.innerHTML = ``; - // el.removeAttribute('disabled'); - // } else { - // el.innerHTML = ``; - // el.disabled = true; - // } - // el.style.border = ""; - // el.style.backgroundColor = "" - // } else return; - // }, - mess: { locking({ id }) { const message = { @@ -235,13 +197,69 @@ const Stand_card = { schedule: { list: [], + + genNull() { + return ` +
+ + + +

Доступних днів поки немає

+
+ +
+ + + + + + +

Зачекайте ...

+
+ ` + }, + async setHTML() { const block = document.getElementById('stand-schedule'); - block.innerHTML = ''; + block.innerHTML = this.genNull(); + + const null_list = document.getElementById('null-list'); + const load_list = document.getElementById('load-list'); + + null_list.setAttribute("data-visible", "false"); + load_list.setAttribute("data-visible", "true"); const url = `${CONFIG.api}stand/schedule/list/${Stand_card.id}`; this.list = Stand_card.grouped(await Stand_card.loadAPI(url)); + if (this.list.length == 0) { + null_list.setAttribute("data-visible", "true"); + load_list.setAttribute("data-visible", "false"); + } else { + null_list.setAttribute("data-visible", "false"); + load_list.setAttribute("data-visible", "false"); + } + const fragment = document.createDocumentFragment(); const createSelect = (sheep) => { @@ -303,14 +321,19 @@ const Stand_card = { textContent: `${formattedDate(timestamp)} • ${formattedDayName(timestamp)}` })); + const step = day[1]?.[0]?.hour - day[0]?.[0]?.hour || 0.5; // крок між інтервалами + day.forEach((hour, hourIndex) => { const hourDiv = Object.assign(document.createElement("div"), { id: `hour-${dayIndex}-${hourIndex}` }); + const start = hour[0].hour; + const end = start + step; + hourDiv.appendChild(Object.assign(document.createElement("span"), { className: "time", - textContent: `${Stand_card.formatTime(hour[0].hour)}-${Stand_card.formatTime(hour[0].hour + Stand_card.info.list.processing_time)}` + textContent: `${Stand_card.formatTime(start)}-${Stand_card.formatTime(end)}` })); hour.forEach(sheep => hourDiv.appendChild(createSelect(sheep))); @@ -320,7 +343,7 @@ const Stand_card = { fragment.appendChild(dayDiv); }); - // кнопка добавления + // кнопка додавання if (USER.possibilities.can_add_stand) { const btn = Object.assign(document.createElement("button"), { id: "stand-new-button", @@ -332,132 +355,6 @@ const Stand_card = { block.appendChild(fragment); } - // async setHTML() { - // const block_schedule = document.getElementById('stand-schedule'); - // block_schedule.innerHTML = ''; - - // const url = `${CONFIG.api}stand/schedule/list/${Stand_card.id}`; - // this.list = Stand_card.grouped(await Stand_card.loadAPI(url)); - - // let dayIndex = 0; - // for (const day of this.list) { - // const timestamp = day[0][0].date; - - // const dayDiv = document.createElement("div"); - // dayDiv.className = "block-day"; - // dayDiv.id = `day-${dayIndex}`; - - // const header = document.createElement("h3"); - // header.textContent = `${formattedDate(timestamp)} • ${formattedDayName(timestamp)}`; - // dayDiv.appendChild(header); - - // let hourIndex = 0; - // for (const hour of day) { - // const hourDiv = document.createElement("div"); - // hourDiv.id = `hour-${dayIndex}-${hourIndex}`; - - // const span = document.createElement("span"); - // span.className = "time"; - // span.textContent = `${Stand_card.formatTime(hour[0].hour)}-${Stand_card.formatTime(hour[0].hour + Stand_card.info.list.processing_time)}`; - // hourDiv.appendChild(span); - - // for (const sheep of hour) { - // const select = document.createElement("select"); - // select.id = `name-${sheep.id}`; - - // const emptyOption = document.createElement("option"); - // emptyOption.value = ""; - // emptyOption.textContent = " "; - // select.appendChild(emptyOption); - - // if (sheep.sheep_id && sheep.sheep_id == USER.id) { - // const opt = document.createElement("option"); - // opt.value = USER.id; - // opt.textContent = USER.name; - // opt.selected = true; - // select.appendChild(opt); - - // // --- Обработчики событий --- - // select.addEventListener("focus", () => { - // // пользователь начал взаимодействие → блокируем - // Stand_card.cloud.mess.locking({ id: sheep.id }); - // }); - - // select.addEventListener("blur", () => { - // // пользователь ушёл → разблокируем - // Stand_card.cloud.mess.unlocking({ id: sheep.id }); - // }); - - // select.addEventListener("change", () => { - // // пользователь выбрал что-то → обновляем - // Stand_card.cloud.mess.update({ sheep_id: select.value, id: sheep.id }); - // }); - // } else if (sheep.sheep_id && sheep.sheep_id != USER.id) { - // const opt = document.createElement("option"); - // opt.value = sheep.sheep_id; - // opt.textContent = sheep.sheep_name; - // opt.selected = true; - // select.appendChild(opt); - - // // --- Обработчики событий --- - // select.addEventListener("focus", () => { - // // пользователь начал взаимодействие → блокируем - // Stand_card.cloud.mess.locking({ id: sheep.id }); - // }); - - // select.addEventListener("blur", () => { - // // пользователь ушёл → разблокируем - // Stand_card.cloud.mess.unlocking({ id: sheep.id }); - // }); - - // select.addEventListener("change", () => { - // // пользователь выбрал что-то → обновляем - // Stand_card.cloud.mess.update({ sheep_id: select.value, id: sheep.id }); - // }); - - // select.disabled = true; - // } else { - // const opt = document.createElement("option"); - // opt.value = USER.id; - // opt.textContent = USER.name; - // select.appendChild(opt); - - // // --- Обработчики событий --- - // select.addEventListener("focus", () => { - // // пользователь начал взаимодействие → блокируем - // Stand_card.cloud.mess.locking({ id: sheep.id }); - // }); - - // select.addEventListener("blur", () => { - // // пользователь ушёл → разблокируем - // Stand_card.cloud.mess.unlocking({ id: sheep.id }); - // }); - - // select.addEventListener("change", () => { - // // пользователь выбрал что-то → обновляем - // Stand_card.cloud.mess.update({ sheep_id: select.value, id: sheep.id }); - // }); - // } - - // hourDiv.appendChild(select); - // } - - // dayDiv.appendChild(hourDiv); - // hourIndex++; - // } - - // block_schedule.appendChild(dayDiv); - // dayIndex++; - // } - - // if (USER.possibilities.can_add_stand) { - // const btn = document.createElement("button"); - // btn.id = "stand-new-button"; - // btn.onclick = () => Stand_card.addStand(); - // btn.textContent = "Додати стенд(и)"; - // block_schedule.appendChild(btn); - // } - // } }, grouped(list) { diff --git a/web/lib/pages/stand/card/style.css b/web/lib/pages/stand/card/style.css index 8c99b7c..d9bec85 100644 --- a/web/lib/pages/stand/card/style.css +++ b/web/lib/pages/stand/card/style.css @@ -19,15 +19,28 @@ box-shadow: var(--shadow-l1); } +.page-stand-card>details summary::-webkit-details-marker, +.page-stand-card>details summary::marker { + display: none; + content: ""; +} + .page-stand-card summary { width: calc(100% - 40px); cursor: pointer; color: var(--ColorThemes3); border-radius: var(--border-radius); font-size: var(--FontSize5); - font-weight: 300; padding: 20px; position: relative; + display: flex; + justify-content: space-between; + align-items: center; +} + +.page-stand-card summary span { + font-weight: 500; + width: 100%; } #stand-info div { @@ -35,7 +48,7 @@ flex-direction: row; display: flex; flex-direction: row; - padding: 10px; + padding: 0 20px 10px 20px; color: var(--ColorThemes3); align-items: center; } @@ -61,6 +74,7 @@ height: auto; aspect-ratio: 16 / 9; background-color: #f2e5c9; + display: none; } #stand-info img::before { @@ -87,6 +101,31 @@ transition: all .2sease 0s; } +#stand-schedule>.mess-list { + height: 200px; + display: none; + flex-direction: column; + align-items: center; + justify-content: space-evenly; +} + +#stand-schedule>.mess-list[data-visible="true"] { + display: flex; +} + +#stand-schedule>.mess-list>svg { + width: 100px; + height: 100px; + fill: var(--ColorThemes3); + opacity: 0.7; +} + +#stand-schedule>.mess-list>h3 { + font-size: var(--FontSize5); + color: var(--ColorThemes3); + opacity: 0.7; +} + #stand-schedule>.block-day { display: flex; flex-direction: column; @@ -104,7 +143,7 @@ } #stand-schedule>.block-day h3 { - font-size: 17px; + font-size: var(--FontSize5); font-weight: 500; padding: 10px; text-transform: capitalize; @@ -123,8 +162,9 @@ } #stand-schedule>.block-day div span { - min-width: 85px; padding: 0 5px; + font-size: var(--FontSize4); + white-space: nowrap; } #stand-schedule>.block-day div select { @@ -136,7 +176,9 @@ height: 30px; background-color: var(--ColorThemes0); color: var(--ColorThemes3); + font-size: var(--FontSize4); } + #stand-schedule>.block-day div select:disabled { opacity: 0.9 !important; } @@ -150,7 +192,7 @@ background-color: var(--ColorThemes2); } -#stand-schedule> #stand-new-button{ +#stand-schedule>#stand-new-button { border-radius: 6px; background: var(--PrimaryColor); color: var(--PrimaryColorText); diff --git a/web/lib/pages/stand/constructor/index.html b/web/lib/pages/stand/constructor/index.html index dc1986d..2bb6d07 100644 --- a/web/lib/pages/stand/constructor/index.html +++ b/web/lib/pages/stand/constructor/index.html @@ -48,20 +48,18 @@
diff --git a/web/lib/pages/stand/editor/index.html b/web/lib/pages/stand/editor/index.html new file mode 100644 index 0000000..a619a6f --- /dev/null +++ b/web/lib/pages/stand/editor/index.html @@ -0,0 +1,113 @@ +
+
+

Редагування місця розташування стенду

+ +
+ + +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+ + +
+
+ +
+ + +
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
diff --git a/web/lib/pages/stand/editor/script.js b/web/lib/pages/stand/editor/script.js new file mode 100644 index 0000000..d7f5dc7 --- /dev/null +++ b/web/lib/pages/stand/editor/script.js @@ -0,0 +1,108 @@ +const Stand_editor = { + init: async (id) => { + let html = await fetch('/lib/pages/stand/editor/index.html').then((response) => response.text()); + app.innerHTML = html; + + const form = document.getElementById('stand-editor-form'); + + Stand_editor.setHTML(id); + + form.addEventListener('submit', (event) => { + event.preventDefault(); + + let values = { + "title": document.getElementById('info-title').value, + "quantity_sheep": Number(document.getElementById('info-quantity_sheep').value), + "hour_start": Number(document.getElementById('info-hour_start').value), + "hour_end": Number(document.getElementById('info-hour_end').value), + "geo": [Number(document.getElementById('info-geo_lat').value), Number(document.getElementById('info-geo_lng').value)], + "processing_time": Number(document.getElementById('info-processing_time').value) + }; + + const checkboxes = form.querySelectorAll('input[type="checkbox"][name^="day-"]'); + let week_days = () => { + let a = []; + for (const key in checkboxes) { + const element = checkboxes[key]; + if(element.checked) a.push(Number((element.name).replace("day-", ""))) + } + return a + } + values.week_days = week_days(); + + console.log(values); + + Stand_editor.save(values, id); + }); + }, + + // Отримання даних з API з авторизацією через UUID + async loadAPI(URL) { + let uuid = localStorage.getItem("uuid"); + return await fetch(URL, { + method: 'GET', + headers: { + "Content-Type": "application/json", + "Authorization": uuid + } + }).then((response) => response.json()); + }, + + // Встановлення HTML-контенту для редактора залежно від типу об'єкта + async setHTML(id) { + let list = await this.loadAPI(`${CONFIG.api}stand/${id}`); + + document.getElementById('info-title').value = list.title; + document.getElementById('info-quantity_sheep').value = list.quantity_sheep; + document.getElementById('info-hour_start').value = list.hour_start; + document.getElementById('info-hour_end').value = list.hour_end; + document.getElementById('info-geo_lat').value = list.geo[0]; + document.getElementById('info-geo_lng').value = list.geo[1]; + document.getElementById('info-processing_time').value = list.processing_time; + + for (let i = 0; i < list.week_days.length; i++) { + const element = list.week_days[i]; + document.getElementById(`day-${element}`).checked = true; + } + }, + + async save(values, id) { + const button = document.getElementById('stand-editor-button'); + + const uuid = localStorage.getItem('uuid'); + const URL = `${CONFIG.api}stand/${id}`; + await fetch(URL, { + method: 'PUT', + headers: { + "Content-Type": "application/json", + "Authorization": uuid + }, + body: JSON.stringify(values) + }) + .then(response => { + if (response.status == 200) { + console.log({ 'setPack': 'ok' }); + button.innerText = "Стенд відредаговано"; + + return response.json() + } else { + console.log('err'); + button.innerText = "Помилка при редагуванні"; + + return + } + }) + .then(data => { + console.log(data); + // Router.navigate(`/stand/card/${data.id}`); + + setTimeout(() => { + button.innerText = "Зберегти"; + }, 3000); + }) + .catch(err => { + console.log(err); + button.innerText = "Помилка при редагуванні"; + }) + } +} \ No newline at end of file diff --git a/web/lib/pages/stand/editor/style.css b/web/lib/pages/stand/editor/style.css new file mode 100644 index 0000000..61931cc --- /dev/null +++ b/web/lib/pages/stand/editor/style.css @@ -0,0 +1,120 @@ +.page-stand-editor { + width: calc(100% - 40px); + display: flex; + flex-direction: column; + align-items: stretch; + margin: 20px 20px 0 20px; +} + +.page-stand-editor>form { + border-radius: 10px; + width: calc(100% - 40px); + display: flex; + flex-direction: column; + align-items: stretch; + margin-bottom: 20px; + background: var(--ColorThemes1); + color: var(--ColorThemes3); + border: 1px solid var(--ColorThemes2); + box-shadow: var(--shadow-l1); + padding: 0 20px; + position: relative; +} + +.page-stand-editor>form>h1 { + width: calc(100% - 40px); + color: var(--ColorThemes3); + border-radius: var(--border-radius); + font-size: var(--FontSize5); + font-weight: 300; + padding: 20px 0; + position: relative; + +} + +.page-stand-editor>form>div { + width: 100%; + display: flex; + margin: 20px 0; + align-items: flex-start; + flex-direction: column; +} + +.page-stand-editor>form>div>label { + display: flex; + justify-content: center; + flex-direction: column; + font-size: var(--FontSize1); + font-weight: 500; + margin-bottom: 5px; +} + +.page-stand-editor>form>div>select { + width: 100%; + min-width: 140px; + padding: 0 5px; + border-radius: calc(var(--border-radius) - 5px - 4px); + height: 30px; + background-color: var(--ColorThemes0); + color: var(--ColorThemes3); +} + +.page-stand-editor>form>div>input, +.page-stand-editor>form>div>div>input { + width: calc(100% - 10px); + min-width: 140px; + padding: 0 5px; + border-radius: 6px; + height: 30px; + background: var(--ColorThemes0); + color: var(--ColorThemes3); + font-size: var(--FontSize2); +} + +.page-stand-editor>form>div>.geo-inputs { + width: 100%; + display: flex; + justify-content: space-between; +} + +.page-stand-editor>form>div>.geo-inputs>input { + width: calc(50% - 15px); +} + +.page-stand-editor>form>div>.week-days { + background: var(--ColorThemes0); + border-radius: calc(var(--border-radius) - 5px - 4px); + width: calc(100% - 15px); + padding: 0 5px 0 10px; +} + +.page-stand-editor>form>div>.week-days>div { + margin: 10px 0; + width: 100%; + font-size: var(--FontSize3); +} + +.page-stand-editor>form>div>.week-days>div>.custom-checkbox+label { + font-size: var(--FontSize4); + font-weight: 400; + width: 100%; + display: flex; + align-items: center; + user-select: none; + flex-direction: row-reverse; + justify-content: space-between; + cursor: pointer; + margin: 5px 0; +} + +.page-stand-editor>form>button { + border-radius: 6px; + background: var(--PrimaryColor); + color: var(--PrimaryColorText); + width: 100%; + height: 40px; + font-size: var(--FontSize3); + font-weight: 400; + margin: 20px 0; + text-transform: uppercase; +} \ No newline at end of file diff --git a/web/lib/pages/stand/index.html b/web/lib/pages/stand/index.html deleted file mode 100644 index 9e98ac2..0000000 --- a/web/lib/pages/stand/index.html +++ /dev/null @@ -1,282 +0,0 @@ -
- - -
- Інформація про стенд -
- Розташування: -

Тест

-
-
- Геолокація: -

-
- -
- -
- - -
-
diff --git a/web/lib/pages/stand/list/index.html b/web/lib/pages/stand/list/index.html index 278e7b4..229f493 100644 --- a/web/lib/pages/stand/list/index.html +++ b/web/lib/pages/stand/list/index.html @@ -20,6 +20,43 @@ Доступні стенди -
+
+
+ + + +

Доступних днів поки немає

+
+ +
+ + + + + + +

Зачекайте ...

+
+
diff --git a/web/lib/pages/stand/list/script.js b/web/lib/pages/stand/list/script.js index ac737e9..22dce28 100644 --- a/web/lib/pages/stand/list/script.js +++ b/web/lib/pages/stand/list/script.js @@ -24,26 +24,56 @@ const Stand_list = { return Stand_list.list; }, setHTML: async function () { - const block_list = document.getElementById('list'); + const block = document.getElementById('list'); + const null_list = document.getElementById('null-list'); + const load_list = document.getElementById('load-list'); + + null_list.setAttribute("data-visible", "false"); + load_list.setAttribute("data-visible", "true"); + const url = `${CONFIG.api}stand/list`; let list = this.list.length > 0 ? this.list : await this.loadAPI(url); - let html = ""; - for (const element of list) { - html += this.renderCard({ element }); - } + if (list.length == 0) { + null_list.setAttribute("data-visible", "true"); + load_list.setAttribute("data-visible", "false"); - block_list.innerHTML = html; + return; + } else { + null_list.setAttribute("data-visible", "false"); + load_list.setAttribute("data-visible", "false"); + + let html = ""; + for (const element of list) { + html += this.renderCard({ element }); + } + + block.innerHTML = html; + } }, - renderCard: ({ element }) => { + renderCard: ({ element, pack=0 }) => { + const images = [ + ['stand_1.png', 'stand_2.png', 'stand_3.png'], + ['stand_4.png', 'stand_5.png'] + ]; + const randomImage = images[pack][Math.floor(Math.random() * images[pack].length)]; + + const editor = USER.possibilities.can_add_stand + ? `` + : ``; + return `
+
+ +

${element.title}

+ ${editor}
diff --git a/web/lib/pages/stand/list/style.css b/web/lib/pages/stand/list/style.css index 1e45ff7..cb8d45e 100644 --- a/web/lib/pages/stand/list/style.css +++ b/web/lib/pages/stand/list/style.css @@ -98,14 +98,12 @@ content: ""; } - .page-stand-list summary { width: calc(100% - 40px); cursor: pointer; color: var(--ColorThemes3); border-radius: var(--border-radius); font-size: var(--FontSize5); - font-weight: 300; padding: 20px; position: relative; display: flex; @@ -113,6 +111,11 @@ align-items: center; } +.page-stand-list summary span { + font-weight: 500; + width: 100%; +} + .page-stand-list #list { width: 100%; margin: 0; @@ -126,12 +129,37 @@ transition: .3s ease; } +.page-stand-list #list>.mess-list { + height: 200px; + display: none; + flex-direction: column; + align-items: center; + justify-content: space-evenly; +} + +.page-stand-list #list>.mess-list[data-visible="true"] { + display: flex; +} + +.page-stand-list #list>.mess-list>svg { + width: 100px; + height: 100px; + fill: var(--ColorThemes3); + opacity: 0.7; +} + +.page-stand-list #list>.mess-list>h3 { + font-size: var(--FontSize5); + color: var(--ColorThemes3); + opacity: 0.7; +} + .page-stand-list .card { position: relative; width: 300px; height: 200px; background-color: var(--ColorThemes2); - margin: 0px 10px 20px 10px; + margin: 10px; overflow: hidden; cursor: pointer; border-radius: calc(var(--border-radius) - 5px); @@ -196,7 +224,6 @@ .page-stand-list .card>.contents { position: absolute; - z-index: 2; background: rgb(64 64 64 / 0.7); width: 100%; height: 100%; @@ -209,9 +236,30 @@ justify-content: space-between; } +.page-stand-list .card>.contents>.image { + position: absolute; + width: 100%; +} + +.page-stand-list .card>.contents>.image>img { + width: 100%; + height: 200px; + object-fit: cover; + filter: brightness(0.9) contrast(80%) saturate(110%) drop-shadow(2px 2px 4px rgba(0, 0, 0, 0.3)); +} + +@media (prefers-color-scheme: dark) { + .page-stand-list .card>.contents>.image>img { + filter: brightness(0.6) contrast(80%) saturate(110%) drop-shadow(2px 2px 4px rgba(0, 0, 0, 0.3)); + } +} .page-stand-list .card>.contents>.info { + width: calc(100% - 20px); + position: absolute; + bottom: 0; margin: 10px; + display: flex; } .page-stand-list .card>.contents>.info>div { @@ -226,6 +274,7 @@ border-radius: calc(var(--border-radius) - 5px - 4px); position: relative; overflow: hidden; + box-shadow: var(--shadow-l1); } .page-stand-list .card>.contents>.info>div>span { @@ -241,4 +290,24 @@ font-weight: 400; padding: 10px; z-index: 2; +} + +.page-stand-list .card>.contents>.info>.button-edit { + min-width: 35px; + height: 35px; + border-radius: calc(var(--border-radius) - 5px - 4px); + background: var(--PrimaryColor); + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + margin-left: 10px; + z-index: 20; + box-shadow: var(--shadow-l1); +} + +.page-stand-list .card>.contents>.info>.button-edit>svg { + width: 20px; + height: 20px; + fill: var(--PrimaryColorText); } \ No newline at end of file diff --git a/web/lib/pages/stand/script.js b/web/lib/pages/stand/script.js deleted file mode 100644 index ec53b76..0000000 --- a/web/lib/pages/stand/script.js +++ /dev/null @@ -1,123 +0,0 @@ -const Stand = { - schedule: [], - init: async () => { - let html = await fetch('/lib/pages/stand/index.html').then((response) => response.text()); - app.innerHTML = html; - - let listDate = [1, 4]; - - function generateAvailableDates() { - let select = document.getElementById("dateSelect"); - select.innerHTML = ""; - - let today = new Date(); - today.setHours(0, 0, 0, 0); - let months = [today.getMonth(), today.getMonth() + 1]; - let year = today.getFullYear(); - - months.forEach(month => { - let date = new Date(year, month, 1); - while (date.getMonth() === month) { - if (date >= today) { - let day = date.getDay(); - if (listDate.includes(day)) { - let option = document.createElement("option"); - option.value = date.toISOString().split("T")[0]; - option.textContent = date.toLocaleDateString("uk-UA", { - weekday: "long", year: "numeric", month: "long", day: "numeric" - }); - select.appendChild(option); - } - } - date.setDate(date.getDate() + 1); - } - }); - } - - // generateAvailableDates(); - Stand.generator(); - }, - generator: () => { - let block_schedule = document.getElementById('stand-schedule'); - - let html = ""; - - let stand = { - id: 1, - title: "Універсам", - geo: { lat: 0, lng: 0 }, - hour_start: 9, - hour_end: 14, - quantity_sheep: 2, - week_days: [0, 2, 4, 6], - processing_time: 0.5, - updated_at: null - } - - Stand.schedule = []; - - // Кількість годин служіння - let stand_length = (stand.hour_end - stand.hour_start) / stand.processing_time; - - for (let z = 0; z < stand.week_days.length; z++) { - Stand.schedule.push([]); - - let date = new Date(); - date.setDate(date.getDate() + stand.week_days[z]); - let dayName = date.toLocaleDateString('uk-UA', { weekday: 'long' }); - - html += ` -
-

${date.toLocaleDateString()} • ${dayName}

- `; - - let stand_date = 1 + stand.week_days[z]; - - for (let i = 0; i < stand_length; i++) { - let time_now = stand.hour_start + (stand.processing_time * i); - let timeFormat = (a) => a > 9 ? a : `0${a}`; - - function formatTime(hours) { - let h = Math.floor(hours); - let m = (hours % 1 === 0.5) ? "30" : "00"; - let hh = h.toString().padStart(2, "0"); - return `${hh}:${m}`; - } - - html += ` -
- ${formatTime(time_now)}-${formatTime(time_now + stand.processing_time)} - `; - - for (let q = 0; q < stand.quantity_sheep; q++) { - html += ` - - `; - - Stand.schedule[z].push({ - id: (i + z) * stand.quantity_sheep + q, - hour: stand.hour_start + (stand.processing_time * i), - number_sheep: q, - date: stand_date, - sheep_id: null, - stand_id: stand.id, - updated_at: Date.now() - }); - } - - html += `
`; // закриваємо hour - } - - html += `
`; // закриваємо day - } - - document.getElementById('stand-info-title').innerText = stand.title; - document.getElementById('stand-info-geo').innerHTML = ''; - document.getElementById('stand-info-image').setAttribute('src', ''); - - block_schedule.innerHTML = html; - } -} \ No newline at end of file diff --git a/web/lib/pages/stand/style.css b/web/lib/pages/stand/style.css deleted file mode 100644 index 96ac335..0000000 --- a/web/lib/pages/stand/style.css +++ /dev/null @@ -1,148 +0,0 @@ -.page-stand { - width: calc(100% - 40px); - display: flex; - flex-direction: column; - align-items: center; - margin: 20px 20px 0 20px; -} - -.page-stand details { - border-radius: var(--border-radius); - width: 100%; - display: flex; - flex-direction: column; - align-items: stretch; - margin-bottom: 20px; - background: var(--ColorThemes1); - color: var(--ColorThemes3); - border: 1px solid var(--ColorThemes2); - box-shadow: var(--shadow-l1); -} - -.page-stand summary { - width: calc(100% - 40px); - cursor: pointer; - color: var(--ColorThemes3); - border-radius: var(--border-radius); - font-size: var(--FontSize5); - font-weight: 300; - padding: 20px; - position: relative; -} - -#stand-info div { - display: flex; - flex-direction: row; - display: flex; - flex-direction: row; - padding: 10px; - color: var(--ColorThemes3); - align-items: center; -} - -#stand-info div span { - opacity: 0.8; - font-weight: 400; - font-size: var(--FontSize2); - margin-right: 5px; -} - -#stand-info div p { - font-weight: 300; - font-size: var(--FontSize4); -} - -#stand-info img { - position: relative; - display: inline-block; - width: calc(100% - 20px); - border-radius: calc(var(--border-radius) - 8px); - margin: 10px; - height: auto; - aspect-ratio: 16 / 9; - background-color: #f2e5c9; -} - -#stand-info img::before { - content: "Приклад розташування"; - display: block; - color: #555; - text-align: center; - padding: 10px; -} - -#stand-schedule { - width: 100%; - min-height: calc(100vh - 40px - 50px); - height: fit-content; - margin: 0 10px 15px; - border-radius: var(--border-radius); - display: flex; - flex-direction: column; - overflow: hidden; - background: var(--ColorThemes1); - color: var(--ColorThemes3); - border: 1px solid var(--ColorThemes2); - box-shadow: var(--shadow-l1); - transition: all .2sease 0s; -} - -#stand-schedule>.block-day { - display: flex; - flex-direction: column; - width: calc(100% - 20px); - margin: 10px; - padding: 10px 0; - border: 1px solid var(--PrimaryColor); - background-color: var(--ColorThemes2); - border: 1px solid var(--ColorThemes0); - min-height: 100px; - justify-content: center; - position: relative; - border-radius: calc(var(--border-radius) - 5px); - overflow-x: auto; -} - -#stand-schedule>.block-day h3 { - font-size: 17px; - font-weight: 500; - padding: 10px; - text-transform: capitalize; - width: calc(100% - 20px); - text-align: center; -} - -#stand-schedule>.block-day div { - display: flex; - flex-direction: row; - padding: 5px 0; - margin: 0 10px; - align-items: center; - min-width: calc(100% - 20px); - width: fit-content; -} - -#stand-schedule>.block-day div span { - min-width: 85px; - padding: 0 5px; -} - -#stand-schedule>.block-day div select { - width: 100%; - min-width: 140px; - padding: 0 5px; - margin: 0 5px; - border-radius: calc(var(--border-radius) - 5px - 4px); - height: 30px; - background-color: var(--ColorThemes0); - color: var(--ColorThemes3); -} - -#stand-schedule>.block-day div:nth-child(2n) { - background: var(--ColorThemes0); - border-radius: 8px; -} - -#stand-schedule>.block-day div:nth-child(2n) select { - background-color: var(--ColorThemes2); -} \ No newline at end of file diff --git a/web/lib/pages/territory/card/script.js b/web/lib/pages/territory/card/script.js index 03ff2c1..ef600a2 100644 --- a/web/lib/pages/territory/card/script.js +++ b/web/lib/pages/territory/card/script.js @@ -31,7 +31,7 @@ const Territory_card = { controls.style.display = "flex"; // Застосовуємо режим сортування - this.sort(localStorage.getItem('sort_mode'), false); + this.sort(localStorage.getItem('territory_card_sort'), false); this.getEntrances({ update: false }); } else if (type === "homestead") { this.getHomestead.map({}); @@ -249,14 +249,14 @@ const Territory_card = { const data = await res.json(); this.listApartment[number] = data; - const sort_mode = localStorage.getItem('sort_mode') ?? "1"; + const territory_card_sort = localStorage.getItem('territory_card_sort') ?? "1"; const sorters = { "1": (a, b) => a.apartment_number - b.apartment_number, "2": (a, b) => b.apartment_number - a.apartment_number, "3": (a, b) => a.updated_at - b.updated_at, "4": (a, b) => b.updated_at - a.updated_at, }; - data.sort(sorters[sort_mode] || sorters["1"]); + data.sort(sorters[territory_card_sort] || sorters["1"]); const container = document.getElementById(`apartments_${id}`); if (!update) container.innerHTML = ""; @@ -493,7 +493,7 @@ const Territory_card = { ['sort_1', 'sort_2', 'sort_3', 'sort_4'].forEach((id, i) => { document.getElementById(id)?.setAttribute('data-state', i + 1 === idx ? 'active' : ''); }); - localStorage.setItem('sort_mode', idx); + localStorage.setItem('territory_card_sort', idx); if (!load) this.getEntrances({ update: false }); }, diff --git a/web/lib/pages/territory/list/script.js b/web/lib/pages/territory/list/script.js index 9f908d3..822398f 100644 --- a/web/lib/pages/territory/list/script.js +++ b/web/lib/pages/territory/list/script.js @@ -4,8 +4,8 @@ const Territory_list = { app.innerHTML = html; let selectStatus = document.getElementById('list-controls-filter-status'); - let filterStatus = localStorage.getItem("filterStatus") ? Number(localStorage.getItem("filterStatus")) : 0; - selectStatus.value = filterStatus; + let territory_list_filter = localStorage.getItem("territory_list_filter") ? Number(localStorage.getItem("territory_list_filter")) : 0; + selectStatus.value = territory_list_filter; if (USER.mode == 2) { document.getElementById("buttons-list").style.display = "flex"; @@ -17,10 +17,10 @@ const Territory_list = { } // Застосовуємо режим сортування - Territory_list.sort(localStorage.getItem('territory_sort_mode')); + Territory_list.sort(localStorage.getItem('territory_list_sort')); - if (localStorage.getItem('territory_entrances') == 'true') { + if (localStorage.getItem('territory_list_entrances') == 'true') { document.getElementById('territory_entrances_true').setAttribute('data-state', '') document.getElementById('territory_entrances_false').setAttribute('data-state', 'active') } else { @@ -35,7 +35,7 @@ const Territory_list = { ['sort_1', 'sort_2', 'sort_3', 'sort_4'].forEach((id, i) => { document.getElementById(id)?.setAttribute('data-state', i + 1 === idx ? 'active' : ''); }); - localStorage.setItem('territory_sort_mode', idx); + localStorage.setItem('territory_list_sort', idx); Territory_list.house.setHTML(); Territory_list.homestead.setHTML(); @@ -57,9 +57,9 @@ const Territory_list = { }, setHTML: async function () { const block_house = document.getElementById('list-house'); - const territory_entrances = localStorage.getItem('territory_entrances') === 'true'; - const sort_mode = localStorage.getItem('territory_sort_mode') ?? "1"; - const filterStatus = Number(localStorage.getItem("filterStatus") ?? 0); + const territory_entrances = localStorage.getItem('territory_list_entrances') === 'true'; + const sort_mode = localStorage.getItem('territory_list_sort') ?? "1"; + const territory_list_filter = Number(localStorage.getItem("territory_list_filter") ?? 0); const url = `${CONFIG.api}houses/list${territory_entrances ? '/entrances' : ''}`; let list = this.list.length > 0 ? this.list : await this.loadAPI(url); @@ -79,11 +79,11 @@ const Territory_list = { const work = element.entrance?.working ?? 0; const statusMatch = - filterStatus === 0 || - (filterStatus === 1 && qty === work && !territory_entrances) || - (filterStatus === 1 && element.working === true) || - (filterStatus === 2 && qty !== work && !territory_entrances) || - (filterStatus === 2 && element.working === false); + territory_list_filter === 0 || + (territory_list_filter === 1 && qty === work && !territory_entrances) || + (territory_list_filter === 1 && element.working === true) || + (territory_list_filter === 2 && qty !== work && !territory_entrances) || + (territory_list_filter === 2 && element.working === false); if (statusMatch) { html += this.renderCard({ element, territory_entrances }); @@ -161,7 +161,7 @@ const Territory_list = { } }, territoryType: (type) => { - localStorage.setItem('territory_entrances', type); + localStorage.setItem('territory_list_entrances', type); document.getElementById('territory_entrances_true').setAttribute('data-state', type === 'false' ? 'active' : ''); document.getElementById('territory_entrances_false').setAttribute('data-state', type === 'true' ? 'active' : ''); Territory_list.house.list = []; @@ -187,8 +187,8 @@ const Territory_list = { }, setHTML: async function () { const block = document.getElementById('list-homestead'); - const sortMode = localStorage.getItem('territory_sort_mode') ?? "1"; - const filterStatus = Number(localStorage.getItem("filterStatus") ?? 0); + const sortMode = localStorage.getItem('territory_list_sort') ?? "1"; + const territory_list_filter = Number(localStorage.getItem("territory_list_filter") ?? 0); let list = this.list.length > 0 ? this.list : await this.loadAPI(); @@ -205,9 +205,9 @@ const Territory_list = { for (const element of list) { const statusMatch = - filterStatus === 0 || - (filterStatus === 1 && element.working) || - (filterStatus === 2 && !element.working); + territory_list_filter === 0 || + (territory_list_filter === 1 && element.working) || + (territory_list_filter === 2 && !element.working); if (statusMatch) { html += this.renderCard(element); @@ -244,7 +244,7 @@ const Territory_list = { filter: () => { let selectStatus = document.getElementById('list-controls-filter-status').value; - localStorage.setItem("filterStatus", selectStatus); + localStorage.setItem("territory_list_filter", selectStatus); Territory_list.house.setHTML(); diff --git a/web/lib/pages/territory/list/style.css b/web/lib/pages/territory/list/style.css index 3f4419b..5f8c4d5 100644 --- a/web/lib/pages/territory/list/style.css +++ b/web/lib/pages/territory/list/style.css @@ -163,6 +163,7 @@ .page-territory summary span { font-weight: 500; + width: 100%; } .page-territory summary>div>button { @@ -218,7 +219,7 @@ width: 300px; height: 200px; background-color: var(--ColorThemes2); - margin: 0px 10px 20px 10px; + margin: 10px; overflow: hidden; cursor: pointer; border-radius: calc(var(--border-radius) - 5px); diff --git a/web/lib/router/routes.js b/web/lib/router/routes.js index 37e576b..6c2aa76 100644 --- a/web/lib/router/routes.js +++ b/web/lib/router/routes.js @@ -47,6 +47,10 @@ Router pageActive(); Stand_constructor.init();; }) + .add('stand/editor/(.*)', function (id) { + pageActive(); + Stand_editor.init(id);; + }) .add('stand/card/(.*)', function (id) { pageActive(); Stand_card.init(id);; diff --git a/web/package-lock.json b/web/package-lock.json index 88ffcbb..217c6f9 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,12 +1,12 @@ { "name": "WEB Sheep Service", - "version": "1.0.1", + "version": "2.0.13", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "WEB Sheep Service", - "version": "1.0.1", + "version": "2.0.13", "license": "ISC", "dependencies": { "dotenv": "^17.2.0", diff --git a/web/package.json b/web/package.json index 391c49a..5a00598 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "WEB Sheep Service", - "version": "1.0.1", + "version": "2.0.13", "main": "server.js", "scripts": { "start": "node server.js" diff --git a/web/server.js b/web/server.js index aa421c5..4c472d8 100644 --- a/web/server.js +++ b/web/server.js @@ -1,6 +1,5 @@ const express = require("express"); const path = require("path"); -require("dotenv").config(); const app = express(); const PORT = 4002; diff --git a/web/share.html b/web/share.html deleted file mode 100644 index b00cb5c..0000000 --- a/web/share.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - Sheep Service - - - - - - - - - - -
- - diff --git a/web/sw.js b/web/sw.js index dcf95ab..0a54b37 100644 --- a/web/sw.js +++ b/web/sw.js @@ -1,4 +1,4 @@ -const STATIC_CACHE_NAME = 'v2.0.2'; +const STATIC_CACHE_NAME = 'v2.0.13'; const FILES_TO_CACHE = [ '/', @@ -48,6 +48,9 @@ const FILES_TO_CACHE = [ "/lib/pages/territory/editor/script.js", "/lib/pages/territory/editor/style.css", + "/lib/pages/territory/editor/script.js", + "/lib/pages/territory/editor/style.css", + "/lib/pages/territory/card/script.js", "/lib/pages/territory/card/style.css", @@ -110,6 +113,9 @@ self.addEventListener("push", event => { let data = {}; try { data = event.data.json(); } catch { data = { title: "Уведомлення", body: event.data?.text() }; } + console.log(data); + + const title = data.title || "Уведомлення"; const options = { body: data.body || "", @@ -124,7 +130,7 @@ self.addEventListener("push", event => { self.addEventListener("notificationclick", event => { event.notification.close(); event.waitUntil( - clients.matchAll({ type: "window", includeUncontrolled: true }).then(clientList => { + clients.matchAll({ type: "window", includeUncontrolled: true }).then(clientList => { for (const client of clientList) { if (client.url === event.notification.data && "focus" in client) return client.focus(); } diff --git a/web/test.html b/web/test.html deleted file mode 100644 index 0e621b2..0000000 --- a/web/test.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - Сканер штрих-кодов - - - -

Сканируй штрихкод

-
- - - - \ No newline at end of file diff --git a/ws/config/db.js b/ws/config/db.js index 48e8e18..f8b2480 100644 --- a/ws/config/db.js +++ b/ws/config/db.js @@ -1,11 +1,8 @@ const sqlite3 = require("sqlite3"); const path = require("path"); -require("dotenv").config(); -const dbPath = process.env.DATABASE_PATH || path.join(__dirname, ".."); // если в .env относительный путь -const fileName = process.env.DATABASE_FILE || "database.sqlite"; - -const fullPath = path.isAbsolute(dbPath) ? path.join(dbPath, fileName) : path.join(dbPath, fileName); +const dbPath = process.env.DATABASE_PATH || path.join(__dirname, ".."); +const fullPath = path.join(dbPath, "database.sqlite"); const db = new sqlite3.Database(fullPath, (err) => { if (err) { @@ -15,7 +12,6 @@ const db = new sqlite3.Database(fullPath, (err) => { } }); -// optional: enable foreign keys db.exec("PRAGMA foreign_keys = ON;"); module.exports = db; \ No newline at end of file diff --git a/ws/package-lock.json b/ws/package-lock.json index cc2cfff..49a732d 100644 --- a/ws/package-lock.json +++ b/ws/package-lock.json @@ -1,12 +1,12 @@ { "name": "WS Sheep Service", - "version": "1.0.1", + "version": "1.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "WS Sheep Service", - "version": "1.0.1", + "version": "1.1.0", "license": "ISC", "dependencies": { "dotenv": "^17.2.0", diff --git a/ws/package.json b/ws/package.json index 0ad00f1..2fc0007 100644 --- a/ws/package.json +++ b/ws/package.json @@ -1,6 +1,6 @@ { "name": "WS Sheep Service", - "version": "1.0.1", + "version": "1.1.0", "main": "ws.js", "scripts": { "start": "node ws.js" diff --git a/ws/services/apartments.service.js b/ws/services/apartments.service.js index 0f56360..ebec48e 100644 --- a/ws/services/apartments.service.js +++ b/ws/services/apartments.service.js @@ -2,7 +2,7 @@ const db = require("../config/db"); function updateApartment(user, data) { return new Promise((resolve, reject) => { - if (!user.possibilities.can_manager_territory) { + if (!user.possibilities.can_view_territory) { return reject(new Error("Forbidden: no rights to manage territory")); } diff --git a/ws/services/buildings.service.js b/ws/services/buildings.service.js index 2e9e03b..51dbf3e 100644 --- a/ws/services/buildings.service.js +++ b/ws/services/buildings.service.js @@ -2,7 +2,7 @@ const db = require("../config/db"); function updateBuilding(user, data) { return new Promise((resolve, reject) => { - if (!user.possibilities.can_manager_territory) { + if (!user.possibilities.can_view_territory) { return reject(new Error("Forbidden: no rights to manage territory")); }