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",
|
"name": "pezkuwi-telegram-miniapp",
|
||||||
"version": "1.0.227",
|
"version": "1.0.228",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "Pezkuwichain Telegram Mini App - Forum, Announcements, Rewards",
|
"description": "Pezkuwichain Telegram Mini App - Forum, Announcements, Rewards",
|
||||||
"author": "Pezkuwichain Team",
|
"author": "Pezkuwichain Team",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { useState } from 'react';
|
import { useState, useEffect } from 'react';
|
||||||
import {
|
import {
|
||||||
X,
|
X,
|
||||||
ArrowDownToLine,
|
ArrowDownToLine,
|
||||||
@@ -51,6 +51,13 @@ export function DepositWithdrawModal({
|
|||||||
|
|
||||||
const [activeTab, setActiveTab] = useState<'deposit' | 'withdraw'>(initialTab);
|
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
|
// Deposit state
|
||||||
const [depositToken, setDepositToken] = useState<'HEZ' | 'PEZ'>('HEZ');
|
const [depositToken, setDepositToken] = useState<'HEZ' | 'PEZ'>('HEZ');
|
||||||
const [depositAmount, setDepositAmount] = useState('');
|
const [depositAmount, setDepositAmount] = useState('');
|
||||||
@@ -231,7 +238,7 @@ export function DepositWithdrawModal({
|
|||||||
{/* Modal */}
|
{/* Modal */}
|
||||||
<div
|
<div
|
||||||
className={cn(
|
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'
|
isRTL && 'direction-rtl'
|
||||||
)}
|
)}
|
||||||
dir={isRTL ? 'rtl' : 'ltr'}
|
dir={isRTL ? 'rtl' : 'ltr'}
|
||||||
|
|||||||
@@ -163,12 +163,12 @@ export function OfferList({ adType, onAcceptOffer }: OfferListProps) {
|
|||||||
onClick={() => handleAccept(offer)}
|
onClick={() => handleAccept(offer)}
|
||||||
className={cn(
|
className={cn(
|
||||||
'px-3 py-1.5 text-xs font-medium rounded-lg transition-colors',
|
'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-green-500 hover:bg-green-600 text-white'
|
||||||
: 'bg-red-500 hover:bg-red-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>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -14,6 +14,8 @@
|
|||||||
--muted-foreground: 215 20.2% 65.1%;
|
--muted-foreground: 215 20.2% 65.1%;
|
||||||
--accent: 217.2 32.6% 17.5%;
|
--accent: 217.2 32.6% 17.5%;
|
||||||
--accent-foreground: 210 40% 98%;
|
--accent-foreground: 210 40% 98%;
|
||||||
|
--card: 222.2 84% 6.5%;
|
||||||
|
--card-foreground: 210 40% 98%;
|
||||||
--border: 217.2 32.6% 17.5%;
|
--border: 217.2 32.6% 17.5%;
|
||||||
--radius: 0.75rem;
|
--radius: 0.75rem;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -195,7 +195,7 @@ export function P2PSection() {
|
|||||||
onClick={() => handleTabChange(tab.id)}
|
onClick={() => handleTabChange(tab.id)}
|
||||||
className={cn(
|
className={cn(
|
||||||
'flex-1 py-2 text-xs font-medium rounded-lg transition-colors',
|
'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}
|
{tab.label}
|
||||||
|
|||||||
+3
-3
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"version": "1.0.227",
|
"version": "1.0.228",
|
||||||
"buildTime": "2026-02-26T17:26:18.861Z",
|
"buildTime": "2026-02-26T21:44:34.122Z",
|
||||||
"buildNumber": 1772126778862
|
"buildNumber": 1772142274123
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,9 +95,13 @@ serve(async (req) => {
|
|||||||
const body: AcceptP2POfferRequest = await req.json();
|
const body: AcceptP2POfferRequest = await req.json();
|
||||||
const { sessionToken, offerId, amount, buyerWallet } = body;
|
const { sessionToken, offerId, amount, buyerWallet } = body;
|
||||||
|
|
||||||
// Get bot token for session verification
|
// Get bot tokens for session verification (dual bot support)
|
||||||
const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
|
const botTokens: string[] = [];
|
||||||
if (!botToken) {
|
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' }), {
|
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
|
||||||
status: 500,
|
status: 500,
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
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) {
|
if (!telegramId) {
|
||||||
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
||||||
status: 401,
|
status: 401,
|
||||||
@@ -144,8 +152,8 @@ serve(async (req) => {
|
|||||||
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
|
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
|
||||||
const {
|
const {
|
||||||
data: { users: authUsers },
|
data: { users: authUsers },
|
||||||
} = await supabase.auth.admin.listUsers();
|
} = 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) {
|
if (!authUser) {
|
||||||
return new Response(JSON.stringify({ error: 'User not found. Please authenticate first.' }), {
|
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 supabaseUrl = Deno.env.get('SUPABASE_URL')!;
|
||||||
const supabaseServiceKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!;
|
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' }), {
|
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
|
||||||
status: 500,
|
status: 500,
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
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) {
|
if (!telegramUser) {
|
||||||
return new Response(JSON.stringify({ error: 'Invalid Telegram data' }), {
|
return new Response(JSON.stringify({ error: 'Invalid Telegram data' }), {
|
||||||
status: 401,
|
status: 401,
|
||||||
|
|||||||
@@ -114,9 +114,13 @@ serve(async (req) => {
|
|||||||
adType = 'sell',
|
adType = 'sell',
|
||||||
} = body;
|
} = body;
|
||||||
|
|
||||||
// Get bot token for session verification
|
// Get bot tokens for session verification (dual bot support)
|
||||||
const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
|
const botTokens: string[] = [];
|
||||||
if (!botToken) {
|
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' }), {
|
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
|
||||||
status: 500,
|
status: 500,
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
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) {
|
if (!telegramId) {
|
||||||
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
||||||
status: 401,
|
status: 401,
|
||||||
@@ -156,8 +164,8 @@ serve(async (req) => {
|
|||||||
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
|
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
|
||||||
const {
|
const {
|
||||||
data: { users: authUsers },
|
data: { users: authUsers },
|
||||||
} = await supabase.auth.admin.listUsers();
|
} = 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) {
|
if (!authUser) {
|
||||||
return new Response(JSON.stringify({ error: 'User not found. Please authenticate first.' }), {
|
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 supabaseUrl = Deno.env.get('SUPABASE_URL')!;
|
||||||
const supabaseServiceKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!;
|
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' }), {
|
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
|
||||||
status: 500,
|
status: 500,
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
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) {
|
if (!telegramUser) {
|
||||||
return new Response(JSON.stringify({ error: 'Invalid Telegram data' }), {
|
return new Response(JSON.stringify({ error: 'Invalid Telegram data' }), {
|
||||||
status: 401,
|
status: 401,
|
||||||
|
|||||||
@@ -165,17 +165,25 @@ serve(async (req) => {
|
|||||||
|
|
||||||
const supabaseUrl = Deno.env.get('SUPABASE_URL')!;
|
const supabaseUrl = Deno.env.get('SUPABASE_URL')!;
|
||||||
const supabaseServiceKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!;
|
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');
|
const tronHdMnemonic = Deno.env.get('DEPOSIT_TRON_HD_MNEMONIC');
|
||||||
|
|
||||||
if (!botToken) {
|
if (botTokens.length === 0) {
|
||||||
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
|
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
|
||||||
status: 500,
|
status: 500,
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
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) {
|
if (!telegramUser) {
|
||||||
return new Response(JSON.stringify({ error: 'Invalid Telegram data' }), {
|
return new Response(JSON.stringify({ error: 'Invalid Telegram data' }), {
|
||||||
status: 401,
|
status: 401,
|
||||||
|
|||||||
@@ -74,16 +74,24 @@ serve(async (req) => {
|
|||||||
|
|
||||||
const supabaseUrl = Deno.env.get('SUPABASE_URL')!;
|
const supabaseUrl = Deno.env.get('SUPABASE_URL')!;
|
||||||
const supabaseServiceKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!;
|
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' }), {
|
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
|
||||||
status: 500,
|
status: 500,
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
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) {
|
if (!telegramUser) {
|
||||||
return new Response(JSON.stringify({ error: 'Invalid Telegram data' }), {
|
return new Response(JSON.stringify({ error: 'Invalid Telegram data' }), {
|
||||||
status: 401,
|
status: 401,
|
||||||
|
|||||||
@@ -93,8 +93,12 @@ serve(async (req) => {
|
|||||||
const { sessionToken } = body;
|
const { sessionToken } = body;
|
||||||
|
|
||||||
// Get bot token for session verification
|
// Get bot token for session verification
|
||||||
const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
|
const botTokens: string[] = [];
|
||||||
if (!botToken) {
|
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' }), {
|
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
|
||||||
status: 500,
|
status: 500,
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
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) {
|
if (!telegramId) {
|
||||||
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
||||||
status: 401,
|
status: 401,
|
||||||
@@ -127,7 +135,7 @@ serve(async (req) => {
|
|||||||
const {
|
const {
|
||||||
data: { users: authUsers },
|
data: { users: authUsers },
|
||||||
} = await supabase.auth.admin.listUsers({ perPage: 1000 });
|
} = 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) {
|
if (!authUser) {
|
||||||
return new Response(JSON.stringify({ error: 'User not found. Please authenticate first.' }), {
|
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 body: GetMyOffersRequest = await req.json();
|
||||||
const { sessionToken, status } = body;
|
const { sessionToken, status } = body;
|
||||||
|
|
||||||
// Get bot token for session verification
|
// Get bot tokens for session verification (dual bot support)
|
||||||
const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
|
const botTokens: string[] = [];
|
||||||
if (!botToken) {
|
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' }), {
|
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
|
||||||
status: 500,
|
status: 500,
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
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) {
|
if (!telegramId) {
|
||||||
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
||||||
status: 401,
|
status: 401,
|
||||||
@@ -127,8 +135,8 @@ serve(async (req) => {
|
|||||||
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
|
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
|
||||||
const {
|
const {
|
||||||
data: { users: authUsers },
|
data: { users: authUsers },
|
||||||
} = await supabase.auth.admin.listUsers();
|
} = 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) {
|
if (!authUser) {
|
||||||
return new Response(
|
return new Response(
|
||||||
|
|||||||
@@ -105,8 +105,12 @@ serve(async (req) => {
|
|||||||
} = body;
|
} = body;
|
||||||
|
|
||||||
// Get bot token for session verification
|
// Get bot token for session verification
|
||||||
const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
|
const botTokens: string[] = [];
|
||||||
if (!botToken) {
|
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' }), {
|
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
|
||||||
status: 500,
|
status: 500,
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
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) {
|
if (!telegramId) {
|
||||||
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
||||||
status: 401,
|
status: 401,
|
||||||
@@ -139,7 +147,7 @@ serve(async (req) => {
|
|||||||
const {
|
const {
|
||||||
data: { users: authUsers },
|
data: { users: authUsers },
|
||||||
} = await supabase.auth.admin.listUsers({ perPage: 1000 });
|
} = 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) {
|
if (!authUser) {
|
||||||
return new Response(JSON.stringify({ error: 'User not found. Please authenticate first.' }), {
|
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 body: GetP2PTradesRequest = await req.json();
|
||||||
const { sessionToken, status } = body;
|
const { sessionToken, status } = body;
|
||||||
|
|
||||||
// Get bot token for session verification
|
// Get bot tokens for session verification (dual bot support)
|
||||||
const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
|
const botTokens: string[] = [];
|
||||||
if (!botToken) {
|
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' }), {
|
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
|
||||||
status: 500,
|
status: 500,
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
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) {
|
if (!telegramId) {
|
||||||
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
||||||
status: 401,
|
status: 401,
|
||||||
@@ -127,8 +135,8 @@ serve(async (req) => {
|
|||||||
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
|
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
|
||||||
const {
|
const {
|
||||||
data: { users: authUsers },
|
data: { users: authUsers },
|
||||||
} = await supabase.auth.admin.listUsers();
|
} = 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) {
|
if (!authUser) {
|
||||||
return new Response(JSON.stringify({ error: 'User not found. Please authenticate first.' }), {
|
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 body: GetPaymentMethodsRequest = await req.json();
|
||||||
const { sessionToken, currency } = body;
|
const { sessionToken, currency } = body;
|
||||||
|
|
||||||
// Get bot token for session verification
|
// Get bot tokens for session verification (dual bot support)
|
||||||
const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
|
const botTokens: string[] = [];
|
||||||
if (!botToken) {
|
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' }), {
|
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
|
||||||
status: 500,
|
status: 500,
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
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) {
|
if (!telegramId) {
|
||||||
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
||||||
status: 401,
|
status: 401,
|
||||||
@@ -127,8 +135,8 @@ serve(async (req) => {
|
|||||||
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
|
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
|
||||||
const {
|
const {
|
||||||
data: { users: authUsers },
|
data: { users: authUsers },
|
||||||
} = await supabase.auth.admin.listUsers();
|
} = 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) {
|
if (!authUser) {
|
||||||
return new Response(JSON.stringify({ error: 'User not found. Please authenticate first.' }), {
|
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 body: P2PDisputeRequest = await req.json();
|
||||||
const { sessionToken, action, tradeId, reason, category, evidenceUrl, evidenceType, description } = body;
|
const { sessionToken, action, tradeId, reason, category, evidenceUrl, evidenceType, description } = body;
|
||||||
|
|
||||||
// Get bot token for session verification
|
// Get bot tokens for session verification (dual bot support)
|
||||||
const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
|
const botTokens: string[] = [];
|
||||||
if (!botToken) {
|
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' }), {
|
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
|
||||||
status: 500,
|
status: 500,
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
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) {
|
if (!telegramId) {
|
||||||
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
||||||
status: 401,
|
status: 401,
|
||||||
@@ -148,8 +156,8 @@ serve(async (req) => {
|
|||||||
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
|
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
|
||||||
const {
|
const {
|
||||||
data: { users: authUsers },
|
data: { users: authUsers },
|
||||||
} = await supabase.auth.admin.listUsers();
|
} = 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) {
|
if (!authUser) {
|
||||||
return new Response(JSON.stringify({ error: 'User not found. Please authenticate first.' }), {
|
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 body: P2PMessagesRequest = await req.json();
|
||||||
const { sessionToken, action, tradeId, message } = body;
|
const { sessionToken, action, tradeId, message } = body;
|
||||||
|
|
||||||
// Get bot token for session verification
|
// Get bot tokens for session verification (dual bot support)
|
||||||
const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
|
const botTokens: string[] = [];
|
||||||
if (!botToken) {
|
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' }), {
|
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
|
||||||
status: 500,
|
status: 500,
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
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) {
|
if (!telegramId) {
|
||||||
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
||||||
status: 401,
|
status: 401,
|
||||||
@@ -144,8 +152,8 @@ serve(async (req) => {
|
|||||||
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
|
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
|
||||||
const {
|
const {
|
||||||
data: { users: authUsers },
|
data: { users: authUsers },
|
||||||
} = await supabase.auth.admin.listUsers();
|
} = 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) {
|
if (!authUser) {
|
||||||
return new Response(JSON.stringify({ error: 'User not found. Please authenticate first.' }), {
|
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;
|
const { sessionToken, token, amount, walletAddress } = body;
|
||||||
|
|
||||||
// Get bot token for session verification
|
// Get bot tokens for session verification (dual bot support)
|
||||||
const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
|
const botTokens: string[] = [];
|
||||||
if (!botToken) {
|
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(
|
return new Response(
|
||||||
JSON.stringify({ success: false, error: 'Server configuration error' }),
|
JSON.stringify({ success: false, error: 'Server configuration error' }),
|
||||||
{ status: 500, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }
|
{ 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) {
|
if (!telegramId) {
|
||||||
return new Response(
|
return new Response(
|
||||||
JSON.stringify({ success: false, error: 'Invalid or expired session token' }),
|
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 supabaseUrl = Deno.env.get('SUPABASE_URL')!;
|
||||||
const supabaseServiceKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!;
|
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' }), {
|
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
|
||||||
status: 500,
|
status: 500,
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
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) {
|
if (!telegramUser) {
|
||||||
return new Response(JSON.stringify({ error: 'Invalid Telegram data' }), {
|
return new Response(JSON.stringify({ error: 'Invalid Telegram data' }), {
|
||||||
status: 401,
|
status: 401,
|
||||||
|
|||||||
@@ -99,9 +99,13 @@ serve(async (req) => {
|
|||||||
const body: TradeActionRequest = await req.json();
|
const body: TradeActionRequest = await req.json();
|
||||||
const { sessionToken, tradeId, action, payload } = body;
|
const { sessionToken, tradeId, action, payload } = body;
|
||||||
|
|
||||||
// Get bot token for session verification
|
// Get bot tokens for session verification (dual bot support)
|
||||||
const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
|
const botTokens: string[] = [];
|
||||||
if (!botToken) {
|
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' }), {
|
return new Response(JSON.stringify({ error: 'Server configuration error' }), {
|
||||||
status: 500,
|
status: 500,
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
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) {
|
if (!telegramId) {
|
||||||
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
return new Response(JSON.stringify({ error: 'Invalid or expired session' }), {
|
||||||
status: 401,
|
status: 401,
|
||||||
@@ -149,8 +157,8 @@ serve(async (req) => {
|
|||||||
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
|
const telegramEmail = `telegram_${telegramId}@pezkuwichain.io`;
|
||||||
const {
|
const {
|
||||||
data: { users: authUsers },
|
data: { users: authUsers },
|
||||||
} = await supabase.auth.admin.listUsers();
|
} = 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) {
|
if (!authUser) {
|
||||||
return new Response(JSON.stringify({ error: 'User not found. Please authenticate first.' }), {
|
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;
|
const { sessionToken, txHash, token, expectedAmount, blockNumber } = body;
|
||||||
|
|
||||||
// Get bot token for session verification
|
// Get bot tokens for session verification (dual bot support)
|
||||||
const botToken = Deno.env.get('TELEGRAM_BOT_TOKEN');
|
const botTokens: string[] = [];
|
||||||
if (!botToken) {
|
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' }), {
|
return new Response(JSON.stringify({ success: false, error: 'Server configuration error' }), {
|
||||||
status: 500,
|
status: 500,
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
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) {
|
if (!telegramId) {
|
||||||
return new Response(
|
return new Response(
|
||||||
JSON.stringify({ success: false, error: 'Invalid or expired session token' }),
|
JSON.stringify({ success: false, error: 'Invalid or expired session token' }),
|
||||||
|
|||||||
@@ -24,6 +24,10 @@ export default {
|
|||||||
DEFAULT: 'hsl(var(--accent))',
|
DEFAULT: 'hsl(var(--accent))',
|
||||||
foreground: 'hsl(var(--accent-foreground))',
|
foreground: 'hsl(var(--accent-foreground))',
|
||||||
},
|
},
|
||||||
|
card: {
|
||||||
|
DEFAULT: 'hsl(var(--card))',
|
||||||
|
foreground: 'hsl(var(--card-foreground))',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
borderRadius: {
|
borderRadius: {
|
||||||
lg: 'var(--radius)',
|
lg: 'var(--radius)',
|
||||||
|
|||||||
Reference in New Issue
Block a user