59 lines
140 KiB
JSON
59 lines
140 KiB
JSON
{
|
||
"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=\"{"x-csrf-token": "HwDhzaLd33Y-hbQznILy7HwrLEQ6MTc4NTkzMjg0Njg0ODIyOTAxMw"}\" 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 "%s"\" 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 <repo-url> <span class=\"o\">&&</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 <repo-url> && 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 <repo-url> <span class=\"o\">&&</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 <repo-url> && 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 "console.log(require('crypto').randomBytes(32).toString('hex'))"\"><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 -> host SSH)\n Admin : yyyyy.onion (port 80 -> 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 -> host SSH)\n Admin : yyyyy.onion (port 80 -> 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/<code>.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
|
||
} |