lib sources restructuring

This commit is contained in:
Roman Krček
2025-07-02 23:56:11 +02:00
parent 878198fabd
commit 81e2e53cc5
19 changed files with 391 additions and 115 deletions

View File

@@ -1,6 +1,6 @@
import { json } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
import { getOAuthClient } from '$lib/google-server.js';
import { authServer } from '$lib/google/index.js';
export const POST: RequestHandler = async ({ request }) => {
try {
@@ -10,7 +10,7 @@ export const POST: RequestHandler = async ({ request }) => {
return json({ error: 'Refresh token is required' }, { status: 400 });
}
const oauth = getOAuthClient();
const oauth = authServer.getOAuthClient();
oauth.setCredentials({ refresh_token: refreshToken });
const { credentials } = await oauth.refreshAccessToken();

View File

@@ -1,6 +1,6 @@
import { json } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
import { getSpreadsheetData } from '$lib/sheets.js';
import { sheets } from '$lib/google/index.js';
export const GET: RequestHandler = async ({ params, request }) => {
try {
@@ -12,7 +12,7 @@ export const GET: RequestHandler = async ({ params, request }) => {
}
const refreshToken = authHeader.slice(7);
const sheetData = await getSpreadsheetData(refreshToken, sheetId, 'A1:Z10');
const sheetData = await sheets.getSpreadsheetData(refreshToken, sheetId, 'A1:Z10');
return json(sheetData);
} catch (error) {

View File

@@ -1,6 +1,6 @@
import { json } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
import { getRecentSpreadsheets } from '$lib/sheets.js';
import { sheets } from '$lib/google/index.js';
export const GET: RequestHandler = async ({ request }) => {
try {
@@ -10,9 +10,9 @@ export const GET: RequestHandler = async ({ request }) => {
}
const refreshToken = authHeader.slice(7);
const sheets = await getRecentSpreadsheets(refreshToken, 20);
const spreadsheets = await sheets.getRecentSpreadsheets(refreshToken, 20);
return json(sheets);
return json(spreadsheets);
} catch (error) {
console.error('Error fetching recent spreadsheets:', error);
return json({ error: 'Failed to fetch spreadsheets' }, { status: 500 });

View File

@@ -1,8 +1,8 @@
import { redirect } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
import { createAuthUrl } from '$lib/google-server.js';
import { authServer } from '$lib/google/index.js';
export const GET: RequestHandler = () => {
const authUrl = createAuthUrl();
const authUrl = authServer.createAuthUrl();
throw redirect(302, authUrl);
};

View File

@@ -1,6 +1,6 @@
import { redirect } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
import { getOAuthClient } from '$lib/google-server.js';
import { authServer } from '$lib/google/index.js';
export const GET: RequestHandler = async ({ url }) => {
try {
@@ -17,7 +17,7 @@ export const GET: RequestHandler = async ({ url }) => {
}
// Exchange code for tokens
const oauth = getOAuthClient();
const oauth = authServer.getOAuthClient();
const { tokens } = await oauth.getToken(code);
if (!tokens.refresh_token || !tokens.access_token) {

View File

@@ -1,79 +0,0 @@
import type { RequestHandler } from './$types';
import { json, redirect } from '@sveltejs/kit';
import {
createAuthUrl,
exchangeCodeForTokens,
getOAuthClient
} from '$lib/google';
import { sendGmail } from '$lib/gmail';
/* ───────────── GET ───────────── */
export const GET: RequestHandler = async ({ url }) => {
/* 1. /private/api/gmail?action=auth → 302 to Google */
if (url.searchParams.get('action') === 'auth') {
throw redirect(302, createAuthUrl());
}
/* 2. Google callback /private/api/gmail?code=XXXX */
const code = url.searchParams.get('code');
if (code) {
try {
const refreshToken = await exchangeCodeForTokens(code);
const html = `
<script>
localStorage.setItem('gmail_refresh_token', ${JSON.stringify(refreshToken)});
location = '/private/events/creator';
</script>`;
return new Response(html, { headers: { 'Content-Type': 'text/html' } });
} catch (err) {
return new Response((err as Error).message, { status: 500 });
}
}
return new Response('Bad request', { status: 400 });
};
/* ───────────── POST ───────────── */
export const POST: RequestHandler = async ({ request }) => {
const { action, refreshToken, to, subject, text, qr_code } = await request.json();
/* send e-mail */
if (action === 'send') {
if (!refreshToken) return new Response('Missing token', { status: 401 });
try {
await sendGmail(refreshToken, { to, subject, text, qr_code });
return json({ ok: true });
} catch (err) {
return new Response((err as Error).message, { status: 500 });
}
}
/* revoke token */
if (action === 'revoke') {
if (!refreshToken) return new Response('Missing token', { status: 401 });
try {
await getOAuthClient().revokeToken(refreshToken);
return json({ ok: true });
} catch (err) {
return new Response((err as Error).message, { status: 500 });
}
}
/* validate token */
if (action === 'validate') {
if (!refreshToken) {
return json({ valid: false });
}
try {
const oAuth2Client = getOAuthClient();
oAuth2Client.setCredentials({ refresh_token: refreshToken });
await oAuth2Client.getAccessToken(); // This will throw if invalid
return json({ valid: true });
} catch (err) {
return json({ valid: false, error: (err as Error).message });
}
}
return new Response('Bad request', { status: 400 });
};

View File

@@ -1,6 +1,6 @@
import { json } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
import { getOAuthClient } from '$lib/google-server.js';
import { authServer } from '$lib/google/index.js';
export const POST: RequestHandler = async ({ request }) => {
try {
@@ -10,7 +10,7 @@ export const POST: RequestHandler = async ({ request }) => {
return json({ error: 'Refresh token is required' }, { status: 400 });
}
const oauth = getOAuthClient();
const oauth = authServer.getOAuthClient();
oauth.setCredentials({ refresh_token: refreshToken });
const { credentials } = await oauth.refreshAccessToken();

View File

@@ -1,6 +1,6 @@
import { json } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
import { getOAuthClient } from '$lib/google-server.js';
import { authServer } from '$lib/google/index.js';
import { google } from 'googleapis';
export const GET: RequestHandler = async ({ request }) => {
@@ -14,7 +14,7 @@ export const GET: RequestHandler = async ({ request }) => {
const accessToken = authHeader.slice(7);
// Create OAuth client with the token
const oauth = getOAuthClient();
const oauth = authServer.getOAuthClient();
oauth.setCredentials({ access_token: accessToken });
// Call the userinfo endpoint to get user details

View File

@@ -1,6 +1,6 @@
import { json } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
import { getSpreadsheetData } from '$lib/sheets.js';
import { sheets } from '$lib/google/index.js';
export const GET: RequestHandler = async ({ params, request }) => {
try {
@@ -12,7 +12,7 @@ export const GET: RequestHandler = async ({ params, request }) => {
}
const refreshToken = authHeader.slice(7);
const sheetData = await getSpreadsheetData(refreshToken, sheetId, 'A1:Z10');
const sheetData = await sheets.getSpreadsheetData(refreshToken, sheetId, 'A1:Z10');
return json(sheetData);
} catch (error) {

View File

@@ -1,6 +1,6 @@
import { json } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
import { getRecentSpreadsheets } from '$lib/sheets.js';
import { sheets } from '$lib/google/index.js';
export const GET: RequestHandler = async ({ request }) => {
try {
@@ -10,9 +10,9 @@ export const GET: RequestHandler = async ({ request }) => {
}
const refreshToken = authHeader.slice(7);
const sheets = await getRecentSpreadsheets(refreshToken, 20);
const spreadsheets = await sheets.getRecentSpreadsheets(refreshToken, 20);
return json(sheets);
return json(spreadsheets);
} catch (error) {
console.error('Error fetching recent spreadsheets:', error);
return json({ error: 'Failed to fetch spreadsheets' }, { status: 500 });

View File

@@ -1,7 +1,7 @@
<script lang="ts">
import { onMount } from 'svelte';
import type { GoogleSheet } from '$lib/sheets.js';
import { isTokenValid, refreshAccessToken, getUserInfo, revokeToken } from '$lib/google.js';
import { sheets, isTokenValid, refreshAccessToken, getUserInfo, revokeToken } from '$lib/google/index.js';
import type { GoogleSheet } from '$lib/google/sheets/index.js';
import { goto } from '$app/navigation';
// Import Components

View File

@@ -1,5 +1,5 @@
<script lang="ts">
import type { GoogleSheet } from '$lib/sheets.js';
import type { GoogleSheet } from '$lib/google/sheets/index.js';
// Props
let { sheetsData, errors, loadRecentSheets, selectSheet, toggleSheetList } = $props<{