From e959809a0e6c067edac0d4666af96836c8da62b7 Mon Sep 17 00:00:00 2001 From: Danny Morabito Date: Wed, 4 Dec 2024 13:17:09 +0100 Subject: [PATCH] feat: add delete alias functionality & code cleanup (settings) --- bun.lockb | Bin 81448 -> 84732 bytes package.json | 6 +- src/components/NostrIdentifier.svelte | 2 +- src/lib/random.ts | 244 +++++++++++++++++ src/lib/stores.svelte.ts | 66 ++--- src/routes/settings/+page.svelte | 249 ++---------------- src/routes/settings/AliasSettings.svelte | 124 +++++++++ src/routes/settings/BuyTime.svelte | 62 +++++ .../settings}/SettingsLine.svelte | 0 .../settings/SubscriptionSettings.svelte | 71 +++++ 10 files changed, 553 insertions(+), 271 deletions(-) create mode 100644 src/lib/random.ts create mode 100644 src/routes/settings/AliasSettings.svelte create mode 100644 src/routes/settings/BuyTime.svelte rename src/{components => routes/settings}/SettingsLine.svelte (100%) create mode 100644 src/routes/settings/SubscriptionSettings.svelte diff --git a/bun.lockb b/bun.lockb index be51bbb1ddf36badb88ee584a299b43f0da299c6..36ac7c3cc313668eda0cd9c242005b41e0b43e36 100755 GIT binary patch delta 16035 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 delta 14424 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 YB2(TR-CZOJ&+=Zvw0T<((aq<70d88;nE(I) diff --git a/package.json b/package.json index 22865da..c0cc5de 100644 --- a/package.json +++ b/package.json @@ -15,17 +15,17 @@ "@iconify/svelte": "^4.0.2", "@sveltejs/adapter-node": "^5.2.9", "@sveltejs/adapter-auto": "^3.3.1", - "@sveltejs/kit": "^2.8.5", + "@sveltejs/kit": "^2.9.0", "@sveltejs/vite-plugin-svelte": "^4.0.2", "prettier": "^3.4.1", "prettier-plugin-svelte": "^3.3.2", - "svelte": "^5.2.10", + "svelte": "^5.2.11", "svelte-check": "^4.1.0", "typescript": "^5.7.2", "vite": "^5.4.11" }, "dependencies": { - "@arx/utils": "git+ssh://git@git.arx-ccn.com:222/Arx/ts-utils", + "@arx/utils": "git+ssh://git@git.arx-ccn.com:222/Arx/ts-utils#03163e9f4a07b011a28a8f97c90852ecfc806ddd", "@gandlaf21/bc-ur": "^1.1.12", "@nostr-dev-kit/ndk": "^2.10.7", "@nostr-dev-kit/ndk-cache-dexie": "^2.5.8", diff --git a/src/components/NostrIdentifier.svelte b/src/components/NostrIdentifier.svelte index 6380e0c..8b7c5b8 100644 --- a/src/components/NostrIdentifier.svelte +++ b/src/components/NostrIdentifier.svelte @@ -111,7 +111,7 @@ {/if} - {#if npub !== displayString && !emailAddress} + {#if npub !== displayString} {displayString} diff --git a/src/lib/random.ts b/src/lib/random.ts new file mode 100644 index 0000000..9da85df --- /dev/null +++ b/src/lib/random.ts @@ -0,0 +1,244 @@ +export const adjectives = [ + // Colors + 'crimson', + 'azure', + 'golden', + 'silver', + 'emerald', + 'violet', + 'cobalt', + 'scarlet', + 'obsidian', + 'jade', + 'amber', + 'coral', + 'indigo', + 'sapphire', + 'ruby', + 'onyx', + // Elements + 'frost', + 'flame', + 'storm', + 'thunder', + 'crystal', + 'shadow', + 'lunar', + 'solar', + 'plasma', + 'terra', + 'aether', + 'void', + 'cosmic', + 'astral', + 'nebula', + 'nova', + // Power + 'mega', + 'ultra', + 'hyper', + 'super', + 'prime', + 'apex', + 'elite', + 'omega', + 'alpha', + 'delta', + 'sigma', + 'gamma', + 'beta', + 'epsilon', + 'zeta', + 'theta', + // Tech + 'cyber', + 'techno', + 'digital', + 'binary', + 'neural', + 'crypto', + 'matrix', + 'vector', + 'quantum', + 'nano', + 'laser', + 'cyber', + 'data', + 'pixel', + 'sonic', + 'hyper', + // Mystical + 'mystic', + 'arcane', + 'ethereal', + 'divine', + 'phantom', + 'spirit', + 'ancient', + 'chaos', + 'astral', + 'eldritch', + 'occult', + 'mythic', + 'sacred', + 'cursed', + 'blessed', + 'doom', + // Nature + 'savage', + 'primal', + 'feral', + 'wild', + 'fierce', + 'rapid', + 'swift', + 'silent', + 'deadly', + 'stealth', + 'shadow', + 'night', + 'dark', + 'light', + 'bright', + 'dawn', + // Epic + 'epic', + 'legendary', + 'mythic', + 'eternal', + 'immortal', + 'infinite', + 'supreme', + 'ultimate', + 'grand', + 'mighty', + 'noble', + 'royal', + 'heroic', + 'valor', + 'glory', + 'honor' +]; + + +export const animals = [ + // Classic Predators + 'wolf', + 'tiger', + 'lion', + 'eagle', + 'hawk', + 'bear', + 'panther', + 'falcon', + 'jaguar', + 'leopard', + 'lynx', + 'cobra', + 'viper', + 'python', + 'raptor', + 'shark', + // Mythical Dragons + 'dragon', + 'wyvern', + 'drake', + 'wyrm', + 'hydra', + 'basilisk', + 'tiamat', + 'ryuu', + 'fafnir', + 'bahamut', + 'ryu', + 'draco', + 'naga', + 'ouroboros', + 'lindworm', + 'lung', + // Fantasy + 'phoenix', + 'griffin', + 'unicorn', + 'pegasus', + 'chimera', + 'manticore', + 'sphinx', + 'kraken', + 'behemoth', + 'leviathan', + 'titan', + 'giant', + 'colossus', + 'golem', + 'gargoyle', + 'djinn', + // Norse + 'fenrir', + 'jormungandr', + 'sleipnir', + 'valkyrie', + 'einherjar', + 'huginn', + 'muninn', + 'garmr', + 'nidhogg', + 'ratatoskr', + 'hraesvelgr', + 'gullinkambi', + 'eikthyrnir', + 'duneyrr', + 'dvalinn', + 'dainn', + // Eastern + 'kitsune', + 'kirin', + 'byakko', + 'suzaku', + 'genbu', + 'seiryu', + 'oni', + 'tengu', + 'raiju', + 'baku', + 'nekomata', + 'tanuki', + 'kappa', + 'tsukumogami', + 'yokai', + 'orochi', + // Ancient + 'cyclops', + 'minotaur', + 'cerberus', + 'scylla', + 'typhon', + 'charybdis', + 'medusa', + 'harpy', + 'siren', + 'gorgon', + 'centaur', + 'satyr', + 'triton', + 'echidna', + 'lamia', + 'sphinx', + // Cosmic + 'nova', + 'pulsar', + 'quasar', + 'nebula', + 'vortex', + 'cosmic', + 'astral', + 'celestial', + 'starborn', + 'solaris', + 'lunaris', + 'eclipse', + 'meteor', + 'comet', + 'galaxy', + 'cosmos' +]; diff --git a/src/lib/stores.svelte.ts b/src/lib/stores.svelte.ts index 780a47b..d1614f3 100644 --- a/src/lib/stores.svelte.ts +++ b/src/lib/stores.svelte.ts @@ -9,18 +9,18 @@ const dexieAdapter = new NDKCacheAdapterDexie({ dbName: 'npub-email-cache' }); const nip07signer = new NDKNip07Signer(); export const _ndk = new NDKSvelte({ - explicitRelayUrls: [ - 'wss://relay.primal.net', - 'wss://relay.damus.io', - 'wss://relay.nostr.band', - 'wss://offchain.pub', - 'wss://relay.snort.social' - ], - autoConnectUserRelays: true, - relayAuthDefaultPolicy: async (r) => true, - enableOutboxModel: true, - // signer: nip07signer, - cacheAdapter: dexieAdapter + explicitRelayUrls: [ + 'wss://relay.primal.net', + 'wss://relay.damus.io', + 'wss://relay.nostr.band', + 'wss://offchain.pub', + 'wss://relay.snort.social' + ], + autoConnectUserRelays: false, + relayAuthDefaultPolicy: async (r) => true, + enableOutboxModel: true, + // signer: nip07signer, + cacheAdapter: dexieAdapter }); if (browser && localStorage.getItem('useNip07')) _ndk.signer = nip07signer; @@ -33,42 +33,42 @@ if (browser && _ndk.activeUser) activeUser.set(_ndk.activeUser); export const validSortOptions = ['stamps', 'date', 'sender', 'subject']; export const baseHue = writable( - browser ? parseInt(localStorage.getItem('baseHue')) || 200 : 200 + browser ? parseInt(localStorage.getItem('baseHue')) || 200 : 200 ); export const groupByStamps = writable( - browser ? localStorage.getItem('groupByStamps') === 'true' : false + browser ? localStorage.getItem('groupByStamps') === 'true' : false ); export const sortBy = writable(browser ? localStorage.getItem('sortBy') || 'date' : 'date'); export const dateFormat = writable( - browser ? localStorage.getItem('dateFormat') || 'y-m-d' : 'y-m-d' + browser ? localStorage.getItem('dateFormat') || 'y-m-d' : 'y-m-d' ); export const timeFormat = writable( - browser ? localStorage.getItem('timeFormat') || 'h:m:s' : 'h:m:s' + browser ? localStorage.getItem('timeFormat') || 'h:m:s' : 'h:m:s' ); export let pageTitle = writable('loading'); export let pageIcon = writable(''); if (browser) { - baseHue.subscribe((value) => { - document.documentElement.style.setProperty('--base-hue', value.toString()); - localStorage.setItem('baseHue', value.toString()); - }); + baseHue.subscribe((value) => { + document.documentElement.style.setProperty('--base-hue', value.toString()); + localStorage.setItem('baseHue', value.toString()); + }); - groupByStamps.subscribe((value) => { - localStorage.setItem('groupByStamps', value.toString()); - }); + groupByStamps.subscribe((value) => { + localStorage.setItem('groupByStamps', value.toString()); + }); - sortBy.subscribe((value) => { - if (!validSortOptions.includes(value)) value = 'date'; - localStorage.setItem('sortBy', value); - }); + sortBy.subscribe((value) => { + if (!validSortOptions.includes(value)) value = 'date'; + localStorage.setItem('sortBy', value); + }); - dateFormat.subscribe((value) => { - localStorage.setItem('dateFormat', value); - }); + dateFormat.subscribe((value) => { + localStorage.setItem('dateFormat', value); + }); - timeFormat.subscribe((value) => { - localStorage.setItem('timeFormat', value); - }); + timeFormat.subscribe((value) => { + localStorage.setItem('timeFormat', value); + }); } diff --git a/src/routes/settings/+page.svelte b/src/routes/settings/+page.svelte index c2d8e1a..163abd4 100644 --- a/src/routes/settings/+page.svelte +++ b/src/routes/settings/+page.svelte @@ -3,182 +3,22 @@ activeUser, baseHue, groupByStamps, - ndk, pageIcon, pageTitle, sortBy, validSortOptions } from '$lib/stores.svelte'; - import ColorPicker from '../../components/ColorPicker.svelte'; - import SettingsLine from '../../components/SettingsLine.svelte'; - import Checkbox from '../../components/Checkbox.svelte'; - import Select from '../../components/Select.svelte'; - import DateFormatBuilder from '../../components/DateFormatBuilder.svelte'; import { onMount } from 'svelte'; - import * as nip98 from 'nostr-tools/nip98'; - import { NDKEvent, type NostrEvent } from '@nostr-dev-kit/ndk'; - import { PUBLIC_API_BASE_URL } from '$env/static/public'; - import TimeCountdown from '../../components/TimeCountdown.svelte'; - import { TokenInfoWithMailSubscriptionDuration } from '@arx/utils'; - - let subscribed = $state(false); - let hasUnlimitedSubscription = $state(false); - let subscriptionTill = $state(new Date(0)); - let aliases = $state([]); - let newAlias = $state(''); - - let cashuTokenForBuy = $state(''); - let tokenInfo = $state(); - let tokenInfoError = $state(''); - let buyTimeForNpub = $state(''); - - $effect(() => { - try { - tokenInfo = new TokenInfoWithMailSubscriptionDuration(cashuTokenForBuy); - tokenInfoError = ''; - } catch (e) { - tokenInfoError = (e as Error).message; - } - }); - - async function buyTime() { - if (!tokenInfo) return; - if (tokenInfoError) return; - if (!buyTimeForNpub) return; - try { - const response = await fetch(PUBLIC_API_BASE_URL + '/addTime/' + buyTimeForNpub, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - tokenString: cashuTokenForBuy - }) - }); - if (!response.ok) throw new Error(await response.json().then(r => r.message)); - reloadSubscriptionStatus(); - } catch (e) { - alert(e); - } - } - - async function reloadSubscriptionStatus() { - const subscriptionStatusURL = PUBLIC_API_BASE_URL + '/subscription/' + $ndk.activeUser.npub; - const subscriptionStatus = await fetch(subscriptionStatusURL).then(r => r.json<{ - subscribed: boolean, - subscribedUntil: number | null - }>()); - if (subscriptionStatus.subscribed) { - subscribed = true; - if (subscriptionStatus.subscribedUntil == null) - hasUnlimitedSubscription = true; - else { - subscriptionTill = new Date(subscriptionStatus.subscribedUntil * 1000); - } - } - } - - async function reloadAliases() { - const aliasesURL = PUBLIC_API_BASE_URL + '/aliases/' + $ndk.activeUser.npub; - const auth = await nip98.getToken(aliasesURL, 'post', async (e: NostrEvent) => { - const event = new NDKEvent($ndk, e); - await event.sign(); - return event.rawEvent(); - }, - true - ); - aliases = await fetch(aliasesURL, { - headers: { - Authorization: auth - } - }).then(r => r.json()); - } - - async function addAlias() { - const addAliasURL = PUBLIC_API_BASE_URL + '/addAlias'; - const auth = await nip98.getToken(addAliasURL, 'post', async (e: NostrEvent) => { - const event = new NDKEvent($ndk, e); - await event.sign(); - return event.rawEvent(); - }, - true - ); - await fetch(addAliasURL, { - method: 'POST', - headers: { - Authorization: auth, - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - alias: newAlias - }) - }).then(r => r.json()).then(console.log); - newAlias = ''; - await reloadAliases(); - alert('Alias added'); - } - - function randomAlias() { - const adjectives = [ - // Colors - 'crimson', 'azure', 'golden', 'silver', 'emerald', 'violet', 'cobalt', 'scarlet', - 'obsidian', 'jade', 'amber', 'coral', 'indigo', 'sapphire', 'ruby', 'onyx', - // Elements - 'frost', 'flame', 'storm', 'thunder', 'crystal', 'shadow', 'lunar', 'solar', - 'plasma', 'terra', 'aether', 'void', 'cosmic', 'astral', 'nebula', 'nova', - // Power - 'mega', 'ultra', 'hyper', 'super', 'prime', 'apex', 'elite', 'omega', - 'alpha', 'delta', 'sigma', 'gamma', 'beta', 'epsilon', 'zeta', 'theta', - // Tech - 'cyber', 'techno', 'digital', 'binary', 'neural', 'crypto', 'matrix', 'vector', - 'quantum', 'nano', 'laser', 'cyber', 'data', 'pixel', 'sonic', 'hyper', - // Mystical - 'mystic', 'arcane', 'ethereal', 'divine', 'phantom', 'spirit', 'ancient', 'chaos', - 'astral', 'eldritch', 'occult', 'mythic', 'sacred', 'cursed', 'blessed', 'doom', - // Nature - 'savage', 'primal', 'feral', 'wild', 'fierce', 'rapid', 'swift', 'silent', - 'deadly', 'stealth', 'shadow', 'night', 'dark', 'light', 'bright', 'dawn', - // Epic - 'epic', 'legendary', 'mythic', 'eternal', 'immortal', 'infinite', 'supreme', 'ultimate', - 'grand', 'mighty', 'noble', 'royal', 'heroic', 'valor', 'glory', 'honor' - ]; - - const animals = [ - // Classic Predators - 'wolf', 'tiger', 'lion', 'eagle', 'hawk', 'bear', 'panther', 'falcon', - 'jaguar', 'leopard', 'lynx', 'cobra', 'viper', 'python', 'raptor', 'shark', - // Mythical Dragons - 'dragon', 'wyvern', 'drake', 'wyrm', 'hydra', 'basilisk', 'tiamat', 'ryuu', - 'fafnir', 'bahamut', 'ryu', 'draco', 'naga', 'ouroboros', 'lindworm', 'lung', - // Fantasy - 'phoenix', 'griffin', 'unicorn', 'pegasus', 'chimera', 'manticore', 'sphinx', 'kraken', - 'behemoth', 'leviathan', 'titan', 'giant', 'colossus', 'golem', 'gargoyle', 'djinn', - // Norse - 'fenrir', 'jormungandr', 'sleipnir', 'valkyrie', 'einherjar', 'huginn', 'muninn', 'garmr', - 'nidhogg', 'ratatoskr', 'hraesvelgr', 'gullinkambi', 'eikthyrnir', 'duneyrr', 'dvalinn', 'dainn', - // Eastern - 'kitsune', 'kirin', 'byakko', 'suzaku', 'genbu', 'seiryu', 'oni', 'tengu', - 'raiju', 'baku', 'nekomata', 'tanuki', 'kappa', 'tsukumogami', 'yokai', 'orochi', - // Ancient - 'cyclops', 'minotaur', 'cerberus', 'scylla', 'typhon', 'charybdis', 'medusa', 'harpy', - 'siren', 'gorgon', 'centaur', 'satyr', 'triton', 'echidna', 'lamia', 'sphinx', - // Cosmic - 'nova', 'pulsar', 'quasar', 'nebula', 'vortex', 'cosmic', 'astral', 'celestial', - 'starborn', 'solaris', 'lunaris', 'eclipse', 'meteor', 'comet', 'galaxy', 'cosmos' - ]; - - const adjective = adjectives[Math.floor(Math.random() * adjectives.length)]; - const animal = animals[Math.floor(Math.random() * animals.length)]; - const digits = Math.floor(Math.random() * 10000).toString().padStart(4, '0'); - - newAlias = `${adjective}-${animal}${digits}`; - } + import Checkbox from '../../components/Checkbox.svelte'; + import ColorPicker from '../../components/ColorPicker.svelte'; + import DateFormatBuilder from '../../components/DateFormatBuilder.svelte'; + import Select from '../../components/Select.svelte'; + import SettingsLine from './SettingsLine.svelte'; + import SubscriptionSettings from './SubscriptionSettings.svelte'; onMount(async () => { $pageTitle = 'Settings'; $pageIcon = 'si:settings-cute-line'; - await reloadAliases(); - await reloadSubscriptionStatus(); }); @@ -187,78 +27,19 @@ -

- npub.email offers email aliases that connect to your nostr account, converting incoming emails into Letters.
- These aliases can also serve as your nip 05 identifier. -

- -

Pricing:

- -
    -
  • 210 sats per day
  • -
  • Minimum purchase: 21 sats (2.4 hours)
  • -
  • Flexible duration: Purchase any length of time you need
  • -
- -

- Purchase time blocks to activate your email alias service for yourself or gift them to another user. Once the time - expires, you'll need to purchase additional time to continue using the service. Note: emails received while the - service is inactive will not be processed. -

- - - {#if hasUnlimitedSubscription} -

You are officially awesome!

-

- The Arx team has granted you an unlimited subscription to npub.email for your valuable contributions to Arx, - nostr or bitcoin.
- Keep up your great work and thank you! -

- {:else if subscribed && subscriptionTill.getTime() > 1000} - Your subscription will end in:
- - {:else} - You are not currently subscribed to npub.email - {/if} -
- - - {#if cashuTokenForBuy !== ''} - {#if tokenInfoError} -

{tokenInfoError}

- {:else} -

{tokenInfo.amount} sats

- - - {/if} - {/if} - - -

Buy for:

- - - -
- - {#if subscribed} - - {#each aliases as alias} - {alias}@npub.email - {:else} -

No aliases yet

- {/each} - - - - -
- {/if} +
- ({ + value: o, + label: o.charAt(0).toUpperCase() + o.slice(1).toLowerCase() + }))} + /> diff --git a/src/routes/settings/AliasSettings.svelte b/src/routes/settings/AliasSettings.svelte new file mode 100644 index 0000000..58e911e --- /dev/null +++ b/src/routes/settings/AliasSettings.svelte @@ -0,0 +1,124 @@ + + + + + + {#each aliases as alias} + + + + + {:else} + + {/each} + +
+ {alias}@npub.email + + deleteAlias(alias)} + /> +
No aliases yet
+ + + + +
diff --git a/src/routes/settings/BuyTime.svelte b/src/routes/settings/BuyTime.svelte new file mode 100644 index 0000000..4035784 --- /dev/null +++ b/src/routes/settings/BuyTime.svelte @@ -0,0 +1,62 @@ + + +{#if cashuTokenForBuy !== ''} + {#if tokenInfoError} +

{tokenInfoError}

+ {:else if tokenInfo} +

{tokenInfo.amount} sats

+ + + {/if} +{/if} + + +

Buy for:

+ + + diff --git a/src/components/SettingsLine.svelte b/src/routes/settings/SettingsLine.svelte similarity index 100% rename from src/components/SettingsLine.svelte rename to src/routes/settings/SettingsLine.svelte diff --git a/src/routes/settings/SubscriptionSettings.svelte b/src/routes/settings/SubscriptionSettings.svelte new file mode 100644 index 0000000..fc6809c --- /dev/null +++ b/src/routes/settings/SubscriptionSettings.svelte @@ -0,0 +1,71 @@ + + +

+ npub.email offers email aliases that connect to your nostr account, converting incoming emails + into Letters.
+ These aliases can also serve as your nip 05 identifier. +

+ +

Pricing:

+ +
    +
  • 210 sats per day
  • +
  • Minimum purchase: 21 sats (2.4 hours)
  • +
  • Flexible duration: Purchase any length of time you need
  • +
+ +

+ Purchase time blocks to activate your email alias service for yourself or gift them to another + user. Once the time expires, you'll need to purchase additional time to continue using the + service. Note: emails received while the service is inactive will not be processed. +

+ + + {#if hasUnlimitedSubscription} +

You are officially awesome!

+

+ The Arx team has granted you an unlimited subscription to npub.email for your valuable + contributions to Arx, nostr or bitcoin.
+ Keep up your great work and thank you! +

+ {:else if subscribed && subscriptionTill.getTime() > 1000} + Your subscription will end in:
+ + {:else} + You are not currently subscribed to npub.email + {/if} +
+ + + + + +{#if subscribed} + +{/if}