From 7a0014c8aad9a2f3ed4d423779a6c6ac8d6ff2b9 Mon Sep 17 00:00:00 2001 From: Vojtech Simetka Date: Tue, 4 Apr 2023 16:15:41 +0200 Subject: [PATCH] refactor: remove in-memory adapter (#382) --- .../lib/adapters/in-memory-and-ipfs/index.ts | 548 ------------------ .../lib/adapters/in-memory-and-ipfs/lipsum.ts | 4 - .../lib/adapters/in-memory-and-ipfs/utils.ts | 108 ---- packages/ui/src/lib/adapters/index.ts | 6 +- packages/ui/src/routes/dev/+page.svelte | 30 - 5 files changed, 1 insertion(+), 695 deletions(-) delete mode 100644 packages/ui/src/lib/adapters/in-memory-and-ipfs/index.ts delete mode 100644 packages/ui/src/lib/adapters/in-memory-and-ipfs/lipsum.ts delete mode 100644 packages/ui/src/lib/adapters/in-memory-and-ipfs/utils.ts diff --git a/packages/ui/src/lib/adapters/in-memory-and-ipfs/index.ts b/packages/ui/src/lib/adapters/in-memory-and-ipfs/index.ts deleted file mode 100644 index dd5d77e..0000000 --- a/packages/ui/src/lib/adapters/in-memory-and-ipfs/index.ts +++ /dev/null @@ -1,548 +0,0 @@ -import { connectWallet } from '$lib/services' -import { chats, type Chat } from '$lib/stores/chat' -import { personas, type DraftPersona, type Persona } from '$lib/stores/persona' -import { profile } from '$lib/stores/profile' -import { getFromLocalStorage, saveToLocalStorage, sleep } from '$lib/utils' -import type { Signer } from 'ethers' -import { create } from 'ipfs-http-client' -import { - CREATE_PERSONA_GO_PRICE, - DEFAULT_GO_AMOUNT, - NEW_POST_GO_PRICE, - NEW_POST_REP_LOSS, - NEW_POST_REP_PRICE, - NEW_POST_REP_WIN, - VOTE_GO_PRICE, - VOTE_REP_WIN, -} from '$lib/constants' -import { tokens } from '$lib/stores/tokens' -import { posts, type Post } from '$lib/stores/post' -import { transaction, type TransactionRecord } from '$lib/stores/transaction' - -import type { Adapter } from '..' -import { - executeWithChance, - randomId, - randomIntegerBetween, - randomPersona, - randomPost, - randomText, -} from './utils' -import { get } from 'svelte/store' - -// FIXME: no idea where whe should put these so that they don't leak. I can limit to some specific origin I guess -const IPFS_AUTH = - 'Basic Mk5Nbk1vZUNSTWMyOTlCQjYzWm9QZzlQYTU3OjAwZTk2MmJjZTBkZmQxZWQxNGNhNmY1M2JiYjYxMTli' -const IPFS_GATEWAY = 'https://kurate.infura-ipfs.io/ipfs' - -function addRandomPost(groupId: string, pending: boolean) { - const post = randomPost() - if (pending) posts.addPending(post, groupId) - else posts.addApproved(post, groupId) -} - -function addRandomPersona() { - // FIXME: it can happen that this ID already exists - const groupId = randomId() - personas.update((state) => { - const persona = randomPersona(groupId) - state.all.set(groupId, persona) - - // The persona should have 5-15 approved posts - for (let i = 0; i < randomIntegerBetween(5, 15); i++) { - addRandomPost(groupId, false) - } - - // The persona should have 0-20 pending posts - for (let i = 0; i < randomIntegerBetween(0, 20); i++) { - addRandomPost(groupId, true) - } - - return { ...state } - }) -} - -function addRandomThings() { - // 1% chance to add new persona every second - if (executeWithChance(0.01)) addRandomPersona() -} - -function startAddition(): () => unknown { - const interval = setInterval(addRandomThings, 1000) - - return () => { - clearInterval(interval) - } -} - -export async function startNewEpoch() { - const newTransactions: TransactionRecord[] = [] - const totalRepChange = await new Promise((resolve) => { - posts.update((pState) => { - const { data } = pState - let repChange = 0 - - data.forEach((values, key) => { - const val = values - val.pending = [] - values.pending.forEach((post) => { - const included = executeWithChance(0.5) - if (included) { - val.approved.push(post) - } - - if (post.myPost) { - if (included) { - repChange += NEW_POST_REP_WIN - newTransactions.push({ - timestamp: Date.now(), - goChange: 0, - repChange: NEW_POST_REP_WIN, - personaId: key, - type: 'post_included', - }) - } else { - repChange -= NEW_POST_REP_LOSS - newTransactions.push({ - timestamp: Date.now(), - goChange: 0, - repChange: NEW_POST_REP_WIN, - personaId: key, - type: 'post_rejected', - }) - } - } - - if (post.yourVote) { - if ((included && post.yourVote === '+') || (!included && post.yourVote === '-')) { - repChange += VOTE_REP_WIN - newTransactions.push({ - timestamp: Date.now(), - goChange: 0, - repChange: VOTE_REP_WIN, - personaId: key, - type: 'vote_win', - }) - } - } - }) - data.set(key, val) - }) - - resolve(repChange) - return { data } - }) - }) - - tokens.update((tState) => { - let { repStaked, repTotal, go } = tState - - go = DEFAULT_GO_AMOUNT - repTotal = Math.max(repTotal + totalRepChange, 0) - repStaked = 0 - - return { ...tState, repStaked, repTotal, go } - }) - - transaction.update((tState) => { - return { ...tState, transaction: [...tState.transactions, newTransactions] } - }) -} - -function startEpochTimer(): () => unknown { - const interval = setInterval(() => { - tokens.update(({ timeToEpoch, epochDuration, ...rest }) => { - const newTimeToEpoch = epochDuration - (Date.now() % epochDuration) - - if (timeToEpoch < newTimeToEpoch) { - startNewEpoch() - } - - return { ...rest, epochDuration, timeToEpoch: newTimeToEpoch } - }) - }, 1000) - - return () => { - clearInterval(interval) - } -} - -export class InMemoryAndIPFS implements Adapter { - private ipfs = create({ - host: 'ipfs.infura.io', - port: 5001, - protocol: 'https', - headers: { - authorization: IPFS_AUTH, - }, - }) - private subscriptions: Array<() => unknown> = [] - - async start() { - const storedPersonas = new Map(getFromLocalStorage('personas', [])) - const draftPersonas = getFromLocalStorage('drafts', []) - const storedChats = new Map(getFromLocalStorage('chats', [])) - const storedPosts = new Map( - getFromLocalStorage('posts', []), - ) - const storedTransactions = getFromLocalStorage('transactions', []) - const epochDuration = 5 * 60 * 1000 - const storedTokens = getFromLocalStorage('tokens', { - go: DEFAULT_GO_AMOUNT, - repTotal: 55, - repStaked: 5, - loading: false, - goHistoricalValues: [], - repStakedHistoricalValues: [], - repTotalHistoricalValues: [], - epochDuration, - timeToEpoch: epochDuration - (Date.now() % epochDuration), - }) - transaction.set({ transactions: storedTransactions }) - - tokens.set(storedTokens) - - this.subscriptions.push( - transaction.subscribe(({ transactions }) => { - saveToLocalStorage('transactions', transactions) - }), - ) - - this.subscriptions.push(startEpochTimer()) - - // It takes 1 second to load all the data :) - await sleep(1000) - - // There is no persona so we create one in 1 second :) - if (storedPersonas.size === 0) setTimeout(addRandomPersona, 1000) - - personas.update((state) => { - return { - ...state, - all: storedPersonas, - draft: draftPersonas, - loading: false, - } - }) - - chats.update((state) => { - return { - ...state, - chats: storedChats, - loading: false, - } - }) - - posts.set({ data: storedPosts }) - - this.subscriptions.push( - personas.subscribe(({ all }) => { - saveToLocalStorage('personas', Array.from(all.entries())) - }), - ) - this.subscriptions.push( - chats.subscribe(({ chats }) => { - saveToLocalStorage('chats', Array.from(chats.entries())) - }), - ) - this.subscriptions.push( - posts.subscribe(({ data }) => { - saveToLocalStorage('posts', Array.from(data.entries())) - }), - ) - this.subscriptions.push(startAddition()) - - chats.update((state) => { - return { ...state, loading: false } - }) - } - stop() { - this.subscriptions.forEach((s) => s()) - } - addPersonaToFavorite(groupId: string): Promise { - return new Promise((resolve) => { - personas.update(({ favorite, ...store }) => { - const favoriteNew: string[] = [...favorite, groupId] - - saveToLocalStorage('favorite', favoriteNew) - - resolve() - return { ...store, favorite: favoriteNew } - }) - }) - } - removePersonaFromFavorite(groupId: string): Promise { - return new Promise((resolve) => { - personas.update(({ favorite, ...store }) => { - const favoriteNew: string[] = favorite.filter((s) => s !== groupId) - - saveToLocalStorage('favorite', favoriteNew) - - resolve() - return { ...store, favorite: favoriteNew } - }) - }) - } - addPersonaDraft(draftPersona: DraftPersona): Promise { - return new Promise((resolve) => - personas.update(({ draft, ...state }) => { - const newDraft = [...draft, draftPersona] - - saveToLocalStorage('drafts', newDraft) - - resolve(newDraft.length - 1) - - return { ...state, draft: newDraft } - }), - ) - } - updatePersonaDraft(index: number, draftPersona: DraftPersona): Promise { - return new Promise((resolve) => - personas.update(({ draft, ...state }) => { - draft[index] = draftPersona - - saveToLocalStorage('drafts', draft) - - resolve() - - return { ...state, draft } - }), - ) - } - - deleteDraftPersona(index: number): Promise { - return new Promise((resolve) => - personas.update(({ draft, ...state }) => { - const newDraft = draft.filter((_, i) => i !== index) - - saveToLocalStorage('drafts', newDraft) - - resolve() - - return { ...state, draft: newDraft } - }), - ) - } - - async publishPersona(draftPersona: DraftPersona, signer: Signer): Promise { - await signer.signMessage('This "transaction" publishes persona') - - function getRandomNonExistingId(): Promise { - let groupId = randomId() - return new Promise((resolve) => { - personas.subscribe((s) => { - while (s.all.has(groupId)) { - groupId = randomId() - } - resolve(groupId) - }) - }) - } - - const groupId = await getRandomNonExistingId() - - personas.update((state) => { - state.all.set(groupId, { - ...draftPersona, - postsCount: 5, - participantsCount: 1, - personaId: groupId, - }) - - return { ...state } - }) - - draftPersona.posts.forEach((p) => posts.addApproved({ ...p, postId: randomId() }, groupId)) - - personas.update(({ draft, ...state }) => { - const newDraft = draft.filter((d) => d !== draftPersona) - - saveToLocalStorage('drafts', newDraft) - - return { ...state, draft: newDraft } - }) - - tokens.update(({ go, ...state }) => { - return { ...state, go: go - CREATE_PERSONA_GO_PRICE } - }) - - transaction.update(({ transactions }) => { - transactions.push({ - timestamp: Date.now(), - goChange: -CREATE_PERSONA_GO_PRICE, - repChange: 0, - personaId: groupId, - type: 'publish persona', - }) - return { transactions } - }) - - return groupId - } - - async signIn(): Promise { - const signer = await connectWallet() - const address = await signer.getAddress() - - profile.update((state) => ({ ...state, signer, address })) - } - - async uploadPicture(picture: string): Promise { - const blob = await (await fetch(picture)).blob() - const res = await this.ipfs.add(blob) - - return res.cid.toString() - } - - getPicture(cid: string): string { - if (cid.startsWith('/')) return `https://picsum.photos/seed${cid}` - return `${IPFS_GATEWAY}/${cid}` - } - - async publishPost( - groupId: string, - text: string, - images: string[], - signer: Signer, - ): Promise { - await signer.signMessage('This "transaction" publishes a post to pending') - - const post = { - timestamp: Date.now(), - text, - images, - postId: randomId(), - } - - tokens.update(({ go, repStaked, ...state }) => { - return { ...state, repStaked: repStaked + NEW_POST_REP_PRICE, go: go - NEW_POST_GO_PRICE } - }) - - posts.addPending(post, groupId) - - transaction.update(({ transactions }) => { - transactions.push({ - timestamp: Date.now(), - goChange: -NEW_POST_GO_PRICE, - repChange: -NEW_POST_REP_PRICE, - personaId: groupId, - type: 'publish post', - }) - return { transactions } - }) - - return post.postId - } - - async subscribePersonaPosts(groupId: string): Promise<() => unknown> { - const interval = setInterval(() => { - // 5% chance every second to add new pending post - if (executeWithChance(0.05)) addRandomPost(groupId, true) - }, 1000) - - return () => clearInterval(interval) - } - - async voteOnPost(groupId: string, postId: string, vote: '+' | '-', signer: Signer) { - await signer.signMessage(`This "transaction" votes ${vote === '+' ? 'promote' : 'demote'}`) - - posts.update((state) => { - const posts = state.data.get(groupId) - if (posts) { - const newPosts = posts.pending.filter((p) => p.postId !== postId) - const newPost = posts.pending.find((p) => p.postId === postId) - if (newPost) { - newPost.yourVote = vote - state.data.set(groupId, { ...posts, pending: [...newPosts, newPost] }) - } - } - - return state - }) - - tokens.update(({ go, ...state }) => { - return { - ...state, - go: go - VOTE_GO_PRICE, - } - }) - transaction.update(({ transactions }) => { - transactions.push({ - timestamp: Date.now(), - goChange: -VOTE_GO_PRICE, - repChange: 0, - type: vote === '+' ? 'promote' : 'demote', - personaId: groupId, - }) - return { transactions } - }) - } - - startChat(chat: Chat): Promise { - return new Promise((resolve) => { - const seed = randomId() - chats.update((state) => { - state.chats.set(seed, { ...chat, chatId: seed }) - resolve(seed) - return state - }) - }) - } - - sendChatMessage(chatId: string, text: string): Promise { - return new Promise((resolve) => { - chats.update((state) => { - const chat = state.chats.get(chatId) - const address = get(profile).address - if (!chat || !address) throw new Error('Chat not found') - - chat.messages.push({ - timestamp: Date.now(), - text, - address, - }) - state.chats.set(chatId, chat) - resolve() - return { ...state } - }) - }) - } - - async subscribeToChat(chatId: string): Promise<() => unknown> { - const interval = setInterval(() => { - chats.update((state) => { - const chat = state.chats.get(chatId) - const address = get(profile).address - if (!chat || !address) throw new Error('Chat not found') - - const lastMessage = chat.messages[chat.messages.length - 1] - // 10% chance every second to add new message and only when the last message was sent by me - if (lastMessage.address === address && executeWithChance(0.1)) { - const newMessage = { - timestamp: Date.now(), - text: randomText(randomIntegerBetween(1, 5)), - address: randomId(), - } - chat.messages.push(newMessage) - state.chats.set(chatId, chat) - } - return { ...state } - }) - }, 1000) - - return () => { - clearInterval(interval) - } - } - - async queryPersonaJoined(personId: string): Promise { - // FIXME: properly implement - console.error('NOT IMPLEMENTED', 'subscribeToChat') - return true - } - - async joinPersona(personId: string): Promise { - // FIXME: properly implement - console.error('NOT IMPLEMENTED', 'subscribeToChat') - } -} diff --git a/packages/ui/src/lib/adapters/in-memory-and-ipfs/lipsum.ts b/packages/ui/src/lib/adapters/in-memory-and-ipfs/lipsum.ts deleted file mode 100644 index 9849f18..0000000 --- a/packages/ui/src/lib/adapters/in-memory-and-ipfs/lipsum.ts +++ /dev/null @@ -1,4 +0,0 @@ -const lipsum = - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent nibh massa, cursus vel consectetur non, tempus in elit. Donec felis risus, maximus sit amet convallis vel, cursus a nunc. Nulla fermentum purus elit, at varius leo eleifend sed. Curabitur vel lectus vitae orci semper facilisis sed a tortor. Pellentesque pulvinar, metus sit amet ullamcorper lacinia, ligula massa lacinia neque, et vestibulum ligula sapien sit amet odio. Duis vitae mauris vel est egestas varius nec ut urna. Nulla dignissim, tellus at bibendum elementum, erat magna pharetra nisi, sodales sagittis lorem risus sed leo. Duis sodales bibendum ligula. Curabitur nunc ipsum, tempor at interdum et, vulputate et ante. Sed vitae orci dolor. Nulla facilisi. Duis id velit vestibulum, feugiat elit in, aliquam velit. Donec aliquam egestas mi, quis condimentum lorem volutpat in. Proin vitae lorem venenatis, hendrerit felis porta, porttitor augue.Suspendisse volutpat eros augue, eu consequat lorem convallis nec. Proin scelerisque egestas eros, sit amet porttitor nisi auctor a. Vivamus ut lectus augue. Sed at lobortis leo. Nam et malesuada lectus, eu blandit dui. Praesent congue ultrices lectus vel interdum. Aenean eu enim finibus, hendrerit nisl id, porta eros. Etiam sollicitudin sem tortor, sit amet maximus sem tempus et. Quisque purus erat, consectetur dapibus porttitor nec, finibus in elit. Sed non justo in nisi auctor bibendum. Nam imperdiet nec metus quis accumsan. Duis semper faucibus turpis, at semper tellus molestie ut. Curabitur nisi massa, semper nec pretium at, semper sed urna.Mauris at tincidunt metus. In iaculis nunc quis varius pharetra. Nam sed fringilla lorem. Proin mollis semper ex, in laoreet nisi mollis eget. Suspendisse tincidunt est sollicitudin pulvinar tincidunt. Donec molestie justo dolor, at varius tellus volutpat blandit. Aliquam vehicula ut libero nec consequat. Nunc auctor nulla ante, ut rutrum nulla mollis non. Phasellus malesuada, nulla a auctor tempus, nulla nulla congue eros, in sagittis mauris mi in ante. Etiam a feugiat diam, ac suscipit diam. Donec elementum nisi turpis, in imperdiet arcu facilisis semper. Phasellus aliquet luctus luctus. Nulla blandit hendrerit ornare.Integer mattis, urna et volutpat venenatis, velit ligula porta justo, eget accumsan odio enim a mi. Nunc non mollis lorem, quis suscipit urna. Phasellus ornare urna purus, varius pulvinar felis gravida et. Vivamus ornare nisi a pretium eleifend. Nam vitae ipsum eleifend, iaculis dui vel, mattis ligula. Mauris pellentesque nibh enim, sagittis finibus massa auctor eget. Proin facilisis commodo diam, nec vulputate urna hendrerit non. Vestibulum lobortis commodo congue. Cras non egestas ante.Cras vel dui lacinia, mattis justo vitae, sollicitudin arcu. Aliquam erat volutpat. Quisque convallis pellentesque egestas. Integer massa velit, tincidunt dapibus quam et, vestibulum aliquam lacus. Nam ac viverra mauris. Cras ultrices lacus sit amet odio consectetur, non condimentum purus malesuada. Morbi fermentum ipsum eu varius rhoncus.Mauris vehicula ante sit amet lobortis maximus. Integer faucibus vitae mi eget eleifend. Suspendisse feugiat commodo dapibus. Proin mauris massa, elementum vitae tincidunt at, ultricies ac velit. Integer vel volutpat massa. Vivamus porttitor urna at nibh feugiat pulvinar. Nam eget purus dignissim elit dapibus lobortis.In quam magna, placerat id aliquet vitae, aliquet sed ipsum. Sed at turpis quis lacus laoreet lacinia pretium a sem. Mauris eu laoreet lorem. Nunc porttitor interdum nibh, eget bibendum nisl aliquam porta. Maecenas in justo nisl. Cras vitae pulvinar neque. Aliquam erat volutpat. Curabitur tortor odio, suscipit vitae interdum ut, blandit at nulla. Sed sem est, aliquet non arcu maximus, viverra semper ante. Sed gravida scelerisque tristique.Nulla rutrum, mi eu efficitur convallis, felis turpis posuere turpis, ac gravida enim est vel libero. Praesent at est quis elit laoreet venenatis et ut lectus. Nulla facilisi. Praesent ornare egestas sem ac viverra. Vestibulum tristique accumsan fringilla. Integer volutpat laoreet interdum. Nulla non lorem pharetra, efficitur ligula vitae, imperdiet nisl. Integer rhoncus tincidunt turpis ac euismod. Curabitur et lorem condimentum, eleifend tortor ut, tristique enim. Quisque eu enim nisl. Vestibulum at cursus justo. Pellentesque fringilla bibendum libero vel maximus. Pellentesque vel velit gravida, tempor turpis nec, scelerisque quam. Vivamus laoreet ornare justo, molestie iaculis eros molestie eu. In nisl ligula, commodo id feugiat a, tincidunt id neque. Maecenas non urna mollis lorem dignissim lacinia.Nunc fermentum, elit eget posuere facilisis, tellus ligula varius eros, in facilisis nulla mi at arcu. Maecenas sit amet pellentesque urna. Curabitur pulvinar aliquam ipsum, eleifend malesuada metus pellentesque et. Nam turpis mi, bibendum in viverra sed, tincidunt sed leo. Proin ac placerat odio, quis auctor nibh. Sed tristique nulla at condimentum commodo. Quisque molestie fringilla tempor.Nam posuere porttitor cursus. Pellentesque et neque venenatis, lobortis nunc a, posuere eros. Nunc a porttitor ex. Cras facilisis ut velit ac tincidunt. Sed mollis porta erat eu euismod. Proin elit metus, gravida in massa vel, ultrices ullamcorper elit. Suspendisse potenti.Ut in ante laoreet ligula porttitor condimentum et ut velit. Donec convallis, nibh nec sollicitudin malesuada, metus dui pretium erat, nec iaculis augue dolor vitae orci. Vestibulum vitae aliquet lacus. Etiam ut pharetra lacus. Phasellus sit amet ante rhoncus turpis vestibulum lobortis placerat id erat. In sed viverra nibh, ac auctor elit. Sed convallis auctor justo ut dignissim. Aenean pellentesque cursus consequat. Nullam sit amet libero sed orci efficitur vestibulum. Morbi nunc sapien, euismod sit amet consequat vel, blandit id risus. Nunc enim purus, egestas ut vehicula vitae, varius in tortor. Phasellus posuere, leo et sodales condimentum, erat massa dictum mi, quis malesuada leo tortor non ligula. Donec dictum id ex eu porta. Praesent pulvinar pulvinar libero et sagittis.Sed non vulputate libero. Vestibulum convallis risus a urna dignissim tempus. Aliquam eu lacinia ligula. Proin pharetra neque ac libero iaculis, in condimentum velit bibendum. Duis in nisi pulvinar, molestie lorem non, lobortis elit. Morbi turpis velit, bibendum eu feugiat ut, aliquet consequat nibh. Mauris maximus lacinia purus non hendrerit. Nulla rhoncus porta lacus, quis imperdiet est. Mauris malesuada leo eu odio vehicula commodo. Nullam ullamcorper enim non enim tincidunt, non pharetra felis tincidunt. Duis ac viverra eros. In quis risus justo. In ut turpis vitae neque aliquam dictum id at nulla. Morbi suscipit tortor felis, non rutrum enim rutrum pharetra. Cras sit amet sem nec neque lacinia malesuada imperdiet sit amet odio.Nam in aliquam purus. Integer nec neque massa. Aliquam a varius ex, a facilisis metus. Quisque augue libero, fermentum malesuada lobortis et, ornare sit amet nibh. Integer non nibh at neque eleifend aliquet. Aenean elit turpis, faucibus nec risus sed, consectetur volutpat purus. In sollicitudin rutrum accumsan. Fusce nec venenatis diam. Fusce feugiat metus sed sapien egestas vulputate. Curabitur ac enim feugiat, gravida justo lobortis, ullamcorper augue. Morbi dictum ligula at tortor sagittis, et varius nulla cursus. Phasellus interdum nec lectus at vehicula.Nunc semper aliquet tellus, sodales blandit tellus lobortis non. Vestibulum placerat, arcu in convallis malesuada, nisi enim varius neque, et dictum sem massa a nisl. Sed porttitor luctus ipsum, et gravida tortor auctor id. Sed accumsan porttitor quam condimentum posuere. Vivamus eget egestas ex. Nulla a vulputate purus. Aenean non dignissim dui, quis aliquam augue. Suspendisse consectetur risus tellus, eu congue mauris convallis a. Nulla id molestie elit. Ut non felis eget leo consectetur fermentum. Nulla posuere lacinia blandit. Pellentesque ac justo nec turpis dictum imperdiet a eget urna. Suspendisse potenti.Pellentesque efficitur, elit aliquet vulputate lobortis, nisi leo varius leo, in consectetur massa eros nec libero. Vivamus vitae laoreet erat. Donec vitae rutrum dolor. Nunc fermentum nulla vitae commodo facilisis. Vivamus ac venenatis diam, sed ullamcorper neque. Sed a pulvinar quam. Donec sagittis enim sed maximus pulvinar. Aliquam vestibulum, nunc non euismod maximus, sapien ligula condimentum odio, at iaculis elit ex sit amet velit.Sed orci tortor, pharetra ut malesuada in, aliquam a erat. Cras accumsan porttitor hendrerit. Nam posuere enim id felis aliquam, a pulvinar neque efficitur. Morbi vel mauris non odio suscipit malesuada id ut enim. Mauris eget metus semper, dictum tellus a, ullamcorper nibh. Integer sit amet erat sagittis, luctus quam ac, dignissim quam. Duis ut leo ut leo vehicula consectetur. Suspendisse enim lacus, suscipit non luctus sit amet, facilisis nec velit. Nullam metus nisl, porta eget euismod at, commodo vitae lacus. Praesent ac euismod nulla. Aliquam sagittis tempus mauris at iaculis. Ut sit amet gravida tortor, eu suscipit tellus. Nulla non arcu quis sapien maximus maximus.Etiam elementum, risus et molestie tristique, nulla turpis egestas arcu, at sagittis ipsum nunc vitae mauris. Etiam dapibus ullamcorper arcu, in eleifend sapien semper sed. Mauris pretium arcu non enim fermentum, nec lacinia nisi tincidunt. Aliquam facilisis lacus vitae odio rutrum hendrerit. Mauris ultrices volutpat ante. Morbi et mattis eros, eu eleifend tortor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Mauris ut purus justo. Donec ac massa posuere odio sodales molestie ac et leo. Curabitur suscipit ante ante, sit amet suscipit augue tincidunt nec. Fusce faucibus elit at arcu porta, ac convallis odio varius.Vivamus sit amet convallis nunc, cursus commodo tellus. Mauris congue sagittis magna, ut sodales ante pellentesque in. Cras fringilla commodo mauris, in euismod nibh pellentesque eu. Nulla at pretium massa. Donec nulla sapien, ultricies eget est at, eleifend tempor sapien. Aenean nec convallis velit. Suspendisse vestibulum dui non enim vehicula, a interdum lacus vehicula. Vivamus ligula dolor, pellentesque eu volutpat sit amet, tempus id odio. Sed lobortis venenatis orci, id aliquet libero pulvinar et.Suspendisse a auctor nunc. Fusce dictum neque sit amet lectus molestie, vitae convallis risus mollis. In finibus fringilla enim, et ultricies magna aliquam et. Ut velit risus, molestie at laoreet malesuada, ultrices vitae est. Aliquam vitae magna elementum leo pretium ullamcorper eu non leo. Curabitur lectus lacus, efficitur sed porta sit amet, sodales eget nulla. Sed quis porttitor eros. Fusce sit amet ligula quam. Nulla et orci leo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec aliquet convallis elit, ut accumsan ex dictum eget. In pharetra laoreet ullamcorper. Donec tincidunt porttitor est, ut tempus massa feugiat id.Proin in lectus nulla. Praesent vestibulum enim vel lectus faucibus tincidunt. Vestibulum et neque consequat lectus feugiat tincidunt. Fusce semper vestibulum turpis at tristique. In sem dui, vehicula eu blandit eu, molestie sed eros. Praesent dictum vel elit nec rhoncus. Morbi eu congue metus. Ut sit amet aliquam massa. In hac habitasse platea dictumst. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.Integer ac efficitur justo. Praesent ut tempor leo. Sed porta nibh urna, sit amet porttitor turpis blandit in. Suspendisse potenti. Duis fermentum felis sapien, vel sodales risus vehicula a. Donec quis placerat nisl. Donec enim arcu, dignissim nec mauris vel, eleifend facilisis risus. Ut sodales laoreet dui finibus euismod. Phasellus pellentesque interdum mauris non convallis. Pellentesque malesuada arcu eu nisi convallis condimentum. Sed non commodo augue. Vivamus placerat lobortis tellus, et laoreet nisl.Curabitur ornare auctor diam, auctor euismod odio aliquam sed. Quisque et est congue, facilisis est vel, dapibus eros. Maecenas quis sagittis elit. Integer posuere molestie viverra. Fusce sodales finibus blandit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla facilisi.Ut dapibus elit sed dolor pulvinar, dapibus sagittis sem ultricies. Vestibulum sit amet convallis tellus. Ut in cursus ipsum, luctus suscipit quam. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent placerat vulputate ipsum quis tincidunt. Proin auctor, massa eget molestie scelerisque, sapien justo pharetra ipsum, sit amet dapibus ipsum nisl in est.Maecenas tincidunt lectus ipsum, id dapibus tortor tincidunt at. Mauris nisi massa, ultricies et augue non, blandit semper nisl. Vivamus imperdiet arcu vel nisi faucibus feugiat. Mauris ut aliquet tortor. Nunc risus mi, elementum at lobortis ut, fringilla at sem. Sed varius, nunc ac auctor mollis, erat eros finibus mauris, at facilisis urna lectus in diam. Aenean vel orci eu diam finibus egestas. Quisque facilisis maximus felis, ut fringilla ante. Sed blandit tellus eros, eget pellentesque enim pretium ut. Vivamus in fringilla velit. Etiam malesuada iaculis eros, in malesuada risus tristique et. Donec vestibulum lacus magna, sed dictum velit lobortis sed.Morbi tincidunt suscipit dictum. Integer faucibus rutrum nibh ac dictum. Nullam egestas posuere tortor rhoncus consectetur. Sed vitae ipsum massa. Quisque porttitor sit amet turpis id ullamcorper. Nunc tortor mi, sodales faucibus aliquam eget, pretium at nisi. Nam sollicitudin aliquet metus, vel molestie arcu dapibus eget. Curabitur at cursus justo. Nam posuere efficitur vestibulum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nam venenatis augue ante, sit amet fermentum turpis sollicitudin ac. In hac habitasse platea dictumst. Nullam id nisl congue, porta urna a, gravida justo. Fusce nec ligula odio.Mauris at mi vel tortor faucibus dignissim nec tincidunt est. Sed metus lectus, porttitor in pulvinar at, interdum eu tortor. Nam dapibus urna a dui auctor suscipit. Nulla facilisi. Aenean sit amet nulla mi. In elementum tellus nec augue dapibus gravida. Suspendisse sed eros nibh. Cras ultrices enim et quam placerat malesuada.Phasellus consectetur lacinia mauris, nec elementum est mollis id. Suspendisse quis ultricies purus. Cras ac lacus sit amet felis facilisis viverra non vel ante. Nunc vestibulum in metus et bibendum. Nulla vulputate, nulla quis egestas posuere, ante urna vestibulum arcu, molestie ultricies orci arcu eu nunc. Etiam posuere ipsum vitae odio dapibus, ac fermentum turpis malesuada. Aliquam ullamcorper posuere justo, eget porta nunc gravida eu. Duis tincidunt odio non orci aliquam, sit amet cursus nunc dictum. Suspendisse ullamcorper sapien in nunc imperdiet eleifend. Nulla tortor orci, tincidunt id placerat tincidunt, eleifend tristique ex. Nulla congue, nulla vel commodo ultricies, massa urna egestas metus, sit amet dictum est erat in velit. Etiam dignissim, dolor eget interdum tincidunt, nisi metus accumsan libero, id auctor diam ante in velit.Proin gravida augue id velit aliquam, id euismod metus sollicitudin. Aliquam eleifend odio at nisi cursus rhoncus. Morbi tristique bibendum rutrum. Quisque pellentesque mauris libero, et malesuada nunc bibendum ac. Nulla vitae lobortis dui. Nunc lobortis consequat velit, in sodales purus convallis in. In non tempor nibh. Ut sit amet urna quis augue aliquam blandit vel malesuada sapien.Cras in tempor libero. Mauris auctor malesuada efficitur. Mauris posuere odio at dui tempus, vel fermentum sapien sodales. Duis placerat eros laoreet, cursus lacus eu, consectetur mi. Pellentesque aliquet quam id lobortis varius. Vestibulum aliquet magna elit, ut iaculis dolor tempor eu. Quisque vestibulum lectus vulputate erat vehicula mollis. Phasellus nec tincidunt purus, sed congue justo. Morbi a iaculis erat. Suspendisse lacinia ut mi nec fermentum. Etiam in aliquam risus, at mattis magna.Sed pharetra elit sit amet massa iaculis vulputate. Sed condimentum pharetra arcu nec scelerisque. Morbi ac massa quis ante sollicitudin bibendum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Maecenas tempus id quam non varius. Nam vel neque vel felis pellentesque blandit. Nullam rhoncus risus vel vehicula euismod. Phasellus varius luctus massa, ac consectetur nisi finibus vitae. Cras vestibulum velit nec imperdiet mollis. Sed pharetra, nibh eu mattis eleifend, tortor nibh posuere lectus, sit amet tincidunt mauris metus ut quam. Donec aliquet, magna interdum elementum ultricies, ligula erat euismod arcu, rhoncus aliquam risus quam quis tellus. Sed porta justo eget lacus suscipit eleifend. Sed vitae elementum magna. Suspendisse orci neque, dictum in sapien in, aliquet consequat dolor. Nunc id magna tincidunt, consectetur justo eu, mattis velit. Nam vestibulum tortor sapien, vitae accumsan massa feugiat vitae.Mauris sed bibendum leo, pellentesque convallis lorem. Mauris risus dolor, malesuada vel ultricies vitae, suscipit id mauris. Aliquam quis libero magna. Nulla efficitur elementum sapien, et auctor leo ullamcorper non. Integer commodo efficitur lacinia. Morbi tempus fringilla gravida. Maecenas congue ultricies velit eu viverra. Nullam ullamcorper nunc ac sodales egestas. Quisque leo diam, efficitur sit amet leo in, aliquet finibus dui. In sit amet egestas diam.Nulla tempus tincidunt purus ac porttitor. Sed nisl nunc, fringilla a arcu sed, aliquam posuere arcu. Suspendisse iaculis tempus metus, et congue est tincidunt sit amet. Nullam sagittis molestie erat, eget condimentum diam dictum sed. Sed ultricies molestie eros quis consectetur. Etiam ut purus iaculis, scelerisque magna a, rhoncus risus. Nulla euismod neque vel ligula iaculis dapibus. Cras aliquam felis nec arcu condimentum, nec porta ipsum aliquam. Sed dignissim fermentum tellus non finibus.Nullam scelerisque urna a lobortis tincidunt. Morbi tempus feugiat dolor at consequat. Suspendisse et tellus eget lectus cursus varius eu in ex. In commodo vulputate neque quis volutpat. Aenean aliquet interdum posuere. Morbi tincidunt dignissim augue eget mattis. Nullam ultricies risus non ex interdum, non molestie felis sagittis. Sed pretium, ligula at tincidunt accumsan, magna lectus hendrerit risus, vel fermentum nulla enim quis orci. Curabitur vel enim est. Praesent porttitor erat nec arcu pulvinar, id rhoncus nunc aliquam.Ut rhoncus euismod magna eu euismod. Integer consequat ac lectus ut accumsan. Quisque mollis metus a ligula lobortis, ut fringilla dolor porta. Ut sapien leo, luctus non ullamcorper ac, tempus sit amet quam. Vestibulum pulvinar mauris ut maximus fringilla. Donec hendrerit sit amet tortor eget volutpat. Maecenas sagittis efficitur magna in molestie. Mauris cursus suscipit odio ut fringilla. Morbi vulputate nulla et consectetur pellentesque. Donec vulputate augue justo, et porttitor tellus finibus non. In a tellus ac sem condimentum tempor sed vel lectus. Curabitur efficitur vehicula diam non tempor. Aliquam condimentum porttitor egestas. Curabitur luctus sit amet lacus nec egestas.Phasellus a bibendum nunc. Pellentesque molestie venenatis nibh, sed hendrerit tortor. Donec ac dapibus diam. Mauris feugiat ac ex quis pharetra. Ut sed maximus odio. Donec sagittis at diam eu porta. Sed dolor lacus, auctor at accumsan nec, fringilla id libero. Maecenas vitae elit scelerisque, tempor leo nec, tincidunt ligula. Pellentesque imperdiet ipsum enim.Nam cursus risus nec venenatis dignissim. Aliquam quis lectus nisl. Vestibulum erat nibh, vulputate at neque quis, ullamcorper consectetur lacus. Morbi tristique, felis in ultrices auctor, ipsum arcu tempor nulla, eget suscipit orci massa ut ex. Nulla quis convallis orci. Phasellus purus augue, fringilla a mi quis, vestibulum mattis tortor. Aenean consectetur risus sed quam interdum semper vitae et quam. Maecenas metus elit, iaculis et faucibus et, fringilla a sem. Nulla eget suscipit ante. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nullam est nunc, convallis vel ex id, fermentum lobortis dui. Vestibulum faucibus mattis arcu, at ullamcorper purus euismod a. Nullam at erat a erat consequat pharetra nec sit amet dui. Aenean vitae maximus sem.Phasellus turpis turpis, molestie nec elit eu, volutpat auctor mauris. Ut elit dolor, efficitur consectetur velit id, gravida blandit mi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam suscipit sollicitudin risus non commodo. Proin pellentesque ipsum in odio gravida ultricies. Nulla facilisis metus porta, facilisis sem at, dapibus tortor. Fusce est mi, pulvinar semper ante nec, tristique consectetur tortor. Donec eros lorem, volutpat quis quam et, aliquet mollis neque.Morbi in tellus ullamcorper, luctus elit et, aliquam augue. Proin at lectus ipsum. Nullam ac diam tempus, rutrum ex bibendum, tincidunt libero. In nec mi ex. Aenean eget odio nec mi lobortis porta sed sed nulla. Donec volutpat elit in enim venenatis consequat. Sed eget malesuada felis. Aliquam ac scelerisque ex. Donec et faucibus dolor. Ut tempus porta sem et lacinia. Nullam pellentesque ipsum maximus, posuere mauris id, rhoncus elit. Nunc et faucibus mi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In pulvinar porta augue, a porttitor odio accumsan sit amet.Mauris ornare non risus id vulputate. Vivamus non eros vitae tortor consectetur rhoncus sed id velit. Praesent tempor cursus leo, vel imperdiet diam dignissim sed. Etiam vestibulum mattis lacus, pulvinar finibus magna condimentum eu. Morbi bibendum scelerisque lectus, at lobortis nunc. Ut imperdiet mi vitae tincidunt aliquam. Duis a risus et mauris mattis efficitur. Aliquam gravida, erat vel pharetra sagittis, sapien mauris efficitur orci, at venenatis ipsum odio eget eros. Ut sit amet eros laoreet, ultricies risus id, accumsan felis. Suspendisse laoreet eu risus quis tincidunt. Nam ac odio cursus eros finibus tristique vitae eget lorem. Integer scelerisque auctor vestibulum. Donec rutrum, dolor in faucibus tempor, turpis orci sodales orci, pulvinar viverra turpis massa at ipsum. Donec bibendum viverra magna. Curabitur erat ex, condimentum id ultrices vel, ullamcorper non ante. Nunc placerat risus quis tortor dapibus, sit amet faucibus leo pellentesque.Vestibulum sollicitudin convallis augue, id tincidunt magna rutrum id. Nunc eget venenatis urna. Vestibulum in est vel ligula porttitor congue in quis quam. Sed tincidunt egestas purus, a lobortis metus commodo non. Mauris sed nibh id lorem semper posuere. Etiam efficitur fermentum lectus, eget posuere turpis hendrerit ac. Integer vehicula faucibus mollis. Curabitur pellentesque tortor sed felis venenatis posuere. Curabitur quis fermentum odio. Sed nec turpis efficitur, rhoncus dui ac, pellentesque lacus. Vivamus ultrices volutpat finibus. Vivamus dolor mauris, pretium non dui in, eleifend tincidunt leo. Proin sodales finibus molestie. Proin odio nulla, tempus nec tellus vel, tristique congue nisl. In fringilla lacinia fermentum.Morbi blandit maximus elit a imperdiet. Etiam neque elit, dictum luctus malesuada sit amet, pretium vel lorem. Aenean condimentum ornare massa, eu porta magna pretium in. Praesent gravida vestibulum mattis. Suspendisse odio nibh, consectetur non molestie sed, vehicula ac leo. Donec maximus risus et nisl maximus efficitur. In hac habitasse platea dictumst. Curabitur molestie hendrerit sollicitudin. Vestibulum ut ipsum quis felis ultrices elementum sodales vel leo. Donec ut molestie dui, volutpat ultrices lectus. Ut iaculis dui quis odio pulvinar, mollis maximus justo tempus. Vivamus placerat vel odio eget consectetur. Duis eget porta tortor, non aliquet odio. Pellentesque convallis ante vel justo ultrices, ut volutpat metus sagittis. Nulla ullamcorper malesuada enim eget cursus. Quisque porta gravida massa, eget convallis lacus ullamcorper sed.Nullam at mi a est pharetra aliquam. Fusce mi arcu, pulvinar vitae purus nec, condimentum feugiat elit. Praesent quis tellus eu purus maximus sagittis quis sit amet elit. Quisque ultrices pharetra tellus, id dapibus nisl malesuada et. Vivamus facilisis gravida lacinia. Quisque placerat tortor aliquet, venenatis ipsum at, faucibus erat. Nulla dolor magna, commodo et libero a, mattis porta massa. Phasellus elit velit, porttitor nec ipsum et, commodo ullamcorper turpis.Sed ac dolor at ante placerat aliquet. Donec cursus, diam a tempus tristique, nisi dolor iaculis nibh, et vulputate nibh mi quis ipsum. Nullam urna est, ultrices at ultrices semper, convallis id purus. Donec at dapibus turpis, id pretium nisl. Vestibulum ac nisi ipsum. Nam ac turpis dolor. Nullam in euismod ante.Nunc felis ipsum, pulvinar nec lacinia vel, viverra sed neque. Suspendisse velit urna, laoreet ac ante at, feugiat pretium erat. Duis et ullamcorper nisl, ut porttitor lectus. Nunc accumsan nunc volutpat velit tempus fringilla. Donec mattis nunc et sem tincidunt tincidunt. Quisque mollis tincidunt dolor, vitae sollicitudin ante placerat in. Suspendisse et posuere nunc. Suspendisse quam libero, mollis ac imperdiet id, condimentum dictum ante. Etiam bibendum sapien a nunc ornare scelerisque. Morbi ut commodo nibh, at volutpat risus.Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Phasellus euismod ante nisl, sed bibendum libero scelerisque vitae. Aenean faucibus convallis turpis, id eleifend urna posuere et. Etiam ullamcorper aliquam consequat. Mauris venenatis pellentesque odio, ac imperdiet massa aliquet eget. Etiam et elit et lorem ultrices convallis. Maecenas egestas facilisis tellus, eu viverra sem dictum et. Nunc ac nisl at augue ornare molestie.Nullam mollis id elit ut pretium. In tincidunt vehicula vestibulum. Phasellus malesuada aliquet lorem nec laoreet. Nam ligula turpis, gravida sed turpis eu, viverra rhoncus leo. Curabitur dignissim orci enim, non lacinia neque convallis ac. Pellentesque egestas, arcu luctus luctus ultricies, massa est rhoncus augue, luctus viverra dolor felis ut tortor. Duis ac purus pharetra, pretium quam sit amet, congue mauris. Etiam lacinia eu neque sed maximus. Donec sed pulvinar odio. Sed vitae massa nulla. Praesent suscipit leo nibh, eu fermentum lorem tempor ac. Mauris enim nulla, lacinia sed placerat vel, feugiat vel diam. Aliquam fringilla tristique vulputate. Etiam vitae ligula eget nulla auctor hendrerit vitae eget ante. Curabitur et dapibus ante. Cras a mauris viverra, dignissim velit eget, pellentesque sem.Nam volutpat ultrices lacus sed commodo. Aenean posuere quam ut libero condimentum eleifend sed vitae lacus. Vestibulum ornare erat nec dapibus tristique. Integer nec erat quis massa porttitor sodales et nec justo. Aenean et enim accumsan lectus vehicula laoreet. Nunc pulvinar sodales pellentesque. Nunc ornare congue justo, auctor porttitor dui tincidunt in. Phasellus cursus nulla sit amet malesuada dignissim. Phasellus dapibus velit quis ante commodo scelerisque. Cras non purus dapibus, finibus leo ut, varius libero.Pellentesque eu metus velit. Donec non ipsum quam. Nulla facilisi. Nunc porttitor, nulla et dictum interdum, sapien nisi sagittis mauris, a dictum diam lorem sit amet magna. Phasellus vitae mauris in sapien congue tempus et eget justo. Nunc libero enim, sollicitudin sed sem a, accumsan iaculis sem. Praesent et elit sollicitudin, dignissim augue sodales, tristique diam. Proin blandit nisi nec nisi condimentum ultricies. Aliquam porttitor porta lacus, in facilisis augue. Quisque consequat vitae felis eu aliquam.Nullam eu efficitur nunc. Nulla luctus malesuada sapien at aliquet. Proin elit metus, imperdiet nec eleifend non, lobortis mollis neque. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Pellentesque fringilla nunc vitae ante luctus tempus. Duis a neque at arcu dignissim pulvinar vel vel lacus. Nulla aliquam dolor quis quam sodales pharetra. Vestibulum at consectetur lacus. Sed aliquam malesuada purus eget pulvinar. Praesent quis nibh eu leo porttitor fermentum sit amet a nisi. Aenean at quam ipsum. Integer vestibulum sed odio eu venenatis. Nam a eleifend eros, et vestibulum sapien. Vivamus ornare congue nisl vitae tincidunt. Aenean pretium facilisis tellus, at porta justo finibus id. Aenean mollis ullamcorper risus ac bibendum.Mauris euismod sem at efficitur faucibus. Mauris viverra mi pretium, imperdiet nisi eget, accumsan metus. Duis metus lectus, lacinia sed pretium id, ornare faucibus est. Duis cursus purus ipsum, rhoncus pellentesque nisi dapibus quis. Sed id convallis nunc, id faucibus justo. Mauris id felis rhoncus, tempus magna at, ultricies tortor. Proin ullamcorper nulla consequat eros tincidunt aliquam at sed lectus. Donec convallis turpis vel leo pulvinar consectetur. Proin dignissim, nibh in elementum commodo, ante dolor luctus elit, sit amet lobortis ipsum ligula a felis. Vestibulum hendrerit enim sit amet est facilisis, sit amet convallis nulla consequat. Quisque at nunc suscipit, congue mi quis, ultricies tellus. Sed faucibus, urna nec sollicitudin placerat, elit nisi rhoncus nisl, sit amet feugiat ex purus in nulla. Nulla facilisi.' - -export default lipsum.split('. ') diff --git a/packages/ui/src/lib/adapters/in-memory-and-ipfs/utils.ts b/packages/ui/src/lib/adapters/in-memory-and-ipfs/utils.ts deleted file mode 100644 index bec8c0e..0000000 --- a/packages/ui/src/lib/adapters/in-memory-and-ipfs/utils.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { MAX_DIMENSIONS } from '$lib/constants' -import type { Persona } from '$lib/stores/persona' -import type { Post } from '$lib/stores/post' -import type { ReputationOptions } from '$lib/types' -import { ethers } from 'ethers' -import lipsum from './lipsum' - -export function randomText(sentenceCount: number): string { - const res: string[] = [] - - for (let i = 0; i < sentenceCount; i++) { - res.push(lipsum[Math.floor(Math.random() * lipsum.length)]) - } - - return `${res.join('. ')}.` -} - -export function executeWithChance(chance: number): boolean { - return Math.random() < chance -} - -export function randomIntegerBetween(min: number, max: number): number { - return Math.floor(Math.random() * (max - min) + min) -} - -export function randomId(): string { - const randomUUID = crypto.randomUUID() - const encoder = new TextEncoder() - return ethers.utils.sha256(encoder.encode(randomUUID)) -} - -export function randomPost(): Post { - const images: string[] = [] - - // Only 35% of posts should have a picture - if (executeWithChance(0.35)) { - // Only 40% of posts with pictures can have more than 3 - const max = executeWithChance(0.4) ? 20 : 3 - for (let i = 0; i < randomIntegerBetween(1, max); i++) { - images.push( - randomPicture(MAX_DIMENSIONS.POST_PICTURE.width, MAX_DIMENSIONS.POST_PICTURE.height), - ) - } - } - - const post: Post = { - postId: randomId(), - text: randomText(randomIntegerBetween(1, 15)), - timestamp: Date.now(), - images, - } - - return post -} - -export function randomPersona(personaId: string): Persona { - const name = randomText(1).split(' ')[0] - const pitch = randomText(randomIntegerBetween(1, 3)) - const description = randomText(randomIntegerBetween(5, 20)) - const cover = randomPicture( - MAX_DIMENSIONS.PERSONA_COVER.width, - MAX_DIMENSIONS.PERSONA_COVER.height, - ) - const picture = randomPicture( - MAX_DIMENSIONS.PERSONA_PICTURE.width, - MAX_DIMENSIONS.PERSONA_PICTURE.height, - ) - let minReputation: ReputationOptions - switch (randomIntegerBetween(0, 10)) { - case 0: - minReputation = 500 - break - case 1: - minReputation = 250 - break - case 2: - case 3: - minReputation = 100 - break - case 4: - case 5: - case 6: - minReputation = 25 - break - default: - minReputation = 5 - break - } - - const persona: Persona = { - name, - pitch, - description, - participantsCount: randomIntegerBetween(1, 1500), - postsCount: randomIntegerBetween(1, 2000), - cover, - picture, - personaId, - minReputation, - timestamp: Date.now(), - } - - return persona -} - -export function randomPicture(width: number, height: number): string { - return `/${randomId()}/${width}/${height}` -} diff --git a/packages/ui/src/lib/adapters/index.ts b/packages/ui/src/lib/adapters/index.ts index c2b98aa..670aa9d 100644 --- a/packages/ui/src/lib/adapters/index.ts +++ b/packages/ui/src/lib/adapters/index.ts @@ -1,7 +1,6 @@ import type { DraftPersona, Persona } from '$lib/stores/persona' import type { Signer } from 'ethers' import type { DraftChat } from '$lib/stores/chat' -import { InMemoryAndIPFS } from './in-memory-and-ipfs' import { ZkitterAdapter } from './zkitter' import { Firebase } from './firebase' import { ADAPTER } from '$lib/constants' @@ -37,7 +36,7 @@ export interface Adapter { joinPersona(personaId: string): Promise } -export const adapters = ['in-memory', 'zkitter', 'firebase'] as const +export const adapters = ['zkitter', 'firebase'] as const export type AdapterName = (typeof adapters)[number] export const adapterName: AdapterName = getFromLocalStorage( 'adapter', @@ -46,9 +45,6 @@ export const adapterName: AdapterName = getFromLocalStorage( let adapter: Adapter switch (adapterName) { - case 'in-memory': - adapter = new InMemoryAndIPFS() - break case 'zkitter': adapter = new ZkitterAdapter() break diff --git a/packages/ui/src/routes/dev/+page.svelte b/packages/ui/src/routes/dev/+page.svelte index 1e977b4..90f1f9e 100644 --- a/packages/ui/src/routes/dev/+page.svelte +++ b/packages/ui/src/routes/dev/+page.svelte @@ -1,27 +1,12 @@