fix: use Kurdish terminology (Xal instead of Puanlar)

This commit is contained in:
2026-02-07 01:33:15 +03:00
parent 122e38e306
commit 2cf40459d3
7 changed files with 127 additions and 17 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "pezkuwi-telegram-miniapp",
"version": "1.0.124",
"version": "1.0.125",
"type": "module",
"description": "Pezkuwichain Telegram Mini App - Forum, Announcements, Rewards",
"author": "Pezkuwichain Team",
+47
View File
@@ -0,0 +1,47 @@
import { ApiPromise, WsProvider } from '@pezkuwi/api';
async function main() {
console.log('Connecting to People Chain...');
const api = await ApiPromise.create({
provider: new WsProvider('wss://people-rpc.pezkuwichain.io')
});
await api.isReady;
console.log('Connected!\n');
const pallets = ['trust', 'referral', 'stakingScore', 'tiki'];
for (const pallet of pallets) {
console.log(`========== ${pallet} ==========`);
if (api.tx[pallet]) {
console.log('Extrinsics (tx):');
const txMethods = Object.keys(api.tx[pallet]);
for (const method of txMethods) {
const fn = api.tx[pallet][method];
console.log(` - ${pallet}.${method}`);
// Try to get method info
if (fn.meta) {
const args = fn.meta.args.map(a => `${a.name}: ${a.type}`).join(', ');
console.log(` Args: (${args})`);
if (fn.meta.docs.length > 0) {
console.log(` Docs: ${fn.meta.docs[0].toString().substring(0, 100)}...`);
}
}
}
} else {
console.log('No extrinsics available');
}
if (api.query[pallet]) {
console.log('\nStorage:');
const storageMethods = Object.keys(api.query[pallet]);
console.log(` ${storageMethods.join(', ')}`);
}
console.log('');
}
await api.disconnect();
process.exit(0);
}
main().catch(console.error);
+70
View File
@@ -0,0 +1,70 @@
import { ApiPromise, WsProvider } from '@pezkuwi/api';
const ADDRESS = '5CyuFfbF95rzBxru7c9yEsX4XmQXUxpLUcbj9RLg9K1cGiiF';
async function checkChain(name, endpoint) {
console.log(`\n========== ${name} ==========`);
console.log(`Connecting to ${endpoint}...`);
try {
const provider = new WsProvider(endpoint);
const api = await ApiPromise.create({ provider });
await api.isReady;
console.log('Connected!\n');
// List all available pallets
console.log('Available Pallets:');
const pallets = Object.keys(api.query);
console.log(pallets.join(', '));
console.log('');
// Check specific pallets
const checkPallets = ['trust', 'referral', 'stakingScore', 'tiki', 'assetRewards', 'staking'];
for (const pallet of checkPallets) {
if (api.query[pallet]) {
console.log(`${pallet} pallet exists`);
console.log(` Storage: ${Object.keys(api.query[pallet]).join(', ')}`);
// Try to query user data
if (pallet === 'trust' && api.query.trust.trustScores) {
const score = await api.query.trust.trustScores(ADDRESS);
console.log(` Your trust score: ${score.toString()}`);
}
if (pallet === 'referral' && api.query.referral.referralCount) {
const count = await api.query.referral.referralCount(ADDRESS);
console.log(` Your referral count: ${count.toString()}`);
}
if (pallet === 'stakingScore') {
for (const storage of Object.keys(api.query.stakingScore)) {
try {
const val = await api.query.stakingScore[storage](ADDRESS);
console.log(` ${storage}: ${val.toString()}`);
} catch {
console.log(` ${storage}: (requires different args)`);
}
}
}
if (pallet === 'staking' && api.query.staking.ledger) {
const ledger = await api.query.staking.ledger(ADDRESS);
console.log(` Your staking ledger: ${ledger.toString()}`);
}
} else {
console.log(`${pallet} pallet NOT available`);
}
}
await api.disconnect();
} catch (error) {
console.error(`Error: ${error.message}`);
}
}
async function main() {
await checkChain('Relay Chain', 'wss://rpc.pezkuwichain.io');
await checkChain('People Chain', 'wss://people-rpc.pezkuwichain.io');
await checkChain('Asset Hub', 'wss://asset-hub-rpc.pezkuwichain.io');
process.exit(0);
}
main().catch(console.error);
+1 -1
View File
@@ -389,7 +389,7 @@ export async function getAllScoresWithFallback(
const stakingScore = stakingResult.score;
const referralScore = calculateReferralScore(referralCount);
// If staking score is 0, trust score is 0 (matches pallet logic)
// Ger staking 0 be, trust jî 0 be (matches pallet logic)
if (stakingScore === 0) {
return {
...emptyResult,
+1 -1
View File
@@ -207,7 +207,7 @@ export function RewardsSection() {
{[
{ id: 'overview' as const, label: 'Geşbîn' },
{ id: 'referrals' as const, label: 'Referral' },
{ id: 'scores' as const, label: 'Puanlar' },
{ id: 'scores' as const, label: 'Xal' },
].map(({ id, label }) => (
<button
key={id}
+3 -3
View File
@@ -1,5 +1,5 @@
{
"version": "1.0.124",
"buildTime": "2026-02-06T22:20:16.985Z",
"buildNumber": 1770416416986
"version": "1.0.125",
"buildTime": "2026-02-06T22:33:15.711Z",
"buildNumber": 1770417195712
}
+4 -11
View File
@@ -2,18 +2,12 @@ import { serve } from 'https://deno.land/std@0.177.0/http/server.ts';
import { createClient } from 'https://esm.sh/@supabase/supabase-js@2';
import { createHmac } from 'https://deno.land/std@0.177.0/node/crypto.ts';
// CORS - Production domain only
const ALLOWED_ORIGINS = [
'https://telegram.pezkuwichain.io',
'https://t.me', // Telegram WebApp iframe
];
// CORS - Only allow our Telegram MiniApp domain
const ALLOWED_ORIGIN = 'https://telegram.pezkuwichain.io';
function getCorsHeaders(origin: string | null): Record<string, string> {
const allowedOrigin =
origin && ALLOWED_ORIGINS.some((o) => origin.startsWith(o)) ? origin : ALLOWED_ORIGINS[0];
return {
'Access-Control-Allow-Origin': allowedOrigin,
'Access-Control-Allow-Origin': ALLOWED_ORIGIN,
'Access-Control-Allow-Headers':
'authorization, x-client-info, apikey, content-type, x-supabase-client-platform',
'Access-Control-Allow-Methods': 'POST, OPTIONS',
@@ -145,8 +139,7 @@ function verifySessionToken(token: string, botToken: string): number | null {
}
serve(async (req) => {
const origin = req.headers.get('origin');
const corsHeaders = getCorsHeaders(origin);
const corsHeaders = getCorsHeaders(req.headers.get('origin'));
// Handle CORS preflight
if (req.method === 'OPTIONS') {