Browse Source

fix problem with trying to call websockets from the browser

master
silberengel 8 months ago
parent
commit
08d146b8f7
  1. 33
      src/routes/publication/[type]/[identifier]/+layout.server.ts
  2. 66
      src/routes/publication/[type]/[identifier]/+layout.ts
  3. 33
      src/routes/publication/[type]/[identifier]/+page.server.ts
  4. 54
      src/routes/publication/[type]/[identifier]/+page.ts

33
src/routes/publication/[type]/[identifier]/+layout.server.ts

@ -1,40 +1,23 @@ @@ -1,40 +1,23 @@
import { error } from "@sveltejs/kit";
import type { LayoutServerLoad } from "./$types";
import { fetchEventByDTag, fetchEventById, fetchEventByNaddr, fetchEventByNevent } from "../../../../lib/utils/websocket_utils.ts";
import type { NostrEvent } from "../../../../lib/utils/websocket_utils.ts";
export const load: LayoutServerLoad = async ({ params, url }) => {
const { type, identifier } = params;
let indexEvent: NostrEvent;
// Handle different identifier types
switch (type) {
case 'id':
indexEvent = await fetchEventById(identifier);
break;
case 'd':
indexEvent = await fetchEventByDTag(identifier);
break;
case 'naddr':
indexEvent = await fetchEventByNaddr(identifier);
break;
case 'nevent':
indexEvent = await fetchEventByNevent(identifier);
break;
default:
// Validate the identifier type for SSR
const validTypes = ['id', 'd', 'naddr', 'nevent'];
if (!validTypes.includes(type)) {
throw error(400, `Unsupported identifier type: ${type}`);
}
// Extract metadata for meta tags
const title = indexEvent.tags.find((tag) => tag[0] === "title")?.[1] || "Alexandria Publication";
const summary = indexEvent.tags.find((tag) => tag[0] === "summary")?.[1] ||
"Alexandria is a digital library, utilizing Nostr events for curated publications and wiki pages.";
const image = indexEvent.tags.find((tag) => tag[0] === "image")?.[1] || "/screenshots/old_books.jpg";
// Provide basic metadata for SSR - actual fetching will happen on client
const title = "Alexandria Publication";
const summary = "Alexandria is a digital library, utilizing Nostr events for curated publications and wiki pages.";
const image = "/screenshots/old_books.jpg";
const currentUrl = `${url.origin}${url.pathname}`;
return {
indexEvent,
indexEvent: null, // Will be fetched on client side
metadata: {
title,
summary,

66
src/routes/publication/[type]/[identifier]/+layout.ts

@ -1 +1,65 @@ @@ -1 +1,65 @@
export const ssr = true;
import { error } from "@sveltejs/kit";
import type { LayoutLoad } from "./$types";
import { fetchEventByDTag, fetchEventById, fetchEventByNaddr, fetchEventByNevent } from "../../../../lib/utils/websocket_utils.ts";
import type { NostrEvent } from "../../../../lib/utils/websocket_utils.ts";
import { browser } from "$app/environment";
export const load: LayoutLoad = async ({ params, url }) => {
const { type, identifier } = params;
// Only fetch on the client side where WebSocket is available
if (!browser) {
// Return basic metadata for SSR
return {
indexEvent: null,
metadata: {
title: "Alexandria Publication",
summary: "Alexandria is a digital library, utilizing Nostr events for curated publications and wiki pages.",
image: "/screenshots/old_books.jpg",
currentUrl: `${url.origin}${url.pathname}`,
},
};
}
let indexEvent: NostrEvent;
try {
// Handle different identifier types
switch (type) {
case 'id':
indexEvent = await fetchEventById(identifier);
break;
case 'd':
indexEvent = await fetchEventByDTag(identifier);
break;
case 'naddr':
indexEvent = await fetchEventByNaddr(identifier);
break;
case 'nevent':
indexEvent = await fetchEventByNevent(identifier);
break;
default:
throw error(400, `Unsupported identifier type: ${type}`);
}
// Extract metadata for meta tags
const title = indexEvent.tags.find((tag) => tag[0] === "title")?.[1] || "Alexandria Publication";
const summary = indexEvent.tags.find((tag) => tag[0] === "summary")?.[1] ||
"Alexandria is a digital library, utilizing Nostr events for curated publications and wiki pages.";
const image = indexEvent.tags.find((tag) => tag[0] === "image")?.[1] || "/screenshots/old_books.jpg";
const currentUrl = `${url.origin}${url.pathname}`;
return {
indexEvent,
metadata: {
title,
summary,
image,
currentUrl,
},
};
} catch (err) {
console.error('Failed to fetch publication:', err);
throw error(404, `Failed to load publication: ${err}`);
}
};

33
src/routes/publication/[type]/[identifier]/+page.server.ts

@ -1,39 +1,18 @@ @@ -1,39 +1,18 @@
import { error } from "@sveltejs/kit";
import type { PageServerLoad } from "./$types";
import { fetchEventByDTag, fetchEventById, fetchEventByNaddr, fetchEventByNevent } from "../../../../lib/utils/websocket_utils.ts";
import type { NostrEvent } from "../../../../lib/utils/websocket_utils.ts";
export const load: PageServerLoad = async ({ params }) => {
const { type, identifier } = params;
let indexEvent: NostrEvent | null;
// Handle different identifier types
switch (type) {
case 'id':
indexEvent = await fetchEventById(identifier);
break;
case 'd':
indexEvent = await fetchEventByDTag(identifier);
break;
case 'naddr':
indexEvent = await fetchEventByNaddr(identifier);
break;
case 'nevent':
indexEvent = await fetchEventByNevent(identifier);
break;
default:
// Validate the identifier type for SSR
const validTypes = ['id', 'd', 'naddr', 'nevent'];
if (!validTypes.includes(type)) {
throw error(400, `Unsupported identifier type: ${type}`);
}
if (!indexEvent) {
throw error(404, `Event not found for ${type}: ${identifier}`);
}
const publicationType = indexEvent.tags.find((tag) => tag[0] === "type")?.[1] ?? "";
// Provide basic data for SSR - actual fetching will happen on client
return {
publicationType,
indexEvent,
publicationType: "", // Will be determined on client side
indexEvent: null, // Will be fetched on client side
};
};

54
src/routes/publication/[type]/[identifier]/+page.ts

@ -0,0 +1,54 @@ @@ -0,0 +1,54 @@
import { error } from "@sveltejs/kit";
import type { PageLoad } from "./$types";
import { fetchEventByDTag, fetchEventById, fetchEventByNaddr, fetchEventByNevent } from "../../../../lib/utils/websocket_utils.ts";
import type { NostrEvent } from "../../../../lib/utils/websocket_utils.ts";
import { browser } from "$app/environment";
export const load: PageLoad = async ({ params }) => {
const { type, identifier } = params;
// Only fetch on the client side where WebSocket is available
if (!browser) {
// Return basic data for SSR
return {
publicationType: "",
indexEvent: null,
};
}
let indexEvent: NostrEvent;
try {
// Handle different identifier types
switch (type) {
case 'id':
indexEvent = await fetchEventById(identifier);
break;
case 'd':
indexEvent = await fetchEventByDTag(identifier);
break;
case 'naddr':
indexEvent = await fetchEventByNaddr(identifier);
break;
case 'nevent':
indexEvent = await fetchEventByNevent(identifier);
break;
default:
throw error(400, `Unsupported identifier type: ${type}`);
}
if (!indexEvent) {
throw error(404, `Event not found for ${type}: ${identifier}`);
}
const publicationType = indexEvent.tags.find((tag) => tag[0] === "type")?.[1] ?? "";
return {
publicationType,
indexEvent,
};
} catch (err) {
console.error('Failed to fetch publication:', err);
throw error(404, `Failed to load publication: ${err}`);
}
};
Loading…
Cancel
Save