untitled-2952main.ts1 match
1// Learn more: https://docs.val.town/vals/http/
2export default async function (req: Request): Promise<Response> {
3const searchParams = new URL(req.url).searchParams;
4
11- **Schedule**: Every minute
12- **Threshold**: Sessions older than 60 seconds without heartbeat updates
13- **Function**: Marks stale sessions as not viewing and syncs to Notion
1415**How Viewing Sessions Work**:
39- **Purpose**: Cleans up orphaned agent blobs
40- **Schedule**: Every minute
41- **Function**: Deletes agent blobs where the agent ID doesn't match the demo's
42"Glimpse agents" relation in Notion
43- **Read-Only Notion**: Only reads Notion data, never modifies it
9* Hook for tracking user viewing status with automatic updates
10*/
11export function useViewingTracking(
12glimpseId: string,
13isAuthorized: boolean
636465// Cleanup function
66return () => {
67if (intervalRef.current) {
4};
56export default async function handler(req: Request) {
7if (req.method !== "GET") {
8return new Response("Method Not Allowed", { status: 405 });
1export default async function (interval: Interval) {
2const f = await fetch("https://sih-2025-demo.onrender.com/");
3const s = await f.text();
255```typescript
256// In route handler
257const result = await controllerFunction(params);
258259if (!result.success) {
10**Returns:** `UseAuthReturn`
11- `userEmail` - Current user's email from window data
12- `isAuthorized(pageProperties)` - Function to check if user can access a page
1314**Usage:**
29- `loading` - Loading state
30- `error` - Error state
31- `refetch` - Function to manually refetch data
3233**Usage:**
eventsCalendartmp.ts1 match
3import { marked } from "npm:marked";
45export default async function (req: Request) {
6const vt = new ValTown();
7const val_id = "4cbcd1ae-8b94-11f0-b01a-0224a6c84d84";
eventsCalendarserver.ts4 matches
2Use with bookmarklet:
34javascript: (function () {
5var HOST = "https://extract-event-data.val.run";
6var TOKEN = "<REPLACE>";
209});
210211function update(stream: SSEStreamingApi, payload: any) {
212return stream.writeSSE({
213event: "update",
219}
220221function complete(
222stream: SSEStreamingApi,
223state: "success" | "error",
232}
233234function fail(
235stream: SSEStreamingApi,
236message?: string,
TopTenVideosmember-site-integration.html13 matches
130131// Load free version
132document.getElementById('loadFreeVersion').addEventListener('click', function() {
133nicheIframe.src = 'free-input-iframe.html';
134toolContainer.classList.remove('hidden');
138139// Load premium version
140document.getElementById('loadPremiumVersion').addEventListener('click', function() {
141nicheIframe.src = 'premium-input-iframe.html';
142toolContainer.classList.remove('hidden');
146147// Clear tool
148document.getElementById('clearTool').addEventListener('click', function() {
149toolContainer.classList.add('hidden');
150outputContainer.classList.add('hidden');
156157// Listen for messages from iframe
158window.addEventListener('message', function(event) {
159// Security check - in production, verify event.origin
160
175176// Generate output page
177function generateOutputPage(data) {
178try {
179currentOutputData = data;
200201// Download HTML file
202document.getElementById('downloadPage').addEventListener('click', function() {
203if (!currentOutputHTML) {
204alert('No page generated yet!');
225226// Preview page
227document.getElementById('previewPage').addEventListener('click', function() {
228if (!currentOutputHTML) {
229alert('No page generated yet!');
242243// Copy HTML code
244document.getElementById('copyCode').addEventListener('click', function() {
245if (!currentOutputHTML) {
246alert('No page generated yet!');
248}
249
250navigator.clipboard.writeText(currentOutputHTML).then(function() {
251updateStatus('📋 HTML code copied to clipboard!');
252
263btn.classList.add('bg-purple-600');
264}, 2000);
265}).catch(function(err) {
266console.error('Failed to copy: ', err);
267updateStatus('❌ Failed to copy to clipboard');
270271// Close preview modal
272document.getElementById('closePreview').addEventListener('click', function() {
273previewModal.classList.add('hidden');
274previewFrame.src = '';
276277// Close modal on background click
278previewModal.addEventListener('click', function(e) {
279if (e.target === previewModal) {
280previewModal.classList.add('hidden');
284285// Update status message
286function updateStatus(message) {
287document.getElementById('outputStatus').textContent = message;
288console.log('Status:', message);