init nostr

This commit is contained in:
Travis Shears 2024-06-25 11:46:54 +02:00
parent 4f94b5fc1f
commit bec30f2ab0
7 changed files with 1082 additions and 9 deletions

127
src/nostr.ts Normal file
View file

@ -0,0 +1,127 @@
import pino from "pino";
import { lambdaRequestTracker, pinoLambdaDestination } from "pino-lambda";
import { MicroBlogBackend } from "./pocketbase";
import NDK, { type NDKFilter } from "@nostr-dev-kit/ndk";
// custom destination formatter
const destination = pinoLambdaDestination();
const logger = pino({}, destination);
const withRequest = lambdaRequestTracker();
const pb = new MicroBlogBackend(logger);
const npub = "npub1tcmsctewqs3yy0a9q2xh6r0tlm97dxdqcuehuyumyh4jkyfdg5xsmyvw2y";
const ndk = new NDK({
explicitRelayUrls: [
"wss://nos.lol",
// "wss://nostr.wine",
// "wss://nostr.einundzwanzig.space",
],
});
// const feedEvents = await npubA.feed();
// type MastodonPost = {
// media_attachments: {
// type: string; //'image',
// url: string;
// description: string; // 'Blurry gate',
// }[];
// id: string;
// content: string;
// account: {
// id: string;
// };
// created_at: string;
// tags: { name: string }[];
// };
// const getPostUntilId = async ({
// lastSavedId,
// maxId,
// carryPosts = [],
// }: {
// lastSavedId?: string;
// maxId?: string;
// carryPosts?: MastodonPost[];
// }): Promise<MastodonPost[]> => {
// const params = new URLSearchParams();
// params.append("limit", "10");
// const urlWithParams = new URL(
// `${baseURL}/api/v1/accounts/${accountId}/statuses`
// );
// urlWithParams.search = params.toString();
// const res = await fetch(urlWithParams);
// const posts = (await res.json()) as MastodonPost[];
// const containsId = posts.some((post) => post.id === lastSavedId);
// if (!containsId && posts.length >= 5) {
// return getPostUntilId({
// lastSavedId,
// carryPosts: carryPosts?.concat(posts),
// maxId: posts[posts.length - 1]?.id,
// });
// }
// const allPosts = carryPosts?.concat(posts).reverse();
// if (lastSavedId) {
// const index = allPosts.findIndex((post) => post.id === lastSavedId);
// return allPosts.slice(index + 1);
// }
// return allPosts;
// };
// const savePost = async (post: MastodonPost) => {
// const postData = {
// remoteId: post.id,
// authorId: post.account.id,
// posted: post.created_at,
// source: "mastodon" as const,
// fullPost: post,
// };
// return await pb.savePost(postData);
// };
// const saveTags = async (post: MastodonPost, postId: string) => {
// logger.info({ tags: post.tags }, "saving tags");
// for (const tag of post.tags) {
// await pb.setTag(tag.name, postId);
// }
// };
// const saveImages = async (post: MastodonPost, postId: string) => {
// logger.info({ images: post.media_attachments }, "saving images");
// for (const image of post.media_attachments) {
// await pb.saveAndSetImage(
// { remoteURL: image.url, alt: image.description },
// postId
// );
// }
// };
exports.run = async (event: any, context: any) => {
withRequest(event, context);
logger.info("connecting to nostr relays");
await ndk.connect();
logger.info("connected to nostr relays");
// const lastSavedPostId = await pb.getLatestPostRemoteIDBySource("mastodon");
// console.log({ lastSavedPostId });
// const posts = await getPostUntilId({ lastSavedId: lastSavedPostId });
// const user = ndk.getUser({
// npub,
// });
// await user.fetchProfile();
const filter: NDKFilter = { kinds: [1], authors: [npub] };
const evt = await ndk.fetchEvent(filter, { closeOnEose: true });
logger.info({ evt }, "Got event");
// logger.info({ profile: user.profile }, "Got user profile");
// for (const post of posts) {
// logger.info({ post }, "saving post");
// const savedNewPost = await savePost(post);
// await saveTags(post, savedNewPost.id);
// await saveImages(post, savedNewPost.id);
// }
};