Bỏ qua để đến nội dung
AstroWay/api v2.325.0 · vi
tất cả hệ thống hoạt động bình thường

Supabase Edge Function

Last updated Xem dưới dạng Markdown Thiết lập tác nhân

Nội dung này hiện chưa có sẵn bằng ngôn ngữ của bạn.

Ключ AstroWay не можна класти у фронтенд: усе, що потрапило в бандл, бачить кожен відвідувач. Edge Function розв’язує це одним файлом: браузер викликає функцію, функція викликає API з ключем із секретів проєкту і повертає лише потрібне. Той самий файл працює в Lovable і в Bolt, бо обидва ставлять бекенд на Supabase.

Terminal window
supabase functions new big-three

Замініть supabase/functions/big-three/index.ts на:

supabase/functions/big-three/index.ts
const SIGNS = ['Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo',
'Libra', 'Scorpio', 'Sagittarius', 'Capricorn', 'Aquarius', 'Pisces'];
const cors = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey, content-type',
};
const signOf = (longitude: number) => SIGNS[Math.floor(longitude / 30)];
Deno.serve(async (req) => {
if (req.method === 'OPTIONS') return new Response('ok', { headers: cors });
const { date, time, timezone, latitude, longitude } = await req.json();
const res = await fetch('https://api.astroway.info/v1/chart', {
method: 'POST',
headers: {
'X-Api-Key': Deno.env.get('ASTROWAY_API_KEY') ?? '',
'Content-Type': 'application/json',
},
body: JSON.stringify({ date, time, timezone, latitude, longitude }),
});
const json = await res.json();
if (!json.ok) return Response.json({ error: json.error }, { status: res.status, headers: cors });
const planet = (name: string) => json.data.planets.find((p: { name: string }) => p.name === name);
return Response.json({
sun: signOf(planet('Sun').longitude),
moon: signOf(planet('Moon').longitude),
rising: signOf(json.data.houses.ascendant),
offset_used: json.data.input.timezoneOffset,
}, { headers: cors });
});

Створіть ключ Тільки сервер з областю chart і бюджетом, як описано в розділі Ключ для автоматизації, і покладіть його в секрети проєкту, а не в .env фронтенду:

Terminal window
supabase secrets set ASTROWAY_API_KEY=aw_live_...
supabase functions deploy big-three

Секрет доступний функції як Deno.env.get('ASTROWAY_API_KEY') і не потрапляє ні в код, ні в браузер. Той самий секрет можна задати в дашборді Supabase: Edge Functions → Secrets.

const { data, error } = await supabase.functions.invoke('big-three', {
body: { date: '1990-05-15', time: '14:30:00', timezone: 'Europe/Kyiv', latitude: 50.45, longitude: 30.52 },
});
// data: { sun: 'Taurus', moon: 'Capricorn', rising: 'Virgo', offset_used: 4 }

supabase-js сам додає ключ anon проєкту, тож функція з перевіркою JWT за замовчуванням приймає виклик без додаткових налаштувань. Помилку API функція передає далі з тим самим статусом і тілом error, тож error.message можна показати користувачеві як є.

  • timezone назвою зони. Europe/Kyiv, а не зсув: сервер сам знає, що Київ 1990-05-15 жив за UTC+4. Порожній рядок відхиляється з 400 INVALID_FIELD, а відсутнє поле означає UTC. Деталі в розділі Інтеграції без коду.
  • Вартість. POST /v1/chart коштує 20 кредитів. Те саме тіло протягом п’яти хвилин повертається з кешу без списання.
  • Бюджет ключа. Функцію може викликати будь-хто, хто відкрив ваш сайт. Бюджет на ключі зупинить зациклений чи зловмисний клієнт на числі, яке ви задали, з 429 KEY_BUDGET_EXHAUSTED.