diff --git a/client/src/screens/MainMenu/MainMenu.jsx b/client/src/screens/MainMenu/MainMenu.jsx
index 3f02a5e..eb7ef4c 100644
--- a/client/src/screens/MainMenu/MainMenu.jsx
+++ b/client/src/screens/MainMenu/MainMenu.jsx
@@ -1,24 +1,41 @@
+import { useState } from 'react'
import ProfileCard from './components/ProfileCard'
import ActionButtons from './components/ActionButtons'
import RoomList from './components/RoomList'
import TonConnectButton from './components/TonConnectButton'
+import CreateRoomModal from './components/CreateRoomModal'
import '../../styles/MainMenu.css'
// Главное меню приложения
const MainMenu = () => {
+ const [isModalOpen, setIsModalOpen] = useState(false)
+
+ const handleOpenModal = () => {
+ setIsModalOpen(true)
+ }
+
+ const handleCloseModal = () => {
+ setIsModalOpen(false)
+ }
+
return (
-
+
{/* TonConnect кнопка над ProfileCard */}
-
+
+
+
)
}
diff --git a/client/src/screens/MainMenu/components/ActionButtons.jsx b/client/src/screens/MainMenu/components/ActionButtons.jsx
index 5dd5d35..9a80f7d 100644
--- a/client/src/screens/MainMenu/components/ActionButtons.jsx
+++ b/client/src/screens/MainMenu/components/ActionButtons.jsx
@@ -1,9 +1,13 @@
+import PropTypes from 'prop-types'
import '../../../styles/ActionButtons.css'
// Кнопки управления игрой
-const ActionButtons = () => {
+const ActionButtons = ({ onCreateGame }) => {
const handleCreateGame = () => {
console.log('Создание новой игры')
+ if (onCreateGame) {
+ onCreateGame()
+ }
}
return (
@@ -18,4 +22,8 @@ const ActionButtons = () => {
)
}
+ActionButtons.propTypes = {
+ onCreateGame: PropTypes.func
+}
+
export default ActionButtons
\ No newline at end of file
diff --git a/client/src/screens/MainMenu/components/CreateRoomModal.jsx b/client/src/screens/MainMenu/components/CreateRoomModal.jsx
new file mode 100644
index 0000000..fdea478
--- /dev/null
+++ b/client/src/screens/MainMenu/components/CreateRoomModal.jsx
@@ -0,0 +1,112 @@
+
+import PropTypes from 'prop-types';
+import { useState } from 'react'
+import '../../../styles/CreateRoomModal.css'
+
+// Модальное окно для создания комнаты
+const CreateRoomModal = ({ isOpen, onClose }) => {
+ const [roomName, setRoomName] = useState('')
+ const [betAmount, setBetAmount] = useState('')
+ const [currency, setCurrency] = useState('TON')
+
+ // Проверка валидности суммы ставки
+ const isValidBetAmount = () => {
+ if (!betAmount || betAmount === '') return false
+ const amount = parseFloat(betAmount)
+ if (isNaN(amount) || amount <= 0) return false
+
+ if (currency === 'TON') {
+ return amount >= 1.0
+ } else {
+ return amount >= 100
+ }
+ }
+
+ const handleSubmit = (e) => {
+ e.preventDefault()
+ if (roomName.trim() && isValidBetAmount()) {
+ console.log('Creating a room:', { roomName, betAmount, currency })
+ // Здесь будет логика создания комнаты
+ onClose()
+ setRoomName('')
+ setBetAmount('')
+ setCurrency('TON')
+ }
+ }
+
+ const handleClose = () => {
+ onClose()
+ setRoomName('')
+ setBetAmount('')
+ setCurrency('TON')
+ }
+
+ if (!isOpen) return null
+
+ return (
+
+
e.stopPropagation()}>
+
+
+
+
+ )
+}
+
+CreateRoomModal.propTypes = {
+ isOpen: PropTypes.bool.isRequired,
+ onClose: PropTypes.func.isRequired,
+ onCreate: PropTypes.func.isRequired,
+ // Добавьте другие пропсы, если они есть
+};
+
+export default CreateRoomModal
\ No newline at end of file
diff --git a/client/src/styles/CreateRoomModal.css b/client/src/styles/CreateRoomModal.css
new file mode 100644
index 0000000..2756782
--- /dev/null
+++ b/client/src/styles/CreateRoomModal.css
@@ -0,0 +1,213 @@
+.modal-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: rgba(0, 0, 0, 0.7);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ z-index: 1000;
+}
+
+.create-room-modal {
+ background: linear-gradient(135deg, #03142A 0%, #020f1f 100%);
+ border: 1px solid rgba(0, 255, 85, 0.3);
+ border-radius: 12px;
+ width: 350px;
+ height: auto;
+ min-height: 400px;
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
+ display: flex;
+ flex-direction: column;
+ overflow: hidden;
+ animation: fadeIn 0.3s ease-out;
+}
+
+.modal-form {
+ flex: 1;
+ padding: 24px 24px 16px 24px;
+ display: flex;
+ flex-direction: column;
+ gap: 24px;
+}
+
+.form-group {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+ width: 100%;
+}
+
+.form-group label {
+ font-size: 14px;
+ font-weight: 500;
+ color: #FFFFFF;
+}
+
+.form-group input[type="text"],
+.form-group input[type="number"] {
+ padding: 10px 12px;
+ background: rgba(255, 255, 255, 0.1);
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ border-radius: 6px;
+ font-size: 14px;
+ color: #FFFFFF;
+ outline: none;
+ transition: all 0.2s;
+ width: 100%;
+ box-sizing: border-box;
+}
+
+.form-group input[type="text"]:focus,
+.form-group input[type="number"]:focus {
+ border-color: #00FF55;
+ box-shadow: 0 0 10px rgba(0, 255, 85, 0.2);
+}
+
+.form-group input[type="text"]::placeholder,
+.form-group input[type="number"]::placeholder {
+ color: rgba(255, 255, 255, 0.5);
+}
+
+.radio-group {
+ display: flex;
+ gap: 16px;
+ margin-top: 12px;
+ justify-content: center;
+}
+
+.radio-option {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 10px;
+ cursor: pointer;
+ font-size: 15px;
+ transition: all 0.3s ease;
+ padding: 14px 20px;
+ border-radius: 8px;
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ background: rgba(255, 255, 255, 0.05);
+ flex: 1;
+ min-height: 48px;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ box-sizing: border-box;
+}
+
+.radio-option:hover {
+ background: rgba(0, 255, 85, 0.1);
+ border-color: rgba(0, 255, 85, 0.3);
+}
+
+.radio-option input[type="radio"] {
+ margin: 0;
+ cursor: pointer;
+ accent-color: #00FF55;
+ width: 18px;
+ height: 18px;
+ transform: scale(1.2);
+}
+
+.radio-label {
+ color: #FFFFFF;
+ font-weight: 600;
+ font-size: 15px;
+ transition: all 0.3s ease;
+}
+
+.radio-option:hover .radio-label {
+ color: #00FF55;
+}
+
+.modal-actions {
+ display: flex;
+ gap: 20px;
+ padding: 15px 24px 20px 24px;
+ justify-content: center;
+}
+
+.cancel-button,
+.create-button {
+ flex: 1;
+ padding: 14px 20px;
+ border: 1px solid transparent;
+ border-radius: 8px;
+ font-size: 15px;
+ font-weight: 600;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ min-height: 48px;
+ box-sizing: border-box;
+}
+
+.cancel-button {
+ background: rgba(255, 255, 255, 0.1);
+ color: #FFFFFF;
+ border: 1px solid rgba(255, 255, 255, 0.2);
+}
+
+.cancel-button:hover {
+ background: rgba(255, 255, 255, 0.2);
+ transform: translateY(-1px);
+}
+
+.create-button {
+ background: linear-gradient(135deg, #00FF55, #00B8FF);
+ color: #03142A;
+ border: 1px solid transparent;
+}
+
+.create-button:hover:not(:disabled) {
+ transform: translateY(-2px);
+ box-shadow: 0 5px 15px rgba(0, 255, 85, 0.4);
+}
+
+.create-button.disabled,
+.create-button:disabled {
+ background: rgba(255, 255, 255, 0.1);
+ color: rgba(255, 255, 255, 0.4);
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ cursor: not-allowed;
+ transform: none;
+ box-shadow: none;
+}
+
+.create-button:disabled:hover {
+ transform: none;
+ box-shadow: none;
+}
+
+@keyframes fadeIn {
+ from {
+ opacity: 0;
+ transform: scale(0.95);
+ }
+ to {
+ opacity: 1;
+ transform: scale(1);
+ }
+}
+
+/* Мобильная адаптация */
+@media (max-width: 480px) {
+ .create-room-modal {
+ width: 90%;
+ max-width: 320px;
+ height: auto;
+ min-height: 280px;
+ }
+
+ .modal-form {
+ gap: 10px;
+ }
+
+ .radio-group {
+ gap: 15px;
+ }
+}
\ No newline at end of file
diff --git a/client/src/styles/MainMenu.css b/client/src/styles/MainMenu.css
index 7b0d17d..790470b 100644
--- a/client/src/styles/MainMenu.css
+++ b/client/src/styles/MainMenu.css
@@ -8,6 +8,12 @@
.container {
max-width: 800px;
margin: 0 auto;
+ transition: filter 0.3s ease;
+}
+
+.blur-background {
+ filter: blur(5px);
+ pointer-events: none;
}
.menu-content {
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..567786a
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,1565 @@
+{
+ "name": "backgammon-monorepo",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "backgammon-monorepo",
+ "version": "1.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "lint": "^0.8.19",
+ "prop-types": "^15.8.1"
+ }
+ },
+ "node_modules/@kwsites/file-exists": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
+ "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.1.1"
+ }
+ },
+ "node_modules/@kwsites/promise-deferred": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
+ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==",
+ "license": "MIT"
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "license": "MIT",
+ "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-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
+ "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "license": "Python-2.0"
+ },
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "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==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "license": "MIT"
+ },
+ "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==",
+ "license": "Apache-2.0",
+ "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==",
+ "license": "MIT"
+ },
+ "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==",
+ "license": "MIT"
+ },
+ "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==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "license": "MIT"
+ },
+ "node_modules/cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==",
+ "license": "MIT",
+ "dependencies": {
+ "restore-cursor": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cli-spinners": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
+ "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-table": {
+ "version": "0.3.11",
+ "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz",
+ "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==",
+ "dependencies": {
+ "colors": "1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.2.0"
+ }
+ },
+ "node_modules/cli-width": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
+ "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==",
+ "license": "ISC"
+ },
+ "node_modules/cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ }
+ },
+ "node_modules/cliui/node_modules/string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "license": "MIT"
+ },
+ "node_modules/colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "license": "MIT"
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "license": "MIT"
+ },
+ "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==",
+ "license": "MIT"
+ },
+ "node_modules/dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/defaults": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
+ "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
+ "license": "MIT",
+ "dependencies": {
+ "clone": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "license": "MIT"
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "license": "BSD-2-Clause",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "license": "MIT"
+ },
+ "node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "license": "MIT",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/external-editor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+ "license": "MIT",
+ "dependencies": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "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"
+ ],
+ "license": "MIT"
+ },
+ "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==",
+ "license": "MIT"
+ },
+ "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==",
+ "license": "MIT"
+ },
+ "node_modules/figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==",
+ "license": "MIT",
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "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==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/fs-exists-sync": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz",
+ "integrity": "sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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==",
+ "license": "ISC"
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "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",
+ "license": "ISC",
+ "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/har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
+ "license": "ISC",
+ "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",
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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.",
+ "license": "ISC",
+ "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==",
+ "license": "ISC"
+ },
+ "node_modules/inquirer": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
+ "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-escapes": "^3.2.0",
+ "chalk": "^2.4.2",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^2.0.0",
+ "lodash": "^4.17.12",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rxjs": "^6.4.0",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^5.1.0",
+ "through": "^2.3.6"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
+ "license": "MIT"
+ },
+ "node_modules/isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
+ "license": "MIT"
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
+ "license": "MIT"
+ },
+ "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==",
+ "license": "(AFL-2.1 OR BSD-3-Clause)"
+ },
+ "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==",
+ "license": "MIT"
+ },
+ "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==",
+ "license": "ISC"
+ },
+ "node_modules/jsprim": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+ "license": "MIT",
+ "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/lint": {
+ "version": "0.8.19",
+ "resolved": "https://registry.npmjs.org/lint/-/lint-0.8.19.tgz",
+ "integrity": "sha512-i9iqBX/OO2+zSE7hEDXJ0rdLMxvBluK2T/xbCKAhEgyHE1q6kjp1HJGOVagkVB0f0UZ+FnW/wM3smsihQN0tFw==",
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "chalk": "^2.4.2",
+ "cli-table": "^0.3.1",
+ "commander": "^2.17.1",
+ "inquirer": "^6.1.0",
+ "js-yaml": ">=3.13.1",
+ "loadash": "^1.0.0",
+ "moment": "^2.22.2",
+ "ora": "^3.0.0",
+ "prettier": "^1.15.3",
+ "replace-in-file": "^3.4.2",
+ "request": "^2.87.0",
+ "simple-git": "^3.15.0",
+ "write-yaml": "^1.0.0"
+ },
+ "bin": {
+ "lint": "index.js",
+ "omnilint": "index.js"
+ }
+ },
+ "node_modules/loadash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/loadash/-/loadash-1.0.0.tgz",
+ "integrity": "sha512-xlX5HBsXB3KG0FJbJJG/3kYWCfsCyCSus3T+uHVu6QL6YxAdggmm3QeyLgn54N2yi5/UE6xxL5ZWJAAiHzHYEg==",
+ "deprecated": "Package is unsupport. Please use the lodash package instead.",
+ "license": "ISC"
+ },
+ "node_modules/locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "license": "MIT"
+ },
+ "node_modules/log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "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==",
+ "license": "MIT",
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "license": "ISC",
+ "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==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/moment": {
+ "version": "2.30.1",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
+ "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "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==",
+ "license": "MIT"
+ },
+ "node_modules/mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==",
+ "license": "ISC"
+ },
+ "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==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.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==",
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==",
+ "license": "MIT",
+ "dependencies": {
+ "mimic-fn": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ora": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz",
+ "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==",
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^2.4.2",
+ "cli-cursor": "^2.1.0",
+ "cli-spinners": "^2.0.0",
+ "log-symbols": "^2.2.0",
+ "strip-ansi": "^5.2.0",
+ "wcwidth": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "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==",
+ "license": "MIT",
+ "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==",
+ "license": "MIT"
+ },
+ "node_modules/prettier": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
+ "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/psl": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz",
+ "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==",
+ "license": "MIT",
+ "dependencies": {
+ "punycode": "^2.3.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/lupomontero"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "license": "MIT"
+ },
+ "node_modules/replace-in-file": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-3.4.4.tgz",
+ "integrity": "sha512-ehq0dFsxSpfPiPLBU5kli38Ud8bZL0CQKG8WQVbvhmyilXaMJ8y4LtDZs/K3MD8C0+rHbsfW8c9r2bUEy0B/6Q==",
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^2.4.2",
+ "glob": "^7.1.3",
+ "yargs": "^13.2.2"
+ },
+ "bin": {
+ "replace-in-file": "bin/cli.js"
+ }
+ },
+ "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",
+ "license": "Apache-2.0",
+ "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/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "license": "ISC"
+ },
+ "node_modules/restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==",
+ "license": "MIT",
+ "dependencies": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/run-async": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
+ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^1.9.0"
+ },
+ "engines": {
+ "npm": ">=2.0.0"
+ }
+ },
+ "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"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "license": "MIT"
+ },
+ "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==",
+ "license": "ISC"
+ },
+ "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==",
+ "license": "ISC"
+ },
+ "node_modules/simple-git": {
+ "version": "3.28.0",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.28.0.tgz",
+ "integrity": "sha512-Rs/vQRwsn1ILH1oBUy8NucJlXmnnLeLCfcvbSehkPzbv3wwoFWIdtfd6Ndo6ZPhlPsCZ60CPI4rxurnwAa+a2w==",
+ "license": "MIT",
+ "dependencies": {
+ "@kwsites/file-exists": "^1.1.1",
+ "@kwsites/promise-deferred": "^1.1.1",
+ "debug": "^4.4.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/steveukx/git-js?sponsor=1"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "license": "BSD-3-Clause"
+ },
+ "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==",
+ "license": "MIT",
+ "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/string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "license": "MIT",
+ "dependencies": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/string-width/node_modules/ansi-regex": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+ "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/string-width/node_modules/strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "license": "MIT"
+ },
+ "node_modules/tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "license": "MIT",
+ "dependencies": {
+ "os-tmpdir": "~1.0.2"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "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==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "license": "0BSD"
+ },
+ "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==",
+ "license": "Apache-2.0",
+ "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==",
+ "license": "Unlicense"
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "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.",
+ "license": "MIT",
+ "bin": {
+ "uuid": "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"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "node_modules/wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
+ "license": "MIT",
+ "dependencies": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "node_modules/which-module": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
+ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
+ "license": "ISC"
+ },
+ "node_modules/wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "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==",
+ "license": "ISC"
+ },
+ "node_modules/write": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.3.3.tgz",
+ "integrity": "sha512-e63bsTAFxFUU8OGClhjhhf2R72Njpq6DDTOFFBxDkfZFwoRRKZUx9rll6g/TvY0UcCdKE2OroYZje0v9ROzmfA==",
+ "license": "MIT",
+ "dependencies": {
+ "fs-exists-sync": "^0.1.0",
+ "mkdirp": "^0.5.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/write-yaml": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/write-yaml/-/write-yaml-1.0.0.tgz",
+ "integrity": "sha512-QFB0QwNlUTSsICNb1HV+822MvFpTC1gtKcOfm0B9oqz4qOQXbRuMSxWPWryTEFBEZDWbI5zXabXArvShXTdLiA==",
+ "license": "MIT",
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "js-yaml": "^3.8.3",
+ "write": "^0.3.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/write-yaml/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "license": "MIT",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/write-yaml/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+ "license": "ISC"
+ },
+ "node_modules/yargs": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "license": "ISC",
+ "dependencies": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ },
+ "node_modules/yargs/node_modules/string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
index 0919d5a..09e646e 100644
--- a/package.json
+++ b/package.json
@@ -11,5 +11,9 @@
},
"keywords": [],
"author": "",
- "license": "ISC"
-}
\ No newline at end of file
+ "license": "ISC",
+ "dependencies": {
+ "lint": "^0.8.19",
+ "prop-types": "^15.8.1"
+ }
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 05b1aa2..e449d0a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -6,10 +6,20 @@ settings:
importers:
- .: {}
+ .:
+ dependencies:
+ lint:
+ specifier: ^0.8.19
+ version: 0.8.19
+ prop-types:
+ specifier: ^15.8.1
+ version: 15.8.1
client:
dependencies:
+ '@tonconnect/ui-react':
+ specifier: ^2.3.0
+ version: 2.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react:
specifier: ^18.2.0
version: 18.3.1
@@ -918,6 +928,12 @@ packages:
'@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+ '@kwsites/file-exists@1.1.1':
+ resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==}
+
+ '@kwsites/promise-deferred@1.1.1':
+ resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==}
+
'@lukeed/csprng@1.1.0':
resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==}
engines: {node: '>=8'}
@@ -1450,6 +1466,18 @@ packages:
'@tonconnect/sdk@3.2.0':
resolution: {integrity: sha512-lh4bKpSdWDNtlKy2mv7uhdLLqnIoKRgRKbANRa/liQoPb8nDftQo6TbU1BYEmOAF32GbFn+9Sw9azPup4vfzxg==}
+ '@tonconnect/sdk@3.3.0':
+ resolution: {integrity: sha512-jwO23Uwy13Wht96Xp4euSG3I5fk9rd+3MFk/eXIzI68aznZUiXlDKBHP5l+/w5PJQhULyCkaHB9/UIXZL3DNTg==}
+
+ '@tonconnect/ui-react@2.3.0':
+ resolution: {integrity: sha512-Gh25xASc2nmexmCEWWiJKmccgk5MvAym215f/nevB/KMGh7t9COaKZs3dnOs3r3AE4l18asN0kuVAQG4Fcyfaw==}
+ peerDependencies:
+ react: '>=17.0.0'
+ react-dom: '>=17.0.0'
+
+ '@tonconnect/ui@2.3.0':
+ resolution: {integrity: sha512-oRcfZHTt5WLXCpXMz0JWWg50Bkx0GiT9JodzT94XuqQdsuLHTUKc0pPqOgvCii98kMRmxhbVu5OiKJIJmdr/6A==}
+
'@tsconfig/node10@1.0.11':
resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
@@ -1816,10 +1844,22 @@ packages:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
+ ansi-escapes@3.2.0:
+ resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==}
+ engines: {node: '>=4'}
+
ansi-escapes@4.3.2:
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
engines: {node: '>=8'}
+ ansi-regex@3.0.1:
+ resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==}
+ engines: {node: '>=4'}
+
+ ansi-regex@4.1.1:
+ resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==}
+ engines: {node: '>=6'}
+
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
@@ -1828,6 +1868,10 @@ packages:
resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==}
engines: {node: '>=12'}
+ ansi-styles@3.2.1:
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+ engines: {node: '>=4'}
+
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
@@ -1903,6 +1947,13 @@ packages:
asap@2.0.6:
resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
+ asn1@0.2.6:
+ resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==}
+
+ assert-plus@1.0.0:
+ resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
+ engines: {node: '>=0.8'}
+
async-function@1.0.0:
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
engines: {node: '>= 0.4'}
@@ -1921,6 +1972,12 @@ packages:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
+ aws-sign2@0.7.0:
+ resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==}
+
+ aws4@1.13.2:
+ resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==}
+
axios@0.25.0:
resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==}
@@ -1961,6 +2018,9 @@ packages:
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+ bcrypt-pbkdf@1.0.2:
+ resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==}
+
bin-version-check@5.1.0:
resolution: {integrity: sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==}
engines: {node: '>=12'}
@@ -2070,6 +2130,13 @@ packages:
caniuse-lite@1.0.30001739:
resolution: {integrity: sha512-y+j60d6ulelrNSwpPyrHdl+9mJnQzHBr08xm48Qno0nSk4h3Qojh+ziv2qE6rXf4k3tadF4o1J/1tAbVm1NtnA==}
+ caseless@0.12.0:
+ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
+
+ chalk@2.4.2:
+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+ engines: {node: '>=4'}
+
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
@@ -2078,6 +2145,9 @@ packages:
resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
engines: {node: '>=10'}
+ chardet@0.7.0:
+ resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+
chardet@2.1.0:
resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==}
@@ -2106,6 +2176,13 @@ packages:
class-validator@0.14.2:
resolution: {integrity: sha512-3kMVRF2io8N8pY1IFIXlho9r8IPUUIfHe2hYVtiebvAzU2XeQFXTv+XI4WX+TnXmtwXMDcjngcpkiPM0O9PvLw==}
+ classnames@2.5.1:
+ resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==}
+
+ cli-cursor@2.1.0:
+ resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==}
+ engines: {node: '>=4'}
+
cli-cursor@3.1.0:
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
engines: {node: '>=8'}
@@ -2118,10 +2195,20 @@ packages:
resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==}
engines: {node: 10.* || >= 12.*}
+ cli-table@0.3.11:
+ resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==}
+ engines: {node: '>= 0.2.0'}
+
+ cli-width@2.2.1:
+ resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==}
+
cli-width@4.1.0:
resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
engines: {node: '>= 12'}
+ cliui@5.0.0:
+ resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==}
+
cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
@@ -2137,13 +2224,23 @@ packages:
collect-v8-coverage@1.0.2:
resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==}
+ color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
+ color-name@1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ colors@1.0.3:
+ resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==}
+ engines: {node: '>=0.1.90'}
+
colyseus.js@0.16.19:
resolution: {integrity: sha512-48cVPt5+21R79itIHpcJplMFt7HEks5chxPXtM9l+AvmFjfXO8UykIV4j+fYyKaJu6EB14AbBH0AnTvpQqnAEg==}
engines: {node: '>= 12.x'}
@@ -2211,6 +2308,9 @@ packages:
cookiejar@2.1.4:
resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==}
+ core-util-is@1.0.2:
+ resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
+
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
@@ -2247,6 +2347,10 @@ packages:
csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+ dashdash@1.14.1:
+ resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==}
+ engines: {node: '>=0.10'}
+
data-view-buffer@1.0.2:
resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
engines: {node: '>= 0.4'}
@@ -2271,6 +2375,10 @@ packages:
supports-color:
optional: true
+ decamelize@1.2.0:
+ resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
+ engines: {node: '>=0.10.0'}
+
decompress-response@6.0.0:
resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
engines: {node: '>=10'}
@@ -2365,6 +2473,9 @@ packages:
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+ ecc-jsbn@0.1.2:
+ resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==}
+
ecdsa-sig-formatter@1.0.11:
resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}
@@ -2378,6 +2489,9 @@ packages:
resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
engines: {node: '>=12'}
+ emoji-regex@7.0.3:
+ resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==}
+
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -2442,6 +2556,10 @@ packages:
escape-html@1.0.3:
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+ escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+
escape-string-regexp@2.0.0:
resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
engines: {node: '>=8'}
@@ -2596,6 +2714,21 @@ packages:
resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==}
engines: {node: '>=4'}
+ extend-shallow@2.0.1:
+ resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
+ engines: {node: '>=0.10.0'}
+
+ extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+
+ external-editor@3.1.0:
+ resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
+ engines: {node: '>=4'}
+
+ extsprintf@1.3.0:
+ resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==}
+ engines: {'0': node >=0.6.0}
+
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -2630,6 +2763,10 @@ packages:
fflate@0.8.2:
resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
+ figures@2.0.0:
+ resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==}
+ engines: {node: '>=4'}
+
file-entry-cache@6.0.1:
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
engines: {node: ^10.12.0 || >=12.0.0}
@@ -2662,6 +2799,10 @@ packages:
resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==}
engines: {node: '>= 0.8'}
+ find-up@3.0.0:
+ resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
+ engines: {node: '>=6'}
+
find-up@4.1.0:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
engines: {node: '>=8'}
@@ -2702,6 +2843,9 @@ packages:
resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
engines: {node: '>=14'}
+ forever-agent@0.6.1:
+ resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==}
+
fork-ts-checker-webpack-plugin@9.1.0:
resolution: {integrity: sha512-mpafl89VFPJmhnJ1ssH+8wmM2b50n+Rew5x42NeI2U78aRWgtkEtGmctp7iT16UjquJTjorEmIfESj3DxdW84Q==}
engines: {node: '>=14.21.3'}
@@ -2713,6 +2857,10 @@ packages:
resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==}
engines: {node: '>= 14.17'}
+ form-data@2.3.3:
+ resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==}
+ engines: {node: '>= 0.12'}
+
form-data@4.0.4:
resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==}
engines: {node: '>= 6'}
@@ -2732,6 +2880,10 @@ packages:
resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
engines: {node: '>= 0.8'}
+ fs-exists-sync@0.1.0:
+ resolution: {integrity: sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==}
+ engines: {node: '>=0.10.0'}
+
fs-extra@10.1.0:
resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
engines: {node: '>=12'}
@@ -2785,6 +2937,9 @@ packages:
resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
engines: {node: '>= 0.4'}
+ getpass@0.1.7:
+ resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}
+
glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@@ -2844,10 +2999,23 @@ packages:
engines: {node: '>=0.4.7'}
hasBin: true
+ har-schema@2.0.0:
+ resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==}
+ engines: {node: '>=4'}
+
+ har-validator@5.1.5:
+ resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==}
+ engines: {node: '>=6'}
+ deprecated: this library is no longer supported
+
has-bigints@1.1.0:
resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
engines: {node: '>= 0.4'}
+ has-flag@3.0.0:
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+ engines: {node: '>=4'}
+
has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
@@ -2885,6 +3053,10 @@ packages:
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
engines: {node: '>= 0.8'}
+ http-signature@1.2.0:
+ resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==}
+ engines: {node: '>=0.8', npm: '>=1.3.7'}
+
http2-wrapper@2.2.1:
resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==}
engines: {node: '>=10.19.0'}
@@ -2893,6 +3065,10 @@ packages:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
+ iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+
iconv-lite@0.6.3:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
@@ -2928,6 +3104,10 @@ packages:
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ inquirer@6.5.2:
+ resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==}
+ engines: {node: '>=6.0.0'}
+
inspect-with-kind@1.0.5:
resolution: {integrity: sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==}
@@ -2978,6 +3158,10 @@ packages:
resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
engines: {node: '>= 0.4'}
+ is-extendable@0.1.1:
+ resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
+ engines: {node: '>=0.10.0'}
+
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
@@ -2986,6 +3170,10 @@ packages:
resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
engines: {node: '>= 0.4'}
+ is-fullwidth-code-point@2.0.0:
+ resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==}
+ engines: {node: '>=4'}
+
is-fullwidth-code-point@3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
@@ -3061,6 +3249,9 @@ packages:
resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
engines: {node: '>= 0.4'}
+ is-typedarray@1.0.0:
+ resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==}
+
is-unicode-supported@0.1.0:
resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
engines: {node: '>=10'}
@@ -3083,6 +3274,9 @@ packages:
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+ isstream@0.1.2:
+ resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==}
+
istanbul-lib-coverage@3.2.2:
resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
engines: {node: '>=8'}
@@ -3270,6 +3464,9 @@ packages:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
+ jsbn@0.1.1:
+ resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==}
+
jsesc@3.1.0:
resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
engines: {node: '>=6'}
@@ -3287,9 +3484,15 @@ packages:
json-schema-traverse@1.0.0:
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+ json-schema@0.4.0:
+ resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
+
json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
@@ -3305,6 +3508,10 @@ packages:
resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==}
engines: {node: '>=12', npm: '>=6'}
+ jsprim@1.4.2:
+ resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==}
+ engines: {node: '>=0.6.0'}
+
jssha@3.2.0:
resolution: {integrity: sha512-QuruyBENDWdN4tZwJbQq7/eAK85FqrI4oDbXjy5IBhYD+2pTJyBUWZe8ctWaCkrV0gy6AaelgOZZBMeswEa/6Q==}
@@ -3347,14 +3554,26 @@ packages:
lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+ lint@0.8.19:
+ resolution: {integrity: sha512-i9iqBX/OO2+zSE7hEDXJ0rdLMxvBluK2T/xbCKAhEgyHE1q6kjp1HJGOVagkVB0f0UZ+FnW/wM3smsihQN0tFw==}
+ hasBin: true
+
load-esm@1.0.2:
resolution: {integrity: sha512-nVAvWk/jeyrWyXEAs84mpQCYccxRqgKY4OznLuJhJCa0XsPSfdOIr2zvBZEj3IHEHbX97jjscKRRV539bW0Gpw==}
engines: {node: '>=13.2.0'}
+ loadash@1.0.0:
+ resolution: {integrity: sha512-xlX5HBsXB3KG0FJbJJG/3kYWCfsCyCSus3T+uHVu6QL6YxAdggmm3QeyLgn54N2yi5/UE6xxL5ZWJAAiHzHYEg==}
+ deprecated: Package is unsupport. Please use the lodash package instead.
+
loader-runner@4.3.0:
resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
engines: {node: '>=6.11.5'}
+ locate-path@3.0.0:
+ resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
+ engines: {node: '>=6'}
+
locate-path@5.0.0:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'}
@@ -3393,6 +3612,10 @@ packages:
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ log-symbols@2.2.0:
+ resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==}
+ engines: {node: '>=4'}
+
log-symbols@4.1.0:
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
engines: {node: '>=10'}
@@ -3484,6 +3707,10 @@ packages:
engines: {node: '>=4.0.0'}
hasBin: true
+ mimic-fn@1.2.0:
+ resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==}
+ engines: {node: '>=4'}
+
mimic-fn@2.1.0:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
@@ -3518,6 +3745,9 @@ packages:
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
hasBin: true
+ moment@2.30.1:
+ resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==}
+
mri@1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
engines: {node: '>=4'}
@@ -3533,6 +3763,9 @@ packages:
resolution: {integrity: sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==}
engines: {node: '>= 10.16.0'}
+ mute-stream@0.0.7:
+ resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==}
+
mute-stream@2.0.0:
resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==}
engines: {node: ^18.17.0 || >=20.5.0}
@@ -3599,6 +3832,9 @@ packages:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'}
+ oauth-sign@0.9.0:
+ resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==}
+
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
@@ -3638,6 +3874,10 @@ packages:
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+ onetime@2.0.1:
+ resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==}
+ engines: {node: '>=4'}
+
onetime@5.1.2:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
@@ -3646,10 +3886,18 @@ packages:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
+ ora@3.4.0:
+ resolution: {integrity: sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==}
+ engines: {node: '>=6'}
+
ora@5.4.1:
resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
engines: {node: '>=10'}
+ os-tmpdir@1.0.2:
+ resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
+ engines: {node: '>=0.10.0'}
+
own-keys@1.0.1:
resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
engines: {node: '>= 0.4'}
@@ -3666,6 +3914,10 @@ packages:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
+ p-locate@3.0.0:
+ resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
+ engines: {node: '>=6'}
+
p-locate@4.1.0:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
@@ -3708,6 +3960,10 @@ packages:
resolution: {integrity: sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==}
engines: {node: '>= 0.4.0'}
+ path-exists@3.0.0:
+ resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
+ engines: {node: '>=4'}
+
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
@@ -3745,6 +4001,9 @@ packages:
pend@1.2.0:
resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
+ performance-now@2.1.0:
+ resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==}
+
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -3828,6 +4087,11 @@ packages:
resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
engines: {node: '>=6.0.0'}
+ prettier@1.19.1:
+ resolution: {integrity: sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==}
+ engines: {node: '>=4'}
+ hasBin: true
+
prettier@3.6.2:
resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==}
engines: {node: '>=14'}
@@ -3848,6 +4112,9 @@ packages:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
engines: {node: '>= 0.10'}
+ psl@1.15.0:
+ resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==}
+
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
@@ -3859,6 +4126,10 @@ packages:
resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
engines: {node: '>=0.6'}
+ qs@6.5.3:
+ resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
+ engines: {node: '>=0.6'}
+
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
@@ -3926,6 +4197,15 @@ packages:
resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
engines: {node: '>=0.10'}
+ replace-in-file@3.4.4:
+ resolution: {integrity: sha512-ehq0dFsxSpfPiPLBU5kli38Ud8bZL0CQKG8WQVbvhmyilXaMJ8y4LtDZs/K3MD8C0+rHbsfW8c9r2bUEy0B/6Q==}
+ hasBin: true
+
+ request@2.88.2:
+ resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==}
+ engines: {node: '>= 6'}
+ deprecated: request has been deprecated, see https://github.com/request/request/issues/3142
+
require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
@@ -3934,6 +4214,9 @@ packages:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
+ require-main-filename@2.0.0:
+ resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
+
resolve-alpn@1.2.1:
resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
@@ -3966,6 +4249,10 @@ packages:
resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==}
engines: {node: '>=14.16'}
+ restore-cursor@2.0.0:
+ resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==}
+ engines: {node: '>=4'}
+
restore-cursor@3.1.0:
resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
engines: {node: '>=8'}
@@ -3988,9 +4275,17 @@ packages:
resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
engines: {node: '>= 18'}
+ run-async@2.4.1:
+ resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
+ engines: {node: '>=0.12.0'}
+
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+ rxjs@6.6.7:
+ resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==}
+ engines: {npm: '>=2.0.0'}
+
rxjs@7.8.1:
resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
@@ -4065,6 +4360,9 @@ packages:
resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==}
engines: {node: '>= 18'}
+ set-blocking@2.0.0:
+ resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
+
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
@@ -4111,6 +4409,9 @@ packages:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
+ simple-git@3.28.0:
+ resolution: {integrity: sha512-Rs/vQRwsn1ILH1oBUy8NucJlXmnnLeLCfcvbSehkPzbv3wwoFWIdtfd6Ndo6ZPhlPsCZ60CPI4rxurnwAa+a2w==}
+
sisteransi@1.0.5:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
@@ -4151,6 +4452,11 @@ packages:
sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+ sshpk@1.18.0:
+ resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
stack-utils@2.0.6:
resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
engines: {node: '>=10'}
@@ -4178,6 +4484,14 @@ packages:
resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
engines: {node: '>=10'}
+ string-width@2.1.1:
+ resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==}
+ engines: {node: '>=4'}
+
+ string-width@3.1.0:
+ resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==}
+ engines: {node: '>=6'}
+
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@@ -4208,6 +4522,14 @@ packages:
string_decoder@1.3.0:
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+ strip-ansi@4.0.0:
+ resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==}
+ engines: {node: '>=4'}
+
+ strip-ansi@5.2.0:
+ resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==}
+ engines: {node: '>=6'}
+
strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
@@ -4252,6 +4574,10 @@ packages:
resolution: {integrity: sha512-tjLPs7dVyqgItVFirHYqe2T+MfWc2VOBQ8QFKKbWTA3PU7liZR8zoSpAi/C1k1ilm9RsXIKYf197oap9wXGVYg==}
engines: {node: '>=14.18.0'}
+ supports-color@5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
+
supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
@@ -4348,6 +4674,10 @@ packages:
through@2.3.8:
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+ tmp@0.0.33:
+ resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
+ engines: {node: '>=0.6.0'}
+
tmpl@1.0.5:
resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
@@ -4380,6 +4710,10 @@ packages:
ton-core: '>=0.53.0'
ton-crypto: '>=3.2.0'
+ tough-cookie@2.5.0:
+ resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==}
+ engines: {node: '>=0.8'}
+
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
@@ -4452,12 +4786,21 @@ packages:
resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
engines: {node: '>=6'}
+ tslib@1.14.1:
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+ tunnel-agent@0.6.0:
+ resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
+
tweetnacl-util@0.15.1:
resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==}
+ tweetnacl@0.14.5:
+ resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
+
tweetnacl@1.0.3:
resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==}
@@ -4520,6 +4863,10 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
+ ua-parser-js@1.0.41:
+ resolution: {integrity: sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==}
+ hasBin: true
+
uglify-js@3.19.3:
resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
engines: {node: '>=0.8.0'}
@@ -4571,6 +4918,11 @@ packages:
resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==}
hasBin: true
+ uuid@3.4.0:
+ resolution: {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.
+ hasBin: true
+
v8-compile-cache-lib@3.0.1:
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
@@ -4586,6 +4938,10 @@ packages:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'}
+ verror@1.10.0:
+ resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
+ engines: {'0': node >=0.6.0}
+
vite@5.4.20:
resolution: {integrity: sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==}
engines: {node: ^18.0.0 || >=20.0.0}
@@ -4663,6 +5019,9 @@ packages:
resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
engines: {node: '>= 0.4'}
+ which-module@2.0.1:
+ resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
+
which-typed-array@1.1.19:
resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
engines: {node: '>= 0.4'}
@@ -4679,6 +5038,10 @@ packages:
wordwrap@1.0.0:
resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+ wrap-ansi@5.1.0:
+ resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==}
+ engines: {node: '>=6'}
+
wrap-ansi@6.2.0:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}
@@ -4698,6 +5061,14 @@ packages:
resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ write-yaml@1.0.0:
+ resolution: {integrity: sha512-QFB0QwNlUTSsICNb1HV+822MvFpTC1gtKcOfm0B9oqz4qOQXbRuMSxWPWryTEFBEZDWbI5zXabXArvShXTdLiA==}
+ engines: {node: '>=0.10.0'}
+
+ write@0.3.3:
+ resolution: {integrity: sha512-e63bsTAFxFUU8OGClhjhhf2R72Njpq6DDTOFFBxDkfZFwoRRKZUx9rll6g/TvY0UcCdKE2OroYZje0v9ROzmfA==}
+ engines: {node: '>=0.10.0'}
+
ws@8.18.3:
resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
engines: {node: '>=10.0.0'}
@@ -4714,6 +5085,9 @@ packages:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}
+ y18n@4.0.3:
+ resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
+
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
@@ -4726,10 +5100,16 @@ packages:
engines: {node: '>= 14.6'}
hasBin: true
+ yargs-parser@13.1.2:
+ resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==}
+
yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
+ yargs@13.3.2:
+ resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==}
+
yargs@17.7.2:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
@@ -5548,6 +5928,14 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
+ '@kwsites/file-exists@1.1.1':
+ dependencies:
+ debug: 4.4.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@kwsites/promise-deferred@1.1.1': {}
+
'@lukeed/csprng@1.1.0': {}
'@microsoft/tsdoc@0.15.1': {}
@@ -5998,6 +6386,32 @@ snapshots:
transitivePeerDependencies:
- encoding
+ '@tonconnect/sdk@3.3.0':
+ dependencies:
+ '@tonconnect/isomorphic-eventsource': 0.0.2
+ '@tonconnect/isomorphic-fetch': 0.0.3
+ '@tonconnect/protocol': 2.3.0
+ transitivePeerDependencies:
+ - encoding
+
+ '@tonconnect/ui-react@2.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@tonconnect/ui': 2.3.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ transitivePeerDependencies:
+ - encoding
+
+ '@tonconnect/ui@2.3.0':
+ dependencies:
+ '@tonconnect/sdk': 3.3.0
+ classnames: 2.5.1
+ csstype: 3.1.3
+ deepmerge: 4.3.1
+ ua-parser-js: 1.0.41
+ transitivePeerDependencies:
+ - encoding
+
'@tsconfig/node10@1.0.11': {}
'@tsconfig/node12@1.0.11': {}
@@ -6499,14 +6913,24 @@ snapshots:
ansi-colors@4.1.3: {}
+ ansi-escapes@3.2.0: {}
+
ansi-escapes@4.3.2:
dependencies:
type-fest: 0.21.3
+ ansi-regex@3.0.1: {}
+
+ ansi-regex@4.1.1: {}
+
ansi-regex@5.0.1: {}
ansi-regex@6.2.0: {}
+ ansi-styles@3.2.1:
+ dependencies:
+ color-convert: 1.9.3
+
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
@@ -6599,6 +7023,12 @@ snapshots:
asap@2.0.6: {}
+ asn1@0.2.6:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ assert-plus@1.0.0: {}
+
async-function@1.0.0: {}
asynckit@0.4.0: {}
@@ -6617,6 +7047,10 @@ snapshots:
dependencies:
possible-typed-array-names: 1.1.0
+ aws-sign2@0.7.0: {}
+
+ aws4@1.13.2: {}
+
axios@0.25.0:
dependencies:
follow-redirects: 1.15.11
@@ -6687,6 +7121,10 @@ snapshots:
base64-js@1.5.1: {}
+ bcrypt-pbkdf@1.0.2:
+ dependencies:
+ tweetnacl: 0.14.5
+
bin-version-check@5.1.0:
dependencies:
bin-version: 6.0.0
@@ -6813,6 +7251,14 @@ snapshots:
caniuse-lite@1.0.30001739: {}
+ caseless@0.12.0: {}
+
+ chalk@2.4.2:
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
@@ -6820,6 +7266,8 @@ snapshots:
char-regex@1.0.2: {}
+ chardet@0.7.0: {}
+
chardet@2.1.0: {}
chokidar@3.6.0:
@@ -6852,6 +7300,12 @@ snapshots:
libphonenumber-js: 1.12.17
validator: 13.15.15
+ classnames@2.5.1: {}
+
+ cli-cursor@2.1.0:
+ dependencies:
+ restore-cursor: 2.0.0
+
cli-cursor@3.1.0:
dependencies:
restore-cursor: 3.1.0
@@ -6864,8 +7318,20 @@ snapshots:
optionalDependencies:
'@colors/colors': 1.5.0
+ cli-table@0.3.11:
+ dependencies:
+ colors: 1.0.3
+
+ cli-width@2.2.1: {}
+
cli-width@4.1.0: {}
+ cliui@5.0.0:
+ dependencies:
+ string-width: 3.1.0
+ strip-ansi: 5.2.0
+ wrap-ansi: 5.1.0
+
cliui@8.0.1:
dependencies:
string-width: 4.2.3
@@ -6878,12 +7344,20 @@ snapshots:
collect-v8-coverage@1.0.2: {}
+ color-convert@1.9.3:
+ dependencies:
+ color-name: 1.1.3
+
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
+ color-name@1.1.3: {}
+
color-name@1.1.4: {}
+ colors@1.0.3: {}
+
colyseus.js@0.16.19:
dependencies:
'@colyseus/httpie': 2.0.1
@@ -6946,6 +7420,8 @@ snapshots:
cookiejar@2.1.4: {}
+ core-util-is@1.0.2: {}
+
core-util-is@1.0.3: {}
cors@2.8.5:
@@ -6989,6 +7465,10 @@ snapshots:
csstype@3.1.3: {}
+ dashdash@1.14.1:
+ dependencies:
+ assert-plus: 1.0.0
+
data-view-buffer@1.0.2:
dependencies:
call-bound: 1.0.4
@@ -7013,6 +7493,8 @@ snapshots:
dependencies:
ms: 2.1.3
+ decamelize@1.2.0: {}
+
decompress-response@6.0.0:
dependencies:
mimic-response: 3.1.0
@@ -7087,6 +7569,11 @@ snapshots:
eastasianwidth@0.2.0: {}
+ ecc-jsbn@0.1.2:
+ dependencies:
+ jsbn: 0.1.1
+ safer-buffer: 2.1.2
+
ecdsa-sig-formatter@1.0.11:
dependencies:
safe-buffer: 5.2.1
@@ -7097,6 +7584,8 @@ snapshots:
emittery@0.13.1: {}
+ emoji-regex@7.0.3: {}
+
emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {}
@@ -7245,6 +7734,8 @@ snapshots:
escape-html@1.0.3: {}
+ escape-string-regexp@1.0.5: {}
+
escape-string-regexp@2.0.0: {}
escape-string-regexp@4.0.0: {}
@@ -7496,6 +7987,20 @@ snapshots:
ext-list: 2.2.2
sort-keys-length: 1.0.1
+ extend-shallow@2.0.1:
+ dependencies:
+ is-extendable: 0.1.1
+
+ extend@3.0.2: {}
+
+ external-editor@3.1.0:
+ dependencies:
+ chardet: 0.7.0
+ iconv-lite: 0.4.24
+ tmp: 0.0.33
+
+ extsprintf@1.3.0: {}
+
fast-deep-equal@3.1.3: {}
fast-diff@1.3.0: {}
@@ -7528,6 +8033,10 @@ snapshots:
fflate@0.8.2: {}
+ figures@2.0.0:
+ dependencies:
+ escape-string-regexp: 1.0.5
+
file-entry-cache@6.0.1:
dependencies:
flat-cache: 3.2.0
@@ -7575,6 +8084,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ find-up@3.0.0:
+ dependencies:
+ locate-path: 3.0.0
+
find-up@4.1.0:
dependencies:
locate-path: 5.0.0
@@ -7613,6 +8126,8 @@ snapshots:
cross-spawn: 7.0.6
signal-exit: 4.1.0
+ forever-agent@0.6.1: {}
+
fork-ts-checker-webpack-plugin@9.1.0(typescript@5.8.3)(webpack@5.100.2(@swc/core@1.13.5)):
dependencies:
'@babel/code-frame': 7.27.1
@@ -7632,6 +8147,12 @@ snapshots:
form-data-encoder@2.1.4: {}
+ form-data@2.3.3:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+
form-data@4.0.4:
dependencies:
asynckit: 0.4.0
@@ -7652,6 +8173,8 @@ snapshots:
fresh@2.0.0: {}
+ fs-exists-sync@0.1.0: {}
+
fs-extra@10.1.0:
dependencies:
graceful-fs: 4.2.11
@@ -7710,6 +8233,10 @@ snapshots:
es-errors: 1.3.0
get-intrinsic: 1.3.0
+ getpass@0.1.7:
+ dependencies:
+ assert-plus: 1.0.0
+
glob-parent@5.1.2:
dependencies:
is-glob: 4.0.3
@@ -7789,8 +8316,17 @@ snapshots:
optionalDependencies:
uglify-js: 3.19.3
+ har-schema@2.0.0: {}
+
+ har-validator@5.1.5:
+ dependencies:
+ ajv: 6.12.6
+ har-schema: 2.0.0
+
has-bigints@1.1.0: {}
+ has-flag@3.0.0: {}
+
has-flag@4.0.0: {}
has-own-prop@2.0.0: {}
@@ -7825,6 +8361,12 @@ snapshots:
statuses: 2.0.1
toidentifier: 1.0.1
+ http-signature@1.2.0:
+ dependencies:
+ assert-plus: 1.0.0
+ jsprim: 1.4.2
+ sshpk: 1.18.0
+
http2-wrapper@2.2.1:
dependencies:
quick-lru: 5.1.1
@@ -7832,6 +8374,10 @@ snapshots:
human-signals@2.1.0: {}
+ iconv-lite@0.4.24:
+ dependencies:
+ safer-buffer: 2.1.2
+
iconv-lite@0.6.3:
dependencies:
safer-buffer: 2.1.2
@@ -7861,6 +8407,22 @@ snapshots:
inherits@2.0.4: {}
+ inquirer@6.5.2:
+ dependencies:
+ ansi-escapes: 3.2.0
+ chalk: 2.4.2
+ cli-cursor: 2.1.0
+ cli-width: 2.2.1
+ external-editor: 3.1.0
+ figures: 2.0.0
+ lodash: 4.17.21
+ mute-stream: 0.0.7
+ run-async: 2.4.1
+ rxjs: 6.6.7
+ string-width: 2.1.1
+ strip-ansi: 5.2.0
+ through: 2.3.8
+
inspect-with-kind@1.0.5:
dependencies:
kind-of: 6.0.3
@@ -7919,12 +8481,16 @@ snapshots:
call-bound: 1.0.4
has-tostringtag: 1.0.2
+ is-extendable@0.1.1: {}
+
is-extglob@2.1.1: {}
is-finalizationregistry@1.1.1:
dependencies:
call-bound: 1.0.4
+ is-fullwidth-code-point@2.0.0: {}
+
is-fullwidth-code-point@3.0.0: {}
is-generator-fn@2.1.0: {}
@@ -7989,6 +8555,8 @@ snapshots:
dependencies:
which-typed-array: 1.1.19
+ is-typedarray@1.0.0: {}
+
is-unicode-supported@0.1.0: {}
is-weakmap@2.0.2: {}
@@ -8006,6 +8574,8 @@ snapshots:
isexe@2.0.0: {}
+ isstream@0.1.2: {}
+
istanbul-lib-coverage@3.2.2: {}
istanbul-lib-instrument@5.2.1:
@@ -8396,6 +8966,8 @@ snapshots:
dependencies:
argparse: 2.0.1
+ jsbn@0.1.1: {}
+
jsesc@3.1.0: {}
json-buffer@3.0.1: {}
@@ -8406,8 +8978,12 @@ snapshots:
json-schema-traverse@1.0.0: {}
+ json-schema@0.4.0: {}
+
json-stable-stringify-without-jsonify@1.0.1: {}
+ json-stringify-safe@5.0.1: {}
+
json5@2.2.3: {}
jsonc-parser@3.3.1: {}
@@ -8431,6 +9007,13 @@ snapshots:
ms: 2.1.3
semver: 7.7.2
+ jsprim@1.4.2:
+ dependencies:
+ assert-plus: 1.0.0
+ extsprintf: 1.3.0
+ json-schema: 0.4.0
+ verror: 1.10.0
+
jssha@3.2.0: {}
jsx-ast-utils@3.3.5:
@@ -8472,10 +9055,35 @@ snapshots:
lines-and-columns@1.2.4: {}
+ lint@0.8.19:
+ dependencies:
+ chalk: 2.4.2
+ cli-table: 0.3.11
+ commander: 2.20.3
+ inquirer: 6.5.2
+ js-yaml: 4.1.0
+ loadash: 1.0.0
+ moment: 2.30.1
+ ora: 3.4.0
+ prettier: 1.19.1
+ replace-in-file: 3.4.4
+ request: 2.88.2
+ simple-git: 3.28.0
+ write-yaml: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
load-esm@1.0.2: {}
+ loadash@1.0.0: {}
+
loader-runner@4.3.0: {}
+ locate-path@3.0.0:
+ dependencies:
+ p-locate: 3.0.0
+ path-exists: 3.0.0
+
locate-path@5.0.0:
dependencies:
p-locate: 4.1.0
@@ -8504,6 +9112,10 @@ snapshots:
lodash@4.17.21: {}
+ log-symbols@2.2.0:
+ dependencies:
+ chalk: 2.4.2
+
log-symbols@4.1.0:
dependencies:
chalk: 4.1.2
@@ -8574,6 +9186,8 @@ snapshots:
mime@2.6.0: {}
+ mimic-fn@1.2.0: {}
+
mimic-fn@2.1.0: {}
mimic-response@3.1.0: {}
@@ -8600,6 +9214,8 @@ snapshots:
dependencies:
minimist: 1.2.8
+ moment@2.30.1: {}
+
mri@1.2.0: {}
ms@2.1.3: {}
@@ -8626,6 +9242,8 @@ snapshots:
type-is: 1.6.18
xtend: 4.0.2
+ mute-stream@0.0.7: {}
+
mute-stream@2.0.0: {}
mz@2.7.0:
@@ -8673,6 +9291,8 @@ snapshots:
dependencies:
path-key: 3.1.1
+ oauth-sign@0.9.0: {}
+
object-assign@4.1.1: {}
object-hash@3.0.0: {}
@@ -8719,6 +9339,10 @@ snapshots:
dependencies:
wrappy: 1.0.2
+ onetime@2.0.1:
+ dependencies:
+ mimic-fn: 1.2.0
+
onetime@5.1.2:
dependencies:
mimic-fn: 2.1.0
@@ -8732,6 +9356,15 @@ snapshots:
type-check: 0.4.0
word-wrap: 1.2.5
+ ora@3.4.0:
+ dependencies:
+ chalk: 2.4.2
+ cli-cursor: 2.1.0
+ cli-spinners: 2.9.2
+ log-symbols: 2.2.0
+ strip-ansi: 5.2.0
+ wcwidth: 1.0.1
+
ora@5.4.1:
dependencies:
bl: 4.1.0
@@ -8744,6 +9377,8 @@ snapshots:
strip-ansi: 6.0.1
wcwidth: 1.0.1
+ os-tmpdir@1.0.2: {}
+
own-keys@1.0.1:
dependencies:
get-intrinsic: 1.3.0
@@ -8760,6 +9395,10 @@ snapshots:
dependencies:
yocto-queue: 0.1.0
+ p-locate@3.0.0:
+ dependencies:
+ p-limit: 2.3.0
+
p-locate@4.1.0:
dependencies:
p-limit: 2.3.0
@@ -8800,6 +9439,8 @@ snapshots:
pause: 0.0.1
utils-merge: 1.0.1
+ path-exists@3.0.0: {}
+
path-exists@4.0.0: {}
path-is-absolute@1.0.1: {}
@@ -8826,6 +9467,8 @@ snapshots:
pend@1.2.0: {}
+ performance-now@2.1.0: {}
+
picocolors@1.1.1: {}
picomatch@2.3.1: {}
@@ -8892,6 +9535,8 @@ snapshots:
dependencies:
fast-diff: 1.3.0
+ prettier@1.19.1: {}
+
prettier@3.6.2: {}
pretty-format@29.7.0:
@@ -8916,6 +9561,10 @@ snapshots:
forwarded: 0.2.0
ipaddr.js: 1.9.1
+ psl@1.15.0:
+ dependencies:
+ punycode: 2.3.1
+
punycode@2.3.1: {}
pure-rand@6.1.0: {}
@@ -8924,6 +9573,8 @@ snapshots:
dependencies:
side-channel: 1.1.0
+ qs@6.5.3: {}
+
queue-microtask@1.2.3: {}
quick-lru@5.1.1: {}
@@ -8997,10 +9648,41 @@ snapshots:
repeat-string@1.6.1: {}
+ replace-in-file@3.4.4:
+ dependencies:
+ chalk: 2.4.2
+ glob: 7.2.3
+ yargs: 13.3.2
+
+ request@2.88.2:
+ dependencies:
+ aws-sign2: 0.7.0
+ aws4: 1.13.2
+ caseless: 0.12.0
+ combined-stream: 1.0.8
+ extend: 3.0.2
+ forever-agent: 0.6.1
+ form-data: 2.3.3
+ har-validator: 5.1.5
+ http-signature: 1.2.0
+ is-typedarray: 1.0.0
+ isstream: 0.1.2
+ json-stringify-safe: 5.0.1
+ mime-types: 2.1.35
+ oauth-sign: 0.9.0
+ performance-now: 2.1.0
+ qs: 6.5.3
+ safe-buffer: 5.2.1
+ tough-cookie: 2.5.0
+ tunnel-agent: 0.6.0
+ uuid: 3.4.0
+
require-directory@2.1.1: {}
require-from-string@2.0.2: {}
+ require-main-filename@2.0.0: {}
+
resolve-alpn@1.2.1: {}
resolve-cwd@3.0.0:
@@ -9029,6 +9711,11 @@ snapshots:
dependencies:
lowercase-keys: 3.0.0
+ restore-cursor@2.0.0:
+ dependencies:
+ onetime: 2.0.1
+ signal-exit: 3.0.7
+
restore-cursor@3.1.0:
dependencies:
onetime: 5.1.2
@@ -9077,10 +9764,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ run-async@2.4.1: {}
+
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
+ rxjs@6.6.7:
+ dependencies:
+ tslib: 1.14.1
+
rxjs@7.8.1:
dependencies:
tslib: 2.8.1
@@ -9178,6 +9871,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ set-blocking@2.0.0: {}
+
set-function-length@1.2.2:
dependencies:
define-data-property: 1.1.4
@@ -9240,6 +9935,14 @@ snapshots:
signal-exit@4.1.0: {}
+ simple-git@3.28.0:
+ dependencies:
+ '@kwsites/file-exists': 1.1.1
+ '@kwsites/promise-deferred': 1.1.1
+ debug: 4.4.1
+ transitivePeerDependencies:
+ - supports-color
+
sisteransi@1.0.5: {}
slash@3.0.0: {}
@@ -9272,6 +9975,18 @@ snapshots:
sprintf-js@1.0.3: {}
+ sshpk@1.18.0:
+ dependencies:
+ asn1: 0.2.6
+ assert-plus: 1.0.0
+ bcrypt-pbkdf: 1.0.2
+ dashdash: 1.14.1
+ ecc-jsbn: 0.1.2
+ getpass: 0.1.7
+ jsbn: 0.1.1
+ safer-buffer: 2.1.2
+ tweetnacl: 0.14.5
+
stack-utils@2.0.6:
dependencies:
escape-string-regexp: 2.0.0
@@ -9299,6 +10014,17 @@ snapshots:
char-regex: 1.0.2
strip-ansi: 6.0.1
+ string-width@2.1.1:
+ dependencies:
+ is-fullwidth-code-point: 2.0.0
+ strip-ansi: 4.0.0
+
+ string-width@3.1.0:
+ dependencies:
+ emoji-regex: 7.0.3
+ is-fullwidth-code-point: 2.0.0
+ strip-ansi: 5.2.0
+
string-width@4.2.3:
dependencies:
emoji-regex: 8.0.0
@@ -9359,6 +10085,14 @@ snapshots:
dependencies:
safe-buffer: 5.2.1
+ strip-ansi@4.0.0:
+ dependencies:
+ ansi-regex: 3.0.1
+
+ strip-ansi@5.2.0:
+ dependencies:
+ ansi-regex: 4.1.1
+
strip-ansi@6.0.1:
dependencies:
ansi-regex: 5.0.1
@@ -9415,6 +10149,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ supports-color@5.5.0:
+ dependencies:
+ has-flag: 3.0.0
+
supports-color@7.2.0:
dependencies:
has-flag: 4.0.0
@@ -9537,6 +10275,10 @@ snapshots:
through@2.3.8: {}
+ tmp@0.0.33:
+ dependencies:
+ os-tmpdir: 1.0.2
+
tmpl@1.0.5: {}
to-regex-range@5.0.1:
@@ -9578,6 +10320,11 @@ snapshots:
transitivePeerDependencies:
- debug
+ tough-cookie@2.5.0:
+ dependencies:
+ psl: 1.15.0
+ punycode: 2.3.1
+
tr46@0.0.3: {}
tree-kill@1.2.2: {}
@@ -9651,10 +10398,18 @@ snapshots:
minimist: 1.2.8
strip-bom: 3.0.0
+ tslib@1.14.1: {}
+
tslib@2.8.1: {}
+ tunnel-agent@0.6.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
tweetnacl-util@0.15.1: {}
+ tweetnacl@0.14.5: {}
+
tweetnacl@1.0.3: {}
type-check@0.4.0:
@@ -9728,6 +10483,8 @@ snapshots:
typescript@5.8.3: {}
+ ua-parser-js@1.0.41: {}
+
uglify-js@3.19.3:
optional: true
@@ -9771,6 +10528,8 @@ snapshots:
uuid@13.0.0: {}
+ uuid@3.4.0: {}
+
v8-compile-cache-lib@3.0.1: {}
v8-to-istanbul@9.3.0:
@@ -9783,6 +10542,12 @@ snapshots:
vary@1.1.2: {}
+ verror@1.10.0:
+ dependencies:
+ assert-plus: 1.0.0
+ core-util-is: 1.0.2
+ extsprintf: 1.3.0
+
vite@5.4.20(@types/node@22.18.0)(terser@5.43.1):
dependencies:
esbuild: 0.21.5
@@ -9880,6 +10645,8 @@ snapshots:
is-weakmap: 2.0.2
is-weakset: 2.0.4
+ which-module@2.0.1: {}
+
which-typed-array@1.1.19:
dependencies:
available-typed-arrays: 1.0.7
@@ -9898,6 +10665,12 @@ snapshots:
wordwrap@1.0.0: {}
+ wrap-ansi@5.1.0:
+ dependencies:
+ ansi-styles: 3.2.1
+ string-width: 3.1.0
+ strip-ansi: 5.2.0
+
wrap-ansi@6.2.0:
dependencies:
ansi-styles: 4.3.0
@@ -9923,18 +10696,49 @@ snapshots:
imurmurhash: 0.1.4
signal-exit: 3.0.7
+ write-yaml@1.0.0:
+ dependencies:
+ extend-shallow: 2.0.1
+ js-yaml: 3.14.1
+ write: 0.3.3
+
+ write@0.3.3:
+ dependencies:
+ fs-exists-sync: 0.1.0
+ mkdirp: 0.5.6
+
ws@8.18.3: {}
xtend@4.0.2: {}
+ y18n@4.0.3: {}
+
y18n@5.0.8: {}
yallist@3.1.1: {}
yaml@2.8.1: {}
+ yargs-parser@13.1.2:
+ dependencies:
+ camelcase: 5.3.1
+ decamelize: 1.2.0
+
yargs-parser@21.1.1: {}
+ yargs@13.3.2:
+ dependencies:
+ cliui: 5.0.0
+ find-up: 3.0.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ require-main-filename: 2.0.0
+ set-blocking: 2.0.0
+ string-width: 3.1.0
+ which-module: 2.0.1
+ y18n: 4.0.3
+ yargs-parser: 13.1.2
+
yargs@17.7.2:
dependencies:
cliui: 8.0.1
diff --git a/server/src/auth/auth.controller.ts b/server/src/auth/auth.controller.ts
index ce75974..2be58fc 100644
--- a/server/src/auth/auth.controller.ts
+++ b/server/src/auth/auth.controller.ts
@@ -1,6 +1,19 @@
-import { Controller, Post, Body, UseGuards, Get, Request } from '@nestjs/common';
+import {
+ Controller,
+ Post,
+ Body,
+ UseGuards,
+ Get,
+ Request,
+} from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
-import { ApiTags, ApiOperation, ApiResponse, ApiBearerAuth, ApiBody } from '@nestjs/swagger';
+import {
+ ApiTags,
+ ApiOperation,
+ ApiResponse,
+ ApiBearerAuth,
+ ApiBody,
+} from '@nestjs/swagger';
import { AuthService, AuthResponse } from './auth.service';
import { User } from '../users/users.service';
import { ChallengeResponse, VerifyProofRequest } from '../types/ton.types';
@@ -18,9 +31,10 @@ export class AuthController {
constructor(private readonly authService: AuthService) {}
@Post('login')
- @ApiOperation({
+ @ApiOperation({
summary: 'Authentication via TON wallet',
- description: 'Authenticate user by TON wallet address. If user does not exist, a new one is created.'
+ description:
+ 'Authenticate user by TON wallet address. If user does not exist, a new one is created.',
})
@ApiBody({
description: 'Authentication data',
@@ -30,21 +44,21 @@ export class AuthController {
walletAddress: {
type: 'string',
description: 'TON wallet address',
- example: 'EQD0vdSA_NedR9uvnh85V0S_3Bd3XJgq8Y5k-1CLq8k5tOPi'
+ example: 'EQD0vdSA_NedR9uvnh85V0S_3Bd3XJgq8Y5k-1CLq8k5tOPi',
},
username: {
type: 'string',
description: 'Username (optional)',
- example: 'Player1'
+ example: 'Player1',
},
avatar: {
type: 'string',
description: 'Avatar URL (optional)',
- example: 'https://example.com/avatar.jpg'
- }
+ example: 'https://example.com/avatar.jpg',
+ },
},
- required: ['walletAddress']
- }
+ required: ['walletAddress'],
+ },
})
@ApiResponse({
status: 201,
@@ -54,14 +68,14 @@ export class AuthController {
properties: {
access_token: {
type: 'string',
- description: 'JWT token for authentication'
+ description: 'JWT token for authentication',
},
user: {
type: 'object',
- description: 'User data'
- }
- }
- }
+ description: 'User data',
+ },
+ },
+ },
})
@ApiResponse({ status: 400, description: 'Invalid request data' })
async login(@Body() loginDto: LoginDto): Promise
{
@@ -75,9 +89,9 @@ export class AuthController {
@UseGuards(AuthGuard('jwt'))
@Get('profile')
@ApiBearerAuth('JWT-auth')
- @ApiOperation({
+ @ApiOperation({
summary: 'Get user profile',
- description: 'Returns data of the current authenticated user'
+ description: 'Returns data of the current authenticated user',
})
@ApiResponse({
status: 200,
@@ -95,9 +109,9 @@ export class AuthController {
loses: { type: 'number' },
winrate: { type: 'number' },
createdAt: { type: 'string', format: 'date-time' },
- updatedAt: { type: 'string', format: 'date-time' }
- }
- }
+ updatedAt: { type: 'string', format: 'date-time' },
+ },
+ },
})
@ApiResponse({ status: 401, description: 'Unauthorized' })
getProfile(@Request() req: { user: User }): User {
@@ -107,13 +121,13 @@ export class AuthController {
@UseGuards(AuthGuard('jwt'))
@Get('me')
@ApiBearerAuth('JWT-auth')
- @ApiOperation({
+ @ApiOperation({
summary: 'Get current user',
- description: 'Alias for /auth/profile'
+ description: 'Alias for /auth/profile',
})
@ApiResponse({
status: 200,
- description: 'Current user data'
+ description: 'Current user data',
})
@ApiResponse({ status: 401, description: 'Unauthorized' })
getMe(@Request() req: { user: User }): User {
@@ -121,9 +135,9 @@ export class AuthController {
}
@Post('generate-challenge')
- @ApiOperation({
+ @ApiOperation({
summary: 'Generate challenge for TonProof',
- description: 'Generates a challenge for TonConnect authentication'
+ description: 'Generates a challenge for TonConnect authentication',
})
@ApiBody({
description: 'Optional client ID',
@@ -132,10 +146,11 @@ export class AuthController {
properties: {
clientId: {
type: 'string',
- description: 'Optional client ID. If not provided, a new UUID will be generated.'
- }
- }
- }
+ description:
+ 'Optional client ID. If not provided, a new UUID will be generated.',
+ },
+ },
+ },
})
@ApiResponse({
status: 201,
@@ -145,27 +160,29 @@ export class AuthController {
properties: {
challenge: {
type: 'string',
- description: 'Challenge string for TonProof'
+ description: 'Challenge string for TonProof',
},
validUntil: {
type: 'number',
- description: 'Unix timestamp when challenge expires'
+ description: 'Unix timestamp when challenge expires',
},
clientId: {
type: 'string',
- description: 'Client ID for this challenge'
- }
- }
- }
+ description: 'Client ID for this challenge',
+ },
+ },
+ },
})
- async generateChallenge(@Body() body?: GenerateChallengeDto): Promise {
+ async generateChallenge(
+ @Body() body?: GenerateChallengeDto,
+ ): Promise {
return this.authService.generateChallenge(body?.clientId);
}
@Post('verify-proof')
- @ApiOperation({
+ @ApiOperation({
summary: 'Verify TonProof and authenticate',
- description: 'Verifies TonProof signature and authenticates user'
+ description: 'Verifies TonProof signature and authenticates user',
})
@ApiBody({
description: 'TonProof verification data',
@@ -176,10 +193,19 @@ export class AuthController {
type: 'object',
properties: {
address: { type: 'string', description: 'TON wallet address' },
- publicKey: { type: 'string', description: 'Public key from wallet' },
- chain: { type: 'string', description: 'TON network chain (mainnet/testnet)' },
- walletStateInit: { type: 'string', description: 'Wallet state init (optional)' }
- }
+ publicKey: {
+ type: 'string',
+ description: 'Public key from wallet',
+ },
+ chain: {
+ type: 'string',
+ description: 'TON network chain (mainnet/testnet)',
+ },
+ walletStateInit: {
+ type: 'string',
+ description: 'Wallet state init (optional)',
+ },
+ },
},
tonProof: {
type: 'object',
@@ -190,18 +216,18 @@ export class AuthController {
timestamp: { type: 'number', description: 'Unix timestamp' },
domain: { type: 'string', description: 'App domain' },
payload: { type: 'string', description: 'Challenge payload' },
- signature: { type: 'string', description: 'Ed25519 signature' }
- }
- }
- }
+ signature: { type: 'string', description: 'Ed25519 signature' },
+ },
+ },
+ },
},
clientId: {
type: 'string',
- description: 'Client ID from generate-challenge'
- }
+ description: 'Client ID from generate-challenge',
+ },
},
- required: ['account', 'tonProof', 'clientId']
- }
+ required: ['account', 'tonProof', 'clientId'],
+ },
})
@ApiResponse({
status: 201,
@@ -211,17 +237,17 @@ export class AuthController {
properties: {
access_token: {
type: 'string',
- description: 'JWT authentication token'
+ description: 'JWT authentication token',
},
user: {
type: 'object',
- description: 'User data'
- }
- }
- }
+ description: 'User data',
+ },
+ },
+ },
})
@ApiResponse({ status: 400, description: 'Invalid proof or request data' })
async verifyProof(@Body() verifyData: VerifyProofDto): Promise {
return this.authService.verifyTonProof(verifyData);
}
-}
\ No newline at end of file
+}
diff --git a/server/src/auth/auth.module.ts b/server/src/auth/auth.module.ts
index 1b9c6ce..10aa2fa 100644
--- a/server/src/auth/auth.module.ts
+++ b/server/src/auth/auth.module.ts
@@ -29,4 +29,4 @@ import { JwtUtils } from './utils/jwt.utils';
providers: [AuthService, JwtStrategy, ChallengeService, JwtUtils],
exports: [AuthService],
})
-export class AuthModule {}
\ No newline at end of file
+export class AuthModule {}
diff --git a/server/src/auth/auth.service.ts b/server/src/auth/auth.service.ts
index 38319b1..6ebe2cc 100644
--- a/server/src/auth/auth.service.ts
+++ b/server/src/auth/auth.service.ts
@@ -29,10 +29,10 @@ export class AuthService {
async validateUser(walletAddress: string): Promise {
this.logger.log(`Validating user with wallet: ${walletAddress}`);
-
+
// Ищем пользователя по адресу кошелька
const user = this.usersService.getUserByWalletAddress(walletAddress);
-
+
if (user) {
this.logger.log(`User found: ${user.id}`);
return user;
@@ -42,7 +42,11 @@ export class AuthService {
return null;
}
- async login(walletAddress: string, username?: string, avatar?: string): Promise {
+ async login(
+ walletAddress: string,
+ username?: string,
+ avatar?: string,
+ ): Promise {
this.logger.log(`Login attempt for wallet: ${walletAddress}`);
// Проверяем, есть ли пользователь
@@ -55,7 +59,11 @@ export class AuthService {
} else {
// Обновляем профиль существующего пользователя, если переданы данные
if (username !== undefined || avatar !== undefined) {
- const updatedUser = this.usersService.updateUserProfile(user.id, username, avatar);
+ const updatedUser = this.usersService.updateUserProfile(
+ user.id,
+ username,
+ avatar,
+ );
if (updatedUser) {
user = updatedUser;
}
@@ -83,29 +91,37 @@ export class AuthService {
};
}
- async generateChallenge(clientId?: string): Promise<{ challenge: string; validUntil: number; clientId: string }> {
+ async generateChallenge(
+ clientId?: string,
+ ): Promise<{ challenge: string; validUntil: number; clientId: string }> {
return this.challengeService.generateChallenge(clientId);
}
async verifyTonProof(verifyData: VerifyProofDto): Promise {
- this.logger.log(`Verifying TonProof for wallet: ${verifyData.account.address}`);
+ this.logger.log(
+ `Verifying TonProof for wallet: ${verifyData.account.address}`,
+ );
// 1. Verify the TonProof signature using ChallengeService
const isValidProof = await this.challengeService.verifyTonProof(
verifyData.account,
verifyData.tonProof,
- verifyData.clientId
+ verifyData.clientId,
);
-
+
if (!isValidProof) {
throw new Error('Invalid TonProof signature');
}
// 2. Get or create user
- let user = this.usersService.getUserByWalletAddress(verifyData.account.address);
-
+ let user = this.usersService.getUserByWalletAddress(
+ verifyData.account.address,
+ );
+
if (!user) {
- this.logger.log(`Creating new user for verified wallet: ${verifyData.account.address}`);
+ this.logger.log(
+ `Creating new user for verified wallet: ${verifyData.account.address}`,
+ );
user = this.usersService.createUser(verifyData.account.address);
}
@@ -130,4 +146,4 @@ export class AuthService {
async validateJwtPayload(payload: AuthPayload): Promise {
return this.usersService.getUserById(payload.sub);
}
-}
\ No newline at end of file
+}
diff --git a/server/src/auth/current-user.decorator.ts b/server/src/auth/current-user.decorator.ts
index 08e2571..5e692b8 100644
--- a/server/src/auth/current-user.decorator.ts
+++ b/server/src/auth/current-user.decorator.ts
@@ -6,4 +6,4 @@ export const CurrentUser = createParamDecorator(
const request = ctx.switchToHttp().getRequest();
return request.user;
},
-);
\ No newline at end of file
+);
diff --git a/server/src/auth/dto/auth.dto.ts b/server/src/auth/dto/auth.dto.ts
index 0035017..31414d1 100644
--- a/server/src/auth/dto/auth.dto.ts
+++ b/server/src/auth/dto/auth.dto.ts
@@ -33,4 +33,4 @@ export class VerifyProofDto {
@IsString()
@IsNotEmpty()
clientId!: string;
-}
\ No newline at end of file
+}
diff --git a/server/src/auth/dto/ton-proof.dto.ts b/server/src/auth/dto/ton-proof.dto.ts
index 4130a37..01b2b68 100644
--- a/server/src/auth/dto/ton-proof.dto.ts
+++ b/server/src/auth/dto/ton-proof.dto.ts
@@ -40,7 +40,11 @@ export const CheckProofResponseSchema = z.object({
token: z.string(),
});
-export type TonProofItemReplySuccess = z.infer;
+export type TonProofItemReplySuccess = z.infer<
+ typeof TonProofItemReplySuccessSchema
+>;
export type CheckProofRequestDto = z.infer;
-export type GeneratePayloadResponseDto = z.infer;
-export type CheckProofResponseDto = z.infer;
\ No newline at end of file
+export type GeneratePayloadResponseDto = z.infer<
+ typeof GeneratePayloadResponseSchema
+>;
+export type CheckProofResponseDto = z.infer;
diff --git a/server/src/auth/jwt-auth.guard.ts b/server/src/auth/jwt-auth.guard.ts
index 18588a5..2155290 100644
--- a/server/src/auth/jwt-auth.guard.ts
+++ b/server/src/auth/jwt-auth.guard.ts
@@ -2,4 +2,4 @@ import { Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@Injectable()
-export class JwtAuthGuard extends AuthGuard('jwt') {}
\ No newline at end of file
+export class JwtAuthGuard extends AuthGuard('jwt') {}
diff --git a/server/src/auth/jwt.strategy.ts b/server/src/auth/jwt.strategy.ts
index 76c193b..3a3c76e 100644
--- a/server/src/auth/jwt.strategy.ts
+++ b/server/src/auth/jwt.strategy.ts
@@ -20,11 +20,11 @@ export class JwtStrategy extends PassportStrategy(Strategy) {
async validate(payload: AuthPayload): Promise {
const user = await this.authService.validateJwtPayload(payload);
-
+
if (!user) {
throw new UnauthorizedException('Invalid token');
}
return user;
}
-}
\ No newline at end of file
+}
diff --git a/server/src/auth/services/challenge.service.ts b/server/src/auth/services/challenge.service.ts
index 47767a1..6f0f79c 100644
--- a/server/src/auth/services/challenge.service.ts
+++ b/server/src/auth/services/challenge.service.ts
@@ -20,12 +20,16 @@ export class ChallengeService {
* @param clientId - Optional client ID; if not provided, a new UUID is generated.
* @returns {Promise<{ challenge: string, validUntil: number, clientId: string }>} Challenge data including the challenge string, expiration time, and client ID.
*/
- async generateChallenge(clientId?: string): Promise<{ challenge: string; validUntil: number; clientId: string }> {
+ async generateChallenge(
+ clientId?: string,
+ ): Promise<{ challenge: string; validUntil: number; clientId: string }> {
const newClientId = clientId || uuidv4();
const challenge = randomBytes(32).toString('hex');
const validUntil = Date.now() + 5 * 60 * 1000; // 5 minutes
this.challenges.set(newClientId, { challenge, validUntil });
- this.logger.log(`Generated challenge for clientId ${newClientId}: ${challenge}`);
+ this.logger.log(
+ `Generated challenge for clientId ${newClientId}: ${challenge}`,
+ );
return { challenge, validUntil, clientId: newClientId };
}
@@ -37,8 +41,18 @@ export class ChallengeService {
* @returns {Promise} True if the proof is valid, false otherwise.
* @throws {BadRequestException} If account, proof, or client ID is invalid.
*/
- async verifyTonProof(account: Account, tonProof: TonProof, clientId: string): Promise {
- if (!account?.address || !account.publicKey || !account.walletStateInit || !tonProof?.proof || !clientId) {
+ async verifyTonProof(
+ account: Account,
+ tonProof: TonProof,
+ clientId: string,
+ ): Promise {
+ if (
+ !account?.address ||
+ !account.publicKey ||
+ !account.walletStateInit ||
+ !tonProof?.proof ||
+ !clientId
+ ) {
this.logger.error('Invalid account, proof, or clientId');
throw new BadRequestException('Invalid account, proof, or clientId');
}
@@ -52,7 +66,9 @@ export class ChallengeService {
const receivedChallenge = tonProof.proof.payload;
if (storedChallenge.challenge !== receivedChallenge) {
- this.logger.error(`Challenge mismatch for clientId ${clientId}: expected ${storedChallenge.challenge}, received ${receivedChallenge}`);
+ this.logger.error(
+ `Challenge mismatch for clientId ${clientId}: expected ${storedChallenge.challenge}, received ${receivedChallenge}`,
+ );
return false;
}
@@ -66,7 +82,9 @@ export class ChallengeService {
};
try {
- const stateInitCell = Cell.fromBoc(Buffer.from(payload.proof.state_init, 'base64'))[0];
+ const stateInitCell = Cell.fromBoc(
+ Buffer.from(payload.proof.state_init, 'base64'),
+ )[0];
const client = this.tonService['client'];
if (!client) {
this.logger.error('TON client not initialized');
@@ -78,9 +96,14 @@ export class ChallengeService {
try {
const result = await client.runMethod(address, 'get_public_key', []);
- publicKey = Buffer.from(result.stack.readBigNumber().toString(16).padStart(64, '0'), 'hex');
+ publicKey = Buffer.from(
+ result.stack.readBigNumber().toString(16).padStart(64, '0'),
+ 'hex',
+ );
} catch (error) {
- this.logger.log('get_public_key failed, using state_init for verification');
+ this.logger.log(
+ 'get_public_key failed, using state_init for verification',
+ );
const publicKeyFromStateInit = Buffer.from(payload.public_key, 'hex');
if (!publicKeyFromStateInit || publicKeyFromStateInit.length !== 32) {
@@ -96,7 +119,10 @@ export class ChallengeService {
const wantedAddress = Address.parse(payload.address);
const stateInitHash = stateInitCell.hash();
- const addressFromStateInit = new Address(wantedAddress.workChain, stateInitHash);
+ const addressFromStateInit = new Address(
+ wantedAddress.workChain,
+ stateInitHash,
+ );
if (!addressFromStateInit.equals(wantedAddress)) {
this.logger.error('Addresses do not match');
return false;
@@ -124,7 +150,10 @@ export class ChallengeService {
const wantedAddress = Address.parse(payload.address);
const stateInitHash = stateInitCell.hash();
- const addressFromStateInit = new Address(wantedAddress.workChain, stateInitHash);
+ const addressFromStateInit = new Address(
+ wantedAddress.workChain,
+ stateInitHash,
+ );
if (!addressFromStateInit.equals(wantedAddress)) {
this.logger.error('Addresses do not match');
return false;
@@ -135,12 +164,16 @@ export class ChallengeService {
this.logger.error('Proof is too old');
return false;
}
- this.logger.log(`Removing challenge for clientId ${clientId} after successful verification`);
+ this.logger.log(
+ `Removing challenge for clientId ${clientId} after successful verification`,
+ );
this.challenges.delete(clientId);
return true;
} catch (error) {
- this.logger.error(`Failed to verify TON Proof for clientId ${clientId}: ${(error as Error).message}`);
+ this.logger.error(
+ `Failed to verify TON Proof for clientId ${clientId}: ${(error as Error).message}`,
+ );
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/server/src/auth/services/ton-proof.service.ts b/server/src/auth/services/ton-proof.service.ts
index c58deaf..8e8dc98 100644
--- a/server/src/auth/services/ton-proof.service.ts
+++ b/server/src/auth/services/ton-proof.service.ts
@@ -35,7 +35,7 @@ export class TonProofService {
// 1. Compare stateInit.code with known wallet contract codes
// 2. Parse data section according to wallet version
// 3. Extract public key from the correct position
-
+
// For now, we'll return null to force fallback to on-chain method
return null;
} catch {
@@ -48,13 +48,17 @@ export class TonProofService {
*/
async checkProof(
payload: CheckProofRequestDto,
- getWalletPublicKey: (address: string) => Promise
+ getWalletPublicKey: (address: string) => Promise,
): Promise {
try {
- const stateInit = loadStateInit(Cell.fromBase64(payload.proof.state_init).beginParse());
+ const stateInit = loadStateInit(
+ Cell.fromBase64(payload.proof.state_init).beginParse(),
+ );
// 1. Try to get public key from stateInit first
- let publicKey = this.tryParsePublicKey(stateInit) ?? await getWalletPublicKey(payload.address);
+ const publicKey =
+ this.tryParsePublicKey(stateInit) ??
+ (await getWalletPublicKey(payload.address));
if (!publicKey) {
return false;
}
@@ -94,7 +98,7 @@ export class TonProofService {
signature: Buffer.from(payload.proof.signature, 'base64'),
payload: payload.proof.payload,
stateInit: payload.proof.state_init,
- timestamp: payload.proof.timestamp
+ timestamp: payload.proof.timestamp,
};
// Build message components
@@ -140,4 +144,4 @@ export class TonProofService {
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/server/src/auth/utils/jwt.utils.ts b/server/src/auth/utils/jwt.utils.ts
index c1a82f6..f6c0122 100644
--- a/server/src/auth/utils/jwt.utils.ts
+++ b/server/src/auth/utils/jwt.utils.ts
@@ -16,16 +16,16 @@ export class JwtUtils {
constructor(private readonly jwtService: JwtService) {}
async createPayloadToken(data: PayloadTokenData): Promise {
- return this.jwtService.sign(data, {
+ return this.jwtService.sign(data, {
expiresIn: '5m', // Short expiration for payload tokens
- secret: process.env.JWT_SECRET || 'default-secret'
+ secret: process.env.JWT_SECRET || 'default-secret',
});
}
async verifyPayloadToken(token: string): Promise {
try {
return this.jwtService.verify(token, {
- secret: process.env.JWT_SECRET || 'default-secret'
+ secret: process.env.JWT_SECRET || 'default-secret',
});
} catch {
return null;
@@ -33,16 +33,16 @@ export class JwtUtils {
}
async createAuthToken(data: AuthTokenData): Promise {
- return this.jwtService.sign(data, {
+ return this.jwtService.sign(data, {
expiresIn: '24h', // Long expiration for auth tokens
- secret: process.env.JWT_SECRET || 'default-secret'
+ secret: process.env.JWT_SECRET || 'default-secret',
});
}
async verifyAuthToken(token: string): Promise {
try {
return this.jwtService.verify(token, {
- secret: process.env.JWT_SECRET || 'default-secret'
+ secret: process.env.JWT_SECRET || 'default-secret',
});
} catch {
return null;
@@ -53,4 +53,4 @@ export class JwtUtils {
const hash = await sha256(payloadToken);
return hash.toString('hex');
}
-}
\ No newline at end of file
+}
diff --git a/server/src/main.ts b/server/src/main.ts
index 025048c..bef2c19 100644
--- a/server/src/main.ts
+++ b/server/src/main.ts
@@ -8,7 +8,9 @@ async function bootstrap() {
// Swagger configuration
const config = new DocumentBuilder()
.setTitle('Backgammon API')
- .setDescription('API for online backgammon game with TON blockchain integration')
+ .setDescription(
+ 'API for online backgammon game with TON blockchain integration',
+ )
.setVersion('1.0')
.addBearerAuth(
{
@@ -35,7 +37,11 @@ async function bootstrap() {
});
await app.listen(process.env.PORT ?? 3000);
- console.log(`🚀 Server running on http://localhost:${process.env.PORT ?? 3000}`);
- console.log(`📚 Swagger docs available at http://localhost:${process.env.PORT ?? 3000}/api`);
+ console.log(
+ `🚀 Server running on http://localhost:${process.env.PORT ?? 3000}`,
+ );
+ console.log(
+ `📚 Swagger docs available at http://localhost:${process.env.PORT ?? 3000}/api`,
+ );
}
void bootstrap();
diff --git a/server/src/ton/ton.controller.ts b/server/src/ton/ton.controller.ts
index f25fec2..a717d86 100644
--- a/server/src/ton/ton.controller.ts
+++ b/server/src/ton/ton.controller.ts
@@ -1,5 +1,11 @@
import { Controller, Get, Post, Body, Param } from '@nestjs/common';
-import { ApiTags, ApiOperation, ApiResponse, ApiParam, ApiBody } from '@nestjs/swagger';
+import {
+ ApiTags,
+ ApiOperation,
+ ApiResponse,
+ ApiParam,
+ ApiBody,
+} from '@nestjs/swagger';
import { TonService } from './ton.service';
export class VerifyTransactionDto {
@@ -14,9 +20,9 @@ export class TonController {
constructor(private readonly tonService: TonService) {}
@Get('network')
- @ApiOperation({
+ @ApiOperation({
summary: 'Get TON network information',
- description: 'Returns information about connected TON network'
+ description: 'Returns information about connected TON network',
})
@ApiResponse({
status: 200,
@@ -27,29 +33,29 @@ export class TonController {
network: {
type: 'string',
description: 'Network name',
- example: 'mainnet'
+ example: 'mainnet',
},
endpoint: {
type: 'string',
description: 'Network endpoint',
- example: 'https://toncenter.com/api/v2/jsonRPC'
- }
- }
- }
+ example: 'https://toncenter.com/api/v2/jsonRPC',
+ },
+ },
+ },
})
getNetworkInfo() {
return this.tonService.getNetworkInfo();
}
@Get('wallet/:address/balance')
- @ApiOperation({
+ @ApiOperation({
summary: 'Get TON wallet balance',
- description: 'Returns current balance of TON wallet'
+ description: 'Returns current balance of TON wallet',
})
@ApiParam({
name: 'address',
description: 'TON wallet address',
- example: 'EQD0vdSA_NedR9uvnh85V0S_3Bd3XJgq8Y5k-1CLq8k5tOPi'
+ example: 'EQD0vdSA_NedR9uvnh85V0S_3Bd3XJgq8Y5k-1CLq8k5tOPi',
})
@ApiResponse({
status: 200,
@@ -59,15 +65,15 @@ export class TonController {
properties: {
address: {
type: 'string',
- description: 'Wallet address'
+ description: 'Wallet address',
},
balance: {
type: 'number',
description: 'Balance in TON',
- example: 10.5
- }
- }
- }
+ example: 10.5,
+ },
+ },
+ },
})
@ApiResponse({
status: 400,
@@ -77,10 +83,10 @@ export class TonController {
properties: {
error: {
type: 'string',
- description: 'Error description'
- }
- }
- }
+ description: 'Error description',
+ },
+ },
+ },
})
async getWalletBalance(@Param('address') address: string) {
try {
@@ -94,14 +100,14 @@ export class TonController {
}
@Get('wallet/:address/history')
- @ApiOperation({
+ @ApiOperation({
summary: 'Get TON wallet transaction history',
- description: 'Returns transaction history of TON wallet'
+ description: 'Returns transaction history of TON wallet',
})
@ApiParam({
name: 'address',
description: 'TON wallet address',
- example: 'EQD0vdSA_NedR9uvnh85V0S_3Bd3XJgq8Y5k-1CLq8k5tOPi'
+ example: 'EQD0vdSA_NedR9uvnh85V0S_3Bd3XJgq8Y5k-1CLq8k5tOPi',
})
@ApiBody({
description: 'Request parameters',
@@ -112,10 +118,10 @@ export class TonController {
type: 'number',
description: 'Maximum number of transactions',
example: 10,
- default: 10
- }
- }
- }
+ default: 10,
+ },
+ },
+ },
})
@ApiResponse({
status: 200,
@@ -125,7 +131,7 @@ export class TonController {
properties: {
address: {
type: 'string',
- description: 'Wallet address'
+ description: 'Wallet address',
},
history: {
type: 'array',
@@ -137,12 +143,12 @@ export class TonController {
amount: { type: 'number' },
from: { type: 'string' },
to: { type: 'string' },
- timestamp: { type: 'number' }
- }
- }
- }
- }
- }
+ timestamp: { type: 'number' },
+ },
+ },
+ },
+ },
+ },
})
@ApiResponse({
status: 400,
@@ -152,10 +158,10 @@ export class TonController {
properties: {
error: {
type: 'string',
- description: 'Error description'
- }
- }
- }
+ description: 'Error description',
+ },
+ },
+ },
})
getTransactionHistory(
@Param('address') address: string,
@@ -173,9 +179,9 @@ export class TonController {
}
@Post('verify')
- @ApiOperation({
+ @ApiOperation({
summary: 'Verify TON transaction',
- description: 'Verifies TON transaction on blockchain'
+ description: 'Verifies TON transaction on blockchain',
})
@ApiBody({
description: 'Transaction verification data',
@@ -185,21 +191,21 @@ export class TonController {
txHash: {
type: 'string',
description: 'TON transaction hash',
- example: '0x1234567890abcdef...'
+ example: '0x1234567890abcdef...',
},
expectedAmount: {
type: 'number',
description: 'Expected transaction amount in TON',
- example: 5.0
+ example: 5.0,
},
expectedTo: {
type: 'string',
description: 'Expected recipient address',
- example: 'EQD0vdSA_NedR9uvnh85V0S_3Bd3XJgq8Y5k-1CLq8k5tOPi'
- }
+ example: 'EQD0vdSA_NedR9uvnh85V0S_3Bd3XJgq8Y5k-1CLq8k5tOPi',
+ },
},
- required: ['txHash', 'expectedAmount', 'expectedTo']
- }
+ required: ['txHash', 'expectedAmount', 'expectedTo'],
+ },
})
@ApiResponse({
status: 200,
@@ -210,14 +216,14 @@ export class TonController {
verified: {
type: 'boolean',
description: 'Whether transaction is verified',
- example: true
+ example: true,
},
txHash: {
type: 'string',
- description: 'Hash of verified transaction'
- }
- }
- }
+ description: 'Hash of verified transaction',
+ },
+ },
+ },
})
@ApiResponse({
status: 400,
@@ -227,10 +233,10 @@ export class TonController {
properties: {
error: {
type: 'string',
- description: 'Error description'
- }
- }
- }
+ description: 'Error description',
+ },
+ },
+ },
})
verifyTransaction(@Body() body: VerifyTransactionDto) {
try {
@@ -248,9 +254,9 @@ export class TonController {
}
@Post('wallet/create')
- @ApiOperation({
+ @ApiOperation({
summary: 'Create new TON wallet',
- description: 'Creates a new TON wallet (for demonstration)'
+ description: 'Creates a new TON wallet (for demonstration)',
})
@ApiResponse({
status: 201,
@@ -261,18 +267,18 @@ export class TonController {
address: {
type: 'string',
description: 'Address of new wallet',
- example: 'EQD0vdSA_NedR9uvnh85V0S_3Bd3XJgq8Y5k-1CLq8k5tOPi'
+ example: 'EQD0vdSA_NedR9uvnh85V0S_3Bd3XJgq8Y5k-1CLq8k5tOPi',
},
mnemonic: {
type: 'array',
description: 'Mnemonic phrase for wallet recovery',
items: {
- type: 'string'
+ type: 'string',
},
- example: ['word1', 'word2', 'word3', '...']
- }
- }
- }
+ example: ['word1', 'word2', 'word3', '...'],
+ },
+ },
+ },
})
@ApiResponse({
status: 400,
@@ -282,10 +288,10 @@ export class TonController {
properties: {
error: {
type: 'string',
- description: 'Error description'
- }
- }
- }
+ description: 'Error description',
+ },
+ },
+ },
})
createWallet() {
try {
@@ -297,4 +303,4 @@ export class TonController {
};
}
}
-}
\ No newline at end of file
+}
diff --git a/server/src/ton/ton.service.ts b/server/src/ton/ton.service.ts
index 666d731..ce6c8a2 100644
--- a/server/src/ton/ton.service.ts
+++ b/server/src/ton/ton.service.ts
@@ -167,14 +167,24 @@ export class TonService {
async getWalletPublicKey(address: string): Promise {
try {
console.log(`[TonService] Getting public key for address: ${address}`);
-
+
const parsedAddress = Address.parse(address);
- const result = await this.tonClient.runMethod(parsedAddress, 'get_public_key', []);
- const publicKey = Buffer.from(result.stack.readBigNumber().toString(16).padStart(64, '0'), 'hex');
-
+ const result = await this.tonClient.runMethod(
+ parsedAddress,
+ 'get_public_key',
+ [],
+ );
+ const publicKey = Buffer.from(
+ result.stack.readBigNumber().toString(16).padStart(64, '0'),
+ 'hex',
+ );
+
return publicKey;
} catch (error) {
- console.error(`[TonService] Error getting public key for ${address}:`, error);
+ console.error(
+ `[TonService] Error getting public key for ${address}:`,
+ error,
+ );
return null;
}
}
diff --git a/server/src/transactions/transactions.controller.ts b/server/src/transactions/transactions.controller.ts
index 0950346..4652077 100644
--- a/server/src/transactions/transactions.controller.ts
+++ b/server/src/transactions/transactions.controller.ts
@@ -1,5 +1,20 @@
-import { Controller, Get, Post, Body, Param, Put, UseGuards } from '@nestjs/common';
-import { ApiTags, ApiOperation, ApiResponse, ApiBearerAuth, ApiParam, ApiBody } from '@nestjs/swagger';
+import {
+ Controller,
+ Get,
+ Post,
+ Body,
+ Param,
+ Put,
+ UseGuards,
+} from '@nestjs/common';
+import {
+ ApiTags,
+ ApiOperation,
+ ApiResponse,
+ ApiBearerAuth,
+ ApiParam,
+ ApiBody,
+} from '@nestjs/swagger';
import {
TransactionsService,
Transaction,
@@ -17,9 +32,9 @@ export class TransactionsController {
@Post()
@UseGuards(JwtAuthGuard)
@ApiBearerAuth('JWT-auth')
- @ApiOperation({
+ @ApiOperation({
summary: 'Create new transaction',
- description: 'Creates a new transaction for the current user'
+ description: 'Creates a new transaction for the current user',
})
@ApiBody({
description: 'Transaction creation data',
@@ -30,16 +45,16 @@ export class TransactionsController {
type: 'string',
enum: ['DEPOSIT', 'WITHDRAWAL', 'GAME_BET', 'GAME_WIN'],
description: 'Transaction type',
- example: 'DEPOSIT'
+ example: 'DEPOSIT',
},
amount: {
type: 'number',
description: 'Transaction amount in TON',
- example: 5.0
- }
+ example: 5.0,
+ },
},
- required: ['type', 'amount']
- }
+ required: ['type', 'amount'],
+ },
})
@ApiResponse({
status: 201,
@@ -49,14 +64,17 @@ export class TransactionsController {
properties: {
id: { type: 'string' },
userId: { type: 'string' },
- type: { type: 'string', enum: ['DEPOSIT', 'WITHDRAWAL', 'GAME_BET', 'GAME_WIN'] },
+ type: {
+ type: 'string',
+ enum: ['DEPOSIT', 'WITHDRAWAL', 'GAME_BET', 'GAME_WIN'],
+ },
amount: { type: 'number' },
status: { type: 'string', enum: ['PENDING', 'COMPLETED', 'FAILED'] },
txHash: { type: 'string' },
createdAt: { type: 'string', format: 'date-time' },
- updatedAt: { type: 'string', format: 'date-time' }
- }
- }
+ updatedAt: { type: 'string', format: 'date-time' },
+ },
+ },
})
@ApiResponse({ status: 401, description: 'Unauthorized' })
@ApiResponse({ status: 400, description: 'Invalid request data' })
@@ -70,9 +88,10 @@ export class TransactionsController {
}
@Get()
- @ApiOperation({
+ @ApiOperation({
summary: 'Get all transactions',
- description: 'Returns list of all transactions (in real app should have pagination)'
+ description:
+ 'Returns list of all transactions (in real app should have pagination)',
})
@ApiResponse({
status: 200,
@@ -84,15 +103,18 @@ export class TransactionsController {
properties: {
id: { type: 'string' },
userId: { type: 'string' },
- type: { type: 'string', enum: ['DEPOSIT', 'WITHDRAWAL', 'GAME_BET', 'GAME_WIN'] },
+ type: {
+ type: 'string',
+ enum: ['DEPOSIT', 'WITHDRAWAL', 'GAME_BET', 'GAME_WIN'],
+ },
amount: { type: 'number' },
status: { type: 'string', enum: ['PENDING', 'COMPLETED', 'FAILED'] },
txHash: { type: 'string' },
createdAt: { type: 'string', format: 'date-time' },
- updatedAt: { type: 'string', format: 'date-time' }
- }
- }
- }
+ updatedAt: { type: 'string', format: 'date-time' },
+ },
+ },
+ },
})
getAllTransactions(): Transaction[] {
// In real app should have pagination and filtering
@@ -100,14 +122,14 @@ export class TransactionsController {
}
@Get(':id')
- @ApiOperation({
+ @ApiOperation({
summary: 'Get transaction by ID',
- description: 'Returns transaction data by unique identifier'
+ description: 'Returns transaction data by unique identifier',
})
@ApiParam({
name: 'id',
description: 'Unique transaction identifier',
- example: 'tx_abc123def'
+ example: 'tx_abc123def',
})
@ApiResponse({
status: 200,
@@ -117,14 +139,17 @@ export class TransactionsController {
properties: {
id: { type: 'string' },
userId: { type: 'string' },
- type: { type: 'string', enum: ['DEPOSIT', 'WITHDRAWAL', 'GAME_BET', 'GAME_WIN'] },
+ type: {
+ type: 'string',
+ enum: ['DEPOSIT', 'WITHDRAWAL', 'GAME_BET', 'GAME_WIN'],
+ },
amount: { type: 'number' },
status: { type: 'string', enum: ['PENDING', 'COMPLETED', 'FAILED'] },
txHash: { type: 'string' },
createdAt: { type: 'string', format: 'date-time' },
- updatedAt: { type: 'string', format: 'date-time' }
- }
- }
+ updatedAt: { type: 'string', format: 'date-time' },
+ },
+ },
})
@ApiResponse({ status: 404, description: 'Transaction not found' })
getTransactionById(@Param('id') id: string): Transaction | null {
@@ -134,14 +159,15 @@ export class TransactionsController {
@Get('user/:userId')
@UseGuards(JwtAuthGuard)
@ApiBearerAuth('JWT-auth')
- @ApiOperation({
+ @ApiOperation({
summary: 'Get user transactions',
- description: 'Returns list of transactions for specific user (only own transactions)'
+ description:
+ 'Returns list of transactions for specific user (only own transactions)',
})
@ApiParam({
name: 'userId',
description: 'User ID',
- example: 'abc123def'
+ example: 'abc123def',
})
@ApiResponse({
status: 200,
@@ -153,18 +179,24 @@ export class TransactionsController {
properties: {
id: { type: 'string' },
userId: { type: 'string' },
- type: { type: 'string', enum: ['DEPOSIT', 'WITHDRAWAL', 'GAME_BET', 'GAME_WIN'] },
+ type: {
+ type: 'string',
+ enum: ['DEPOSIT', 'WITHDRAWAL', 'GAME_BET', 'GAME_WIN'],
+ },
amount: { type: 'number' },
status: { type: 'string', enum: ['PENDING', 'COMPLETED', 'FAILED'] },
txHash: { type: 'string' },
createdAt: { type: 'string', format: 'date-time' },
- updatedAt: { type: 'string', format: 'date-time' }
- }
- }
- }
+ updatedAt: { type: 'string', format: 'date-time' },
+ },
+ },
+ },
})
@ApiResponse({ status: 401, description: 'Unauthorized' })
- @ApiResponse({ status: 403, description: 'No permission to view this user transactions' })
+ @ApiResponse({
+ status: 403,
+ description: 'No permission to view this user transactions',
+ })
getUserTransactions(
@Param('userId') userId: string,
@CurrentUser() currentUser: User,
@@ -177,14 +209,14 @@ export class TransactionsController {
}
@Put(':id/status')
- @ApiOperation({
+ @ApiOperation({
summary: 'Update transaction status',
- description: 'Updates transaction status (usually used by system)'
+ description: 'Updates transaction status (usually used by system)',
})
@ApiParam({
name: 'id',
description: 'Transaction ID',
- example: 'tx_abc123def'
+ example: 'tx_abc123def',
})
@ApiBody({
description: 'New transaction status',
@@ -195,20 +227,20 @@ export class TransactionsController {
type: 'string',
enum: ['PENDING', 'COMPLETED', 'FAILED'],
description: 'New transaction status',
- example: 'COMPLETED'
+ example: 'COMPLETED',
},
txHash: {
type: 'string',
description: 'TON transaction hash (optional)',
- example: '0x1234567890abcdef...'
- }
+ example: '0x1234567890abcdef...',
+ },
},
- required: ['status']
- }
+ required: ['status'],
+ },
})
@ApiResponse({
status: 200,
- description: 'Transaction status successfully updated'
+ description: 'Transaction status successfully updated',
})
@ApiResponse({ status: 404, description: 'Transaction not found' })
updateTransactionStatus(
@@ -225,9 +257,9 @@ export class TransactionsController {
@Post('verify-ton')
@UseGuards(JwtAuthGuard)
@ApiBearerAuth('JWT-auth')
- @ApiOperation({
+ @ApiOperation({
summary: 'Verify TON transaction',
- description: 'Verifies TON transaction on blockchain'
+ description: 'Verifies TON transaction on blockchain',
})
@ApiBody({
description: 'TON transaction verification data',
@@ -237,21 +269,21 @@ export class TransactionsController {
txHash: {
type: 'string',
description: 'TON transaction hash',
- example: '0x1234567890abcdef...'
+ example: '0x1234567890abcdef...',
},
expectedAmount: {
type: 'number',
description: 'Expected transaction amount in TON',
- example: 5.0
+ example: 5.0,
},
expectedTo: {
type: 'string',
description: 'Expected recipient address',
- example: 'EQD0vdSA_NedR9uvnh85V0S_3Bd3XJgq8Y5k-1CLq8k5tOPi'
- }
+ example: 'EQD0vdSA_NedR9uvnh85V0S_3Bd3XJgq8Y5k-1CLq8k5tOPi',
+ },
},
- required: ['txHash', 'expectedAmount', 'expectedTo']
- }
+ required: ['txHash', 'expectedAmount', 'expectedTo'],
+ },
})
@ApiResponse({
status: 200,
@@ -262,10 +294,10 @@ export class TransactionsController {
verified: {
type: 'boolean',
description: 'Whether transaction is verified',
- example: true
- }
- }
- }
+ example: true,
+ },
+ },
+ },
})
@ApiResponse({ status: 401, description: 'Unauthorized' })
@ApiResponse({ status: 400, description: 'Invalid request data' })
@@ -284,4 +316,4 @@ export class TransactionsController {
);
return { verified };
}
-}
\ No newline at end of file
+}
diff --git a/server/src/transactions/transactions.service.ts b/server/src/transactions/transactions.service.ts
index b1b78e3..85b603e 100644
--- a/server/src/transactions/transactions.service.ts
+++ b/server/src/transactions/transactions.service.ts
@@ -6,7 +6,12 @@ import { TonService } from '../ton/ton.service';
export interface GameLog {
id: string;
userId: string;
- action: 'GAME_CREATED' | 'GAME_JOINED' | 'GAME_FINISHED' | 'ACHIEVEMENT_UNLOCKED' | 'LEVEL_UP';
+ action:
+ | 'GAME_CREATED'
+ | 'GAME_JOINED'
+ | 'GAME_FINISHED'
+ | 'ACHIEVEMENT_UNLOCKED'
+ | 'LEVEL_UP';
gameId?: string;
details: Record; // Дополнительные данные
createdAt: Date;
@@ -24,13 +29,9 @@ export class GameLogService {
private readonly logger = new Logger(GameLogService.name);
private gameLogs: Map = new Map();
- constructor(
- private readonly usersService: UsersService,
- ) {}
+ constructor(private readonly usersService: UsersService) {}
- async createGameLog(
- createGameLogDto: CreateGameLogDto,
- ): Promise {
+ async createGameLog(createGameLogDto: CreateGameLogDto): Promise {
const gameLog: GameLog = {
id: this.generateId(),
userId: createGameLogDto.userId,
@@ -41,7 +42,9 @@ export class GameLogService {
};
this.gameLogs.set(gameLog.id, gameLog);
- this.logger.log(`Game log created: ${gameLog.action} for user ${gameLog.userId}`);
+ this.logger.log(
+ `Game log created: ${gameLog.action} for user ${gameLog.userId}`,
+ );
return gameLog;
}
@@ -63,12 +66,17 @@ export class GameLogService {
}
// Игровые события
- async logGameCreated(userId: string, gameId: string, betAmount: number, currency: string): Promise {
+ async logGameCreated(
+ userId: string,
+ gameId: string,
+ betAmount: number,
+ currency: string,
+ ): Promise {
return this.createGameLog({
userId,
action: 'GAME_CREATED',
gameId,
- details: { betAmount, currency }
+ details: { betAmount, currency },
});
}
@@ -76,24 +84,32 @@ export class GameLogService {
return this.createGameLog({
userId,
action: 'GAME_JOINED',
- gameId
+ gameId,
});
}
- async logGameFinished(userId: string, gameId: string, won: boolean, duration: number): Promise {
+ async logGameFinished(
+ userId: string,
+ gameId: string,
+ won: boolean,
+ duration: number,
+ ): Promise {
return this.createGameLog({
userId,
action: 'GAME_FINISHED',
gameId,
- details: { won, duration }
+ details: { won, duration },
});
}
- async logAchievementUnlocked(userId: string, achievement: string): Promise {
+ async logAchievementUnlocked(
+ userId: string,
+ achievement: string,
+ ): Promise {
return this.createGameLog({
userId,
action: 'ACHIEVEMENT_UNLOCKED',
- details: { achievement }
+ details: { achievement },
});
}
@@ -101,7 +117,7 @@ export class GameLogService {
return this.createGameLog({
userId,
action: 'LEVEL_UP',
- details: { newLevel }
+ details: { newLevel },
});
}
diff --git a/server/src/types/ton.types.ts b/server/src/types/ton.types.ts
index 49eb3d2..8e1e2e2 100644
--- a/server/src/types/ton.types.ts
+++ b/server/src/types/ton.types.ts
@@ -1,14 +1,14 @@
export interface Account {
address: string;
publicKey: string;
- chain: string; // Added chain field
+ chain: string; // Added chain field
walletStateInit?: string; // Made optional
}
export interface TonProof {
proof: {
timestamp: number;
- domain: string; // Changed from object to string
+ domain: string; // Changed from object to string
payload: string;
signature: string;
};
@@ -24,4 +24,4 @@ export interface VerifyProofRequest {
account: Account;
tonProof: TonProof;
clientId: string;
-}
\ No newline at end of file
+}
diff --git a/server/src/users/users.controller.ts b/server/src/users/users.controller.ts
index e3481c5..626df69 100644
--- a/server/src/users/users.controller.ts
+++ b/server/src/users/users.controller.ts
@@ -1,5 +1,20 @@
-import { Controller, Get, Post, Body, Param, Put, UseGuards } from '@nestjs/common';
-import { ApiTags, ApiOperation, ApiResponse, ApiBearerAuth, ApiParam, ApiBody } from '@nestjs/swagger';
+import {
+ Controller,
+ Get,
+ Post,
+ Body,
+ Param,
+ Put,
+ UseGuards,
+} from '@nestjs/common';
+import {
+ ApiTags,
+ ApiOperation,
+ ApiResponse,
+ ApiBearerAuth,
+ ApiParam,
+ ApiBody,
+} from '@nestjs/swagger';
import { UsersService, User } from './users.service';
import { JwtAuthGuard } from '../auth/jwt-auth.guard';
import { CurrentUser } from '../auth/current-user.decorator';
@@ -27,9 +42,9 @@ export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Post()
- @ApiOperation({
+ @ApiOperation({
summary: 'Create new user',
- description: 'Creates a new user with the specified wallet address'
+ description: 'Creates a new user with the specified wallet address',
})
@ApiBody({
description: 'User creation data',
@@ -39,21 +54,21 @@ export class UsersController {
walletAddress: {
type: 'string',
description: 'TON wallet address',
- example: 'EQD0vdSA_NedR9uvnh85V0S_3Bd3XJgq8Y5k-1CLq8k5tOPi'
+ example: 'EQD0vdSA_NedR9uvnh85V0S_3Bd3XJgq8Y5k-1CLq8k5tOPi',
},
username: {
type: 'string',
description: 'Username (optional)',
- example: 'Player1'
+ example: 'Player1',
},
avatar: {
type: 'string',
description: 'Avatar URL (optional)',
- example: 'https://example.com/avatar.jpg'
- }
+ example: 'https://example.com/avatar.jpg',
+ },
},
- required: ['walletAddress']
- }
+ required: ['walletAddress'],
+ },
})
@ApiResponse({
status: 201,
@@ -77,9 +92,9 @@ export class UsersController {
loses: { type: 'number' },
winrate: { type: 'number' },
createdAt: { type: 'string', format: 'date-time' },
- updatedAt: { type: 'string', format: 'date-time' }
- }
- }
+ updatedAt: { type: 'string', format: 'date-time' },
+ },
+ },
})
@ApiResponse({ status: 400, description: 'Invalid request data' })
createUser(@Body() createUserDto: CreateUserDto): User {
@@ -93,9 +108,9 @@ export class UsersController {
@Get()
@UseGuards(JwtAuthGuard)
@ApiBearerAuth('JWT-auth')
- @ApiOperation({
+ @ApiOperation({
summary: 'Get all users',
- description: 'Returns list of all users (requires authentication)'
+ description: 'Returns list of all users (requires authentication)',
})
@ApiResponse({
status: 200,
@@ -110,21 +125,21 @@ export class UsersController {
username: { type: 'string' },
avatar: { type: 'string' },
// balance удален - теперь в смарт-контракте
- currentStreak: { type: 'number' },
- bestStreak: { type: 'number' },
- level: { type: 'number' },
- experience: { type: 'number' },
- friends: { type: 'array', items: { type: 'string' } },
- achievements: { type: 'array', items: { type: 'string' } },
+ currentStreak: { type: 'number' },
+ bestStreak: { type: 'number' },
+ level: { type: 'number' },
+ experience: { type: 'number' },
+ friends: { type: 'array', items: { type: 'string' } },
+ achievements: { type: 'array', items: { type: 'string' } },
games: { type: 'number' },
wins: { type: 'number' },
loses: { type: 'number' },
winrate: { type: 'number' },
createdAt: { type: 'string', format: 'date-time' },
- updatedAt: { type: 'string', format: 'date-time' }
- }
- }
- }
+ updatedAt: { type: 'string', format: 'date-time' },
+ },
+ },
+ },
})
@ApiResponse({ status: 401, description: 'Unauthorized' })
getAllUsers(): User[] {
@@ -132,14 +147,14 @@ export class UsersController {
}
@Get(':id')
- @ApiOperation({
+ @ApiOperation({
summary: 'Get user by ID',
- description: 'Returns user data by unique identifier'
+ description: 'Returns user data by unique identifier',
})
@ApiParam({
name: 'id',
description: 'Unique user identifier',
- example: 'abc123def'
+ example: 'abc123def',
})
@ApiResponse({
status: 200,
@@ -163,9 +178,9 @@ export class UsersController {
loses: { type: 'number' },
winrate: { type: 'number' },
createdAt: { type: 'string', format: 'date-time' },
- updatedAt: { type: 'string', format: 'date-time' }
- }
- }
+ updatedAt: { type: 'string', format: 'date-time' },
+ },
+ },
})
@ApiResponse({ status: 404, description: 'User not found' })
getUserById(@Param('id') id: string): User | null {
@@ -173,14 +188,14 @@ export class UsersController {
}
@Get('wallet/:address')
- @ApiOperation({
+ @ApiOperation({
summary: 'Get user by wallet address',
- description: 'Returns user data by TON wallet address'
+ description: 'Returns user data by TON wallet address',
})
@ApiParam({
name: 'address',
description: 'TON wallet address',
- example: 'EQD0vdSA_NedR9uvnh85V0S_3Bd3XJgq8Y5k-1CLq8k5tOPi'
+ example: 'EQD0vdSA_NedR9uvnh85V0S_3Bd3XJgq8Y5k-1CLq8k5tOPi',
})
@ApiResponse({
status: 200,
@@ -204,9 +219,9 @@ export class UsersController {
loses: { type: 'number' },
winrate: { type: 'number' },
createdAt: { type: 'string', format: 'date-time' },
- updatedAt: { type: 'string', format: 'date-time' }
- }
- }
+ updatedAt: { type: 'string', format: 'date-time' },
+ },
+ },
})
@ApiResponse({ status: 404, description: 'User not found' })
getUserByWalletAddress(@Param('address') address: string): User | null {
@@ -218,14 +233,14 @@ export class UsersController {
@Put(':id/profile')
@UseGuards(JwtAuthGuard)
@ApiBearerAuth('JWT-auth')
- @ApiOperation({
+ @ApiOperation({
summary: 'Update user profile',
- description: 'Updates username and/or avatar (only for own account)'
+ description: 'Updates username and/or avatar (only for own account)',
})
@ApiParam({
name: 'id',
description: 'User ID',
- example: 'abc123def'
+ example: 'abc123def',
})
@ApiBody({
description: 'Profile update data',
@@ -235,22 +250,25 @@ export class UsersController {
username: {
type: 'string',
description: 'New username (optional)',
- example: 'NewPlayerName'
+ example: 'NewPlayerName',
},
avatar: {
type: 'string',
description: 'New avatar URL (optional)',
- example: 'https://example.com/new-avatar.jpg'
- }
- }
- }
+ example: 'https://example.com/new-avatar.jpg',
+ },
+ },
+ },
})
@ApiResponse({
status: 200,
- description: 'Profile successfully updated'
+ description: 'Profile successfully updated',
})
@ApiResponse({ status: 401, description: 'Unauthorized' })
- @ApiResponse({ status: 403, description: 'No permission to update this user' })
+ @ApiResponse({
+ status: 403,
+ description: 'No permission to update this user',
+ })
@ApiResponse({ status: 404, description: 'User not found' })
updateUserProfile(
@Param('id') id: string,
@@ -271,14 +289,14 @@ export class UsersController {
@Put(':id/stats')
@UseGuards(JwtAuthGuard)
@ApiBearerAuth('JWT-auth')
- @ApiOperation({
+ @ApiOperation({
summary: 'Update game statistics',
- description: 'Updates user game statistics (only for own account)'
+ description: 'Updates user game statistics (only for own account)',
})
@ApiParam({
name: 'id',
description: 'User ID',
- example: 'abc123def'
+ example: 'abc123def',
})
@ApiBody({
description: 'Game result',
@@ -288,18 +306,21 @@ export class UsersController {
won: {
type: 'boolean',
description: 'Whether the user won the game',
- example: true
- }
+ example: true,
+ },
},
- required: ['won']
- }
+ required: ['won'],
+ },
})
@ApiResponse({
status: 200,
- description: 'Statistics successfully updated'
+ description: 'Statistics successfully updated',
})
@ApiResponse({ status: 401, description: 'Unauthorized' })
- @ApiResponse({ status: 403, description: 'No permission to update this user' })
+ @ApiResponse({
+ status: 403,
+ description: 'No permission to update this user',
+ })
@ApiResponse({ status: 404, description: 'User not found' })
updateUserStats(
@Param('id') id: string,
@@ -312,4 +333,4 @@ export class UsersController {
}
return this.usersService.updateUserStats(id, updateStatsDto.won);
}
-}
\ No newline at end of file
+}
diff --git a/server/src/users/users.service.ts b/server/src/users/users.service.ts
index dbd0a02..8a670fe 100644
--- a/server/src/users/users.service.ts
+++ b/server/src/users/users.service.ts
@@ -89,22 +89,26 @@ export class UsersService {
// Даем опыт за поражение
user.experience += 25;
}
-
+
user.winrate = user.games > 0 ? user.wins / user.games : 0;
-
+
// Проверяем повышение уровня
const newLevel = Math.floor(user.experience / 1000) + 1;
if (newLevel > user.level) {
user.level = newLevel;
// Можно добавить уведомление о повышении уровня
}
-
+
user.updatedAt = new Date();
this.users.set(id, user);
return user;
}
- updateUserProfile(id: string, username?: string, avatar?: string): User | null {
+ updateUserProfile(
+ id: string,
+ username?: string,
+ avatar?: string,
+ ): User | null {
const user = this.users.get(id);
if (!user) return null;