Files
telegram-shop/gitea-main.json
2026-08-05 18:48:25 +00:00

59 lines
140 KiB
JSON
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"code": 200,
"data": {
"description": "telegram-shop",
"external": {
"alternate": {
"https://git.softuniq.eu/Telegram-Market/telegram-shop.atom": {
"title": "",
"type": "application/atom+xml"
},
"https://git.softuniq.eu/Telegram-Market/telegram-shop.rss": {
"title": "",
"type": "application/rss+xml"
},
"https://git.softuniq.eu/assets/img/favicon.png": {
"type": "image/png"
}
},
"icon": {
"https://git.softuniq.eu/assets/img/favicon.png": {
"type": "image/png"
},
"https://git.softuniq.eu/assets/img/favicon.svg": {
"type": "image/svg+xml"
}
},
"manifest": {
"data:application/json;base64,eyJuYW1lIjoiR2l0ZWE6IEdpdCB3aXRoIGEgY3VwIG9mIHRlYSIsInNob3J0X25hbWUiOiJHaXRlYTogR2l0IHdpdGggYSBjdXAgb2YgdGVhIiwic3RhcnRfdXJsIjoiaHR0cDovL2dpdC5zb2Z0dW5pcS5ldS8iLCJpY29ucyI6W3sic3JjIjoiaHR0cDovL2dpdC5zb2Z0dW5pcS5ldS9hc3NldHMvaW1nL2xvZ28ucG5nIiwidHlwZSI6ImltYWdlL3BuZyIsInNpemVzIjoiNTEyeDUxMiJ9LHsic3JjIjoiaHR0cDovL2dpdC5zb2Z0dW5pcS5ldS9hc3NldHMvaW1nL2xvZ28uc3ZnIiwidHlwZSI6ImltYWdlL3N2Zyt4bWwiLCJzaXplcyI6IjUxMng1MTIifV19": {}
}
},
"html": "<html lang=\"en-US\" data-theme=\"gitea-auto\"><head>\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\t<title>Telegram-Market/telegram-shop - telegram-shop - Gitea: Git with a cup of tea</title>\n\t<link rel=\"manifest\" href=\"data:application/json;base64,eyJuYW1lIjoiR2l0ZWE6IEdpdCB3aXRoIGEgY3VwIG9mIHRlYSIsInNob3J0X25hbWUiOiJHaXRlYTogR2l0IHdpdGggYSBjdXAgb2YgdGVhIiwic3RhcnRfdXJsIjoiaHR0cDovL2dpdC5zb2Z0dW5pcS5ldS8iLCJpY29ucyI6W3sic3JjIjoiaHR0cDovL2dpdC5zb2Z0dW5pcS5ldS9hc3NldHMvaW1nL2xvZ28ucG5nIiwidHlwZSI6ImltYWdlL3BuZyIsInNpemVzIjoiNTEyeDUxMiJ9LHsic3JjIjoiaHR0cDovL2dpdC5zb2Z0dW5pcS5ldS9hc3NldHMvaW1nL2xvZ28uc3ZnIiwidHlwZSI6ImltYWdlL3N2Zyt4bWwiLCJzaXplcyI6IjUxMng1MTIifV19\">\n\t<meta name=\"author\" content=\"Telegram-Market\">\n\t<meta name=\"description\" content=\"telegram-shop\">\n\t<meta name=\"keywords\" content=\"go,git,self-hosted,gitea\">\n\t<meta name=\"referrer\" content=\"no-referrer\">\n\n\n\t<link rel=\"alternate\" type=\"application/atom+xml\" title=\"\" href=\"/Telegram-Market/telegram-shop.atom\">\n\t<link rel=\"alternate\" type=\"application/rss+xml\" title=\"\" href=\"/Telegram-Market/telegram-shop.rss\">\n\n\t<link rel=\"icon\" href=\"/assets/img/favicon.svg\" type=\"image/svg+xml\">\n\t<link rel=\"alternate icon\" href=\"/assets/img/favicon.png\" type=\"image/png\">\n\t\n\t\n\t\t<meta property=\"og:title\" content=\"telegram-shop\">\n\t\t<meta property=\"og:url\" content=\"https://git.softuniq.eu/Telegram-Market/telegram-shop\">\n\t\t\n\t\n\t<meta property=\"og:type\" content=\"object\">\n\t\n\t\t<meta property=\"og:image\" content=\"https://git.softuniq.eu/avatars/58dd88222670c696bec7a81cd0964d1b\">\n\t\n\n<meta property=\"og:site_name\" content=\"Gitea: Git with a cup of tea\">\n\n\t<link rel=\"stylesheet\" href=\"/assets/css/index.css?v=1.25.4\">\n<link rel=\"stylesheet\" href=\"/assets/css/theme-gitea-auto.css?v=1.25.4\">\n\n\t\n<script>\n\t\n\twindow.addEventListener('error', function(e) {window._globalHandlerErrors=window._globalHandlerErrors||[]; window._globalHandlerErrors.push(e);});\n\twindow.addEventListener('unhandledrejection', function(e) {window._globalHandlerErrors=window._globalHandlerErrors||[]; window._globalHandlerErrors.push(e);});\n\twindow.config = {\n\t\tappUrl: 'http:\\/\\/git.softuniq.eu\\/',\n\t\tappSubUrl: '',\n\t\tassetVersionEncoded: encodeURIComponent('1.25.4'), \n\t\tassetUrlPrefix: '\\/assets',\n\t\trunModeIsProd: true ,\n\t\tcustomEmojis: {\"codeberg\":\":codeberg:\",\"git\":\":git:\",\"gitea\":\":gitea:\",\"github\":\":github:\",\"gitlab\":\":gitlab:\",\"gogs\":\":gogs:\"},\n\t\tcsrfToken: 'HwDhzaLd33Y-hbQznILy7HwrLEQ6MTc4NTkzMjg0Njg0ODIyOTAxMw',\n\t\tpageData: {},\n\t\tnotificationSettings: {\"EventSourceUpdateTime\":10000,\"MaxTimeout\":60000,\"MinTimeout\":10000,\"TimeoutStep\":10000}, \n\t\tenableTimeTracking: true ,\n\t\t\n\t\tmermaidMaxSourceCharacters: 50000 ,\n\t\t\n\t\ti18n: {\n\t\t\tcopy_success: \"Copied!\",\n\t\t\tcopy_error: \"Copy failed\",\n\t\t\terror_occurred: \"An error occurred\",\n\t\t\tremove_label_str: \"Remove item \\\"%s\\\"\",\n\t\t\tmodal_confirm: \"Confirm\",\n\t\t\tmodal_cancel: \"Cancel\",\n\t\t\tmore_items: \"More items\",\n\t\t},\n\t};\n\t\n\twindow.config.pageData = window.config.pageData || {};\n</script>\n<script src=\"/assets/js/index.js?v=1.25.4\" onerror=\"alert('Failed to load asset files from ' + this.src + '. Please make sure the asset files can be accessed.')\"></script>\n\n\t\n<style>.htmx-indicator{opacity:0;visibility: hidden} .htmx-request .htmx-indicator, .htmx-request.htmx-indicator{opacity:1;visibility: visible;transition: opacity 200ms ease-in}</style><link rel=\"stylesheet\" type=\"text/css\" href=\"/assets/css/index-domready.3e022997.css\"></head>\n<body hx-headers=\"{&quot;x-csrf-token&quot;: &quot;HwDhzaLd33Y-hbQznILy7HwrLEQ6MTc4NTkzMjg0Njg0ODIyOTAxMw&quot;}\" hx-swap=\"outerHTML\" hx-ext=\"morph\" hx-push-url=\"false\">\n\t\n\n\t<div class=\"full height\">\n\t\t<noscript>This website requires JavaScript.</noscript>\n\n\t\t\n\n\t\t\n\t\t\t<nav id=\"navbar\" aria-label=\"Navigation Bar\">\n\t<div class=\"navbar-left\">\n\t\t\n\t\t<a class=\"item\" id=\"navbar-logo\" href=\"/\" aria-label=\"Home\">\n\t\t\t<img width=\"30\" height=\"30\" src=\"/assets/img/logo.svg\" alt=\"Logo\" aria-hidden=\"true\">\n\t\t</a>\n\n\t\t\n\t\t<div class=\"ui secondary menu navbar-mobile-right only-mobile\">\n\t\t\t\n\n\t\t\t<button class=\"item ui icon mini button tw-m-0\" id=\"navbar-expand-toggle\" aria-label=\"Navigation Menu\"><svg viewBox=\"0 0 16 16\" class=\"svg octicon-three-bars\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M1 2.75A.75.75 0 0 1 1.75 2h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 2.75m0 5A.75.75 0 0 1 1.75 7h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 7.75M1.75 12h12.5a.75.75 0 0 1 0 1.5H1.75a.75.75 0 0 1 0-1.5\"></path></svg></button>\n\t\t</div>\n\n\t\t\n\t\t\n\t\t\t<a class=\"item\" href=\"/explore/repos\">Explore</a>\n\t\t\n\n\t\t\n\n\t\t\n\t\t\t<a class=\"item\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://docs.gitea.com\">Help</a>\n\t\t\n\t</div>\n\n\t\n\t<div class=\"navbar-right\">\n\t\t\n\t\t\t\n\t\t\t<a class=\"item\" rel=\"nofollow\" href=\"/user/login?redirect_to=%2fTelegram-Market%2ftelegram-shop\">\n\t\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-sign-in\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M2 2.75C2 1.784 2.784 1 3.75 1h2.5a.75.75 0 0 1 0 1.5h-2.5a.25.25 0 0 0-.25.25v10.5c0 .138.112.25.25.25h2.5a.75.75 0 0 1 0 1.5h-2.5A1.75 1.75 0 0 1 2 13.25Zm6.56 4.5h5.69a.75.75 0 0 1 0 1.5H8.56l1.97 1.97a.749.749 0 0 1-.326 1.275.75.75 0 0 1-.734-.215L6.22 8.53a.75.75 0 0 1 0-1.06l3.25-3.25a.749.749 0 0 1 1.275.326.75.75 0 0 1-.215.734Z\"></path></svg>\n\t\t\t\t<span class=\"tw-ml-1\">Sign In</span>\n\t\t\t</a>\n\t\t\n\t</div>\n\n\t\n\t\n</nav>\n\n\t\t\n\n\n\n\n<div role=\"main\" aria-label=\"Telegram-Market/telegram-shop\" class=\"page-content repository file list \">\n\t<div class=\"secondary-nav\">\n\n\t<div class=\"ui container\">\n\t\t<div class=\"repo-header\">\n\t\t\t<div class=\"flex-item tw-items-center\">\n\t\t\t\t<div class=\"flex-item-leading\">\n\t\t\t\t\t\n\n\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-repo\" aria-hidden=\"true\" width=\"24\" height=\"24\"><path d=\"M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.5 2.5 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.5 2.5 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.25.25 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z\"></path></svg>\n\n\n\t\t\t\t</div>\n\t\t\t\t<div class=\"flex-item-main\">\n\t\t\t\t\t<div class=\"flex-item-title tw-text-18\">\n\t\t\t\t\t\t<a class=\"muted tw-font-normal\" href=\"/Telegram-Market\">Telegram-Market</a>/<a class=\"muted\" href=\"/Telegram-Market/telegram-shop\">telegram-shop</a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"flex-item-trailing\">\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\t<div class=\"flex-text-block tw-flex-wrap\">\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a class=\"ui compact small basic button\" href=\"/Telegram-Market/telegram-shop.rss\" data-tooltip-content=\"RSS Feed\" aria-label=\"RSS Feed\">\n\t\t\t\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-rss\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M2.002 2.725a.75.75 0 0 1 .797-.699C8.79 2.42 13.58 7.21 13.974 13.201a.75.75 0 0 1-1.497.098 10.5 10.5 0 0 0-9.776-9.776.747.747 0 0 1-.7-.798ZM2.84 7.05h-.002a7 7 0 0 1 6.113 6.111.75.75 0 0 1-1.49.178 5.5 5.5 0 0 0-4.8-4.8.75.75 0 0 1 .179-1.489M2 13a1 1 0 1 1 2 0 1 1 0 0 1-2 0\"></path></svg>\n\t\t\t\t\t</a>\n\t\t\t\t\t\n\t\t\t\t\t<form class=\"flex-text-inline\" hx-boost=\"true\" hx-target=\"this\" method=\"post\" action=\"/Telegram-Market/telegram-shop/action/watch\">\n\t<div class=\"ui labeled button\" data-tooltip-content=\"Sign in to watch this repository.\" aria-label=\"Sign in to watch this repository.\">\n\t\t\n\t\t\n\t\t<button type=\"submit\" class=\"ui compact small basic button\" disabled=\"\" aria-label=\"Watch\">\n\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-eye\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M8 2c1.981 0 3.671.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.62 1.62 0 0 1 0 1.798c-.45.678-1.367 1.932-2.637 3.023C11.67 13.008 9.981 14 8 14s-3.671-.992-4.933-2.078C1.797 10.83.88 9.576.43 8.898a1.62 1.62 0 0 1 0-1.798c.45-.677 1.367-1.931 2.637-3.022C4.33 2.992 6.019 2 8 2M1.679 7.932a.12.12 0 0 0 0 .136c.411.622 1.241 1.75 2.366 2.717C5.176 11.758 6.527 12.5 8 12.5s2.825-.742 3.955-1.715c1.124-.967 1.954-2.096 2.366-2.717a.12.12 0 0 0 0-.136c-.412-.621-1.242-1.75-2.366-2.717C10.824 4.242 9.473 3.5 8 3.5s-2.825.742-3.955 1.715c-1.124.967-1.954 2.096-2.366 2.717M8 10a2 2 0 1 1-.001-3.999A2 2 0 0 1 8 10\"></path></svg>\n\t\t\t<span class=\"not-mobile\" aria-hidden=\"true\">Watch</span>\n\t\t</button>\n\t\t<a hx-boost=\"false\" class=\"ui basic label\" href=\"/Telegram-Market/telegram-shop/watchers\">\n\t\t\t1\n\t\t</a>\n\t</div>\n</form>\n\n\t\t\t\t\t\n\t\t\t\t\t<form class=\"flex-text-inline\" hx-boost=\"true\" hx-target=\"this\" method=\"post\" action=\"/Telegram-Market/telegram-shop/action/star\">\n\t<div class=\"ui labeled button\" data-tooltip-content=\"Sign in to star this repository.\" aria-label=\"Sign in to star this repository.\">\n\t\t\n\t\t\n\t\t<button type=\"submit\" class=\"ui compact small basic button\" disabled=\"\" aria-label=\"Star\">\n\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-star\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25m0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41z\"></path></svg>\n\t\t\t<span class=\"not-mobile\" aria-hidden=\"true\">Star</span>\n\t\t</button>\n\t\t<a hx-boost=\"false\" class=\"ui basic label\" href=\"/Telegram-Market/telegram-shop/stars\">\n\t\t\t1\n\t\t</a>\n\t</div>\n</form>\n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<div class=\"ui labeled button\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t\" data-tooltip-content=\"Sign in to fork this repository.\" aria-label=\"Sign in to fork this repository.\">\n\t\t\t\t\t\t\t<a class=\"ui compact small basic button\">\n\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-repo-forked\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0M5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0m6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5m-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0\"></path></svg><span class=\"text not-mobile\">Fork</span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t<a class=\"ui basic label\" href=\"/Telegram-Market/telegram-shop/forks\">\n\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"ui small modal\" id=\"fork-repo-modal\">\n\t\t\t\t\t\t\t<div class=\"header\">\n\t\t\t\t\t\t\t\tYou've already forked telegram-shop\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"content tw-text-left\">\n\t\t\t\t\t\t\t\t<div class=\"ui list\">\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\n\t\t\t\t</div>\n\t\t\t\n\t\t</div>\n\t\t\n\t\t\n\t\t\n\t</div>\n\n\t<div class=\"ui container\">\n\t\t<overflow-menu class=\"ui secondary pointing menu\" role=\"navigation\">\n\t\t\t\n\t\t\t\t<div class=\"overflow-menu-items\">\n\t\t\t\t\t\n\t\t\t\t\t<a class=\"active item\" href=\"/Telegram-Market/telegram-shop\">\n\t\t\t\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-code\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.75.75 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.75.75 0 0 1 .734.215m-6.56 0a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.75.75 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z\"></path></svg><span class=\"resize-for-semibold\" data-text=\"Code\">Code</span></a>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"item\" href=\"/Telegram-Market/telegram-shop/issues\">\n\t\t\t\t\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-issue-opened\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3\"></path><path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0M1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0\"></path></svg><span class=\"resize-for-semibold\" data-text=\"Issues\">Issues</span><span class=\"ui small label\">43</span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"item\" href=\"/Telegram-Market/telegram-shop/pulls\">\n\t\t\t\t\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-git-pull-request\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25m5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354M3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5m0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5m8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0\"></path></svg><span class=\"resize-for-semibold\" data-text=\"Pull Requests\">Pull Requests</span></a>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"item\" href=\"/Telegram-Market/telegram-shop/actions\">\n\t\t\t\t\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-play\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0M1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0m4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215\"></path></svg><span class=\"resize-for-semibold\" data-text=\"Actions\">Actions</span></a>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/packages\" class=\"item\">\n\t\t\t\t\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-package\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0M7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.25.25 0 0 0-.25 0M2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z\"></path></svg><span class=\"resize-for-semibold\" data-text=\"Packages\">Packages</span></a>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/projects\" class=\"item\">\n\t\t\t\t\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-project\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0M1.5 1.75v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25M11.75 3a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-1.5 0v-7.5a.75.75 0 0 1 .75-.75m-8.25.75a.75.75 0 0 1 1.5 0v5.5a.75.75 0 0 1-1.5 0ZM8 3a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 3\"></path></svg><span class=\"resize-for-semibold\" data-text=\"Projects\">Projects</span><span class=\"ui small label\">1</span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t<a class=\"item\" href=\"/Telegram-Market/telegram-shop/releases\">\n\t\t\t\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-tag\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.75 1.75 0 0 1 1 7.775m1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2\"></path></svg><span class=\"resize-for-semibold\" data-text=\"Releases\">Releases</span></a>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"item\" href=\"/Telegram-Market/telegram-shop/wiki\">\n\t\t\t\t\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-book\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.74 3.74 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574M8.755 4.75l-.004 7.322a3.75 3.75 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25\"></path></svg><span class=\"resize-for-semibold\" data-text=\"Wiki\">Wiki</span></a>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"item\" href=\"/Telegram-Market/telegram-shop/activity\">\n\t\t\t\t\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-pulse\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M6 2c.306 0 .582.187.696.471L10 10.731l1.304-3.26A.75.75 0 0 1 12 7h3.25a.75.75 0 0 1 0 1.5h-2.742l-1.812 4.528a.751.751 0 0 1-1.392 0L6 4.77 4.696 8.03A.75.75 0 0 1 4 8.5H.75a.75.75 0 0 1 0-1.5h2.742l1.812-4.529A.75.75 0 0 1 6 2\"></path></svg><span class=\"resize-for-semibold\" data-text=\"Activity\">Activity</span></a>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t</div>\n\t\t\t\n\t\t</overflow-menu>\n\t</div>\n\t<div class=\"ui tabs divider\"></div>\n</div>\n\n\t<div class=\"ui container \">\n\t\t\n\n\t\t\n\n\t\t\n\n\n\n\n\t\t<div class=\"repo-grid-filelist-sidebar\">\n\t\t\t<div class=\"repo-home-filelist\">\n\t\t\t\t\n\n<div class=\"repo-view-content-data tw-hidden\" data-document-title=\"Telegram-Market/telegram-shop\" data-document-title-common=\"telegram-shop - Gitea: Git with a cup of tea\"></div>\n\n<div class=\"ui segments repository-summary tw-my-0\">\n\t<div class=\"ui segment sub-menu repository-menu\">\n\t\t\n\t\t\t<a class=\"item muted \" href=\"/Telegram-Market/telegram-shop/commits/branch/main\">\n\t\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-history\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177M7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.75.75 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4\"></path></svg> <b>207</b> Commits\n\t\t\t</a>\n\t\t\t<a class=\"item muted \" href=\"/Telegram-Market/telegram-shop/branches\">\n\t\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-git-branch\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.5 2.5 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25m-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0m8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5M4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5\"></path></svg> <b>9</b> Branches\n\t\t\t</a>\n\t\t\t\n\t\t\t\t<a class=\"item muted \" href=\"/Telegram-Market/telegram-shop/tags\">\n\t\t\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-tag\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.75 1.75 0 0 1 1 7.775m1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2\"></path></svg> <b>1</b> Tag\n\t\t\t\t</a>\n\t\t\t\n\t\t\n\t</div>\n</div>\n\n\n<div class=\"repo-button-row\">\n\t<div class=\"repo-button-row-left\">\n\t\n\n\t\n<div class=\"\" data-global-init=\"initRepoBranchTagSelector\" data-text-release-compare=\"Compare\" data-text-branches=\"Branches\" data-text-tags=\"Tags\" data-text-filter-branch=\"Filter branch\" data-text-filter-tag=\"Find tag\" data-text-default-branch-label=\"default\" data-text-create-tag=\"Create tag %s\" data-text-create-branch=\"Create branch %s\" data-text-create-ref-from=\"from &quot;%s&quot;\" data-text-no-results=\"No results found.\" data-text-view-all-branches=\"View all branches\" data-text-view-all-tags=\"View all tags\" data-current-repo-default-branch=\"main\" data-current-repo-link=\"/Telegram-Market/telegram-shop\" data-current-tree-path=\"\" data-current-ref-type=\"branch\" data-current-ref-short-name=\"main\" data-ref-link-template=\"{RepoLink}/src/{RefType}/{RefShortName}/{TreePath}\" data-ref-form-action-template=\"\" data-dropdown-fixed-text=\"\" data-show-tab-branches=\"true\" data-show-tab-tags=\"true\" data-allow-create-new-ref=\"false\" data-show-view-all-refs-entry=\"true\" data-enable-feed=\"true\" data-v-app=\"\"><div class=\"ui dropdown custom branch-selector-dropdown ellipsis-text-items\"><div tabindex=\"0\" class=\"ui compact button branch-dropdown-button\"><span class=\"flex-text-block gt-ellipsis\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" aria-hidden=\"true\" class=\"svg octicon-git-branch\"><path d=\"M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.5 2.5 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25m-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0m8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5M4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5\"></path></svg><strong class=\"tw-inline-block gt-ellipsis\">main</strong></span><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" aria-hidden=\"true\" class=\"svg octicon-triangle-down dropdown icon\"><path d=\"m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427\"></path></svg></div><div class=\"menu transition\" style=\"display: none;\"><div class=\"ui icon search input\"><i class=\"icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" aria-hidden=\"true\" class=\"svg octicon-filter\"><path d=\"M.75 3h14.5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1 0-1.5M3 7.75A.75.75 0 0 1 3.75 7h8.5a.75.75 0 0 1 0 1.5h-8.5A.75.75 0 0 1 3 7.75m3 4a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75\"></path></svg></i><input name=\"search\" autocomplete=\"off\" placeholder=\"Filter branch\"></div><div class=\"branch-tag-tab\"><a class=\"branch-tag-item muted active\" href=\"#\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" aria-hidden=\"true\" class=\"svg octicon-git-branch tw-mr-1\"><path d=\"M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.5 2.5 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25m-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0m8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5M4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5\"></path></svg>Branches</a><a class=\"branch-tag-item muted\" href=\"#\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" aria-hidden=\"true\" class=\"svg octicon-tag tw-mr-1\"><path d=\"M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.75 1.75 0 0 1 1 7.775m1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2\"></path></svg>Tags</a></div><div class=\"branch-tag-divider\"></div><div class=\"scrolling menu\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" aria-hidden=\"true\" class=\"svg octicon-rss tw-hidden svg-symbol-container\"><symbol id=\"svg-symbol-octicon-rss\" viewBox=\"0 0 16 16\"><path d=\"M2.002 2.725a.75.75 0 0 1 .797-.699C8.79 2.42 13.58 7.21 13.974 13.201a.75.75 0 0 1-1.497.098 10.5 10.5 0 0 0-9.776-9.776.747.747 0 0 1-.7-.798ZM2.84 7.05h-.002a7 7 0 0 1 6.113 6.111.75.75 0 0 1-1.49.178 5.5 5.5 0 0 0-4.8-4.8.75.75 0 0 1 .179-1.489M2 13a1 1 0 1 1 2 0 1 1 0 0 1-2 0\"></path></symbol></svg><!--v-if--><!--v-if--></div><!--v-if--><div class=\"divider tw-m-0\"></div><a class=\"item\" href=\"/Telegram-Market/telegram-shop/branches\">View all branches</a><!--v-if--></div></div></div>\n\n\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t<a id=\"new-pull-request\" role=\"button\" class=\"ui compact basic button\" href=\"/Telegram-Market/telegram-shop/compare/main...main?expand=1\" data-tooltip-content=\"Compare\" aria-label=\"Compare\">\n\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-git-pull-request\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25m5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354M3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5m0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5m8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0\"></path></svg>\n\t\t</a>\n\t\n\n\t\n\t\n\t\t<a href=\"/Telegram-Market/telegram-shop/find/branch/main\" class=\"ui compact basic button\">Go to file</a>\n\t\n\n\t\n\t\t<button class=\"ui dropdown basic compact jump button repo-add-file\" tabindex=\"0\" role=\"menu\" aria-haspopup=\"\" aria-controls=\"_aria_dropdown_menu_0\" aria-expanded=\"false\">\n\t\t\tAdd File\n\t\t\t<svg viewBox=\"0 0 16 16\" class=\"dropdown icon svg octicon-triangle-down\" aria-hidden=\"true\" width=\"14\" height=\"14\"><path d=\"m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427\"></path></svg>\n\t\t\t<div class=\"menu\" tabindex=\"-1\" id=\"_aria_dropdown_menu_0\" role=\"\">\n\t\t\t\t<a class=\"item\" href=\"/Telegram-Market/telegram-shop/_new/main/\" id=\"_aria_dropdown_item_1\" role=\"menuitem\" tabindex=\"-1\">\n\t\t\t\t\tNew File\n\t\t\t\t</a>\n\t\t\t\t\n\t\t\t\t<a class=\"item\" href=\"/Telegram-Market/telegram-shop/_upload/main/\" id=\"_aria_dropdown_item_2\" role=\"menuitem\" tabindex=\"-1\">\n\t\t\t\t\tUpload File\n\t\t\t\t</a>\n\t\t\t\t\n\t\t\t\t<a class=\"item\" href=\"/Telegram-Market/telegram-shop/_diffpatch/main/\" id=\"_aria_dropdown_item_3\" role=\"menuitem\" tabindex=\"-1\">\n\t\t\t\t\tApply Patch\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t</button>\n\t\n\n\t\n\n\t\n\t</div>\n\n\t<div class=\"repo-button-row-right\">\n\t\t\n\t\t\n\t\t\t<button class=\"ui compact primary button js-btn-clone-panel\" aria-expanded=\"false\" aria-haspopup=\"true\">\n\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-code\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.75.75 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.75.75 0 0 1 .734.215m-6.56 0a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.75.75 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z\"></path></svg>\n\t<span>Code</span>\n\t<svg viewBox=\"0 0 16 16\" class=\"dropdown icon svg octicon-triangle-down\" aria-hidden=\"true\" width=\"14\" height=\"14\"><path d=\"m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427\"></path></svg>\n</button>\n\n\n\t\t\n\t\t\n\t</div>\n</div>\n\n\t\n\t\t\n\n\t\n\t\n<div id=\"repo-files-table\">\n\t<div class=\"repo-file-line repo-file-last-commit\">\n\t\t<div class=\"latest-commit\">\n\n\t\n\t\t\n\t\t\t<img loading=\"lazy\" alt=\"\" class=\"ui avatar tw-align-middle\" src=\"/avatar/4efcc3359ad2375e4bc215f614b22f4c?size=48\" title=\"NW\" width=\"24\" height=\"24\">\n\t\t\t<span class=\"author-wrapper\" title=\"NW\"><strong>NW</strong></span>\n\t\t\n\t\n\n\t<a href=\"/Telegram-Market/telegram-shop/commit/a5ea99b39bf359f52c6118cfba44a4acce5b1c9f\" class=\"ui label commit-id-short \" rel=\"nofollow\">a5ea99b39b</a>\n\n\t\n\n\n\t\n\t<span class=\"grey commit-summary\" title=\"fix(admin): issue #131 — dead callback buttons prod_district_/admin_users + no-op placeholders\"><span class=\"message-wrapper\"><a href=\"/Telegram-Market/telegram-shop/commit/a5ea99b39bf359f52c6118cfba44a4acce5b1c9f\" class=\"muted\">fix(admin): issue </a><a href=\"/Telegram-Market/telegram-shop/issues/131\" data-markdown-generated-content=\"\" class=\"ref-issue\">#131</a><a href=\"/Telegram-Market/telegram-shop/commit/a5ea99b39bf359f52c6118cfba44a4acce5b1c9f\" class=\"muted\"> — dead callback buttons prod_district_/admin_users + no-op placeholders</a></span>\n\t\t\n\t\t\t<button class=\"ui button ellipsis-button\" aria-expanded=\"false\" data-global-click=\"onRepoEllipsisButtonClick\">...</button>\n\t\t\t<pre class=\"commit-body tw-hidden\">- prod_district_: pipe-delimited format (multi-word names safe) + handleDistrictBack shows categories (admin sees disabled locations via getLocationsByCountryAndCityAdmin)\n- admin_users: handleUserListBack (viewUserPage(0) edit)\n- current_page/current_quantity/no_action: no-op exact routes (no 'No handler' warns)\n- Audit: all 78 generated callbacks cross-checked — no overlaps, none missing\n- 48 tests pass; bump v1.2.6</pre>\n\t\t\n\t</span>\n\n</div>\n\n\t\t<div><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-08-05T12:46:37+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Aug 5, 2026, 11:46 AM UTC\">2026-08-05 12:46:37 +01:00</relative-time></div>\n\t</div>\n\t<div class=\"svg-icon-container\"><svg id=\"svg-mfi-folder-scripts\" class=\"svg git-entry-icon octicon-file-directory-fill\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 32 32\"><path fill=\"#546e7a\" d=\"m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464\"></path><path fill=\"#cfd8dc\" d=\"M28 12h-6a4 4 0 0 0-4 4v8h2v-8h8v9.893a2.074 2.074 0 0 1-1.664 2.08A2 2 0 0 1 24 26h-8a4 4 0 0 0 4 4h6a4 4 0 0 0 4-4V16h2a4 4 0 0 0-4-4\"></path></svg><svg id=\"svg-mfi-folder\" class=\"svg git-entry-icon octicon-file-directory-fill\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 16 16\"><path fill=\"#90a4ae\" d=\"m6.922 3.768-.644-.536A1 1 0 0 0 5.638 3H2a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1H7.562a1 1 0 0 1-.64-.232\"></path></svg><svg id=\"svg-mfi-tune\" class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 32 32\"><path fill=\"#fbc02d\" d=\"M12 10h10v2H12z\"></path><path fill=\"#fbc02d\" d=\"M16 4h2v8h-2zm4 18h10v2H20zm4 2h2v4h-2zm0-20h2v14h-2zM2 18h10v2H2z\"></path><path fill=\"#fbc02d\" d=\"M6 18h2v10H6zM6 4h2v10H6zm10 12h2v12h-2z\"></path></svg><svg id=\"svg-mfi-folder-gitea\" class=\"svg git-entry-icon octicon-file-directory-fill\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 32 32\"><path fill=\"#689f38\" d=\"m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464\"></path><path fill=\"#dcedc8\" d=\"M24 14v4h1.5a.5.5 0 0 1 .5.5v5a.5.5 0 0 1-.5.5h-5a.5.5 0 0 1-.5-.5v-5a.5.5 0 0 1 .5-.5H22v-4H12a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h3.202l.3 2A4.55 4.55 0 0 0 20 28h6a4.55 4.55 0 0 0 4.497-4L32 14Zm-12 6v-4h2.3l.602 4Z\"></path></svg><svg id=\"svg-mfi-image\" class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 16 16\"><path fill=\"#26a69a\" d=\"M8.5 6h4l-4-4zM3.875 1H9.5l4 4v8.6c0 .773-.616 1.4-1.375 1.4h-8.25c-.76 0-1.375-.627-1.375-1.4V2.4c0-.777.612-1.4 1.375-1.4M4 13.6h8V8l-2.625 2.8L8 9.4zm1.25-7.7c-.76 0-1.375.627-1.375 1.4s.616 1.4 1.375 1.4c.76 0 1.375-.627 1.375-1.4S6.009 5.9 5.25 5.9\"></path></svg><svg id=\"svg-mfi-console\" class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 16 16\"><path fill=\"#ff7043\" d=\"M2 2a1 1 0 0 0-1 1v10c0 .554.446 1 1 1h12c.554 0 1-.446 1-1V3a1 1 0 0 0-1-1zm0 3h12v8H2zm1 1 3 3-3 3h2l3-3-3-3zm5 4.5V12h5v-1.5z\"></path></svg><svg id=\"svg-mfi-folder-docker\" class=\"svg git-entry-icon octicon-file-directory-fill\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 32 32\"><path fill=\"#039be5\" d=\"m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464\"></path><path fill=\"#b3e5fc\" d=\"M14 16h4v4h-4zm-6 0h4v4H8zm12 0h4v4h-4zm0-6h4v4h-4z\"></path><path fill=\"#b3e5fc\" d=\"M31.667 19.81a3.65 3.65 0 0 0-3.067-.377 4.6 4.6 0 0 0-1.667-2.945l-.333-.302-.267.378a4.44 4.44 0 0 0-.667 2.793 5 5 0 0 0 .233 1.101l-.62 1.283A5.1 5.1 0 0 1 23.6 22H6a15.3 15.3 0 0 0 .865 4.757l.267.528v.076a8.22 8.22 0 0 0 7.6 4.38c6 0 10.934-2.945 13.268-9.288a3.605 3.605 0 0 0 3.8-2.039l.2-.377ZM12 28a2 2 0 1 1 2-2 2 2 0 0 1-2 2\"></path></svg><svg id=\"svg-mfi-folder-src\" class=\"svg git-entry-icon octicon-file-directory-fill\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 32 32\"><path fill=\"#4caf50\" d=\"m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464\"></path><path fill=\"#c8e6c9\" d=\"M18.435 30a1 1 0 0 1-.238-.028 1.137 1.137 0 0 1-.828-1.323l3.093-15.744a1.13 1.13 0 0 1 .507-.744 1.06 1.06 0 0 1 .8-.134 1.14 1.14 0 0 1 .828 1.324l-3.1 15.744a1.12 1.12 0 0 1-.505.743 1.06 1.06 0 0 1-.557.162m6.2-2h-.077a1.08 1.08 0 0 1-.762-.412 1.164 1.164 0 0 1 .113-1.548l5.32-4.967-5.297-4.623a1.165 1.165 0 0 1-.162-1.544 1.08 1.08 0 0 1 .754-.437 1.06 1.06 0 0 1 .81.258l6.244 5.455a1.156 1.156 0 0 1 .004 1.723l-6.22 5.808a1.07 1.07 0 0 1-.728.289Zm-9.31 0a1.07 1.07 0 0 1-.728-.292l-6.225-5.811a1.16 1.16 0 0 1-.01-1.692l.02-.018 6.246-5.454a1.03 1.03 0 0 1 .8-.26 1.08 1.08 0 0 1 .758.436 1.165 1.165 0 0 1-.16 1.547l-5.293 4.62 5.32 4.964a1.156 1.156 0 0 1 .112 1.548 1.07 1.07 0 0 1-.762.412Z\"></path></svg><svg id=\"svg-mfi-folder-template\" class=\"svg git-entry-icon octicon-file-directory-fill\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 32 32\"><path fill=\"#8d6e63\" d=\"m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464\"></path><path fill=\"#d7ccc8\" d=\"M12 26h8v2h-8zm0-4h8v2h-8zm0-4h8v2h-8zm0-4h8v2h-8zm10 0h8v14h-8z\"></path></svg><svg id=\"svg-mfi-docker\" class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 24 24\"><path fill=\"#0288d1\" d=\"M21.81 10.25c-.06-.04-.56-.43-1.64-.43-.28 0-.56.03-.84.08-.21-1.4-1.38-2.11-1.43-2.14l-.29-.17-.18.27c-.24.36-.43.77-.51 1.19-.2.8-.08 1.56.33 2.21-.49.28-1.29.35-1.46.35H2.62c-.34 0-.62.28-.62.63 0 1.15.18 2.3.58 3.38.45 1.19 1.13 2.07 2 2.61.98.6 2.59.94 4.42.94.79 0 1.61-.07 2.42-.22 1.12-.2 2.2-.59 3.19-1.16A8.3 8.3 0 0 0 16.78 16c1.05-1.17 1.67-2.5 2.12-3.65h.19c1.14 0 1.85-.46 2.24-.85.26-.24.45-.53.59-.87l.08-.24zm-17.96.99h1.76c.08 0 .16-.07.16-.16V9.5c0-.08-.07-.16-.16-.16H3.85c-.09 0-.16.07-.16.16v1.58c.01.09.07.16.16.16m2.43 0h1.76c.08 0 .16-.07.16-.16V9.5c0-.08-.07-.16-.16-.16H6.28c-.09 0-.16.07-.16.16v1.58c.01.09.07.16.16.16m2.47 0h1.75c.1 0 .17-.07.17-.16V9.5c0-.08-.06-.16-.17-.16H8.75c-.08 0-.15.07-.15.16v1.58c0 .09.06.16.15.16m2.44 0h1.77c.08 0 .15-.07.15-.16V9.5c0-.08-.06-.16-.15-.16h-1.77c-.08 0-.15.07-.15.16v1.58c0 .09.07.16.15.16M6.28 9h1.76c.08 0 .16-.09.16-.18V7.25c0-.09-.07-.16-.16-.16H6.28c-.09 0-.16.06-.16.16v1.57c.01.09.07.18.16.18m2.47 0h1.75c.1 0 .17-.09.17-.18V7.25c0-.09-.06-.16-.17-.16H8.75c-.08 0-.15.06-.15.16v1.57c0 .09.06.18.15.18m2.44 0h1.77c.08 0 .15-.09.15-.18V7.25c0-.09-.07-.16-.15-.16h-1.77c-.08 0-.15.06-.15.16v1.57c0 .09.07.18.15.18m0-2.28h1.77c.08 0 .15-.07.15-.16V5c0-.1-.07-.17-.15-.17h-1.77c-.08 0-.15.06-.15.17v1.56c0 .08.07.16.15.16m2.46 4.52h1.76c.09 0 .16-.07.16-.16V9.5c0-.08-.07-.16-.16-.16h-1.76c-.08 0-.15.07-.15.16v1.58c0 .09.07.16.15.16\"></path></svg><svg id=\"svg-mfi-git\" class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 32 32\"><path fill=\"#e64a19\" d=\"M13.172 2.828 11.78 4.22l1.91 1.91 2 2A2.986 2.986 0 0 1 20 10.81a3.25 3.25 0 0 1-.31 1.31l2.06 2a2.68 2.68 0 0 1 3.37.57 2.86 2.86 0 0 1 .88 2.117 3.02 3.02 0 0 1-.856 2.109A2.9 2.9 0 0 1 23 19.81a2.93 2.93 0 0 1-2.13-.87 2.694 2.694 0 0 1-.56-3.38l-2-2.06a3 3 0 0 1-.31.12V20a3 3 0 0 1 1.44 1.09 2.92 2.92 0 0 1 .56 1.72 2.88 2.88 0 0 1-.878 2.128 2.98 2.98 0 0 1-2.048.871 2.981 2.981 0 0 1-2.514-4.719A3 3 0 0 1 16 20v-6.38a2.96 2.96 0 0 1-1.44-1.09 2.9 2.9 0 0 1-.56-1.72 2.9 2.9 0 0 1 .31-1.31l-3.9-3.9-7.579 7.572a4 4 0 0 0-.001 5.658l10.342 10.342a4 4 0 0 0 5.656 0l10.344-10.344a4 4 0 0 0 0-5.656L18.828 2.828a4 4 0 0 0-5.656 0\"></path></svg><svg id=\"svg-mfi-readme\" class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\" fill=\"none\" viewBox=\"0 0 16 16\"><path d=\"M0 0h24v24H0z\"></path><path fill=\"#42a5f5\" d=\"M8 1C4.136 1 1 4.136 1 8s3.136 7 7 7 7-3.136 7-7-3.136-7-7-7m1 11H7V7.5h2zm0-6H7V4h2z\"></path></svg><svg id=\"svg-mfi-folder-docs\" class=\"svg git-entry-icon octicon-file-directory-fill\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 32 32\"><path fill=\"#0277bd\" d=\"m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464\"></path><path fill=\"#b3e5fc\" d=\"M24 10h-7a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V16Zm0 16h-6v-2h6Zm4-4H18v-2h10Zm-4.828-5.172V12L28 16.828Z\"></path></svg><svg id=\"svg-mfi-folder-test\" class=\"svg git-entry-icon octicon-file-directory-fill\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 32 32\"><path fill=\"#00bfa5\" d=\"m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464\"></path><path fill=\"#a7ffeb\" d=\"M16 12v2h2v12a4 4 0 0 0 8 0V14h2v-2Zm5 14a1 1 0 1 1 1-1 1 1 0 0 1-1 1m2-4a1 1 0 1 1 1-1 1 1 0 0 1-1 1m1-4h-4v-4h4Z\"></path></svg><svg id=\"svg-mfi-nodejs\" class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 32 32\"><path fill=\"#8bc34a\" d=\"M16 20.003v2h4a2 2 0 0 0 2-2v-2a2 2 0 0 0-2-2h-2v-2h4v-2h-4a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h2v2Z\"></path><path fill=\"#8bc34a\" d=\"m16 3.003-12 7v14l4 2h6v-13.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v11.5H8l-2-1.034V11.15l10-5.833 10 5.833v11.703l-10 5.833-1.745-1.022L13 29.253l3 1.75 12-7v-14Z\"></path></svg><svg id=\"svg-mfi-markdown\" class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 32 32\"><path fill=\"#42a5f5\" d=\"m14 10-4 3.5L6 10H4v12h4v-6l2 2 2-2v6h4V10zm12 6v-6h-4v6h-4l6 8 6-8z\"></path></svg></div>\n\t\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file-directory-fill\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-folder-gitea\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/.gitea/workflows\" title=\".gitea/workflows\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<span class=\"text light-2\">.gitea</span>/workflows\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/5c6760b180636d02b904e902f3123a368e8bbc0c\" class=\"muted\">ci: install docker-cli in alpine job container for build/push/save steps</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-08-04T19:21:04+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Aug 4, 2026, 6:21 PM UTC\">2026-08-04 19:21:04 +01:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file-directory-fill\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-folder-docker\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/docker\" title=\"docker\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tdocker\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/8d85776135ede09bd29b3e829cba35a1296e36c7\" class=\"muted\">feat: add AI-powered visual regression testing infrastructure</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-06-30T21:09:30+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Jun 30, 2026, 8:09 PM UTC\">2026-06-30 21:09:30 +01:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file-directory-fill\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-folder-docs\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/docs\" title=\"docs\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tdocs\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/f90af4c78e0f38c9be98670659bf75e6c778fae0\" class=\"muted\">docs(admin): frontend spec for admin panel + endpoint architecture (issue </a><a href=\"/Telegram-Market/telegram-shop/issues/131\" data-markdown-generated-content=\"\" class=\"ref-issue\">#131</a><a href=\"/Telegram-Market/telegram-shop/commit/f90af4c78e0f38c9be98670659bf75e6c778fae0\" class=\"muted\">)</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-08-05T12:07:56+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Aug 5, 2026, 11:07 AM UTC\">2026-08-05 12:07:56 +01:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file-directory-fill\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-folder-scripts\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/scripts\" title=\"scripts\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tscripts\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/046c40349d8196b378e6073844b4ad108fae49ad\" class=\"muted\">chore: sync all changes</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-07-07T18:48:40+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Jul 7, 2026, 5:48 PM UTC\">2026-07-07 18:48:40 +01:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file-directory-fill\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-folder-src\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/src\" title=\"src\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tsrc\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/a5ea99b39bf359f52c6118cfba44a4acce5b1c9f\" class=\"muted\">fix(admin): issue </a><a href=\"/Telegram-Market/telegram-shop/issues/131\" data-markdown-generated-content=\"\" class=\"ref-issue\">#131</a><a href=\"/Telegram-Market/telegram-shop/commit/a5ea99b39bf359f52c6118cfba44a4acce5b1c9f\" class=\"muted\"> — dead callback buttons prod_district_/admin_users + no-op placeholders</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-08-05T12:46:37+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Aug 5, 2026, 11:46 AM UTC\">2026-08-05 12:46:37 +01:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file-directory-fill\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-folder-template\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/templates\" title=\"templates\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\ttemplates\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/046c40349d8196b378e6073844b4ad108fae49ad\" class=\"muted\">chore: sync all changes</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-07-07T18:48:40+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Jul 7, 2026, 5:48 PM UTC\">2026-07-07 18:48:40 +01:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file-directory-fill\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-folder-test\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/tests\" title=\"tests\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\ttests\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/046c40349d8196b378e6073844b4ad108fae49ad\" class=\"muted\">chore: sync all changes</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-07-07T18:48:40+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Jul 7, 2026, 5:48 PM UTC\">2026-07-07 18:48:40 +01:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file-directory-fill\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-folder\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/tor-proxy\" title=\"tor-proxy\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\ttor-proxy\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/b99f70f344f92ef9734d899a2d9d9a3b8ddb6847\" class=\"muted\">fix: HiddenServiceDir must be chmod 700 for Tor</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-06-24T12:16:59+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Jun 24, 2026, 11:16 AM UTC\">2026-06-24 12:16:59 +01:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file-directory-fill\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-folder\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/wg\" title=\"wg\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\twg\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/6db770b96ba0f9882dd5b2d984987f36f9d3f0e1\" class=\"muted\">feat: editable settings page with .env write and container restart</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-06-23T12:32:25+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Jun 23, 2026, 11:32 AM UTC\">2026-06-23 12:32:25 +01:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-docker\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/.dockerignore\" title=\".dockerignore\">.dockerignore</a>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/4aea49811c025161044c0124efd34014ff4d57c8\" class=\"muted\">feat: multi-architecture Docker setup (x86_64 + ARM64) with one-command install</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-06-24T02:06:07+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Jun 24, 2026, 1:06 AM UTC\">2026-06-24 02:06:07 +01:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-tune\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/.env.example\" title=\".env.example\">.env.example</a>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/d03c8419e5f9fe9f2778936efde8f8d15e87eb18\" class=\"muted\">feat(admin): super admin role, seed phrase viewer with QR code, CSRF disabled for Tor</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-07-09T16:40:15+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Jul 9, 2026, 3:40 PM UTC\">2026-07-09 16:40:15 +01:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-git\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/.gitignore\" title=\".gitignore\">.gitignore</a>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/12c4cefc4ccef412f3bffc6ede12e191242c64c9\" class=\"muted\">chore: ignore Kilo agent config files (kept on disk, system unaffected)</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-08-04T22:57:03+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Aug 4, 2026, 9:57 PM UTC\">2026-08-04 22:57:03 +01:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-image\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/corrupt-photo.jpg\" title=\"corrupt-photo.jpg\">corrupt-photo.jpg</a>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/df3149e59a927b87512caa8f2662c61d15d40384\" class=\"muted\">product photo fix</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2024-11-15T07:31:46+03:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Nov 15, 2024, 4:31 AM UTC\">2024-11-15 07:31:46 +03:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-docker\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/docker-compose.yml\" title=\"docker-compose.yml\">docker-compose.yml</a>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/ee8c75066c7ae70d0857bddb115819f86b89c640\" class=\"muted\">fix: bind admin port to all interfaces instead of localhost only</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-06-24T15:16:35+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Jun 24, 2026, 2:16 PM UTC\">2026-06-24 15:16:35 +01:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-docker\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/Dockerfile\" title=\"Dockerfile\">Dockerfile</a>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/4aea49811c025161044c0124efd34014ff4d57c8\" class=\"muted\">feat: multi-architecture Docker setup (x86_64 + ARM64) with one-command install</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-06-24T02:06:07+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Jun 24, 2026, 1:06 AM UTC\">2026-06-24 02:06:07 +01:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-console\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/install.sh\" title=\"install.sh\">install.sh</a>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/94300c7d352c91dfbb1490ba4079dad77a5fec19\" class=\"muted\">fix: photo URLs use ADMIN_URL prefix for Telegram API + resilience improvements</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-06-24T19:32:49+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Jun 24, 2026, 6:32 PM UTC\">2026-06-24 19:32:49 +01:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-nodejs\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/package-lock.json\" title=\"package-lock.json\">package-lock.json</a>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/f0afada884605ff4971b63b17e32bfd85aa75519\" class=\"muted\">feat: Mercuryo gateway, crypto QR deposit, mono products, wallet auto-refresh</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-07-08T12:08:13+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Jul 8, 2026, 11:08 AM UTC\">2026-07-08 12:08:13 +01:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-nodejs\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/package.json\" title=\"package.json\">package.json</a>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/776d0e8552c97b8cfcafc466455380d401e2e0b7\" class=\"muted\">fix(bot): remove redundant deposit amount step, add Visa/MC label, Mercuryo auth note, enforce product completeness</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-07-18T14:28:26+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Jul 18, 2026, 1:28 PM UTC\">2026-07-18 14:28:26 +01:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-readme\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/README.md\" title=\"README.md\">README.md</a>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/f2d4d6d3b176d09e40a4a424a276fd235ced2ddc\" class=\"muted\">docs: update README with i18n section, language support, and project structure</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-06-25T23:54:59+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Jun 25, 2026, 10:54 PM UTC\">2026-06-25 23:54:59 +01:00</relative-time></div>\n\t\t</div>\n\t\n\t\t<div class=\"repo-file-item\">\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t<div class=\"repo-file-cell name muted-links \">\n\t\t\t\t<svg class=\"svg git-entry-icon octicon-file\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use href=\"#svg-mfi-markdown\"></use></svg>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<a class=\"entry-name\" href=\"/Telegram-Market/telegram-shop/src/branch/main/VERSION.md\" title=\"VERSION.md\">VERSION.md</a>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell message loading-icon-2px\">\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<a href=\"/Telegram-Market/telegram-shop/commit/a5ea99b39bf359f52c6118cfba44a4acce5b1c9f\" class=\"muted\">fix(admin): issue </a><a href=\"/Telegram-Market/telegram-shop/issues/131\" data-markdown-generated-content=\"\" class=\"ref-issue\">#131</a><a href=\"/Telegram-Market/telegram-shop/commit/a5ea99b39bf359f52c6118cfba44a4acce5b1c9f\" class=\"muted\"> — dead callback buttons prod_district_/admin_users + no-op placeholders</a>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div class=\"repo-file-cell age\"><relative-time prefix=\"\" tense=\"past\" datetime=\"2026-08-05T12:46:37+01:00\" data-tooltip-content=\"\" data-tooltip-interactive=\"true\" title=\"Aug 5, 2026, 11:46 AM UTC\">2026-08-05 12:46:37 +01:00</relative-time></div>\n\t\t</div>\n\t\n</div>\n\n\t\n\t\t<div id=\"readme\" class=\"tab-size-4 non-diff-file-content\" data-global-init=\"initRepoFileView\" data-raw-file-link=\"\">\n\n\t\n\n\t<h4 class=\"file-header ui top attached header tw-flex tw-items-center tw-justify-between tw-flex-wrap\">\n\t\t<div class=\"file-header-left tw-flex tw-items-center tw-py-2 tw-pr-4\">\n\t\t\t\n\t\t\t\t<svg viewBox=\"0 0 16 16\" class=\"tw-mr-2 svg octicon-book\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.74 3.74 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574M8.755 4.75l-.004 7.322a3.75 3.75 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25\"></path></svg>\n\t\t\t\t<strong><a class=\"muted\" href=\"#readme\">README.md</a></strong>\n\t\t\t\n\t\t</div>\n\t\t<div class=\"file-header-right file-actions flex-text-block tw-flex-wrap\">\n\t\t\t\n\t\t\t<div class=\"ui compact icon buttons file-view-toggle-buttons tw-hidden\">\n\t\t\t\t\n\t\t\t\t<a href=\"?display=rendered\" class=\"ui mini basic button file-view-toggle-rendered active\" data-tooltip-content=\"View Rendered\" aria-label=\"View Rendered\"><svg viewBox=\"0 0 16 16\" class=\"svg octicon-file\" aria-hidden=\"true\" width=\"15\" height=\"15\"><path d=\"M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914z\"></path></svg></a>\n\t\t\t</div>\n\t\t\t\n\t\t\t\t<button class=\"ui mini basic button unescape-button tw-mr-1 tw-hidden\">Unescape</button>\n\t\t\t\t<button class=\"ui mini basic button escape-button tw-mr-1\">Escape</button>\n\t\t\t\n\t\t\t\n\t\t\t\t<a class=\"btn-octicon\" data-tooltip-content=\"Edit File\" href=\"/Telegram-Market/telegram-shop/_edit/main/README.md\" aria-label=\"Edit File\"><svg viewBox=\"0 0 16 16\" class=\"svg octicon-pencil\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.25.25 0 0 0-.064.108l-.558 1.953 1.953-.558a.25.25 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z\"></path></svg></a>\n\t\t\t\n\t\t</div>\n\t</h4>\n\n\t<div class=\"ui bottom attached table unstackable segment\">\n\t\t\n\t\t<div class=\"file-view markup markdown\">\n\t\t\t\n\t\t\t\t<h1 id=\"user-content-telegram-shop-bot\" dir=\"auto\"><a class=\"anchor\" href=\"#telegram-shop-bot\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Telegram Shop Bot</h1>\n<p dir=\"auto\">Телеграм-бот для организации онлайн-продаж через Telegram <span class=\"ambiguous-code-point\" data-tooltip-content=\"с [U+0441] can be confused with c [U+0063]\" aria-label=\"с [U+0441] can be confused with c [U+0063]\"><span class=\"char\">с</span></span> поддержкой криптовалют, WireGuard VPN и Tor-прокси для доступа к админ-панели через onion-адрес.</p>\n<h2 id=\"user-content-возможности\" dir=\"auto\"><a class=\"anchor\" href=\"#%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Возможности</h2>\n<ul dir=\"auto\">\n<li>Каталог товаров <span class=\"ambiguous-code-point\" data-tooltip-content=\"с [U+0441] can be confused with c [U+0063]\" aria-label=\"с [U+0441] can be confused with c [U+0063]\"><span class=\"char\">с</span></span> категориями и фильтрацией по локациям</li>\n<li>Покупки <span class=\"ambiguous-code-point\" data-tooltip-content=\"с [U+0441] can be confused with c [U+0063]\" aria-label=\"с [U+0441] can be confused with c [U+0063]\"><span class=\"char\">с</span></span> оплатой криптовалютами (BTC, ETH, LTC, USDT, USDC)</li>\n<li>Управление криптокошельками (создание, пополнение, баланс)</li>\n<li>История транзакций и покупок</li>\n<li>SaaS-система <span class=\"ambiguous-code-point\" data-tooltip-content=\"с [U+0441] can be confused with c [U+0063]\" aria-label=\"с [U+0441] can be confused with c [U+0063]\"><span class=\"char\">с</span></span> автоматическим расчётом комиссий</li>\n<li><strong>Мультиязычность (i18n)</strong> — английский, испанский, немецкий <span class=\"ambiguous-code-point\" data-tooltip-content=\"с [U+0441] can be confused with c [U+0063]\" aria-label=\"с [U+0441] can be confused with c [U+0063]\"><span class=\"char\">с</span></span> переключением в боте</li>\n<li>Админ-панель на порту 3001 <span class=\"ambiguous-code-point\" data-tooltip-content=\"с [U+0441] can be confused with c [U+0063]\" aria-label=\"с [U+0441] can be confused with c [U+0063]\"><span class=\"char\">с</span></span> вкладкой локализации</li>\n<li>Tor-прокси <span class=\"ambiguous-code-point\" data-tooltip-content=\"с [U+0441] can be confused with c [U+0063]\" aria-label=\"с [U+0441] can be confused with c [U+0063]\"><span class=\"char\">с</span></span> двумя onion-сервисами (SSH + админка)</li>\n<li>WireGuard VPN для безопасных транзакций</li>\n</ul>\n<h2 id=\"user-content-быстрый-старт-одна-команда\" dir=\"auto\"><a class=\"anchor\" href=\"#%D0%B1%D1%8B%D1%81%D1%82%D1%80%D1%8B%D0%B9-%D1%81%D1%82%D0%B0%D1%80%D1%82-%D0%BE%D0%B4%D0%BD%D0%B0-%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Быстрый старт (одна команда)</h2>\n<h3 id=\"user-content-требования\" dir=\"auto\"><a class=\"anchor\" href=\"#%D1%82%D1%80%D0%B5%D0%B1%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Требования</h3>\n<ul dir=\"auto\">\n<li>Любое устройство <span class=\"ambiguous-code-point\" data-tooltip-content=\"с [U+0441] can be confused with c [U+0063]\" aria-label=\"с [U+0441] can be confused with c [U+0063]\"><span class=\"char\">с</span></span> Docker: x86_64 (PC, сервер) или ARM64 (Orange Pi, Raspberry Pi)</li>\n<li>512 МБ RAM минимум (Orange Pi Zero 2 поддерживается)</li>\n</ul>\n<h3 id=\"user-content-установка\" dir=\"auto\"><a class=\"anchor\" href=\"#%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Установка</h3>\n<div class=\"code-block-container code-overflow-scroll\"><pre class=\"code-block\"><code class=\"chroma language-bash display\">git clone &lt;repo-url&gt; <span class=\"o\">&amp;&amp;</span> <span class=\"nb\">cd</span> telegram-shop\nbash install.sh\n</code></pre><button class=\"code-copy ui button\" data-clipboard-text=\"git clone &lt;repo-url&gt; &amp;&amp; cd telegram-shop\nbash install.sh\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-copy\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg></button></div><p dir=\"auto\">Скрипт автоматически:</p>\n<ol dir=\"auto\">\n<li>Определит архитектуру (x86_64 / ARM64 / ARMv7)</li>\n<li>Установит Docker если не установлен</li>\n<li>Создаст <code>.env</code> из шаблона</li>\n<li>Проверит обязательные переменные</li>\n<li>Соберёт Docker-образ под текущую архитектуру</li>\n<li>Запустит контейнер и проверит health-check</li>\n</ol>\n<h3 id=\"user-content-ручная-установка\" dir=\"auto\"><a class=\"anchor\" href=\"#%D1%80%D1%83%D1%87%D0%BD%D0%B0%D1%8F-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Ручная установка</h3>\n<div class=\"code-block-container code-overflow-scroll\"><pre class=\"code-block\"><code class=\"chroma language-bash display\"><span class=\"c1\"># 1. Клонировать</span>\ngit clone &lt;repo-url&gt; <span class=\"o\">&amp;&amp;</span> <span class=\"nb\">cd</span> telegram-shop\n\n<span class=\"c1\"># 2. Создать .env из шаблона</span>\ncp .env.example .env\nnano .env <span class=\"c1\"># заполнить BOT_TOKEN, ADMIN_IDS, ENCRYPTION_KEY</span>\n\n<span class=\"c1\"># 3. Собрать и запустить</span>\ndocker compose up -d --build\n\n<span class=\"c1\"># 4. Проверить статус</span>\ndocker compose ps\ncurl http://localhost:3001/health\n</code></pre><button class=\"code-copy ui button\" data-clipboard-text=\"# 1. Клонировать\ngit clone &lt;repo-url&gt; &amp;&amp; cd telegram-shop\n\n# 2. Создать .env из шаблона\ncp .env.example .env\nnano .env # заполнить BOT_TOKEN, ADMIN_IDS, ENCRYPTION_KEY\n\n# 3. Собрать и запустить\ndocker compose up -d --build\n\n# 4. Проверить статус\ndocker compose ps\ncurl http://localhost:3001/health\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-copy\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg></button></div><h2 id=\"user-content-настройка-env\" dir=\"auto\"><a class=\"anchor\" href=\"#%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-env\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Настройка .env</h2>\n<p dir=\"auto\">Скопируйте <code>.env.example</code> в <code>.env</code> и заполните:</p>\n<table>\n<thead>\n<tr>\n<th>Переменная</th>\n<th>Обязательно</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>BOT_TOKEN</code></td>\n<td><span class=\"emoji\" aria-label=\"check mark button\">✅</span></td>\n<td>Токен Telegram бота (@BotFather)</td>\n</tr>\n<tr>\n<td><code>ADMIN_IDS</code></td>\n<td><span class=\"emoji\" aria-label=\"check mark button\">✅</span></td>\n<td>ID администраторов через запятую</td>\n</tr>\n<tr>\n<td><code>ENCRYPTION_KEY</code></td>\n<td><span class=\"emoji\" aria-label=\"check mark button\">✅</span></td>\n<td>Ключ шифрования (32 байта hex)</td>\n</tr>\n<tr>\n<td><code>ADMIN_SECRET</code></td>\n<td><span class=\"emoji\" aria-label=\"check mark button\">✅</span></td>\n<td>Секрет для админ-панели</td>\n</tr>\n<tr>\n<td><code>ADMIN_PORT</code></td>\n<td>—</td>\n<td>Порт админ-панели (по умолчанию 3001)</td>\n</tr>\n<tr>\n<td><code>ADMIN_URL</code></td>\n<td>—</td>\n<td>Полный URL админ-панели (для фото товаров)</td>\n</tr>\n<tr>\n<td><code>SUPER_ADMIN_IDS</code></td>\n<td>—</td>\n<td>ID супер-админов</td>\n</tr>\n<tr>\n<td><code>SUPPORT_LINK</code></td>\n<td>—</td>\n<td>Ссылка на поддержку</td>\n</tr>\n<tr>\n<td><code>DEFAULT_LANGUAGE</code></td>\n<td>—</td>\n<td>Язык по умолчанию (<code>en</code>, <code>es</code>, <code>de</code>; по умолчанию <code>en</code>)</td>\n</tr>\n<tr>\n<td><code>SSH_HOST_IP</code></td>\n<td>—</td>\n<td>Куда Tor перенаправляет SSH (по умолчанию host.docker.internal)</td>\n</tr>\n<tr>\n<td><code>SHOP_CONTAINER</code></td>\n<td>—</td>\n<td>Имя контейнера магазина (по умолчанию telegram_shop_prod)</td>\n</tr>\n<tr>\n<td><code>WG_ENABLED</code></td>\n<td>—</td>\n<td><code>true</code> / <code>false</code> (по умолчанию <code>false</code>)</td>\n</tr>\n<tr>\n<td><code>WG_PRIVATE_KEY</code></td>\n<td>—</td>\n<td>Приватный ключ WireGuard</td>\n</tr>\n<tr>\n<td><code>WG_PUBLIC_KEY</code></td>\n<td>—</td>\n<td>Публичный ключ WireGuard</td>\n</tr>\n<tr>\n<td><code>WG_PRESHARED_KEY</code></td>\n<td>—</td>\n<td>Pre-shared ключ WireGuard</td>\n</tr>\n<tr>\n<td><code>WG_ENDPOINT</code></td>\n<td>—</td>\n<td>Адрес сервера WireGuard</td>\n</tr>\n<tr>\n<td><code>WG_ADDRESS</code></td>\n<td>—</td>\n<td>Адрес интерфейса WireGuard</td>\n</tr>\n<tr>\n<td><code>WG_DNS</code></td>\n<td>—</td>\n<td>DNS для WireGuard</td>\n</tr>\n</tbody>\n</table>\n<p dir=\"auto\">Генерация ключа шифрования:</p>\n<div class=\"code-block-container code-overflow-scroll\"><pre class=\"code-block\"><code class=\"chroma language-bash display\">node -e <span class=\"s2\">\"console.log(require('crypto').randomBytes(32).toString('hex'))\"</span>\n</code></pre><button class=\"code-copy ui button\" data-clipboard-text=\"node -e &quot;console.log(require('crypto').randomBytes(32).toString('hex'))&quot;\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-copy\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg></button></div><h2 id=\"user-content-tor-proxy\" dir=\"auto\"><a class=\"anchor\" href=\"#tor-proxy\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Tor Proxy</h2>\n<p dir=\"auto\">Проект включает Tor-прокси для доступа к SSH и админ-панели через onion-адреса.</p>\n<h3 id=\"user-content-архитектура\" dir=\"auto\"><a class=\"anchor\" href=\"#%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Архитектура</h3>\n<div class=\"code-block-container code-overflow-scroll\"><pre class=\"code-block\"><code class=\"chroma language-text display\">Internet → Tor Network → tor-proxy контейнер\n ├── Onion #1 :22 → хост SSH\n └── Onion #2 :80 → telegram_shop_prod:3001\n (через Docker сеть tor_proxy_net)\n</code></pre><button class=\"code-copy ui button\" data-clipboard-text=\"Internet → Tor Network → tor-proxy контейнер\n ├── Onion #1 :22 → хост SSH\n └── Onion #2 :80 → telegram_shop_prod:3001\n (через Docker сеть tor_proxy_net)\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-copy\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg></button></div><h3 id=\"user-content-файлы-tor-прокси\" dir=\"auto\"><a class=\"anchor\" href=\"#%D1%84%D0%B0%D0%B9%D0%BB%D1%8B-tor-%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Файлы Tor-прокси</h3>\n<table>\n<thead>\n<tr>\n<th>Файл</th>\n<th>Назначение</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>tor-proxy/Dockerfile</code></td>\n<td>Alpine + Tor образ</td>\n</tr>\n<tr>\n<td><code>tor-proxy/entrypoint.sh</code></td>\n<td>Генерация torrc из env vars, валидация, запись onion-адресов</td>\n</tr>\n<tr>\n<td><code>tor-proxy/get-onions.sh</code></td>\n<td>Скрипт чтения onion-адресов и обновления .env</td>\n</tr>\n<tr>\n<td><code>tor-proxy/hosts/</code></td>\n<td>Директория для onion-hosts.txt (bind mount)</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"user-content-после-запуска\" dir=\"auto\"><a class=\"anchor\" href=\"#%D0%BF%D0%BE%D1%81%D0%BB%D0%B5-%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B0\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>После запуска</h3>\n<p dir=\"auto\">Onion-адреса автоматически сохраняются в <code>tor-proxy/hosts/onion-hosts.txt</code>. Обновить <code>.env</code>:</p>\n<div class=\"code-block-container code-overflow-scroll\"><pre class=\"code-block\"><code class=\"chroma language-bash display\">./tor-proxy/get-onions.sh\n</code></pre><button class=\"code-copy ui button\" data-clipboard-text=\"./tor-proxy/get-onions.sh\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-copy\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg></button></div><p dir=\"auto\">Вывод:</p>\n<div class=\"code-block-container code-overflow-scroll\"><pre class=\"code-block\"><code class=\"chroma language-text display\">============================================================\n Onion services\n============================================================\n SSH : xxxxx.onion (port 22 -&gt; host SSH)\n Admin : yyyyy.onion (port 80 -&gt; telegram_shop_prod:3001)\n============================================================\n\nUsage:\n SSH : torify ssh user@xxxxx.onion\n Admin : open http://yyyyy.onion in Tor Browser\n</code></pre><button class=\"code-copy ui button\" data-clipboard-text=\"============================================================\n Onion services\n============================================================\n SSH : xxxxx.onion (port 22 -&gt; host SSH)\n Admin : yyyyy.onion (port 80 -&gt; telegram_shop_prod:3001)\n============================================================\n\nUsage:\n SSH : torify ssh user@xxxxx.onion\n Admin : open http://yyyyy.onion in Tor Browser\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-copy\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg></button></div><h3 id=\"user-content-переменные-tor\" dir=\"auto\"><a class=\"anchor\" href=\"#%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5-tor\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Переменные Tor</h3>\n<table>\n<thead>\n<tr>\n<th>Переменная</th>\n<th>По умолчанию</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>SSH_HOST_IP</code></td>\n<td><code>host.docker.internal</code></td>\n<td>Куда Tor перенаправляет SSH</td>\n</tr>\n<tr>\n<td><code>SHOP_CONTAINER</code></td>\n<td><code>telegram_shop_prod</code></td>\n<td>Контейнер магазина</td>\n</tr>\n<tr>\n<td><code>ADMIN_PORT</code></td>\n<td><code>3001</code></td>\n<td>Порт админки</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"user-content-поддерживаемые-устройства\" dir=\"auto\"><a class=\"anchor\" href=\"#%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC%D1%8B%D0%B5-%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Поддерживаемые устройства</h2>\n<table>\n<thead>\n<tr>\n<th>Устройство</th>\n<th>Архитектура</th>\n<th>RAM</th>\n<th>Статус</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>PC / Сервер</td>\n<td>x86_64</td>\n<td>≥ 512 МБ</td>\n<td><span class=\"emoji\" aria-label=\"check mark button\">✅</span></td>\n</tr>\n<tr>\n<td>Orange Pi Zero 2</td>\n<td>ARM64 (H616)</td>\n<td>512 МБ</td>\n<td><span class=\"emoji\" aria-label=\"check mark button\">✅</span></td>\n</tr>\n<tr>\n<td>Raspberry Pi 4</td>\n<td>ARM64</td>\n<td>≥ 1 ГБ</td>\n<td><span class=\"emoji\" aria-label=\"check mark button\">✅</span></td>\n</tr>\n<tr>\n<td>Raspberry Pi 3</td>\n<td>ARM64</td>\n<td>1 ГБ</td>\n<td><span class=\"emoji\" aria-label=\"check mark button\">✅</span></td>\n</tr>\n<tr>\n<td>Raspberry Pi 2</td>\n<td>ARMv7</td>\n<td>1 ГБ</td>\n<td><span class=\"emoji\" aria-label=\"check mark button\">✅</span></td>\n</tr>\n</tbody>\n</table>\n<p dir=\"auto\">Docker автоматически собирает нативные модули (<code>better-sqlite3</code>, <code>tiny-secp256k1</code>) под архитектуру хоста.</p>\n<h2 id=\"user-content-архитектура-docker\" dir=\"auto\"><a class=\"anchor\" href=\"#%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0-docker\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Архитектура Docker</h2>\n<div class=\"code-block-container code-overflow-scroll\"><pre class=\"code-block\"><code class=\"chroma language-text display\">┌──────────────────────────────────────────────────────────┐\n│ docker-compose │\n│ │\n│ ┌────────────────────────┐ ┌─────────────────────────┐ │\n│ │ telegram_shop_prod │ │ tor-proxy │ │\n│ │ (node:22-alpine) │ │ (alpine:3.18 + tor) │ │\n│ │ │ │ │ │\n│ │ Port 3001 │◄─┤ HiddenService :80 │ │\n│ │ Bot + Admin Panel │ │ HiddenService :22 → SSH│ │\n│ │ │ │ │ │\n│ │ Net: default │ │ Net: default + proxy_net │ │\n│ │ + tor_proxy_net │ │ │ │\n│ └────────────────────────┘ └─────────────────────────┘ │\n│ │ │ │\n│ Volumes: Volumes: │\n│ db/, uploads/, .env tor_data, hosts/ │\n└──────────────────────────────────────────────────────────┘\n</code></pre><button class=\"code-copy ui button\" data-clipboard-text=\"┌──────────────────────────────────────────────────────────┐\n│ docker-compose │\n│ │\n│ ┌────────────────────────┐ ┌─────────────────────────┐ │\n│ │ telegram_shop_prod │ │ tor-proxy │ │\n│ │ (node:22-alpine) │ │ (alpine:3.18 + tor) │ │\n│ │ │ │ │ │\n│ │ Port 3001 │◄─┤ HiddenService :80 │ │\n│ │ Bot + Admin Panel │ │ HiddenService :22 → SSH│ │\n│ │ │ │ │ │\n│ │ Net: default │ │ Net: default + proxy_net │ │\n│ │ + tor_proxy_net │ │ │ │\n│ └────────────────────────┘ └─────────────────────────┘ │\n│ │ │ │\n│ Volumes: Volumes: │\n│ db/, uploads/, .env tor_data, hosts/ │\n└──────────────────────────────────────────────────────────┘\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-copy\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg></button></div><h3 id=\"user-content-сети-docker\" dir=\"auto\"><a class=\"anchor\" href=\"#%D1%81%D0%B5%D1%82%D0%B8-docker\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Сети Docker</h3>\n<table>\n<thead>\n<tr>\n<th>Сеть</th>\n<th>Назначение</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>default</code></td>\n<td>Внутренняя связь между контейнерами</td>\n</tr>\n<tr>\n<td><code>tor_proxy_net</code></td>\n<td>Связь tor-proxy ↔ telegram_shop_prod</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"user-content-команды-управления\" dir=\"auto\"><a class=\"anchor\" href=\"#%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B-%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Команды управления</h2>\n<div class=\"code-block-container code-overflow-scroll\"><pre class=\"code-block\"><code class=\"chroma language-bash display\"><span class=\"c1\"># Запуск</span>\ndocker compose up -d\n\n<span class=\"c1\"># Пересборка после изменений</span>\ndocker compose up -d --build\n\n<span class=\"c1\"># Логи</span>\ndocker compose logs -f\n\n<span class=\"c1\"># Логи конкретного сервиса</span>\ndocker compose logs -f tor-proxy\ndocker compose logs -f telegram_shop_prod\n\n<span class=\"c1\"># Стоп</span>\ndocker compose down\n\n<span class=\"c1\"># Рестарт</span>\ndocker compose restart\n\n<span class=\"c1\"># Статус</span>\ndocker compose ps\n\n<span class=\"c1\"># Health-check</span>\ncurl http://localhost:3001/health\n\n<span class=\"c1\"># Onion-адреса</span>\ndocker <span class=\"nb\">exec</span> tor-proxy cat /var/lib/tor/ssh/hostname\ndocker <span class=\"nb\">exec</span> tor-proxy cat /var/lib/tor/admin/hostname\n\n<span class=\"c1\"># Обновить .env <span class=\"ambiguous-code-point\" data-tooltip-content=\"с [U+0441] can be confused with c [U+0063]\" aria-label=\"с [U+0441] can be confused with c [U+0063]\"><span class=\"char\">с</span></span> onion-адресами</span>\n./tor-proxy/get-onions.sh\n</code></pre><button class=\"code-copy ui button\" data-clipboard-text=\"# Запуск\ndocker compose up -d\n\n# Пересборка после изменений\ndocker compose up -d --build\n\n# Логи\ndocker compose logs -f\n\n# Логи конкретного сервиса\ndocker compose logs -f tor-proxy\ndocker compose logs -f telegram_shop_prod\n\n# Стоп\ndocker compose down\n\n# Рестарт\ndocker compose restart\n\n# Статус\ndocker compose ps\n\n# Health-check\ncurl http://localhost:3001/health\n\n# Onion-адреса\ndocker exec tor-proxy cat /var/lib/tor/ssh/hostname\ndocker exec tor-proxy cat /var/lib/tor/admin/hostname\n\n# Обновить .env с onion-адресами\n./tor-proxy/get-onions.sh\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-copy\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg></button></div><h2 id=\"user-content-wireguard\" dir=\"auto\"><a class=\"anchor\" href=\"#wireguard\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>WireGuard</h2>\n<p dir=\"auto\">WireGuard по умолчанию отключен (<code>WG_ENABLED=false</code>). Для включения:</p>\n<ol dir=\"auto\">\n<li>Установите <code>WG_ENABLED=true</code> в <code>.env</code></li>\n<li>Заполните ключи WireGuard в <code>.env</code></li>\n<li>Перезапустите: <code>docker compose restart</code></li>\n</ol>\n<p dir=\"auto\">Контейнер требует <code>NET_ADMIN</code> и <code>sysctl net.ipv4.conf.all.src_valid_mark=1</code> для WireGuard. Эти привилегии заданы в <code>docker-compose.yml</code>.</p>\n<h2 id=\"user-content-мультиязычность-i18n\" dir=\"auto\"><a class=\"anchor\" href=\"#%D0%BC%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D1%8F%D0%B7%D1%8B%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C-i18n\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Мультиязычность (i18n)</h2>\n<p dir=\"auto\">Бот поддерживает 3 языка: <strong><span class=\"emoji\" aria-label=\"flag: United Kingdom\">🇬🇧</span> English</strong>, <strong><span class=\"emoji\" aria-label=\"flag: Spain\">🇪🇸</span> Español</strong>, <strong><span class=\"emoji\" aria-label=\"flag: Germany\">🇩🇪</span> Deutsch</strong>.</p>\n<h3 id=\"user-content-как-это-работает\" dir=\"auto\"><a class=\"anchor\" href=\"#%D0%BA%D0%B0%D0%BA-%D1%8D%D1%82%D0%BE-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Как это работает</h3>\n<ul dir=\"auto\">\n<li><strong><code>/start</code></strong> — всегда показывает выбор языка <span class=\"ambiguous-code-point\" data-tooltip-content=\"с [U+0441] can be confused with c [U+0063]\" aria-label=\"с [U+0441] can be confused with c [U+0063]\"><span class=\"char\">с</span></span> флагами</li>\n<li><strong><code>/language</code></strong> — команда для смены языка в любой момент</li>\n<li><strong>Профиль</strong> — кнопка «<span class=\"emoji\" aria-label=\"globe with meridians\">🌐</span> Change Language» рядом <span class=\"ambiguous-code-point\" data-tooltip-content=\"с [U+0441] can be confused with c [U+0063]\" aria-label=\"с [U+0441] can be confused with c [U+0063]\"><span class=\"char\">с</span></span> «Set Location»</li>\n<li>Выбранный язык сохраняется в БД (<code>users.language</code>) и используется во всех сообщениях</li>\n<li>Интерполяция: <code>t('key', { param: value })</code> → <code>{{param}}</code> в строках</li>\n<li>Fallback: запрошенный язык → English → ключ</li>\n</ul>\n<h3 id=\"user-content-структура-i18n\" dir=\"auto\"><a class=\"anchor\" href=\"#%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0-i18n\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Структура i18n</h3>\n<div class=\"code-block-container code-overflow-scroll\"><pre class=\"code-block\"><code class=\"chroma language-text display\">src/i18n/\n├── index.js # tForUser(), tForLang(), LANGUAGE_NAMES, AVAILABLE_LANGUAGES\n└── locales/\n ├── en.json # 201 ключ, английский\n ├── es.json # 201 ключ, испанский\n └── de.json # 201 ключ, немецкий\n</code></pre><button class=\"code-copy ui button\" data-clipboard-text=\"src/i18n/\n├── index.js # tForUser(), tForLang(), LANGUAGE_NAMES, AVAILABLE_LANGUAGES\n└── locales/\n ├── en.json # 201 ключ, английский\n ├── es.json # 201 ключ, испанский\n └── de.json # 201 ключ, немецкий\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-copy\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg></button></div><h3 id=\"user-content-админ-панель-локализации\" dir=\"auto\"><a class=\"anchor\" href=\"#%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD-%D0%BF%D0%B0%D0%BD%D0%B5%D0%BB%D1%8C-%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Админ-панель локализации</h3>\n<p dir=\"auto\">Вкладка «Локализация» в админ-панели (<code>/locales</code>) позволяет просматривать и редактировать все ключи перевода в таблице <span class=\"ambiguous-code-point\" data-tooltip-content=\"с [U+0441] can be confused with c [U+0063]\" aria-label=\"с [U+0441] can be confused with c [U+0063]\"><span class=\"char\">с</span></span> сохранением в JSON-файлы.</p>\n<h3 id=\"user-content-добавление-нового-языка\" dir=\"auto\"><a class=\"anchor\" href=\"#%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE-%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Добавление нового языка</h3>\n<ol dir=\"auto\">\n<li>Создать <code>src/i18n/locales/&lt;code&gt;.json</code> по шаблону <code>en.json</code></li>\n<li>Добавить код в <code>AVAILABLE_LANGUAGES</code> и <code>LANGUAGE_NAMES</code> в <code>src/i18n/index.js</code></li>\n<li>Язык автоматически появится в выборе при <code>/start</code> и <code>/language</code></li>\n</ol>\n<h2 id=\"user-content-безопасность\" dir=\"auto\"><a class=\"anchor\" href=\"#%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Безопасность</h2>\n<ul dir=\"auto\">\n<li><code>.env</code> монтируется только для чтения (<code>:ro</code>)</li>\n<li>Порт 3001 доступен из LAN и через Tor onion</li>\n<li>Onion-адреса сохраняются в volume (персистентность при перезапуске)</li>\n<li>Tor hidden services <span class=\"ambiguous-code-point\" data-tooltip-content=\"с [U+0441] can be confused with c [U+0063]\" aria-label=\"с [U+0441] can be confused with c [U+0063]\"><span class=\"char\">с</span></span> валидацией env vars</li>\n<li>Нативные модули компилируются в builder-стейдже</li>\n<li><code>devDependencies</code> не попадают в production-образ</li>\n<li>Тестовые файлы исключены из Docker-образа (<code>.dockerignore</code>)</li>\n<li><code>node_modules</code> хоста не попадают в образ (<code>.dockerignore</code>)</li>\n</ul>\n<h2 id=\"user-content-устойчивость-к-ошибкам\" dir=\"auto\"><a class=\"anchor\" href=\"#%D1%83%D1%81%D1%82%D0%BE%D0%B9%D1%87%D0%B8%D0%B2%D0%BE%D1%81%D1%82%D1%8C-%D0%BA-%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0%D0%BC\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Устойчивость к ошибкам</h2>\n<ul dir=\"auto\">\n<li>Бот не крашит контейнер при невалидном <code>BOT_TOKEN</code>: 5 попыток <span class=\"ambiguous-code-point\" data-tooltip-content=\"с [U+0441] can be confused with c [U+0063]\" aria-label=\"с [U+0441] can be confused with c [U+0063]\"><span class=\"char\">с</span></span> задержкой 5<span class=\"ambiguous-code-point\" data-tooltip-content=\"с [U+0441] can be confused with c [U+0063]\" aria-label=\"с [U+0441] can be confused with c [U+0063]\"><span class=\"char\">с</span></span>, затем бот отключается, админка продолжает работать</li>\n<li>Комиссионные кошельки не обязательны для старта: при отсутствии логируется предупреждение</li>\n<li>При потере связи <span class=\"ambiguous-code-point\" data-tooltip-content=\"с [U+0441] can be confused with c [U+0063]\" aria-label=\"с [U+0441] can be confused with c [U+0063]\"><span class=\"char\">с</span></span> Telegram API: polling ошибки логируются, процесс продолжает работать</li>\n</ul>\n<h2 id=\"user-content-структура-проекта\" dir=\"auto\"><a class=\"anchor\" href=\"#%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Структура проекта</h2>\n<div class=\"code-block-container code-overflow-scroll\"><pre class=\"code-block\"><code class=\"chroma language-text display\">├── src/\n│ ├── admin/ # Админ-панель (Express)\n│ │ ├── routes/ # Роуты админ-панели (вкл. /locales для i18n)\n│ │ ├── views/ # Шаблоны HTML\n│ │ ├── public/ # Статические файлы (CSS)\n│ │ ├── auth.js # Авторизация\n│ │ └── server.js # Express-сервер\n│ ├── config/ # Конфигурация (БД, крипто)\n│ ├── context/ # Контекст и состояния бота\n│ ├── handlers/ # Обработчики команд\n│ │ ├── adminHandlers/ # Обработчики админа\n│ │ └── userHandlers/ # Обработчики пользователя\n│ ├── i18n/ # Интернационализация\n│ │ ├── index.js # tForUser(), tForLang(), LANGUAGE_NAMES\n│ │ └── locales/ # en.json, es.json, de.json (201 ключ)\n│ ├── middleware/ # Промежуточные обработчики\n│ ├── migrations/ # Миграции БД\n│ ├── models/ # Модели данных\n│ ├── router/ # Роутинг Express\n│ ├── services/ # Бизнес-логика\n│ ├── utils/ # Утилиты (логирование, валидация, ошибки)\n│ └── index.js # Точка входа\n├── tor-proxy/ # Tor прокси для SSH и админки\n│ ├── Dockerfile # Alpine + Tor образ\n│ ├── entrypoint.sh # Генерация torrc, валидация env vars\n│ ├── get-onions.sh # Скрипт обновления .env <span class=\"ambiguous-code-point\" data-tooltip-content=\"с [U+0441] can be confused with c [U+0063]\" aria-label=\"с [U+0441] can be confused with c [U+0063]\"><span class=\"char\">с</span></span> onion-адресами\n│ └── hosts/ # Директория для onion-hosts.txt\n├── wg/ # WireGuard конфигурация\n│ └── start.sh # Скрипт запуска контейнера\n├── db/ # SQLite база данных (volume)\n├── uploads/ # Загруженные фото (volume)\n├── Dockerfile # Multi-stage сборка магазина\n├── docker-compose.yml # Конфигурация обоих контейнеров\n├── install.sh # Установщик (POSIX sh)\n├── .dockerignore # Исключения из образа\n├── .env.example # Шаблон переменных\n└── package.json\n</code></pre><button class=\"code-copy ui button\" data-clipboard-text=\"├── src/\n│ ├── admin/ # Админ-панель (Express)\n│ │ ├── routes/ # Роуты админ-панели (вкл. /locales для i18n)\n│ │ ├── views/ # Шаблоны HTML\n│ │ ├── public/ # Статические файлы (CSS)\n│ │ ├── auth.js # Авторизация\n│ │ └── server.js # Express-сервер\n│ ├── config/ # Конфигурация (БД, крипто)\n│ ├── context/ # Контекст и состояния бота\n│ ├── handlers/ # Обработчики команд\n│ │ ├── adminHandlers/ # Обработчики админа\n│ │ └── userHandlers/ # Обработчики пользователя\n│ ├── i18n/ # Интернационализация\n│ │ ├── index.js # tForUser(), tForLang(), LANGUAGE_NAMES\n│ │ └── locales/ # en.json, es.json, de.json (201 ключ)\n│ ├── middleware/ # Промежуточные обработчики\n│ ├── migrations/ # Миграции БД\n│ ├── models/ # Модели данных\n│ ├── router/ # Роутинг Express\n│ ├── services/ # Бизнес-логика\n│ ├── utils/ # Утилиты (логирование, валидация, ошибки)\n│ └── index.js # Точка входа\n├── tor-proxy/ # Tor прокси для SSH и админки\n│ ├── Dockerfile # Alpine + Tor образ\n│ ├── entrypoint.sh # Генерация torrc, валидация env vars\n│ ├── get-onions.sh # Скрипт обновления .env с onion-адресами\n│ └── hosts/ # Директория для onion-hosts.txt\n├── wg/ # WireGuard конфигурация\n│ └── start.sh # Скрипт запуска контейнера\n├── db/ # SQLite база данных (volume)\n├── uploads/ # Загруженные фото (volume)\n├── Dockerfile # Multi-stage сборка магазина\n├── docker-compose.yml # Конфигурация обоих контейнеров\n├── install.sh # Установщик (POSIX sh)\n├── .dockerignore # Исключения из образа\n├── .env.example # Шаблон переменных\n└── package.json\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-copy\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg></button></div><h2 id=\"user-content-разработка\" dir=\"auto\"><a class=\"anchor\" href=\"#%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Разработка</h2>\n<div class=\"code-block-container code-overflow-scroll\"><pre class=\"code-block\"><code class=\"chroma language-bash display\"><span class=\"c1\"># Установка зависимостей</span>\nnpm install\n\n<span class=\"c1\"># Запуск в режиме разработки</span>\nnpm run dev\n\n<span class=\"c1\"># Тесты</span>\nnpm <span class=\"nb\">test</span>\n</code></pre><button class=\"code-copy ui button\" data-clipboard-text=\"# Установка зависимостей\nnpm install\n\n# Запуск в режиме разработки\nnpm run dev\n\n# Тесты\nnpm test\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-copy\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg></button></div><h2 id=\"user-content-лицензия\" dir=\"auto\"><a class=\"anchor\" href=\"#%D0%BB%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" class=\"svg octicon-link\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .75.75 0 0 1 .018-1.042.75.75 0 0 1 1.042-.018 2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018 2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83\"></path></svg></a>Лицензия</h2>\n<p dir=\"auto\">MIT</p>\n\n\t\t\t\n\t\t</div>\n\n\t\t<div class=\"code-line-menu tippy-target\">\n\t\t\t\n\t\t\t<a class=\"item ref-in-new-issue\" role=\"menuitem\" data-url-issue-new=\"/Telegram-Market/telegram-shop/issues/new\" data-url-param-body-link=\"/Telegram-Market/telegram-shop/src/commit/a5ea99b39bf359f52c6118cfba44a4acce5b1c9f/\" rel=\"nofollow noindex\">Reference in New Issue</a>\n\t\t\t\n\t\t\t<a class=\"item view_git_blame\" role=\"menuitem\" href=\"/Telegram-Market/telegram-shop/blame/commit/a5ea99b39bf359f52c6118cfba44a4acce5b1c9f/\">View Git Blame</a>\n\t\t\t<a class=\"item copy-line-permalink\" role=\"menuitem\" data-url=\"/Telegram-Market/telegram-shop/src/commit/a5ea99b39bf359f52c6118cfba44a4acce5b1c9f/\">Copy Permalink</a>\n\t\t</div>\n\t</div>\n</div>\n\n\t\n\n\n\t\t\t</div>\n\n\t\t\t\n\t\t\t\t<div class=\"repo-home-sidebar-top\">\n\t<form class=\"ignore-dirty tw-flex tw-flex-1\" action=\"/Telegram-Market/telegram-shop/search\" method=\"get\">\n\t\t<div class=\"ui small action input tw-flex-1\">\n\t\t\t<input name=\"q\" size=\"10\" placeholder=\"Search code…\" dir=\"auto\"> \n\n<button class=\"ui small icon button\" aria-label=\"Search…\"><svg viewBox=\"0 0 16 16\" class=\"svg octicon-search\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.75.75 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7\"></path></svg></button>\n\n\t\t</div>\n\t</form>\n\n\t<div class=\"flex-list\">\n\t\t<div class=\"flex-item\">\n\t\t\t<div class=\"flex-item-main\">\n\t\t\t\t<div class=\"flex-item-title\">Description</div>\n\t\t\t\t<div class=\"flex-item-body tw-text-15\">\n\t\t\t\t\t<div class=\"tw-flex tw-flex-col tw-gap-2 tw-mt-2\">\n\t\t\t\t\t\t<div class=\"repo-description tw-break-anywhere tw-gap-2\">No description provided\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t<div id=\"repo-topics\" class=\"flex-text-block tw-flex-wrap tw-gap-1 tw-my-1 tw-text-text\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<a class=\"flex-text-block muted\" href=\"/Telegram-Market/telegram-shop/src/branch/main/README.md\">\n\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-book\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.74 3.74 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574M8.755 4.75l-.004 7.322a3.75 3.75 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25\"></path></svg> Readme\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t<span class=\"flex-text-block muted\" data-tooltip-placement=\"top\" data-tooltip-content=\"git: 22 MiB, lfs: 0 B\" aria-label=\"git: 22 MiB, lfs: 0 B\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t<svg viewBox=\"0 0 16 16\" class=\"svg octicon-database\" aria-hidden=\"true\" width=\"16\" height=\"16\"><path d=\"M1 3.5c0-.626.292-1.165.7-1.59.406-.422.956-.767 1.579-1.041C4.525.32 6.195 0 8 0s3.475.32 4.722.869c.622.274 1.172.62 1.578 1.04.408.426.7.965.7 1.591v9c0 .626-.292 1.165-.7 1.59-.406.422-.956.767-1.579 1.041C11.476 15.68 9.806 16 8 16c-1.805 0-3.475-.32-4.721-.869-.623-.274-1.173-.62-1.579-1.04-.408-.426-.7-.965-.7-1.591Zm1.5 0c0 .133.058.318.282.551.227.237.591.483 1.101.707C4.898 5.205 6.353 5.5 8 5.5s3.101-.295 4.118-.742c.508-.224.873-.471 1.1-.708.224-.232.282-.417.282-.55s-.058-.318-.282-.551c-.227-.237-.591-.483-1.101-.707C11.102 1.795 9.647 1.5 8 1.5s-3.101.295-4.118.742c-.508.224-.873.471-1.1.708-.224.232-.282.417-.282.55m0 4.5c0 .133.058.318.282.551.227.237.591.483 1.101.707C4.898 9.705 6.353 10 8 10s3.101-.295 4.118-.742c.508-.224.873-.471 1.1-.708.224-.232.282-.417.282-.55V5.724c-.241.15-.503.286-.778.407C11.475 6.68 9.805 7 8 7s-3.475-.32-4.721-.869a6 6 0 0 1-.779-.407Zm0 2.225V12.5c0 .133.058.318.282.55.227.237.592.484 1.1.708 1.016.447 2.471.742 4.118.742s3.102-.295 4.117-.742c.51-.224.874-.47 1.101-.707.224-.233.282-.418.282-.551v-2.275c-.241.15-.503.285-.778.406-1.247.549-2.917.869-4.722.869s-3.475-.32-4.721-.869a6 6 0 0 1-.779-.406\"></path></svg> <b>22</b> MiB\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n\n\t\t\t\t<div class=\"repo-home-sidebar-bottom\">\n\t<div class=\"flex-list\">\n\t\t\n\n\t\t\n\t\t<div class=\"flex-item\">\n\t\t\t<div class=\"flex-item-main\">\n\t\t\t\t<div class=\"flex-item-title\">\n\t\t\t\t\tLanguages\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"flex-item-body\">\n\t\t\t\t\t<div class=\"language-stats\">\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<div class=\"bar\" style=\"width: 57.6%; background-color: #f1e05a\" data-tooltip-placement=\"top\" data-tooltip-content=\"JavaScript\" data-tooltip-follow-cursor=\"horizontal\" aria-label=\"JavaScript\"></div>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<div class=\"bar\" style=\"width: 23.9%; background-color: #663399\" data-tooltip-placement=\"top\" data-tooltip-content=\"CSS\" data-tooltip-follow-cursor=\"horizontal\" aria-label=\"CSS\"></div>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<div class=\"bar\" style=\"width: 14.4%; background-color: #c6538c\" data-tooltip-placement=\"top\" data-tooltip-content=\"SCSS\" data-tooltip-follow-cursor=\"horizontal\" aria-label=\"SCSS\"></div>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<div class=\"bar\" style=\"width: 3.5%; background-color: #a91e50\" data-tooltip-placement=\"top\" data-tooltip-content=\"EJS\" data-tooltip-follow-cursor=\"horizontal\" aria-label=\"EJS\"></div>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<div class=\"bar\" style=\"width: 0.4%; background-color: #89e051\" data-tooltip-placement=\"top\" data-tooltip-content=\"Shell\" data-tooltip-follow-cursor=\"horizontal\" aria-label=\"Shell\"></div>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<div class=\"bar\" style=\"width: 0.2%; background-color: #cccccc\" data-tooltip-placement=\"top\" data-tooltip-content=\"other\" data-tooltip-follow-cursor=\"horizontal\" aria-label=\"other\"></div>\n\t\t\t\t\t\t\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"language-stats-details\">\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<div class=\"item\">\n\t\t\t\t\t\t\t\t<i class=\"color-icon\" style=\"background-color: #f1e05a\"></i>\n\t\t\t\t\t\t\t\t<span class=\"tw-font-semibold\">\n\t\t\t\t\t\t\t\t\tJavaScript\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t57.6%\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<div class=\"item\">\n\t\t\t\t\t\t\t\t<i class=\"color-icon\" style=\"background-color: #663399\"></i>\n\t\t\t\t\t\t\t\t<span class=\"tw-font-semibold\">\n\t\t\t\t\t\t\t\t\tCSS\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t23.9%\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<div class=\"item\">\n\t\t\t\t\t\t\t\t<i class=\"color-icon\" style=\"background-color: #c6538c\"></i>\n\t\t\t\t\t\t\t\t<span class=\"tw-font-semibold\">\n\t\t\t\t\t\t\t\t\tSCSS\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t14.4%\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<div class=\"item\">\n\t\t\t\t\t\t\t\t<i class=\"color-icon\" style=\"background-color: #a91e50\"></i>\n\t\t\t\t\t\t\t\t<span class=\"tw-font-semibold\">\n\t\t\t\t\t\t\t\t\tEJS\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t3.5%\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<div class=\"item\">\n\t\t\t\t\t\t\t\t<i class=\"color-icon\" style=\"background-color: #89e051\"></i>\n\t\t\t\t\t\t\t\t<span class=\"tw-font-semibold\">\n\t\t\t\t\t\t\t\t\tShell\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t0.4%\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<div class=\"item\">\n\t\t\t\t\t\t\t\t<i class=\"color-icon\" style=\"background-color: #cccccc\"></i>\n\t\t\t\t\t\t\t\t<span class=\"tw-font-semibold\">\n\t\t\t\t\t\t\t\t\tOther\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t0.2%\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t\n\t</div>\n</div>\n\n\t\t\t\n\t\t</div>\n\t</div>\n</div>\n\n\n\t\t\n\t</div>\n\t\n\t<footer class=\"page-footer\" role=\"group\" aria-label=\"Footer\">\n\t<div class=\"left-links\" role=\"contentinfo\" aria-label=\"About Software\">\n\t\t\n\t\t\t<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://about.gitea.com\">Powered by Gitea</a>\n\t\t\n\t\t\n\t\t\tVersion:\n\t\t\t\n\t\t\t\t1.25.4\n\t\t\t\n\t\t\n\t\t\n\t\t\tPage: <strong>72ms</strong>\n\t\t\tTemplate: <strong>6ms</strong>\n\t\t\n\t</div>\n\t<div class=\"right-links\" role=\"group\" aria-label=\"Links\">\n\t\t<div class=\"ui dropdown upward\" tabindex=\"0\" role=\"menu\" aria-haspopup=\"\" aria-controls=\"_aria_dropdown_menu_4\" aria-expanded=\"false\">\n\t\t\t<span class=\"flex-text-inline\"><svg viewBox=\"0 0 16 16\" class=\"svg octicon-globe\" aria-hidden=\"true\" width=\"14\" height=\"14\"><path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0M5.78 8.75a9.64 9.64 0 0 0 1.363 4.177q.383.64.857 1.215c.245-.296.551-.705.857-1.215A9.64 9.64 0 0 0 10.22 8.75Zm4.44-1.5a9.64 9.64 0 0 0-1.363-4.177c-.307-.51-.612-.919-.857-1.215a10 10 0 0 0-.857 1.215A9.64 9.64 0 0 0 5.78 7.25Zm-5.944 1.5H1.543a6.51 6.51 0 0 0 4.666 5.5q-.184-.271-.352-.552c-.715-1.192-1.437-2.874-1.581-4.948m-2.733-1.5h2.733c.144-2.074.866-3.756 1.58-4.948q.18-.295.353-.552a6.51 6.51 0 0 0-4.666 5.5m10.181 1.5c-.144 2.074-.866 3.756-1.58 4.948q-.18.296-.353.552a6.51 6.51 0 0 0 4.666-5.5Zm2.733-1.5a6.51 6.51 0 0 0-4.666-5.5q.184.272.353.552c.714 1.192 1.436 2.874 1.58 4.948Z\"></path></svg> English</span>\n\t\t\t<div class=\"menu language-menu\" tabindex=\"-1\" id=\"_aria_dropdown_menu_4\" role=\"\">\n\t\t\t\t<a lang=\"id-ID\" data-url=\"/?lang=id-ID\" class=\"item \" id=\"_aria_dropdown_item_5\" role=\"menuitem\" tabindex=\"-1\">Bahasa Indonesia</a>\n\t\t\t\t<a lang=\"de-DE\" data-url=\"/?lang=de-DE\" class=\"item \" id=\"_aria_dropdown_item_6\" role=\"menuitem\" tabindex=\"-1\">Deutsch</a>\n\t\t\t\t<a lang=\"en-US\" data-url=\"/?lang=en-US\" class=\"item selected\" id=\"_aria_dropdown_item_7\" role=\"menuitem\" tabindex=\"-1\">English</a>\n\t\t\t\t<a lang=\"es-ES\" data-url=\"/?lang=es-ES\" class=\"item \" id=\"_aria_dropdown_item_8\" role=\"menuitem\" tabindex=\"-1\">Español</a>\n\t\t\t\t<a lang=\"fr-FR\" data-url=\"/?lang=fr-FR\" class=\"item \" id=\"_aria_dropdown_item_9\" role=\"menuitem\" tabindex=\"-1\">Français</a>\n\t\t\t\t<a lang=\"ga-IE\" data-url=\"/?lang=ga-IE\" class=\"item \" id=\"_aria_dropdown_item_10\" role=\"menuitem\" tabindex=\"-1\">Gaeilge</a>\n\t\t\t\t<a lang=\"it-IT\" data-url=\"/?lang=it-IT\" class=\"item \" id=\"_aria_dropdown_item_11\" role=\"menuitem\" tabindex=\"-1\">Italiano</a>\n\t\t\t\t<a lang=\"lv-LV\" data-url=\"/?lang=lv-LV\" class=\"item \" id=\"_aria_dropdown_item_12\" role=\"menuitem\" tabindex=\"-1\">Latviešu</a>\n\t\t\t\t<a lang=\"hu-HU\" data-url=\"/?lang=hu-HU\" class=\"item \" id=\"_aria_dropdown_item_13\" role=\"menuitem\" tabindex=\"-1\">Magyar nyelv</a>\n\t\t\t\t<a lang=\"nl-NL\" data-url=\"/?lang=nl-NL\" class=\"item \" id=\"_aria_dropdown_item_14\" role=\"menuitem\" tabindex=\"-1\">Nederlands</a>\n\t\t\t\t<a lang=\"pl-PL\" data-url=\"/?lang=pl-PL\" class=\"item \" id=\"_aria_dropdown_item_15\" role=\"menuitem\" tabindex=\"-1\">Polski</a>\n\t\t\t\t<a lang=\"pt-PT\" data-url=\"/?lang=pt-PT\" class=\"item \" id=\"_aria_dropdown_item_16\" role=\"menuitem\" tabindex=\"-1\">Português de Portugal</a>\n\t\t\t\t<a lang=\"pt-BR\" data-url=\"/?lang=pt-BR\" class=\"item \" id=\"_aria_dropdown_item_17\" role=\"menuitem\" tabindex=\"-1\">Português do Brasil</a>\n\t\t\t\t<a lang=\"fi-FI\" data-url=\"/?lang=fi-FI\" class=\"item \" id=\"_aria_dropdown_item_18\" role=\"menuitem\" tabindex=\"-1\">Suomi</a>\n\t\t\t\t<a lang=\"sv-SE\" data-url=\"/?lang=sv-SE\" class=\"item \" id=\"_aria_dropdown_item_19\" role=\"menuitem\" tabindex=\"-1\">Svenska</a>\n\t\t\t\t<a lang=\"tr-TR\" data-url=\"/?lang=tr-TR\" class=\"item \" id=\"_aria_dropdown_item_20\" role=\"menuitem\" tabindex=\"-1\">Türkçe</a>\n\t\t\t\t<a lang=\"cs-CZ\" data-url=\"/?lang=cs-CZ\" class=\"item \" id=\"_aria_dropdown_item_21\" role=\"menuitem\" tabindex=\"-1\">Čeština</a>\n\t\t\t\t<a lang=\"el-GR\" data-url=\"/?lang=el-GR\" class=\"item \" id=\"_aria_dropdown_item_22\" role=\"menuitem\" tabindex=\"-1\">Ελληνικά</a>\n\t\t\t\t<a lang=\"bg-BG\" data-url=\"/?lang=bg-BG\" class=\"item \" id=\"_aria_dropdown_item_23\" role=\"menuitem\" tabindex=\"-1\">Български</a>\n\t\t\t\t<a lang=\"ru-RU\" data-url=\"/?lang=ru-RU\" class=\"item \" id=\"_aria_dropdown_item_24\" role=\"menuitem\" tabindex=\"-1\">Русский</a>\n\t\t\t\t<a lang=\"uk-UA\" data-url=\"/?lang=uk-UA\" class=\"item \" id=\"_aria_dropdown_item_25\" role=\"menuitem\" tabindex=\"-1\">Українська</a>\n\t\t\t\t<a lang=\"fa-IR\" data-url=\"/?lang=fa-IR\" class=\"item \" id=\"_aria_dropdown_item_26\" role=\"menuitem\" tabindex=\"-1\">فارسی</a>\n\t\t\t\t<a lang=\"ml-IN\" data-url=\"/?lang=ml-IN\" class=\"item \" id=\"_aria_dropdown_item_27\" role=\"menuitem\" tabindex=\"-1\">മലയാളം</a>\n\t\t\t\t<a lang=\"ja-JP\" data-url=\"/?lang=ja-JP\" class=\"item \" id=\"_aria_dropdown_item_28\" role=\"menuitem\" tabindex=\"-1\">日本語</a>\n\t\t\t\t<a lang=\"zh-CN\" data-url=\"/?lang=zh-CN\" class=\"item \" id=\"_aria_dropdown_item_29\" role=\"menuitem\" tabindex=\"-1\">简体中文</a>\n\t\t\t\t<a lang=\"zh-TW\" data-url=\"/?lang=zh-TW\" class=\"item \" id=\"_aria_dropdown_item_30\" role=\"menuitem\" tabindex=\"-1\">繁體中文(台灣)</a>\n\t\t\t\t<a lang=\"zh-HK\" data-url=\"/?lang=zh-HK\" class=\"item \" id=\"_aria_dropdown_item_31\" role=\"menuitem\" tabindex=\"-1\">繁體中文(香港)</a>\n\t\t\t\t<a lang=\"ko-KR\" data-url=\"/?lang=ko-KR\" class=\"item \" id=\"_aria_dropdown_item_32\" role=\"menuitem\" tabindex=\"-1\">한국어</a>\n\t\t\t\t</div>\n\t\t</div>\n\t\t<a href=\"/assets/licenses.txt\">Licenses</a>\n\t\t<a href=\"/api/swagger\">API</a>\n\t\t\n\t</div>\n</footer>\n\n\t\n\n\n\n</body></html>",
"httpStatus": 200,
"httpStatusText": "OK",
"metadata": {
"author": "Telegram-Market",
"description": "telegram-shop",
"keywords": "go,git,self-hosted,gitea",
"lang": "en-US",
"og:image": "https://git.softuniq.eu/avatars/58dd88222670c696bec7a81cd0964d1b",
"og:site_name": "Gitea: Git with a cup of tea",
"og:title": "telegram-shop",
"og:type": "object",
"og:url": "https://git.softuniq.eu/Telegram-Market/telegram-shop",
"referrer": "no-referrer",
"viewport": "width=device-width, initial-scale=1"
},
"title": "telegram-shop",
"url": "https://git.softuniq.eu/Telegram-Market/telegram-shop",
"usage": {
"tokens": 57381
}
},
"meta": {
"usage": {
"tokens": 57381
}
},
"status": 200
}