diff options
| author | Adrien Hopkins <[email protected]> | 2025-11-07 13:47:47 -0500 |
|---|---|---|
| committer | Adrien Hopkins <[email protected]> | 2025-11-07 13:47:47 -0500 |
| commit | 05246ae8d0597ef86f912476ed0a369424d19a72 (patch) | |
| tree | f7b71e2bae33988e7bffd2c16ca087ee5d041ac3 | |
| parent | 6a9ef382bcdc3825b874fbbfbb9d291983365507 (diff) | |
| download | coinos-ui-05246ae8d0597ef86f912476ed0a369424d19a72.tar.gz coinos-ui-05246ae8d0597ef86f912476ed0a369424d19a72.zip | |
Dim messages near expiry
| -rw-r--r-- | src/locales/en.json | 1 | ||||
| -rw-r--r-- | src/locales/fr.json | 1 | ||||
| -rw-r--r-- | src/routes/(app)/dm/[recipient]/+page.svelte | 20 |
3 files changed, 18 insertions, 4 deletions
diff --git a/src/locales/en.json b/src/locales/en.json index a8b8a06a..427c8d96 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -97,6 +97,7 @@ "recipientMsg": "You are sending nostr messages to [R].", "sendMessage": "Send Message", "expiry": "Enable message expiry", + "fadedWarning": "To avoid metadata leaks, messages expire at a random time up to 2 days after you specify; each message has its own random expiry time. Messages which appear faded are close to expiring; nearby messages may be missing.", "days": "days", "relaysNotFound": "Could not find [R]’s DM relays.", "noRelaysSet": "WARNING: You haven't set any preferred relays. You won't be able to receive any messages or see the messages you've sent.", diff --git a/src/locales/fr.json b/src/locales/fr.json index 76d3c5c2..4a096420 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -29,6 +29,7 @@ "recipientMsg": "Vous envoyez messages nostr à [R].", "sendMessage": "Envoyez Message", "expiry": "Expirez messages", + "fadedWarning": "Pour protéger vos métadonées, vos messages expirent à un temps randomée au maximum 2 jours après la date que vous spécifiez; chaque message a son propre temps d’expiration randomée. Les messages qui semble faibles sont proche à expirer; les autres messages autours pouvait avoir déjà disparu.", "days": "jours", "relaysNotFound": "Ne pouvait pas trouvez les relais MD de [R].", "noRelaysSet": "AVERTISSEMENT: Vous n’avez pas specifié vos relais préferés pour messages directs. Vous ne pouvez pas reçevoir des messages ou voir les messages que vous avez envoyé.", diff --git a/src/routes/(app)/dm/[recipient]/+page.svelte b/src/routes/(app)/dm/[recipient]/+page.svelte index c64df7f7..443119fe 100644 --- a/src/routes/(app)/dm/[recipient]/+page.svelte +++ b/src/routes/(app)/dm/[recipient]/+page.svelte @@ -75,6 +75,10 @@ return false; } + const expirationClose = (expiration: number) => { + return expiration <= (Date.now() / 1000 + 2 * 86400); + } + const loadEvents = async (relays: string[]) => { const wrapped = await pool.querySync( relays, { kinds: [1059], "#p": [user.pubkey], limit: DM_FETCH_LIMIT } @@ -86,6 +90,11 @@ if (!expired(event)) { const rumour = await decryptMessage(event); const created = Math.floor(rumour.created_at / 86400); + for (const tag of event.tags) { + if (tag[0] == "expiration") { + rumour.expiration = parseInt(tag[1]); + } + } appendMultimap(decryptedRumours, created, rumour); } else console.log("relay contains expired event", event.id); } @@ -130,9 +139,6 @@ message, sk, recipient.pubkey, user.pubkey, expiry); } - console.log(Date.now() / 1000); - console.log(event2.tags); - const recipientRelays = await getPreferredRelays(recipient.pubkey); const p1 = Promise.any(pool.publish(recipientRelays, event1)); const senderRelays = await getPreferredRelays(user.pubkey); @@ -166,6 +172,10 @@ color: #ff7f00; } + .expiring { + color: #7f7f7f; + } + .link { text-decoration-line: underline; } @@ -205,7 +215,7 @@ <ul> {#each messageRumours.get(day) as rumour} {#if rumour.pubkey === recipient.pubkey || rumour.pubkey === user.pubkey} - <li>{timeString(new Date(rumour.created_at * 1000))} {dmName(rumour.pubkey)}: {rumour.content}</li> + <li class={rumour.expiration && expirationClose(rumour.expiration) ? "expiring" : ""}>{timeString(new Date(rumour.created_at * 1000))} {dmName(rumour.pubkey)}: {rumour.content}</li> {/if} {/each} </ul> @@ -215,6 +225,8 @@ <textarea id="message-contents" bind:value={text}></textarea> <input type="checkbox" class="tiny" bind:checked={expiryEnabled}>{$t("dm.expiry")}: <input type="number" class="short" bind:value={expiryDays} disabled={!expiryEnabled} min="1" step="1" max="99999"> {$t("dm.days")}. + <p class="expiring">{$t("dm.fadedWarning")}</p> + <input id="send-message" type="button" class="btn" disabled={!canSend} value={canSend ? $t("dm.sendMessage") : $t("dm.relaysNotFound").replace("[R]", recipient.username)} on:click={async () => sendMessage(text)}> {#if relayWarningShown} <p class="warning"><em>{$t("dm.noRelaysSet")} <a class="link" href="/settings/nostr#dm-relays">{$t("dm.nostrSettingsLink")}</a></em></p> |
