feat: initialize markr nostr bookmark client

- Add project structure with TypeScript, React, and Vite
- Implement nostr authentication using browser extension (NIP-07)
- Add NIP-51 compliant bookmark fetching and display
- Create minimal UI with login and bookmark components
- Integrate applesauce-core and applesauce-react libraries
- Add responsive styling with dark/light mode support
- Include comprehensive README with setup instructions

This is a minimal MVP for a nostr bookmark client that allows users to
view their bookmarks according to NIP-51 specification.
This commit is contained in:
Gigi
2025-10-02 07:17:07 +02:00
commit 5d53a827e0
11194 changed files with 1827829 additions and 0 deletions

89
node_modules/light-bolt11-decoder/bolt11.d.ts generated vendored Normal file
View File

@@ -0,0 +1,89 @@
declare module "light-bolt11-decoder" {
type NetworkSection = {
name: 'coin_network';
letters: string;
value?: {
bech32: string;
pubKeyHash: number;
scriptHash: number;
validWitnessVersions: number[];
};
};
type FeatureBits = {
option_data_loss_protect: string;
initial_routing_sync: string;
option_upfront_shutdown_script: string;
gossip_queries: string;
var_onion_optin: string;
gossip_queries_ex: string;
option_static_remotekey: string;
payment_secret: string;
basic_mpp: string;
option_support_large_channel: string;
extra_bits: {
start_bit: number;
bits: unknown[];
has_required: boolean;
};
};
type RouteHint = {
pubkey: string;
short_channel_id: string;
fee_base_msat: number;
fee_proportional_millionths: number;
cltv_expiry_delta: number;
};
type RouteHintSection = {
name: "route_hint";
tag: "r";
letters: string;
value: RouteHint[];
};
type FeatureBitsSection = {
name: "feature_bits";
tag: "9";
letters: string;
value: FeatureBits;
};
type Section =
| { name: "paymentRequest"; value: string }
| { name: "expiry"; value: number }
| { name: "checksum"; letters: string }
| NetworkSection
| { name: "amount"; letters: string; value: string }
| { name: "separator"; letters: string }
| { name: "timestamp"; letters: string; value: number }
| { name: "payment_hash"; tag: "p"; letters: string; value: string }
| { name: "description"; tag: "d"; letters: string; value: string }
| { name: "payment_secret"; tag: "s"; letters: string; value: string }
| {
name: "min_final_cltv_expiry";
tag: "c";
letters: string;
value: number;
}
| FeatureBitsSection
| RouteHintSection
| { name: "signature"; letters: string; value: string };
type PaymentJSON = {
paymentRequest: string;
sections: Section[];
expiry: number;
route_hints: RouteHint[][];
};
type DecodedInvoice = {
paymentRequest: string;
sections: Section[];
expiry: number;
route_hints: RouteHint[][];
};
function decode(invoice: string): DecodedInvoice;
}