load user

This commit is contained in:
HolgerHatGarKeineNode
2023-11-20 18:54:53 +01:00
parent 054df3b0af
commit b489f98c2a
11 changed files with 224 additions and 32 deletions

View File

@@ -1,18 +1,21 @@
import './components'
import './bootstrap'
import "./components"
import {Alpine, Livewire} from '../../vendor/livewire/livewire/dist/livewire.esm';
import {NDKNip07Signer} from "@nostr-dev-kit/ndk";
import NDKCacheAdapterDexie from "@nostr-dev-kit/ndk-cache-dexie";
import nostrStart from "./nostr/nostrStart";
import Alpine from 'alpinejs'
import collapse from '@alpinejs/collapse'
import intersect from '@alpinejs/intersect'
import focus from '@alpinejs/focus'
import NDK, { NDKNip07Signer, NDKEvent } from "@nostr-dev-kit/ndk"
Alpine.store('ndk', {
// nostr ndk
ndk: null,
// signer
nip07signer: new NDKNip07Signer(),
// dexie cache adapter
dexieAdapter: new NDKCacheAdapterDexie({dbName: 'einundzwanzigNostrDB', expirationTime: 60 * 60 * 24 * 7}),
// current nostr user
user: null,
// hours ago
explicitRelayUrls: [],
});
Alpine.data('nostrStart', nostrStart);
window.Alpine = Alpine
window.NDK = NDK
window.NDKNip07Signer = NDKNip07Signer
window.NDKEvent = NDKEvent
Alpine.plugin(collapse)
Alpine.plugin(intersect)
Alpine.plugin(focus)
Alpine.start()
Livewire.start();

View File

@@ -0,0 +1,7 @@
export default [
'wss://nostr.wine',
'wss://nos.lol',
'wss://nostr-pub.wellorder.net',
'wss://nostr.cercatrova.me',
'wss://nostr.mutinywallet.com',
];

View File

@@ -0,0 +1,79 @@
import excplicitRelays from "./excplicitRelays.js";
import NDK from "@nostr-dev-kit/ndk";
export const ndkInstance = (Alpine) => ({
async init() {
try {
const urls = excplicitRelays.map((relay) => {
if (relay.startsWith('ws')) {
return relay.replace('ws', 'http');
}
if (relay.startsWith('wss')) {
return relay.replace('wss', 'https');
}
});
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort('timeout'), 5000);
const requests = urls.map((url) =>
fetch(url, {
headers: {Accept: 'application/nostr+json'},
signal: controller.signal,
})
);
const responses = await Promise.all(requests);
const errors = responses.filter((response) => !response.ok);
if (errors.length > 0) {
throw errors.map((response) => Error(response.statusText));
}
let verifiedRelays = responses.map((res) => {
if (res.url.startsWith('http')) {
return res.url.replace('http', 'ws');
}
if (res.url.startsWith('https')) {
return res.url.replace('https', 'wss');
}
});
// clear timeout
clearTimeout(timeoutId);
console.log('##### verifiedRelays #####', verifiedRelays);
Alpine.$store.ndk.explicitRelayUrls = verifiedRelays;
const instance = new NDK({
explicitRelayUrls: Alpine.$store.ndk.explicitRelayUrls,
signer: Alpine.$store.ndk.nip07signer,
cacheAdapter: Alpine.$store.ndk.dexieAdapter,
outboxRelayUrls: ["wss://nostr.einundzwanzig.space",],
enableOutboxModel: true,
});
try {
await instance.connect(10000);
} catch (error) {
throw new Error('NDK instance init failed: ', error);
}
// store NDK instance in store
Alpine.$store.ndk.ndk = instance;
// init nip07 signer and fetch profile
await Alpine.$store.ndk.nip07signer.user().then(async (user) => {
if (!!user.npub) {
Alpine.$store.ndk.user = Alpine.$store.ndk.ndk.getUser({
npub: user.npub,
});
await Alpine.$store.ndk.user.fetchProfile();
}
}).catch((error) => {
console.log('##### nip07 signer error #####', error);
});
} catch (e) {
console.log(e);
}
}
});

View File

@@ -0,0 +1,19 @@
import {ndkInstance} from "./ndk/instance.js";
export default (livewireComponent) => ({
async init() {
await ndkInstance(this).init();
console.log(this.$store.ndk.user);
if (this.$store.ndk.user) {
this.$wire.setUser(this.$store.ndk.user);
}
},
});

View File

@@ -15,20 +15,18 @@
@googlefonts
{{-- Scripts --}}
<script src="https://kit.fontawesome.com/866fd3d0ab.js" crossorigin="anonymous"></script>
<wireui:scripts/>
<x-embed-styles/>
@wireUiScripts
@vite(['resources/css/app.css', 'resources/js/app.js'])
{{-- Styles --}}
@livewireStyles
@include('components.layouts.styles')
</head>
<body class="font-sans antialiased">
<x-notifications z-index="z-[99999]" blur="md" align="center"/>
<x-dialog z-index="z-[99999]" blur="md" align="center"/>
<livewire:laravel-echo/>
<x-jet-banner/>
{{--<livewire:laravel-echo/>--}}
{{ $slot }}
@stack('modals')
@livewireScripts
@livewireScriptConfig
</body>
</html>

View File

@@ -15,20 +15,18 @@
@googlefonts
{{-- Scripts --}}
<script src="https://kit.fontawesome.com/866fd3d0ab.js" crossorigin="anonymous"></script>
<wireui:scripts/>
<x-embed-styles/>
@wireUiScripts
@vite(['resources/css/app.css', 'resources/js/app.js'])
{{-- Styles --}}
@livewireStyles
@include('components.layouts.styles')
</head>
<body class="font-sans antialiased">
<x-notifications z-index="z-[99999]" blur="md" align="center"/>
<x-dialog z-index="z-[99999]" blur="md" align="center"/>
<livewire:laravel-echo/>
<x-jet-banner/>
{{--<livewire:laravel-echo/>--}}
{{ $slot }}
@stack('modals')
@livewireScripts
@livewireScriptConfig
</body>
</html>

View File

@@ -1,3 +1,12 @@
<div>
{{-- Because she competes with no one, no one can compete with her. --}}
<div x-data="nostrStart(@this)">
<div class="flex flex-col">
@if($user)
@foreach($user->meetups as $meetup)
<div>
{{ $meetup->name }}
</div>
@endforeach
@endif
</div>
</div>