diff --git a/package.json b/package.json
index 50a09a5..8cd9fd7 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "pezkuwi-telegram-miniapp",
- "version": "1.0.227",
+ "version": "1.0.228",
"type": "module",
"description": "Pezkuwichain Telegram Mini App - Forum, Announcements, Rewards",
"author": "Pezkuwichain Team",
diff --git a/src/components/p2p/DepositWithdrawModal.tsx b/src/components/p2p/DepositWithdrawModal.tsx
index 7070b89..6dff4b9 100644
--- a/src/components/p2p/DepositWithdrawModal.tsx
+++ b/src/components/p2p/DepositWithdrawModal.tsx
@@ -1,4 +1,4 @@
-import { useState } from 'react';
+import { useState, useEffect } from 'react';
import {
X,
ArrowDownToLine,
@@ -51,6 +51,13 @@ export function DepositWithdrawModal({
const [activeTab, setActiveTab] = useState<'deposit' | 'withdraw'>(initialTab);
+ // Sync tab when modal opens with a different initialTab
+ useEffect(() => {
+ if (isOpen) {
+ setActiveTab(initialTab);
+ }
+ }, [isOpen, initialTab]);
+
// Deposit state
const [depositToken, setDepositToken] = useState<'HEZ' | 'PEZ'>('HEZ');
const [depositAmount, setDepositAmount] = useState('');
@@ -231,7 +238,7 @@ export function DepositWithdrawModal({
{/* Modal */}
handleAccept(offer)}
className={cn(
'px-3 py-1.5 text-xs font-medium rounded-lg transition-colors',
- adType === 'buy'
+ adType === 'sell'
? 'bg-green-500 hover:bg-green-600 text-white'
: 'bg-red-500 hover:bg-red-600 text-white'
)}
>
- {adType === 'buy' ? t('p2p.buy') : t('p2p.sell')}
+ {adType === 'sell' ? t('p2p.buy') : t('p2p.sell')}
diff --git a/src/index.css b/src/index.css
index 8312845..4ae2f97 100644
--- a/src/index.css
+++ b/src/index.css
@@ -14,6 +14,8 @@
--muted-foreground: 215 20.2% 65.1%;
--accent: 217.2 32.6% 17.5%;
--accent-foreground: 210 40% 98%;
+ --card: 222.2 84% 6.5%;
+ --card-foreground: 210 40% 98%;
--border: 217.2 32.6% 17.5%;
--radius: 0.75rem;
}
diff --git a/src/sections/P2P.tsx b/src/sections/P2P.tsx
index 092c7e1..3fefbdc 100644
--- a/src/sections/P2P.tsx
+++ b/src/sections/P2P.tsx
@@ -195,7 +195,7 @@ export function P2PSection() {
onClick={() => handleTabChange(tab.id)}
className={cn(
'flex-1 py-2 text-xs font-medium rounded-lg transition-colors',
- activeTab === tab.id ? 'bg-card text-foreground shadow-sm' : 'text-muted-foreground'
+ activeTab === tab.id ? 'bg-cyan-500/20 text-cyan-400 shadow-sm' : 'text-muted-foreground'
)}
>
{tab.label}
diff --git a/src/version.json b/src/version.json
index d032c45..2622079 100644
--- a/src/version.json
+++ b/src/version.json
@@ -1,5 +1,5 @@
{
- "version": "1.0.227",
- "buildTime": "2026-02-26T17:26:18.861Z",
- "buildNumber": 1772126778862
+ "version": "1.0.228",
+ "buildTime": "2026-02-26T21:44:34.122Z",
+ "buildNumber": 1772142274123
}
diff --git a/supabase/functions/accept-p2p-offer/index.ts b/supabase/functions/accept-p2p-offer/index.ts
index f93e9bc..83a02df 100644
--- a/supabase/functions/accept-p2p-offer/index.ts
+++ b/supabase/functions/accept-p2p-offer/index.ts
@@ -95,9 +95,13 @@ serve(async (req) => {
const body: AcceptP2POfferRequest = await req.json();
const { sessionToken, offerId, amount, buyerWallet } = body;
- // Get bot token for session verification
- const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
- if (!botToken) {
+ // Get bot tokens for session verification (dual bot support)
+ const botTokens: string[] = [];
+ const _mainToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const _krdToken = Deno.env.get('TELEGRAM_BOT_TOKEN_KRD');
+ if (_mainToken) botTokens.push(_mainToken);
+ if (_krdToken) botTokens.push(_krdToken);
+ if (botTokens.length === 0) {
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
status: 500,
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
@@ -112,7 +116,11 @@ serve(async (req) => {
});
}
- const telegramId = verifySessionToken(sessionToken, botToken);
+ let telegramId: number | null = null;
+ for (const bt of botTokens) {
+ telegramId = verifySessionToken(sessionToken, bt);
+ if (telegramId) break;
+ }
if (!telegramId) {
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
status: 401,
@@ -144,8 +152,8 @@ serve(async (req) => {
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
const {
data: { users: authUsers },
- } = await supabase.auth.admin.listUsers();
- const authUser = authUsers?.find((u) => u.email === telegramEmail);
+ } = await supabase.auth.admin.listUsers({ perPage: 1000 });
+ const authUser = authUsers?.find((u: { email?: string }) => u.email === telegramEmail);
if (!authUser) {
return new Response(JSON.stringify({ error: 'User not found. Please authenticate first.' }), {
diff --git a/supabase/functions/announcement-reaction/index.ts b/supabase/functions/announcement-reaction/index.ts
index f41767c..39f3c19 100644
--- a/supabase/functions/announcement-reaction/index.ts
+++ b/supabase/functions/announcement-reaction/index.ts
@@ -81,16 +81,24 @@ serve(async (req) => {
const supabaseUrl = Deno.env.get('SUPABASE_URL')!;
const supabaseServiceKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!;
- const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const botTokens: string[] = [];
+ const _mainToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const _krdToken = Deno.env.get('TELEGRAM_BOT_TOKEN_KRD');
+ if (_mainToken) botTokens.push(_mainToken);
+ if (_krdToken) botTokens.push(_krdToken);
- if (!botToken) {
+ if (botTokens.length === 0) {
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
status: 500,
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
});
}
- const telegramUser = validateInitData(initData, botToken);
+ let telegramUser: TelegramUser | null = null;
+ for (const bt of botTokens) {
+ telegramUser = validateInitData(initData, bt);
+ if (telegramUser) break;
+ }
if (!telegramUser) {
return new Response(JSON.stringify({ error: 'Invalid Telegram data' }), {
status: 401,
diff --git a/supabase/functions/create-offer-telegram/index.ts b/supabase/functions/create-offer-telegram/index.ts
index b35d1ad..7b1b311 100644
--- a/supabase/functions/create-offer-telegram/index.ts
+++ b/supabase/functions/create-offer-telegram/index.ts
@@ -114,9 +114,13 @@ serve(async (req) => {
adType = 'sell',
} = body;
- // Get bot token for session verification
- const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
- if (!botToken) {
+ // Get bot tokens for session verification (dual bot support)
+ const botTokens: string[] = [];
+ const _mainToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const _krdToken = Deno.env.get('TELEGRAM_BOT_TOKEN_KRD');
+ if (_mainToken) botTokens.push(_mainToken);
+ if (_krdToken) botTokens.push(_krdToken);
+ if (botTokens.length === 0) {
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
status: 500,
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
@@ -131,7 +135,11 @@ serve(async (req) => {
});
}
- const telegramId = verifySessionToken(sessionToken, botToken);
+ let telegramId: number | null = null;
+ for (const bt of botTokens) {
+ telegramId = verifySessionToken(sessionToken, bt);
+ if (telegramId) break;
+ }
if (!telegramId) {
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
status: 401,
@@ -156,8 +164,8 @@ serve(async (req) => {
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
const {
data: { users: authUsers },
- } = await supabase.auth.admin.listUsers();
- const authUser = authUsers?.find((u) => u.email === telegramEmail);
+ } = await supabase.auth.admin.listUsers({ perPage: 1000 });
+ const authUser = authUsers?.find((u: { email?: string }) => u.email === telegramEmail);
if (!authUser) {
return new Response(JSON.stringify({ error: 'User not found. Please authenticate first.' }), {
diff --git a/supabase/functions/get-deposit-code/index.ts b/supabase/functions/get-deposit-code/index.ts
index b862be8..539a5b3 100644
--- a/supabase/functions/get-deposit-code/index.ts
+++ b/supabase/functions/get-deposit-code/index.ts
@@ -83,16 +83,24 @@ serve(async (req) => {
const supabaseUrl = Deno.env.get('SUPABASE_URL')!;
const supabaseServiceKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!;
- const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const botTokens: string[] = [];
+ const _mainToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const _krdToken = Deno.env.get('TELEGRAM_BOT_TOKEN_KRD');
+ if (_mainToken) botTokens.push(_mainToken);
+ if (_krdToken) botTokens.push(_krdToken);
- if (!botToken) {
+ if (botTokens.length === 0) {
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
status: 500,
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
});
}
- const telegramUser = validateInitData(initData, botToken);
+ let telegramUser: TelegramUser | null = null;
+ for (const bt of botTokens) {
+ telegramUser = validateInitData(initData, bt);
+ if (telegramUser) break;
+ }
if (!telegramUser) {
return new Response(JSON.stringify({ error: 'Invalid Telegram data' }), {
status: 401,
diff --git a/supabase/functions/get-deposit-info/index.ts b/supabase/functions/get-deposit-info/index.ts
index c7ff87c..09e25c6 100644
--- a/supabase/functions/get-deposit-info/index.ts
+++ b/supabase/functions/get-deposit-info/index.ts
@@ -165,17 +165,25 @@ serve(async (req) => {
const supabaseUrl = Deno.env.get('SUPABASE_URL')!;
const supabaseServiceKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!;
- const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const botTokens: string[] = [];
+ const _mainToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const _krdToken = Deno.env.get('TELEGRAM_BOT_TOKEN_KRD');
+ if (_mainToken) botTokens.push(_mainToken);
+ if (_krdToken) botTokens.push(_krdToken);
const tronHdMnemonic = Deno.env.get('DEPOSIT_TRON_HD_MNEMONIC');
- if (!botToken) {
+ if (botTokens.length === 0) {
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
status: 500,
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
});
}
- const telegramUser = validateInitData(initData, botToken);
+ let telegramUser: TelegramUser | null = null;
+ for (const bt of botTokens) {
+ telegramUser = validateInitData(initData, bt);
+ if (telegramUser) break;
+ }
if (!telegramUser) {
return new Response(JSON.stringify({ error: 'Invalid Telegram data' }), {
status: 401,
diff --git a/supabase/functions/get-deposits/index.ts b/supabase/functions/get-deposits/index.ts
index e518483..3933af4 100644
--- a/supabase/functions/get-deposits/index.ts
+++ b/supabase/functions/get-deposits/index.ts
@@ -74,16 +74,24 @@ serve(async (req) => {
const supabaseUrl = Deno.env.get('SUPABASE_URL')!;
const supabaseServiceKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!;
- const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const botTokens: string[] = [];
+ const _mainToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const _krdToken = Deno.env.get('TELEGRAM_BOT_TOKEN_KRD');
+ if (_mainToken) botTokens.push(_mainToken);
+ if (_krdToken) botTokens.push(_krdToken);
- if (!botToken) {
+ if (botTokens.length === 0) {
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
status: 500,
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
});
}
- const telegramUser = validateInitData(initData, botToken);
+ let telegramUser: TelegramUser | null = null;
+ for (const bt of botTokens) {
+ telegramUser = validateInitData(initData, bt);
+ if (telegramUser) break;
+ }
if (!telegramUser) {
return new Response(JSON.stringify({ error: 'Invalid Telegram data' }), {
status: 401,
diff --git a/supabase/functions/get-internal-balance/index.ts b/supabase/functions/get-internal-balance/index.ts
index 240096d..d324b4f 100644
--- a/supabase/functions/get-internal-balance/index.ts
+++ b/supabase/functions/get-internal-balance/index.ts
@@ -93,8 +93,12 @@ serve(async (req) => {
const { sessionToken } = body;
// Get bot token for session verification
- const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
- if (!botToken) {
+ const botTokens: string[] = [];
+ const _mainToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const _krdToken = Deno.env.get('TELEGRAM_BOT_TOKEN_KRD');
+ if (_mainToken) botTokens.push(_mainToken);
+ if (_krdToken) botTokens.push(_krdToken);
+ if (botTokens.length === 0) {
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
status: 500,
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
@@ -109,7 +113,11 @@ serve(async (req) => {
});
}
- const telegramId = verifySessionToken(sessionToken, botToken);
+ let telegramId: number | null = null;
+ for (const bt of botTokens) {
+ telegramId = verifySessionToken(sessionToken, bt);
+ if (telegramId) break;
+ }
if (!telegramId) {
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
status: 401,
@@ -127,7 +135,7 @@ serve(async (req) => {
const {
data: { users: authUsers },
} = await supabase.auth.admin.listUsers({ perPage: 1000 });
- const authUser = authUsers?.find((u) => u.email === telegramEmail);
+ const authUser = authUsers?.find((u: { email?: string }) => u.email === telegramEmail);
if (!authUser) {
return new Response(JSON.stringify({ error: 'User not found. Please authenticate first.' }), {
diff --git a/supabase/functions/get-my-offers/index.ts b/supabase/functions/get-my-offers/index.ts
index cd4d231..96bd94d 100644
--- a/supabase/functions/get-my-offers/index.ts
+++ b/supabase/functions/get-my-offers/index.ts
@@ -93,9 +93,13 @@ serve(async (req) => {
const body: GetMyOffersRequest = await req.json();
const { sessionToken, status } = body;
- // Get bot token for session verification
- const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
- if (!botToken) {
+ // Get bot tokens for session verification (dual bot support)
+ const botTokens: string[] = [];
+ const _mainToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const _krdToken = Deno.env.get('TELEGRAM_BOT_TOKEN_KRD');
+ if (_mainToken) botTokens.push(_mainToken);
+ if (_krdToken) botTokens.push(_krdToken);
+ if (botTokens.length === 0) {
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
status: 500,
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
@@ -110,7 +114,11 @@ serve(async (req) => {
});
}
- const telegramId = verifySessionToken(sessionToken, botToken);
+ let telegramId: number | null = null;
+ for (const bt of botTokens) {
+ telegramId = verifySessionToken(sessionToken, bt);
+ if (telegramId) break;
+ }
if (!telegramId) {
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
status: 401,
@@ -127,8 +135,8 @@ serve(async (req) => {
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
const {
data: { users: authUsers },
- } = await supabase.auth.admin.listUsers();
- const authUser = authUsers?.find((u) => u.email === telegramEmail);
+ } = await supabase.auth.admin.listUsers({ perPage: 1000 });
+ const authUser = authUsers?.find((u: { email?: string }) => u.email === telegramEmail);
if (!authUser) {
return new Response(
diff --git a/supabase/functions/get-p2p-offers/index.ts b/supabase/functions/get-p2p-offers/index.ts
index 0a32edf..07c30c3 100644
--- a/supabase/functions/get-p2p-offers/index.ts
+++ b/supabase/functions/get-p2p-offers/index.ts
@@ -105,8 +105,12 @@ serve(async (req) => {
} = body;
// Get bot token for session verification
- const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
- if (!botToken) {
+ const botTokens: string[] = [];
+ const _mainToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const _krdToken = Deno.env.get('TELEGRAM_BOT_TOKEN_KRD');
+ if (_mainToken) botTokens.push(_mainToken);
+ if (_krdToken) botTokens.push(_krdToken);
+ if (botTokens.length === 0) {
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
status: 500,
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
@@ -121,7 +125,11 @@ serve(async (req) => {
});
}
- const telegramId = verifySessionToken(sessionToken, botToken);
+ let telegramId: number | null = null;
+ for (const bt of botTokens) {
+ telegramId = verifySessionToken(sessionToken, bt);
+ if (telegramId) break;
+ }
if (!telegramId) {
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
status: 401,
@@ -139,7 +147,7 @@ serve(async (req) => {
const {
data: { users: authUsers },
} = await supabase.auth.admin.listUsers({ perPage: 1000 });
- const authUser = authUsers?.find((u) => u.email === telegramEmail);
+ const authUser = authUsers?.find((u: { email?: string }) => u.email === telegramEmail);
if (!authUser) {
return new Response(JSON.stringify({ error: 'User not found. Please authenticate first.' }), {
diff --git a/supabase/functions/get-p2p-trades/index.ts b/supabase/functions/get-p2p-trades/index.ts
index 5407f6a..54a5dfe 100644
--- a/supabase/functions/get-p2p-trades/index.ts
+++ b/supabase/functions/get-p2p-trades/index.ts
@@ -93,9 +93,13 @@ serve(async (req) => {
const body: GetP2PTradesRequest = await req.json();
const { sessionToken, status } = body;
- // Get bot token for session verification
- const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
- if (!botToken) {
+ // Get bot tokens for session verification (dual bot support)
+ const botTokens: string[] = [];
+ const _mainToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const _krdToken = Deno.env.get('TELEGRAM_BOT_TOKEN_KRD');
+ if (_mainToken) botTokens.push(_mainToken);
+ if (_krdToken) botTokens.push(_krdToken);
+ if (botTokens.length === 0) {
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
status: 500,
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
@@ -110,7 +114,11 @@ serve(async (req) => {
});
}
- const telegramId = verifySessionToken(sessionToken, botToken);
+ let telegramId: number | null = null;
+ for (const bt of botTokens) {
+ telegramId = verifySessionToken(sessionToken, bt);
+ if (telegramId) break;
+ }
if (!telegramId) {
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
status: 401,
@@ -127,8 +135,8 @@ serve(async (req) => {
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
const {
data: { users: authUsers },
- } = await supabase.auth.admin.listUsers();
- const authUser = authUsers?.find((u) => u.email === telegramEmail);
+ } = await supabase.auth.admin.listUsers({ perPage: 1000 });
+ const authUser = authUsers?.find((u: { email?: string }) => u.email === telegramEmail);
if (!authUser) {
return new Response(JSON.stringify({ error: 'User not found. Please authenticate first.' }), {
diff --git a/supabase/functions/get-payment-methods/index.ts b/supabase/functions/get-payment-methods/index.ts
index a18a714..892f420 100644
--- a/supabase/functions/get-payment-methods/index.ts
+++ b/supabase/functions/get-payment-methods/index.ts
@@ -93,9 +93,13 @@ serve(async (req) => {
const body: GetPaymentMethodsRequest = await req.json();
const { sessionToken, currency } = body;
- // Get bot token for session verification
- const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
- if (!botToken) {
+ // Get bot tokens for session verification (dual bot support)
+ const botTokens: string[] = [];
+ const _mainToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const _krdToken = Deno.env.get('TELEGRAM_BOT_TOKEN_KRD');
+ if (_mainToken) botTokens.push(_mainToken);
+ if (_krdToken) botTokens.push(_krdToken);
+ if (botTokens.length === 0) {
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
status: 500,
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
@@ -110,7 +114,11 @@ serve(async (req) => {
});
}
- const telegramId = verifySessionToken(sessionToken, botToken);
+ let telegramId: number | null = null;
+ for (const bt of botTokens) {
+ telegramId = verifySessionToken(sessionToken, bt);
+ if (telegramId) break;
+ }
if (!telegramId) {
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
status: 401,
@@ -127,8 +135,8 @@ serve(async (req) => {
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
const {
data: { users: authUsers },
- } = await supabase.auth.admin.listUsers();
- const authUser = authUsers?.find((u) => u.email === telegramEmail);
+ } = await supabase.auth.admin.listUsers({ perPage: 1000 });
+ const authUser = authUsers?.find((u: { email?: string }) => u.email === telegramEmail);
if (!authUser) {
return new Response(JSON.stringify({ error: 'User not found. Please authenticate first.' }), {
diff --git a/supabase/functions/p2p-dispute/index.ts b/supabase/functions/p2p-dispute/index.ts
index 819cb2b..d8b6194 100644
--- a/supabase/functions/p2p-dispute/index.ts
+++ b/supabase/functions/p2p-dispute/index.ts
@@ -99,9 +99,13 @@ serve(async (req) => {
const body: P2PDisputeRequest = await req.json();
const { sessionToken, action, tradeId, reason, category, evidenceUrl, evidenceType, description } = body;
- // Get bot token for session verification
- const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
- if (!botToken) {
+ // Get bot tokens for session verification (dual bot support)
+ const botTokens: string[] = [];
+ const _mainToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const _krdToken = Deno.env.get('TELEGRAM_BOT_TOKEN_KRD');
+ if (_mainToken) botTokens.push(_mainToken);
+ if (_krdToken) botTokens.push(_krdToken);
+ if (botTokens.length === 0) {
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
status: 500,
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
@@ -116,7 +120,11 @@ serve(async (req) => {
});
}
- const telegramId = verifySessionToken(sessionToken, botToken);
+ let telegramId: number | null = null;
+ for (const bt of botTokens) {
+ telegramId = verifySessionToken(sessionToken, bt);
+ if (telegramId) break;
+ }
if (!telegramId) {
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
status: 401,
@@ -148,8 +156,8 @@ serve(async (req) => {
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
const {
data: { users: authUsers },
- } = await supabase.auth.admin.listUsers();
- const authUser = authUsers?.find((u) => u.email === telegramEmail);
+ } = await supabase.auth.admin.listUsers({ perPage: 1000 });
+ const authUser = authUsers?.find((u: { email?: string }) => u.email === telegramEmail);
if (!authUser) {
return new Response(JSON.stringify({ error: 'User not found. Please authenticate first.' }), {
diff --git a/supabase/functions/p2p-messages/index.ts b/supabase/functions/p2p-messages/index.ts
index 95fb91f..3437b3c 100644
--- a/supabase/functions/p2p-messages/index.ts
+++ b/supabase/functions/p2p-messages/index.ts
@@ -95,9 +95,13 @@ serve(async (req) => {
const body: P2PMessagesRequest = await req.json();
const { sessionToken, action, tradeId, message } = body;
- // Get bot token for session verification
- const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
- if (!botToken) {
+ // Get bot tokens for session verification (dual bot support)
+ const botTokens: string[] = [];
+ const _mainToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const _krdToken = Deno.env.get('TELEGRAM_BOT_TOKEN_KRD');
+ if (_mainToken) botTokens.push(_mainToken);
+ if (_krdToken) botTokens.push(_krdToken);
+ if (botTokens.length === 0) {
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
status: 500,
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
@@ -112,7 +116,11 @@ serve(async (req) => {
});
}
- const telegramId = verifySessionToken(sessionToken, botToken);
+ let telegramId: number | null = null;
+ for (const bt of botTokens) {
+ telegramId = verifySessionToken(sessionToken, bt);
+ if (telegramId) break;
+ }
if (!telegramId) {
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
status: 401,
@@ -144,8 +152,8 @@ serve(async (req) => {
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
const {
data: { users: authUsers },
- } = await supabase.auth.admin.listUsers();
- const authUser = authUsers?.find((u) => u.email === telegramEmail);
+ } = await supabase.auth.admin.listUsers({ perPage: 1000 });
+ const authUser = authUsers?.find((u: { email?: string }) => u.email === telegramEmail);
if (!authUser) {
return new Response(JSON.stringify({ error: 'User not found. Please authenticate first.' }), {
diff --git a/supabase/functions/request-withdraw-telegram/index.ts b/supabase/functions/request-withdraw-telegram/index.ts
index 5a7940b..bd309a7 100644
--- a/supabase/functions/request-withdraw-telegram/index.ts
+++ b/supabase/functions/request-withdraw-telegram/index.ts
@@ -114,9 +114,13 @@ serve(async (req) => {
const { sessionToken, token, amount, walletAddress } = body;
- // Get bot token for session verification
- const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
- if (!botToken) {
+ // Get bot tokens for session verification (dual bot support)
+ const botTokens: string[] = [];
+ const _mainToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const _krdToken = Deno.env.get('TELEGRAM_BOT_TOKEN_KRD');
+ if (_mainToken) botTokens.push(_mainToken);
+ if (_krdToken) botTokens.push(_krdToken);
+ if (botTokens.length === 0) {
return new Response(
JSON.stringify({ success: false, error: 'Server configuration error' }),
{ status: 500, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }
@@ -131,7 +135,11 @@ serve(async (req) => {
);
}
- const telegramId = verifySessionToken(sessionToken, botToken);
+ let telegramId: number | null = null;
+ for (const bt of botTokens) {
+ telegramId = verifySessionToken(sessionToken, bt);
+ if (telegramId) break;
+ }
if (!telegramId) {
return new Response(
JSON.stringify({ success: false, error: 'Invalid or expired session token' }),
diff --git a/supabase/functions/save-wallet-address/index.ts b/supabase/functions/save-wallet-address/index.ts
index 03db4ba..0c92274 100644
--- a/supabase/functions/save-wallet-address/index.ts
+++ b/supabase/functions/save-wallet-address/index.ts
@@ -102,16 +102,24 @@ serve(async (req) => {
const supabaseUrl = Deno.env.get('SUPABASE_URL')!;
const supabaseServiceKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!;
- const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const botTokens: string[] = [];
+ const _mainToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const _krdToken = Deno.env.get('TELEGRAM_BOT_TOKEN_KRD');
+ if (_mainToken) botTokens.push(_mainToken);
+ if (_krdToken) botTokens.push(_krdToken);
- if (!botToken) {
+ if (botTokens.length === 0) {
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
status: 500,
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
});
}
- const telegramUser = validateInitData(initData, botToken);
+ let telegramUser: TelegramUser | null = null;
+ for (const bt of botTokens) {
+ telegramUser = validateInitData(initData, bt);
+ if (telegramUser) break;
+ }
if (!telegramUser) {
return new Response(JSON.stringify({ error: 'Invalid Telegram data' }), {
status: 401,
diff --git a/supabase/functions/trade-action/index.ts b/supabase/functions/trade-action/index.ts
index b067313..863e2f4 100644
--- a/supabase/functions/trade-action/index.ts
+++ b/supabase/functions/trade-action/index.ts
@@ -99,9 +99,13 @@ serve(async (req) => {
const body: TradeActionRequest = await req.json();
const { sessionToken, tradeId, action, payload } = body;
- // Get bot token for session verification
- const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
- if (!botToken) {
+ // Get bot tokens for session verification (dual bot support)
+ const botTokens: string[] = [];
+ const _mainToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const _krdToken = Deno.env.get('TELEGRAM_BOT_TOKEN_KRD');
+ if (_mainToken) botTokens.push(_mainToken);
+ if (_krdToken) botTokens.push(_krdToken);
+ if (botTokens.length === 0) {
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
status: 500,
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
@@ -116,7 +120,11 @@ serve(async (req) => {
});
}
- const telegramId = verifySessionToken(sessionToken, botToken);
+ let telegramId: number | null = null;
+ for (const bt of botTokens) {
+ telegramId = verifySessionToken(sessionToken, bt);
+ if (telegramId) break;
+ }
if (!telegramId) {
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
status: 401,
@@ -149,8 +157,8 @@ serve(async (req) => {
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
const {
data: { users: authUsers },
- } = await supabase.auth.admin.listUsers();
- const authUser = authUsers?.find((u) => u.email === telegramEmail);
+ } = await supabase.auth.admin.listUsers({ perPage: 1000 });
+ const authUser = authUsers?.find((u: { email?: string }) => u.email === telegramEmail);
if (!authUser) {
return new Response(JSON.stringify({ error: 'User not found. Please authenticate first.' }), {
diff --git a/supabase/functions/verify-deposit-telegram/index.ts b/supabase/functions/verify-deposit-telegram/index.ts
index 5d80b19..57ddc02 100644
--- a/supabase/functions/verify-deposit-telegram/index.ts
+++ b/supabase/functions/verify-deposit-telegram/index.ts
@@ -318,9 +318,13 @@ serve(async (req) => {
}
const { sessionToken, txHash, token, expectedAmount, blockNumber } = body;
- // Get bot token for session verification
- const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
- if (!botToken) {
+ // Get bot tokens for session verification (dual bot support)
+ const botTokens: string[] = [];
+ const _mainToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
+ const _krdToken = Deno.env.get('TELEGRAM_BOT_TOKEN_KRD');
+ if (_mainToken) botTokens.push(_mainToken);
+ if (_krdToken) botTokens.push(_krdToken);
+ if (botTokens.length === 0) {
return new Response(JSON.stringify({ success: false, error: 'Server configuration error' }), {
status: 500,
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
@@ -335,7 +339,11 @@ serve(async (req) => {
});
}
- const telegramId = verifySessionToken(sessionToken, botToken);
+ let telegramId: number | null = null;
+ for (const bt of botTokens) {
+ telegramId = verifySessionToken(sessionToken, bt);
+ if (telegramId) break;
+ }
if (!telegramId) {
return new Response(
JSON.stringify({ success: false, error: 'Invalid or expired session token' }),
diff --git a/tailwind.config.js b/tailwind.config.js
index 02fded4..05630d2 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -24,6 +24,10 @@ export default {
DEFAULT: 'hsl(var(--accent))',
foreground: 'hsl(var(--accent-foreground))',
},
+ card: {
+ DEFAULT: 'hsl(var(--card))',
+ foreground: 'hsl(var(--card-foreground))',
+ },
},
borderRadius: {
lg: 'var(--radius)',