mirror of
https://github.com/pezkuwichain/pezkuwi-telegram-miniapp.git
synced 2026-04-22 00:47:55 +00:00
fix: dual bot token auth + P2P UI logic fixes
- All 17 edge functions now check both TELEGRAM_BOT_TOKEN and TELEGRAM_BOT_TOKEN_KRD for session verification - Add perPage:1000 to listUsers calls to prevent pagination issues - Fix offer button label: Buy tab shows "Al" (green), Sell tab shows "Sat" (red) - Fix active tab highlight with cyan color for visibility - Fix modal transparency (add --card CSS variable) - Fix withdraw tab sync (useEffect on modal open)
This commit is contained in:
+1
-1
@@ -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",
|
||||
|
||||
@@ -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 */}
|
||||
<div
|
||||
className={cn(
|
||||
'relative w-full max-w-md max-h-[90vh] bg-card rounded-t-2xl sm:rounded-2xl border border-border overflow-y-auto',
|
||||
'relative w-full max-w-md max-h-[90vh] bg-card rounded-t-2xl sm:rounded-2xl border border-border overflow-y-auto shadow-2xl',
|
||||
isRTL && 'direction-rtl'
|
||||
)}
|
||||
dir={isRTL ? 'rtl' : 'ltr'}
|
||||
|
||||
@@ -163,12 +163,12 @@ export function OfferList({ adType, onAcceptOffer }: OfferListProps) {
|
||||
onClick={() => 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')}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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}
|
||||
|
||||
+3
-3
@@ -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
|
||||
}
|
||||
|
||||
@@ -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.' }), {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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.' }), {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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.' }), {
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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.' }), {
|
||||
|
||||
@@ -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.' }), {
|
||||
|
||||
@@ -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.' }), {
|
||||
|
||||
@@ -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.' }), {
|
||||
|
||||
@@ -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.' }), {
|
||||
|
||||
@@ -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' }),
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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.' }), {
|
||||
|
||||
@@ -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' }),
|
||||
|
||||
@@ -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)',
|
||||
|
||||
Reference in New Issue
Block a user