OceanSlim

Zero-JS Hypermedia Browser

avatar
OceanSlim
oceanslim@happytavern.co
npub1zmc6...7f60
Pro Gun. Anti War. Truss Designer by trade. Self Taught Software Developer. Hardware enthusiest. Node runner. Live your life in service to others. #nostr only since Block 775261. Father of 2. Developing a nostr relay: https://github.com/0ceanslim/grain Contact: https://happytavern.co/contact

Notes (7)

Getting close to "sell the extra car" territory...
2025-11-17 21:32:10 from 1 relay(s) View Thread β†’
I've created an abomination. relay.πŸ‡ ```bash πŸ‡ πŸ“¦Relay πŸ“š Foundation πŸ“š IO πŸ“š JSON πŸ’­ Event class πŸ†• Event πŸ‡ πŸ“₯ m πŸ”‘πŸ”’ πŸ“₯ raw πŸ”€ πŸ”€ id πŸ”€ pubkey πŸ”’ created_at πŸ”’ kind 🍿 tags πŸ”‘πŸΏ πŸ”€ content πŸ”€ sig πŸ”€ rawJson πŸ‰ id = m➿"id"β—οΈπŸ”€ pubkey = m➿"pubkey"β—οΈπŸ”€ created_at = m➿"created_at"β—οΈπŸ”’ kind = m➿"kind"β—οΈπŸ”’ rawJson = raw ❓ m❗️"tags" πŸ™‹β€β™‚οΈπŸ‡ ➑️ tags = m➿"tags"β—οΈπŸ”‘πŸΏ πŸ‰β—οΈ ➑️ tags = πŸ”‘πŸΏβ—οΈ πŸ‰ ❓ m❗️"content" πŸ™‹β€β™‚οΈπŸ‡ ➑️ content = m➿"content"β—οΈπŸ”€ πŸ‰β—οΈ ➑️ content = πŸ”€β—οΈ πŸ‰ ❓ m❗️"sig" πŸ™‹β€β™‚οΈπŸ‡ ➑️ sig = m➿"sig"β—οΈπŸ”€ πŸ‰β—οΈ ➑️ sig = πŸ”€β—οΈ πŸ‰ πŸ‰ πŸ‰ πŸ’­ DB class πŸ†• DB πŸ‡ πŸ“¦ byId πŸ”‘πŸ“¦ 🍿 events Event🍿 πŸ‰ byId = πŸ”‘πŸ“¦β—οΈ events = EventπŸΏβ—οΈ πŸ‰ πŸ’­ load from disk πŸ“œ loadFromFile πŸ”€ path πŸ‡πŸ‰ ❓ πŸ“πŸ“„path πŸ™‹β€β™‚οΈ πŸ‡ πŸ”€ s = πŸ“πŸ“–path ❓ s β‰  πŸ”€β—οΈ πŸ‡ ◀️ JSONπŸ”sβ—οΈπŸ”‘πŸ‡ e πŸ‰ Event ev = πŸ†• Event e, JSON✨e byId➿ev➑️id = ev events🍰 ev πŸ‰ πŸ‰ πŸ‰ πŸ’­ dump to disk πŸ“œ dumpToFile πŸ”€ path πŸ‡πŸ‰ πŸ”‘ arr = πŸ”‘πŸΏβ—οΈ πŸ‘Ÿ ev events πŸ‡ arr🍰 ev➑️mapRepresentation❗️ πŸ‰ πŸ“βœοΈ path, JSON✨arr πŸ‰ πŸ“œ hasEvent πŸ”€ id ➑️ πŸ”£ πŸ‡ ➑️ byId❗️id πŸ‰ πŸ“œ store Event ev πŸ‡πŸ‰ ❓ byId❗️ev➑️id ❗️ πŸ‡ ◀️ πŸ‰ byId➿ev➑️id = ev events🍰 ev πŸ‰ πŸ“œ query πŸ”‘ f ➑️ Event🍿 πŸ‡ Event🍿 out = EventπŸΏβ—οΈ πŸ‘Ÿ ev events πŸ‡ ❓ matchFilter ev, f πŸ‡ out🍰 ev πŸ‰ πŸ‰ ➑️ out πŸ‰ πŸ‰ πŸ’­ match filters πŸ“œ matchFilter Event ev, πŸ”‘ f ➑️ πŸ”£ πŸ‡ ❓ f❗️"authors" πŸ‡ 🍿 a = f➿"authors"β—οΈπŸ”‘πŸΏ ❓ πŸ§ͺ author a πŸ‘Ÿ πŸ‡ ❓ ev➑️pubkey🍑author πŸ‡ ➑️ πŸ‘ πŸ‰ πŸ‰ ➑️ πŸ‘Ž πŸ‰ ❓ f❗️"kinds" πŸ‡ 🍿 ks = f➿"kinds"β—οΈπŸ”’πŸΏ ❓ πŸ§ͺ k ks πŸ‘Ÿ πŸ‡ ❓ ev➑️kind = k πŸ‡ ➑️ πŸ‘ πŸ‰ πŸ‰ ➑️ πŸ‘Ž πŸ‰ ❓ f❗️"since" πŸ‡ ❓ ev➑️created_at < f➿"since"β—οΈπŸ”’ πŸ‡ ➑️ πŸ‘Ž πŸ‰ πŸ‰ ❓ f❗️"until" πŸ‡ ❓ ev➑️created_at > f➿"until"β—οΈπŸ”’ πŸ‡ ➑️ πŸ‘Ž πŸ‰ πŸ‰ ➑️ πŸ‘ πŸ‰ πŸ’­ external signature check πŸ“œ verifySig πŸ”€ raw ➑️ πŸ”£ πŸ‡ 🐚 "node nostr-verify.js", raw ➑️ πŸ”€ out ❓ out🍑"OK" πŸ‡ ➑️ πŸ‘ πŸ‰ ➑️ πŸ‘Ž πŸ‰ πŸ’­ main server loop πŸ“œ runServer πŸ‡πŸ‰ DB db = πŸ†• DB❗️ db➑️loadFromFile πŸ”€"db.json" πŸ” πŸ‡ πŸ”€ line = πŸ‘‚β—οΈ ❓ line = ❌ πŸ‡ db➑️dumpToFile πŸ”€"db.json" πŸ”š πŸ‰ line = line🍑 ◀️ JSONπŸ”lineβ—οΈπŸ”‘πŸ‡ obj πŸ‰ ❓ obj πŸ”€ πŸ‡ Event ev = πŸ†• Event obj, line ❓ verifySig line πŸ‡ db➑️store ev πŸ‘„ JSON✨["OK", ev➑️id] πŸ‰β—οΈ πŸ‘„ JSON✨["BAD", ev➑️id] πŸ‰ πŸ‰β—οΈ ❓ obj 🍿 πŸ‡ 🍿 arr = obj❗️ ❓ arr[0] = πŸ”€"REQ" πŸ‡ πŸ”€ sub = arr[1]❗️ πŸ”’ i = 2 πŸ” ❓ i < arr🍬 πŸ‡ πŸ”‘ f = arr[i]❗️ Event🍿 matched = db➑️query f πŸ”’ sent = 0 πŸ”’ limit = ❓ f❗️"limit" πŸ‡ f➿"limit"β—οΈπŸ”’ πŸ‰β—οΈ 1000 πŸ‘Ÿ ev matched πŸ‡ ❓ sent β‰₯ limit πŸ‡ πŸ‰ πŸ‘„ JSON✨["EVENT", sub, ev➑️mapRepresentation❗️] sent = sent + 1 πŸ‰ i = i + 1 πŸ‰ πŸ‘„ JSON✨["EOSE", sub] πŸ‰ πŸ‰ πŸ‰β—οΈ πŸ‘„ JSON✨["ERR","parse"] πŸ‰ πŸ‰ πŸ‰ 🏁 πŸ‡ runServer❗️ πŸ‰ ```
2025-11-17 21:27:33 from 1 relay(s) View Thread β†’