@candypoets/nipworker 0.89.0 → 0.89.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cache/index.js +1 -1
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/pkg/cache.d.ts +3 -3
- package/dist/cache/pkg/cache_bg.wasm.d.ts +3 -3
- package/dist/connections/index.d.ts +0 -5
- package/dist/connections/index.d.ts.map +1 -1
- package/dist/connections/index.js +2 -2
- package/dist/connections/index.js.map +1 -1
- package/dist/connections/pkg/connections.d.ts +3 -3
- package/dist/connections/pkg/connections_bg.wasm.d.ts +3 -3
- package/dist/connections/proxy.d.ts +2 -0
- package/dist/connections/proxy.d.ts.map +1 -0
- package/dist/connections/proxy.js +1 -0
- package/dist/connections/proxy.js.map +1 -0
- package/dist/connections/types.d.ts +4 -0
- package/dist/connections/types.d.ts.map +1 -0
- package/dist/generated/nostr/fb/buffer-full.d.ts.map +1 -1
- package/dist/generated/nostr/fb/cache-input-message.d.ts.map +1 -1
- package/dist/generated/nostr/fb/cache-input.d.ts.map +1 -1
- package/dist/generated/nostr/fb/cache-request.d.ts +6 -8
- package/dist/generated/nostr/fb/cache-request.d.ts.map +1 -1
- package/dist/generated/nostr/fb/cache-response.d.ts +4 -6
- package/dist/generated/nostr/fb/cache-response.d.ts.map +1 -1
- package/dist/generated/nostr/fb/cashu-data.d.ts +4 -6
- package/dist/generated/nostr/fb/cashu-data.d.ts.map +1 -1
- package/dist/generated/nostr/fb/code-data.d.ts +7 -9
- package/dist/generated/nostr/fb/code-data.d.ts.map +1 -1
- package/dist/generated/nostr/fb/connection-status.d.ts +10 -12
- package/dist/generated/nostr/fb/connection-status.d.ts.map +1 -1
- package/dist/generated/nostr/fb/contact.d.ts +9 -11
- package/dist/generated/nostr/fb/contact.d.ts.map +1 -1
- package/dist/generated/nostr/fb/content-block.d.ts +7 -9
- package/dist/generated/nostr/fb/content-block.d.ts.map +1 -1
- package/dist/generated/nostr/fb/content-data.d.ts.map +1 -1
- package/dist/generated/nostr/fb/coordinate.d.ts +9 -11
- package/dist/generated/nostr/fb/coordinate.d.ts.map +1 -1
- package/dist/generated/nostr/fb/count-response.d.ts.map +1 -1
- package/dist/generated/nostr/fb/counter-pipe-config.d.ts +4 -6
- package/dist/generated/nostr/fb/counter-pipe-config.d.ts.map +1 -1
- package/dist/generated/nostr/fb/dleqproof.d.ts +10 -12
- package/dist/generated/nostr/fb/dleqproof.d.ts.map +1 -1
- package/dist/generated/nostr/fb/emoji.d.ts +7 -9
- package/dist/generated/nostr/fb/emoji.d.ts.map +1 -1
- package/dist/generated/nostr/fb/eoce.d.ts +4 -6
- package/dist/generated/nostr/fb/eoce.d.ts.map +1 -1
- package/dist/generated/nostr/fb/event-pointer.d.ts +9 -11
- package/dist/generated/nostr/fb/event-pointer.d.ts.map +1 -1
- package/dist/generated/nostr/fb/get-public-key.d.ts.map +1 -1
- package/dist/generated/nostr/fb/hashtag-data.d.ts +4 -6
- package/dist/generated/nostr/fb/hashtag-data.d.ts.map +1 -1
- package/dist/generated/nostr/fb/history-tag.d.ts +13 -15
- package/dist/generated/nostr/fb/history-tag.d.ts.map +1 -1
- package/dist/generated/nostr/fb/htlcwitness.d.ts +6 -8
- package/dist/generated/nostr/fb/htlcwitness.d.ts.map +1 -1
- package/dist/generated/nostr/fb/image-data.d.ts +10 -12
- package/dist/generated/nostr/fb/image-data.d.ts.map +1 -1
- package/dist/generated/nostr/fb/imeta-tag.d.ts +24 -26
- package/dist/generated/nostr/fb/imeta-tag.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind-filter-pipe-config.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind0-parsed.d.ts +61 -63
- package/dist/generated/nostr/fb/kind0-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind1-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind10002-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind10019-parsed.d.ts +6 -8
- package/dist/generated/nostr/fb/kind10019-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind1111-parsed.d.ts +32 -34
- package/dist/generated/nostr/fb/kind1111-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind1311-parsed.d.ts +4 -6
- package/dist/generated/nostr/fb/kind1311-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind17-parsed.d.ts +10 -12
- package/dist/generated/nostr/fb/kind17-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind17375-parsed.d.ts +9 -11
- package/dist/generated/nostr/fb/kind17375-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind20-parsed.d.ts +18 -20
- package/dist/generated/nostr/fb/kind20-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind22-parsed.d.ts +15 -17
- package/dist/generated/nostr/fb/kind22-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind3-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind30023-parsed.d.ts +24 -26
- package/dist/generated/nostr/fb/kind30023-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind4-parsed.d.ts +10 -12
- package/dist/generated/nostr/fb/kind4-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind6-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind7-parsed.d.ts +10 -12
- package/dist/generated/nostr/fb/kind7-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind7374-parsed.d.ts +7 -9
- package/dist/generated/nostr/fb/kind7374-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind7375-parsed.d.ts +6 -8
- package/dist/generated/nostr/fb/kind7375-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind7376-parsed.d.ts +10 -12
- package/dist/generated/nostr/fb/kind7376-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind9321-parsed.d.ts +22 -24
- package/dist/generated/nostr/fb/kind9321-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind9735-parsed.d.ts +25 -27
- package/dist/generated/nostr/fb/kind9735-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/link-preview-data.d.ts +13 -15
- package/dist/generated/nostr/fb/link-preview-data.d.ts.map +1 -1
- package/dist/generated/nostr/fb/list-parsed.d.ts +27 -22
- package/dist/generated/nostr/fb/list-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/live-activity-ref.d.ts +10 -12
- package/dist/generated/nostr/fb/live-activity-ref.d.ts.map +1 -1
- package/dist/generated/nostr/fb/live-chat-participant.d.ts +7 -9
- package/dist/generated/nostr/fb/live-chat-participant.d.ts.map +1 -1
- package/dist/generated/nostr/fb/live-chat-thread-ref.d.ts +7 -9
- package/dist/generated/nostr/fb/live-chat-thread-ref.d.ts.map +1 -1
- package/dist/generated/nostr/fb/main-content.d.ts.map +1 -1
- package/dist/generated/nostr/fb/main-message.d.ts.map +1 -1
- package/dist/generated/nostr/fb/media-group-data.d.ts.map +1 -1
- package/dist/generated/nostr/fb/media-item.d.ts.map +1 -1
- package/dist/generated/nostr/fb/message-type.d.ts.map +1 -1
- package/dist/generated/nostr/fb/message.d.ts.map +1 -1
- package/dist/generated/nostr/fb/mint-info.d.ts +6 -8
- package/dist/generated/nostr/fb/mint-info.d.ts.map +1 -1
- package/dist/generated/nostr/fb/mint-proofs.d.ts +4 -6
- package/dist/generated/nostr/fb/mint-proofs.d.ts.map +1 -1
- package/dist/generated/nostr/fb/mute-filter-pipe-config.d.ts +8 -10
- package/dist/generated/nostr/fb/mute-filter-pipe-config.d.ts.map +1 -1
- package/dist/generated/nostr/fb/nostr-data.d.ts +12 -14
- package/dist/generated/nostr/fb/nostr-data.d.ts.map +1 -1
- package/dist/generated/nostr/fb/nostr-event.d.ts +13 -15
- package/dist/generated/nostr/fb/nostr-event.d.ts.map +1 -1
- package/dist/generated/nostr/fb/npub-limiter-pipe-config.d.ts.map +1 -1
- package/dist/generated/nostr/fb/p2-pkwitness.d.ts +2 -4
- package/dist/generated/nostr/fb/p2-pkwitness.d.ts.map +1 -1
- package/dist/generated/nostr/fb/parse-pipe-config.d.ts.map +1 -1
- package/dist/generated/nostr/fb/parsed-data-union.d.ts.map +1 -1
- package/dist/generated/nostr/fb/parsed-data.d.ts.map +1 -1
- package/dist/generated/nostr/fb/parsed-event.d.ts +9 -11
- package/dist/generated/nostr/fb/parsed-event.d.ts.map +1 -1
- package/dist/generated/nostr/fb/pipe-config.d.ts.map +1 -1
- package/dist/generated/nostr/fb/pipe.d.ts.map +1 -1
- package/dist/generated/nostr/fb/pipeline-config.d.ts.map +1 -1
- package/dist/generated/nostr/fb/pre-generic-parsed.d.ts +40 -42
- package/dist/generated/nostr/fb/pre-generic-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/pre-participant.d.ts +13 -15
- package/dist/generated/nostr/fb/pre-participant.d.ts.map +1 -1
- package/dist/generated/nostr/fb/pre-ref-event.d.ts +10 -12
- package/dist/generated/nostr/fb/pre-ref-event.d.ts.map +1 -1
- package/dist/generated/nostr/fb/private-key.d.ts +4 -6
- package/dist/generated/nostr/fb/private-key.d.ts.map +1 -1
- package/dist/generated/nostr/fb/profile-pointer.d.ts +6 -8
- package/dist/generated/nostr/fb/profile-pointer.d.ts.map +1 -1
- package/dist/generated/nostr/fb/proof-verification-pipe-config.d.ts.map +1 -1
- package/dist/generated/nostr/fb/proof.d.ts +10 -12
- package/dist/generated/nostr/fb/proof.d.ts.map +1 -1
- package/dist/generated/nostr/fb/pubkey.d.ts +4 -6
- package/dist/generated/nostr/fb/pubkey.d.ts.map +1 -1
- package/dist/generated/nostr/fb/publish.d.ts +6 -8
- package/dist/generated/nostr/fb/publish.d.ts.map +1 -1
- package/dist/generated/nostr/fb/raw.d.ts +4 -6
- package/dist/generated/nostr/fb/raw.d.ts.map +1 -1
- package/dist/generated/nostr/fb/reaction-type.d.ts.map +1 -1
- package/dist/generated/nostr/fb/relay-info.d.ts +4 -6
- package/dist/generated/nostr/fb/relay-info.d.ts.map +1 -1
- package/dist/generated/nostr/fb/request.d.ts +10 -12
- package/dist/generated/nostr/fb/request.d.ts.map +1 -1
- package/dist/generated/nostr/fb/save-to-db-pipe-config.d.ts.map +1 -1
- package/dist/generated/nostr/fb/serialize-events-pipe-config.d.ts +4 -6
- package/dist/generated/nostr/fb/serialize-events-pipe-config.d.ts.map +1 -1
- package/dist/generated/nostr/fb/set-signer.d.ts.map +1 -1
- package/dist/generated/nostr/fb/sign-event.d.ts.map +1 -1
- package/dist/generated/nostr/fb/signed-event.d.ts.map +1 -1
- package/dist/generated/nostr/fb/signer-op.d.ts.map +1 -1
- package/dist/generated/nostr/fb/signer-request.d.ts +13 -15
- package/dist/generated/nostr/fb/signer-request.d.ts.map +1 -1
- package/dist/generated/nostr/fb/signer-response.d.ts +7 -9
- package/dist/generated/nostr/fb/signer-response.d.ts.map +1 -1
- package/dist/generated/nostr/fb/signer-type.d.ts.map +1 -1
- package/dist/generated/nostr/fb/string-vec.d.ts +2 -4
- package/dist/generated/nostr/fb/string-vec.d.ts.map +1 -1
- package/dist/generated/nostr/fb/subscribe-kind.d.ts.map +1 -1
- package/dist/generated/nostr/fb/subscribe.d.ts +4 -6
- package/dist/generated/nostr/fb/subscribe.d.ts.map +1 -1
- package/dist/generated/nostr/fb/subscription-config.d.ts +4 -6
- package/dist/generated/nostr/fb/subscription-config.d.ts.map +1 -1
- package/dist/generated/nostr/fb/tag.d.ts +29 -0
- package/dist/generated/nostr/fb/tag.d.ts.map +1 -0
- package/dist/generated/nostr/fb/template.d.ts +4 -6
- package/dist/generated/nostr/fb/template.d.ts.map +1 -1
- package/dist/generated/nostr/fb/unsubscribe.d.ts +4 -6
- package/dist/generated/nostr/fb/unsubscribe.d.ts.map +1 -1
- package/dist/generated/nostr/fb/valid-proofs.d.ts.map +1 -1
- package/dist/generated/nostr/fb/video-data.d.ts +7 -9
- package/dist/generated/nostr/fb/video-data.d.ts.map +1 -1
- package/dist/generated/nostr/fb/video-variant.d.ts +21 -23
- package/dist/generated/nostr/fb/video-variant.d.ts.map +1 -1
- package/dist/generated/nostr/fb/witness-string.d.ts +4 -6
- package/dist/generated/nostr/fb/witness-string.d.ts.map +1 -1
- package/dist/generated/nostr/fb/witness.d.ts.map +1 -1
- package/dist/generated/nostr/fb/worker-message.d.ts +7 -9
- package/dist/generated/nostr/fb/worker-message.d.ts.map +1 -1
- package/dist/generated/nostr/fb/zap-request.d.ts +10 -12
- package/dist/generated/nostr/fb/zap-request.d.ts.map +1 -1
- package/dist/generated/nostr/fb.d.ts +1 -0
- package/dist/generated/nostr/fb.d.ts.map +1 -1
- package/dist/index.d.ts +8 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index2.js +1 -1
- package/dist/index2.js.map +1 -1
- package/dist/lib/ConnectionTracker.d.ts.map +1 -1
- package/dist/parser/index.js +2 -2
- package/dist/parser/index.js.map +1 -1
- package/dist/relayProxyServer.js +1 -1
- package/dist/signer-response.js +1 -1
- package/dist/signer-response.js.map +1 -1
- package/dist/utils.d.ts +0 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +4 -4
- package/dist/utils.js.map +1 -1
- package/dist/worker-message.js +1 -1
- package/dist/worker-message.js.map +1 -1
- package/package.json +2 -2
- package/dist/generated/message.d.ts +0 -91
- package/dist/generated/message.d.ts.map +0 -1
- package/dist/generated/nostr/fb/kind0parsed.d.ts +0 -100
- package/dist/generated/nostr/fb/kind0parsed.d.ts.map +0 -1
- package/dist/generated/nostr/fb/kind10002parsed.d.ts +0 -25
- package/dist/generated/nostr/fb/kind10002parsed.d.ts.map +0 -1
- package/dist/generated/nostr/fb/kind10019parsed.d.ts +0 -38
- package/dist/generated/nostr/fb/kind10019parsed.d.ts.map +0 -1
- package/dist/generated/nostr/fb/kind17375parsed.d.ts +0 -38
- package/dist/generated/nostr/fb/kind17375parsed.d.ts.map +0 -1
- package/dist/generated/nostr/fb/kind17parsed.d.ts +0 -42
- package/dist/generated/nostr/fb/kind17parsed.d.ts.map +0 -1
- package/dist/generated/nostr/fb/kind1parsed.d.ts +0 -50
- package/dist/generated/nostr/fb/kind1parsed.d.ts.map +0 -1
- package/dist/generated/nostr/fb/kind30023parsed.d.ts +0 -58
- package/dist/generated/nostr/fb/kind30023parsed.d.ts.map +0 -1
- package/dist/generated/nostr/fb/kind3parsed.d.ts +0 -25
- package/dist/generated/nostr/fb/kind3parsed.d.ts.map +0 -1
- package/dist/generated/nostr/fb/kind4parsed.d.ts +0 -39
- package/dist/generated/nostr/fb/kind4parsed.d.ts.map +0 -1
- package/dist/generated/nostr/fb/kind6parsed.d.ts +0 -22
- package/dist/generated/nostr/fb/kind6parsed.d.ts.map +0 -1
- package/dist/generated/nostr/fb/kind7374parsed.d.ts +0 -31
- package/dist/generated/nostr/fb/kind7374parsed.d.ts.map +0 -1
- package/dist/generated/nostr/fb/kind7375parsed.d.ts +0 -41
- package/dist/generated/nostr/fb/kind7375parsed.d.ts.map +0 -1
- package/dist/generated/nostr/fb/kind7376parsed.d.ts +0 -58
- package/dist/generated/nostr/fb/kind7376parsed.d.ts.map +0 -1
- package/dist/generated/nostr/fb/kind7parsed.d.ts +0 -42
- package/dist/generated/nostr/fb/kind7parsed.d.ts.map +0 -1
- package/dist/generated/nostr/fb/kind9321parsed.d.ts +0 -64
- package/dist/generated/nostr/fb/kind9321parsed.d.ts.map +0 -1
- package/dist/generated/nostr/fb/kind9735parsed.d.ts +0 -64
- package/dist/generated/nostr/fb/kind9735parsed.d.ts.map +0 -1
- package/dist/generated/nostr/fb/p2pkwitness.d.ts +0 -27
- package/dist/generated/nostr/fb/p2pkwitness.d.ts.map +0 -1
- package/dist/lib/ByteString.d.ts +0 -32
- package/dist/lib/ByteString.d.ts.map +0 -1
package/dist/relayProxyServer.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as b from"flatbuffers";import{WebSocketServer as m,WebSocket as d}from"ws";import{
|
|
1
|
+
import*as b from"flatbuffers";import{WebSocketServer as m,WebSocket as d}from"ws";import{f as h,M as E,d as B,R as x,N as F,S as C,g as _}from"./worker-message.js";function $(t={}){const e=t.host??"127.0.0.1",s=t.port??7777,o=t.path??"/",n=t.logger??console;let r;try{r=new m({host:e,port:s,path:o})}catch(f){throw n.error(`[relay-proxy] failed to create WebSocketServer: ${String(f)}`),f}let i=s;const a=r.address();return a&&typeof a=="object"&&(i=a.port),r.on("error",f=>{n.error(`[relay-proxy] WebSocketServer error: ${String(f)}`)}),r.on("connection",f=>{const c={relaySockets:new Map,pendingFrames:new Map,dedupBySubId:new Map,lastSubIdByRelay:new Map};f.on("message",(u,l)=>{if(l){const p=N(u);if(!p)return;O(c,f,p,n);return}const w=S(u);w&&k(c,w,n)}),f.on("close",()=>{y(c)}),f.on("error",()=>{y(c)})}),n.info(`[relay-proxy] listening on ws://${e}:${i}${o}`),{port:i,close:()=>new Promise((f,c)=>{r.close(u=>{if(u){c(u);return}f()})})}}function P(t){const{server:e,path:s="/",logger:o=console}=t,n=new m({server:e,path:s});return n.on("connection",r=>{const i={relaySockets:new Map,pendingFrames:new Map,dedupBySubId:new Map,lastSubIdByRelay:new Map};r.on("message",(a,f)=>{if(f){const u=N(a);if(!u)return;O(i,r,u,o);return}const c=S(a);c&&k(i,c,o)}),r.on("close",()=>{y(i)}),r.on("error",()=>{y(i)})}),o.info(`[relay-proxy] attached to server at path: ${s}`),{close:()=>new Promise((r,i)=>{n.close(a=>{if(a){i(a);return}r()})})}}function T(t,e){const s=e.path??"/ws-proxy",o=e.logger??console;let n=null;const r=new Map,i=t.listen.bind(t);return t.listen=(...a)=>{const f=i(...a);return n=new m({server:f,path:s}),n.on("connection",c=>{const u={relaySockets:new Map,pendingFrames:new Map,dedupBySubId:new Map,lastSubIdByRelay:new Map};r.set(c,u),c.on("message",(l,w)=>{const p=r.get(c);if(!p)return;if(w){const I=N(l);if(!I)return;O(p,c,I,o);return}const A=S(l);A&&k(p,A,o)}),c.on("close",()=>{const l=r.get(c);l&&(y(l),r.delete(c))}),c.on("error",()=>{const l=r.get(c);l&&(y(l),r.delete(c))})}),o.info(`[relay-proxy] attached to Express server at path: ${s}`),f},{close:()=>new Promise((a,f)=>{if(!n){a();return}r.forEach(c=>y(c)),r.clear(),n.close(c=>{if(c){f(c);return}a()})})}}function k(t,e,s){let o;try{o=JSON.parse(e)}catch{return}if(j(o)){const n=JSON.stringify(["AUTH",o.event]);R(t,o.relay,n,s);return}if(H(o)){t.dedupBySubId.delete(o.subscription_id);for(const[n,r]of t.relaySockets.entries())r.readyState===d.OPEN&&r.send(JSON.stringify(["CLOSE",o.subscription_id])),t.lastSubIdByRelay.set(n,o.subscription_id)}}function O(t,e,s,o){for(const n of s.relays){U(t,e,n,o);for(const r of s.frames)D(t,n,r),R(t,n,r,o)}}function U(t,e,s,o){const n=t.relaySockets.get(s);if(n&&n.readyState!==d.CLOSED)return;const r=new d(s);t.relaySockets.set(s,r),t.pendingFrames.set(s,[]),r.on("open",()=>{const i=t.pendingFrames.get(s);if(i){for(const a of i)r.send(a);t.pendingFrames.set(s,[])}}),r.on("message",i=>{const a=S(i);if(!a||e.readyState!==d.OPEN)return;const f=t.lastSubIdByRelay.get(s),c=J(t,s,a,f);c&&e.send(c,{binary:!0})}),r.on("close",()=>{t.pendingFrames.delete(s)}),r.on("error",i=>{if(!t.pendingFrames.has(s))return;const a=String(i);!a.includes("ECONNREFUSED")&&!a.includes("ENOTFOUND")&&o.warn(`[relay-proxy] relay socket error for ${s}: ${a.slice(0,100)}`),t.pendingFrames.delete(s)})}function D(t,e,s){const o=M(s);if(!o)return;const n=o[0];if(n!=="REQ"&&n!=="CLOSE")return;const r=typeof o[1]=="string"?o[1]:null;if(r){if(t.lastSubIdByRelay.set(e,r),n==="REQ"){t.dedupBySubId.has(r)||t.dedupBySubId.set(r,new Set);return}t.dedupBySubId.delete(r)}}function R(t,e,s,o){const n=t.relaySockets.get(e);if(n){if(n.readyState===d.OPEN){n.send(s);return}if(n.readyState===d.CONNECTING){const r=t.pendingFrames.get(e)??[];r.push(s),t.pendingFrames.set(e,r);return}o.warn(`[relay-proxy] dropping frame for closed relay socket ${e}`)}}function J(t,e,s,o){const n=M(s);if(!n||n.length<1||typeof n[0]!="string")return v(o??"",e,s);const r=n[0];if(r==="EVENT"){const i=typeof n[1]=="string"?n[1]:"",a=W(n[2]);if(!i||!a)return v(i,e,s);const f=t.dedupBySubId.get(i);return f&&f.has(a.id)?null:(f&&f.add(a.id),L(i,e,a))}if(r==="NOTICE"){const i=n[1]===void 0?null:String(n[1]);return g("",e,"NOTICE",i)}if(r==="AUTH"){const i=n[1]===void 0?null:String(n[1]);return g(o??"",e,"AUTH",i)}if(r==="CLOSED"){const i=typeof n[1]=="string"?n[1]:"",a=n[2]===void 0?null:String(n[2]);return g(i,e,"CLOSED",a)}if(r==="OK"){const i=typeof n[1]=="string"?n[1]:"",a=n[2]===void 0?"false":String(n[2]),f=n[3]===void 0?null:String(n[3]);return g(i,e,a,f)}if(r==="EOSE"){const i=typeof n[1]=="string"?n[1]:"";return g(i,e,"EOSE",null)}return v(o??"",e,s)}function L(t,e,s){const o=new b.Builder(1024),n=new h(t||null,e,E.NostrEvent,B.NostrEvent,new F(s.id,s.pubkey,s.kind,s.content,s.tags.map(r=>new C(r)),s.created_at,s.sig));return o.finish(n.pack(o)),o.asUint8Array()}function g(t,e,s,o){const n=new b.Builder(256),r=new h(t||null,e,E.ConnectionStatus,B.ConnectionStatus,new _(e,s,o));return n.finish(r.pack(n)),n.asUint8Array()}function v(t,e,s){const o=new b.Builder(256),n=new h(t||null,e,E.Raw,B.Raw,new x(s));return o.finish(n.pack(o)),o.asUint8Array()}function W(t){if(!t||typeof t!="object")return null;const e=t;if(typeof e.id!="string"||typeof e.pubkey!="string"||typeof e.kind!="number"||typeof e.content!="string"||typeof e.created_at!="number"||typeof e.sig!="string"||!Array.isArray(e.tags))return null;const s=e.tags.map(o=>Array.isArray(o)?o.filter(n=>typeof n=="string"):[]).filter(o=>o.length>0);return{id:e.id,pubkey:e.pubkey,kind:e.kind,content:e.content,created_at:e.created_at,sig:e.sig,tags:s}}function M(t){try{const e=JSON.parse(t);return Array.isArray(e)?e:null}catch{return null}}function N(t){const e=S(t);if(!e)return null;try{const s=JSON.parse(e);if(!Array.isArray(s.relays)||!Array.isArray(s.frames))return null;const o=s.relays.filter(r=>typeof r=="string"),n=s.frames.filter(r=>typeof r=="string");return o.length===0||n.length===0?null:{relays:o,frames:n}}catch{return null}}function S(t){return typeof t=="string"?t:t instanceof ArrayBuffer?Buffer.from(t).toString("utf8"):Buffer.isBuffer(t)?t.toString("utf8"):t instanceof Uint8Array?Buffer.from(t).toString("utf8"):Array.isArray(t)?Buffer.concat(t.filter(e=>Buffer.isBuffer(e))).toString("utf8"):""}function j(t){if(!t||typeof t!="object")return!1;const e=t;return e.type==="auth_response"&&typeof e.relay=="string"&&e.event!==void 0}function H(t){if(!t||typeof t!="object")return!1;const e=t;return e.type==="close_sub"&&typeof e.subscription_id=="string"}function y(t){t.dedupBySubId.clear(),t.lastSubIdByRelay.clear();for(const e of t.relaySockets.values())try{e.close()}catch{}t.relaySockets.clear(),t.pendingFrames.clear()}export{P as attachRelayProxyToServer,T as createExpressRelayProxyMiddleware,$ as createRelayProxyServer};
|
package/dist/signer-response.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as
|
|
1
|
+
import*as a from"flatbuffers";var u=(s=>(s[s.GetPubkey=0]="GetPubkey",s[s.SignEvent=1]="SignEvent",s[s.Nip04Encrypt=2]="Nip04Encrypt",s[s.Nip04Decrypt=3]="Nip04Decrypt",s[s.Nip44Encrypt=4]="Nip44Encrypt",s[s.Nip44Decrypt=5]="Nip44Decrypt",s[s.Nip04DecryptBetween=6]="Nip04DecryptBetween",s[s.Nip44DecryptBetween=7]="Nip44DecryptBetween",s[s.VerifyProof=8]="VerifyProof",s[s.AuthEvent=9]="AuthEvent",s))(u||{});class i{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsSignerRequest(t,e){return(e||new i).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsSignerRequest(t,e){return t.setPosition(t.position()+a.SIZE_PREFIX_LENGTH),(e||new i).__init(t.readInt32(t.position())+t.position(),t)}requestId(){const t=this.bb.__offset(this.bb_pos,4);return t?this.bb.readUint64(this.bb_pos+t):BigInt("0")}op(){const t=this.bb.__offset(this.bb_pos,6);return t?this.bb.readUint32(this.bb_pos+t):u.GetPubkey}payload(t){const e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__string(this.bb_pos+e,t):null}pubkey(t){const e=this.bb.__offset(this.bb_pos,10);return e?this.bb.__string(this.bb_pos+e,t):null}senderPubkey(t){const e=this.bb.__offset(this.bb_pos,12);return e?this.bb.__string(this.bb_pos+e,t):null}recipientPubkey(t){const e=this.bb.__offset(this.bb_pos,14);return e?this.bb.__string(this.bb_pos+e,t):null}static startSignerRequest(t){t.startObject(6)}static addRequestId(t,e){t.addFieldInt64(0,e,BigInt("0"))}static addOp(t,e){t.addFieldInt32(1,e,u.GetPubkey)}static addPayload(t,e){t.addFieldOffset(2,e,0)}static addPubkey(t,e){t.addFieldOffset(3,e,0)}static addSenderPubkey(t,e){t.addFieldOffset(4,e,0)}static addRecipientPubkey(t,e){t.addFieldOffset(5,e,0)}static endSignerRequest(t){return t.endObject()}static createSignerRequest(t,e,r,b,o,d,c){return i.startSignerRequest(t),i.addRequestId(t,e),i.addOp(t,r),i.addPayload(t,b),i.addPubkey(t,o),i.addSenderPubkey(t,d),i.addRecipientPubkey(t,c),i.endSignerRequest(t)}unpack(){return new p(this.requestId(),this.op(),this.payload(),this.pubkey(),this.senderPubkey(),this.recipientPubkey())}unpackTo(t){t.requestId=this.requestId(),t.op=this.op(),t.payload=this.payload(),t.pubkey=this.pubkey(),t.senderPubkey=this.senderPubkey(),t.recipientPubkey=this.recipientPubkey()}}class p{constructor(t=BigInt("0"),e=u.GetPubkey,r=null,b=null,o=null,d=null){this.requestId=t,this.op=e,this.payload=r,this.pubkey=b,this.senderPubkey=o,this.recipientPubkey=d}pack(t){const e=this.payload!==null?t.createString(this.payload):0,r=this.pubkey!==null?t.createString(this.pubkey):0,b=this.senderPubkey!==null?t.createString(this.senderPubkey):0,o=this.recipientPubkey!==null?t.createString(this.recipientPubkey):0;return i.createSignerRequest(t,this.requestId,this.op,e,r,b,o)}}class n{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsSignerResponse(t,e){return(e||new n).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsSignerResponse(t,e){return t.setPosition(t.position()+a.SIZE_PREFIX_LENGTH),(e||new n).__init(t.readInt32(t.position())+t.position(),t)}requestId(){const t=this.bb.__offset(this.bb_pos,4);return t?this.bb.readUint64(this.bb_pos+t):BigInt("0")}result(t){const e=this.bb.__offset(this.bb_pos,6);return e?this.bb.__string(this.bb_pos+e,t):null}error(t){const e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__string(this.bb_pos+e,t):null}static startSignerResponse(t){t.startObject(3)}static addRequestId(t,e){t.addFieldInt64(0,e,BigInt("0"))}static addResult(t,e){t.addFieldOffset(1,e,0)}static addError(t,e){t.addFieldOffset(2,e,0)}static endSignerResponse(t){return t.endObject()}static createSignerResponse(t,e,r,b){return n.startSignerResponse(t),n.addRequestId(t,e),n.addResult(t,r),n.addError(t,b),n.endSignerResponse(t)}unpack(){return new h(this.requestId(),this.result(),this.error())}unpackTo(t){t.requestId=this.requestId(),t.result=this.result(),t.error=this.error()}}class h{constructor(t=BigInt("0"),e=null,r=null){this.requestId=t,this.result=e,this.error=r}pack(t){const e=this.result!==null?t.createString(this.result):0,r=this.error!==null?t.createString(this.error):0;return n.createSignerResponse(t,this.requestId,e,r)}}export{p as S,u as a,n as b,i as c,h as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signer-response.js","sources":["../src/lib/ByteString.ts","../src/generated/nostr/fb/signer-op.ts","../src/generated/nostr/fb/signer-request.ts","../src/generated/nostr/fb/signer-response.ts"],"sourcesContent":["import { ByteBuffer } from 'flatbuffers';\n\n(ByteBuffer.prototype as any).__stringByteString = function (offset: number): ByteString {\n\t// Follow indirect: add the relative offset stored at this location\n\toffset += this.readInt32(offset);\n\n\t// Now at the start of the string object → first 4 bytes = length\n\tconst length = this.readInt32(offset);\n\tconst start = offset + 4;\n\n\t// Slice out exactly [start, start+length]\n\tconst slice = this.bytes().subarray(start, start + length);\n\n\treturn new ByteString(slice);\n};\n\n// Shared decoder for all instances (cheap, stateless for non-streaming use)\nconst UTF8_DECODER = new TextDecoder('utf-8');\n\n// Hex lookup table to speed up toHex()\nconst HEX_TABLE: string[] = (() => {\n\tconst t = new Array(256);\n\tfor (let i = 0; i < 256; i++) t[i] = i.toString(16).padStart(2, '0');\n\treturn t;\n})();\n\n// Convert Uint8Array to string using the browser's built-in decoder\nfunction byteArrayToString(bytes: Uint8Array): string {\n\treturn UTF8_DECODER.decode(bytes);\n}\n\n// lib/ByteString.ts\nexport class ByteString {\n\tprivate readonly view: Uint8Array;\n\n\tconstructor(view: Uint8Array) {\n\t\tthis.view = view;\n\t}\n\n\t/**\n\t * Access underlying bytes\n\t */\n\tbytes(): Uint8Array {\n\t\treturn this.view;\n\t}\n\n\t/**\n\t * Fast numeric discriminant (FNV-1a hash).\n\t * Not cryptographically secure, but great for Map/Set keys.\n\t */\n\tfnv1aHash(): number {\n\t\tlet h = 2166136261 >>> 0;\n\t\tconst v = this.view;\n\t\tfor (let i = 0; i < v.length; i++) {\n\t\t\th ^= v[i];\n\t\t\th = Math.imul(h, 16777619);\n\t\t}\n\t\treturn h >>> 0;\n\t}\n\n\t/**\n\t * Return a stable hex string representation.\n\t */\n\ttoHex(): string {\n\t\tconst v = this.view;\n\t\tlet out = '';\n\t\tfor (let i = 0; i < v.length; i++) out += HEX_TABLE[v[i]];\n\t\treturn out;\n\t}\n\n\t/**\n\t * Decode as UTF-8 string.\n\t * If backed by SharedArrayBuffer, makes a safe copy.\n\t * No caching to allow proper GC of event data.\n\t */\n\tutf8String(): string {\n\t\treturn byteArrayToString(this.view);\n\t}\n\n\t/**\n\t * For debugging/logging\n\t */\n\ttoString(): string {\n\t\treturn this.utf8String();\n\t}\n\n\t/**\n\t * Equality check by bytes\n\t */\n\tequals(other: ByteString): boolean {\n\t\tconst a = this.view,\n\t\t\tb = other.view;\n\t\tif (a.length !== b.length) return false;\n\t\tfor (let i = 0; i < a.length; i++) {\n\t\t\tif (a[i] !== b[i]) return false;\n\t\t}\n\t\treturn true;\n\t}\n}\n","import { ByteString } from \"src/lib/ByteString\";\n// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nexport enum SignerOp {\n GetPubkey = 0,\n SignEvent = 1,\n Nip04Encrypt = 2,\n Nip04Decrypt = 3,\n Nip44Encrypt = 4,\n Nip44Decrypt = 5,\n Nip04DecryptBetween = 6,\n Nip44DecryptBetween = 7,\n VerifyProof = 8,\n AuthEvent = 9\n}\n","import { ByteString } from \"src/lib/ByteString\";\n// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { SignerOp } from '../../nostr/fb/signer-op.js';\n\n\nexport class SignerRequest implements flatbuffers.IUnpackableObject<SignerRequestT> {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):SignerRequest {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsSignerRequest(bb:flatbuffers.ByteBuffer, obj?:SignerRequest):SignerRequest {\n return (obj || new SignerRequest()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsSignerRequest(bb:flatbuffers.ByteBuffer, obj?:SignerRequest):SignerRequest {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new SignerRequest()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nrequestId():bigint {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint64(this.bb_pos + offset) : BigInt('0');\n}\n\nop():SignerOp {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readUint32(this.bb_pos + offset) : SignerOp.GetPubkey;\n}\n\npayload(): ByteString|null\npayload(optionalEncoding:flatbuffers.Encoding): ByteString|Uint8Array|null\npayload(optionalEncoding?:any): ByteString|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.__stringByteString(this.bb_pos + offset, optionalEncoding) : null;\n}\n\npubkey(): ByteString|null\npubkey(optionalEncoding:flatbuffers.Encoding): ByteString|Uint8Array|null\npubkey(optionalEncoding?:any): ByteString|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? this.bb!.__stringByteString(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nsenderPubkey(): ByteString|null\nsenderPubkey(optionalEncoding:flatbuffers.Encoding): ByteString|Uint8Array|null\nsenderPubkey(optionalEncoding?:any): ByteString|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? this.bb!.__stringByteString(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nrecipientPubkey(): ByteString|null\nrecipientPubkey(optionalEncoding:flatbuffers.Encoding): ByteString|Uint8Array|null\nrecipientPubkey(optionalEncoding?:any): ByteString|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 14);\n return offset ? this.bb!.__stringByteString(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nstatic startSignerRequest(builder:flatbuffers.Builder) {\n builder.startObject(6);\n}\n\nstatic addRequestId(builder:flatbuffers.Builder, requestId:bigint) {\n builder.addFieldInt64(0, requestId, BigInt('0'));\n}\n\nstatic addOp(builder:flatbuffers.Builder, op:SignerOp) {\n builder.addFieldInt32(1, op, SignerOp.GetPubkey);\n}\n\nstatic addPayload(builder:flatbuffers.Builder, payloadOffset:flatbuffers.Offset) {\n builder.addFieldOffset(2, payloadOffset, 0);\n}\n\nstatic addPubkey(builder:flatbuffers.Builder, pubkeyOffset:flatbuffers.Offset) {\n builder.addFieldOffset(3, pubkeyOffset, 0);\n}\n\nstatic addSenderPubkey(builder:flatbuffers.Builder, senderPubkeyOffset:flatbuffers.Offset) {\n builder.addFieldOffset(4, senderPubkeyOffset, 0);\n}\n\nstatic addRecipientPubkey(builder:flatbuffers.Builder, recipientPubkeyOffset:flatbuffers.Offset) {\n builder.addFieldOffset(5, recipientPubkeyOffset, 0);\n}\n\nstatic endSignerRequest(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createSignerRequest(builder:flatbuffers.Builder, requestId:bigint, op:SignerOp, payloadOffset:flatbuffers.Offset, pubkeyOffset:flatbuffers.Offset, senderPubkeyOffset:flatbuffers.Offset, recipientPubkeyOffset:flatbuffers.Offset):flatbuffers.Offset {\n SignerRequest.startSignerRequest(builder);\n SignerRequest.addRequestId(builder, requestId);\n SignerRequest.addOp(builder, op);\n SignerRequest.addPayload(builder, payloadOffset);\n SignerRequest.addPubkey(builder, pubkeyOffset);\n SignerRequest.addSenderPubkey(builder, senderPubkeyOffset);\n SignerRequest.addRecipientPubkey(builder, recipientPubkeyOffset);\n return SignerRequest.endSignerRequest(builder);\n}\n\nunpack(): SignerRequestT {\n return new SignerRequestT(\n this.requestId(),\n this.op(),\n this.payload(),\n this.pubkey(),\n this.senderPubkey(),\n this.recipientPubkey()\n );\n}\n\n\nunpackTo(_o: SignerRequestT): void {\n _o.requestId = this.requestId();\n _o.op = this.op();\n _o.payload = this.payload();\n _o.pubkey = this.pubkey();\n _o.senderPubkey = this.senderPubkey();\n _o.recipientPubkey = this.recipientPubkey();\n}\n}\n\nexport class SignerRequestT implements flatbuffers.IGeneratedObject {\nconstructor(\n public requestId: bigint = BigInt('0'),\n public op: SignerOp = SignerOp.GetPubkey,\n public payload: ByteString|Uint8Array|null = null,\n public pubkey: ByteString|Uint8Array|null = null,\n public senderPubkey: ByteString|Uint8Array|null = null,\n public recipientPubkey: ByteString|Uint8Array|null = null\n){}\n\n\npack(builder:flatbuffers.Builder): flatbuffers.Offset {\n const payload = (this.payload !== null ? builder.createString(this.payload!) : 0);\n const pubkey = (this.pubkey !== null ? builder.createString(this.pubkey!) : 0);\n const senderPubkey = (this.senderPubkey !== null ? builder.createString(this.senderPubkey!) : 0);\n const recipientPubkey = (this.recipientPubkey !== null ? builder.createString(this.recipientPubkey!) : 0);\n\n return SignerRequest.createSignerRequest(builder,\n this.requestId,\n this.op,\n payload,\n pubkey,\n senderPubkey,\n recipientPubkey\n );\n}\n}\n","import { ByteString } from \"src/lib/ByteString\";\n// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\n\n\nexport class SignerResponse implements flatbuffers.IUnpackableObject<SignerResponseT> {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):SignerResponse {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsSignerResponse(bb:flatbuffers.ByteBuffer, obj?:SignerResponse):SignerResponse {\n return (obj || new SignerResponse()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsSignerResponse(bb:flatbuffers.ByteBuffer, obj?:SignerResponse):SignerResponse {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new SignerResponse()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nrequestId():bigint {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint64(this.bb_pos + offset) : BigInt('0');\n}\n\nresult(): ByteString|null\nresult(optionalEncoding:flatbuffers.Encoding): ByteString|Uint8Array|null\nresult(optionalEncoding?:any): ByteString|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__stringByteString(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nerror(): ByteString|null\nerror(optionalEncoding:flatbuffers.Encoding): ByteString|Uint8Array|null\nerror(optionalEncoding?:any): ByteString|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.__stringByteString(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nstatic startSignerResponse(builder:flatbuffers.Builder) {\n builder.startObject(3);\n}\n\nstatic addRequestId(builder:flatbuffers.Builder, requestId:bigint) {\n builder.addFieldInt64(0, requestId, BigInt('0'));\n}\n\nstatic addResult(builder:flatbuffers.Builder, resultOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, resultOffset, 0);\n}\n\nstatic addError(builder:flatbuffers.Builder, errorOffset:flatbuffers.Offset) {\n builder.addFieldOffset(2, errorOffset, 0);\n}\n\nstatic endSignerResponse(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createSignerResponse(builder:flatbuffers.Builder, requestId:bigint, resultOffset:flatbuffers.Offset, errorOffset:flatbuffers.Offset):flatbuffers.Offset {\n SignerResponse.startSignerResponse(builder);\n SignerResponse.addRequestId(builder, requestId);\n SignerResponse.addResult(builder, resultOffset);\n SignerResponse.addError(builder, errorOffset);\n return SignerResponse.endSignerResponse(builder);\n}\n\nunpack(): SignerResponseT {\n return new SignerResponseT(\n this.requestId(),\n this.result(),\n this.error()\n );\n}\n\n\nunpackTo(_o: SignerResponseT): void {\n _o.requestId = this.requestId();\n _o.result = this.result();\n _o.error = this.error();\n}\n}\n\nexport class SignerResponseT implements flatbuffers.IGeneratedObject {\nconstructor(\n public requestId: bigint = BigInt('0'),\n public result: ByteString|Uint8Array|null = null,\n public error: ByteString|Uint8Array|null = null\n){}\n\n\npack(builder:flatbuffers.Builder): flatbuffers.Offset {\n const result = (this.result !== null ? builder.createString(this.result!) : 0);\n const error = (this.error !== null ? builder.createString(this.error!) : 0);\n\n return SignerResponse.createSignerResponse(builder,\n this.requestId,\n result,\n error\n );\n}\n}\n"],"names":["ByteBuffer","offset","length","start","slice","ByteString","UTF8_DECODER","HEX_TABLE","t","i","byteArrayToString","bytes","view","h","v","out","other","a","b","SignerOp","SignerRequest","bb","obj","flatbuffers","optionalEncoding","builder","requestId","op","payloadOffset","pubkeyOffset","senderPubkeyOffset","recipientPubkeyOffset","SignerRequestT","_o","payload","pubkey","senderPubkey","recipientPubkey","SignerResponse","resultOffset","errorOffset","SignerResponseT","result","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"signer-response.js","sources":["../src/generated/nostr/fb/signer-op.ts","../src/generated/nostr/fb/signer-request.ts","../src/generated/nostr/fb/signer-response.ts"],"sourcesContent":["// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nexport enum SignerOp {\n GetPubkey = 0,\n SignEvent = 1,\n Nip04Encrypt = 2,\n Nip04Decrypt = 3,\n Nip44Encrypt = 4,\n Nip44Decrypt = 5,\n Nip04DecryptBetween = 6,\n Nip44DecryptBetween = 7,\n VerifyProof = 8,\n AuthEvent = 9\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { SignerOp } from '../../nostr/fb/signer-op.js';\n\n\nexport class SignerRequest implements flatbuffers.IUnpackableObject<SignerRequestT> {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):SignerRequest {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsSignerRequest(bb:flatbuffers.ByteBuffer, obj?:SignerRequest):SignerRequest {\n return (obj || new SignerRequest()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsSignerRequest(bb:flatbuffers.ByteBuffer, obj?:SignerRequest):SignerRequest {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new SignerRequest()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nrequestId():bigint {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint64(this.bb_pos + offset) : BigInt('0');\n}\n\nop():SignerOp {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readUint32(this.bb_pos + offset) : SignerOp.GetPubkey;\n}\n\npayload():string|null\npayload(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\npayload(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\npubkey():string|null\npubkey(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\npubkey(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nsenderPubkey():string|null\nsenderPubkey(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nsenderPubkey(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nrecipientPubkey():string|null\nrecipientPubkey(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nrecipientPubkey(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 14);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nstatic startSignerRequest(builder:flatbuffers.Builder) {\n builder.startObject(6);\n}\n\nstatic addRequestId(builder:flatbuffers.Builder, requestId:bigint) {\n builder.addFieldInt64(0, requestId, BigInt('0'));\n}\n\nstatic addOp(builder:flatbuffers.Builder, op:SignerOp) {\n builder.addFieldInt32(1, op, SignerOp.GetPubkey);\n}\n\nstatic addPayload(builder:flatbuffers.Builder, payloadOffset:flatbuffers.Offset) {\n builder.addFieldOffset(2, payloadOffset, 0);\n}\n\nstatic addPubkey(builder:flatbuffers.Builder, pubkeyOffset:flatbuffers.Offset) {\n builder.addFieldOffset(3, pubkeyOffset, 0);\n}\n\nstatic addSenderPubkey(builder:flatbuffers.Builder, senderPubkeyOffset:flatbuffers.Offset) {\n builder.addFieldOffset(4, senderPubkeyOffset, 0);\n}\n\nstatic addRecipientPubkey(builder:flatbuffers.Builder, recipientPubkeyOffset:flatbuffers.Offset) {\n builder.addFieldOffset(5, recipientPubkeyOffset, 0);\n}\n\nstatic endSignerRequest(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createSignerRequest(builder:flatbuffers.Builder, requestId:bigint, op:SignerOp, payloadOffset:flatbuffers.Offset, pubkeyOffset:flatbuffers.Offset, senderPubkeyOffset:flatbuffers.Offset, recipientPubkeyOffset:flatbuffers.Offset):flatbuffers.Offset {\n SignerRequest.startSignerRequest(builder);\n SignerRequest.addRequestId(builder, requestId);\n SignerRequest.addOp(builder, op);\n SignerRequest.addPayload(builder, payloadOffset);\n SignerRequest.addPubkey(builder, pubkeyOffset);\n SignerRequest.addSenderPubkey(builder, senderPubkeyOffset);\n SignerRequest.addRecipientPubkey(builder, recipientPubkeyOffset);\n return SignerRequest.endSignerRequest(builder);\n}\n\nunpack(): SignerRequestT {\n return new SignerRequestT(\n this.requestId(),\n this.op(),\n this.payload(),\n this.pubkey(),\n this.senderPubkey(),\n this.recipientPubkey()\n );\n}\n\n\nunpackTo(_o: SignerRequestT): void {\n _o.requestId = this.requestId();\n _o.op = this.op();\n _o.payload = this.payload();\n _o.pubkey = this.pubkey();\n _o.senderPubkey = this.senderPubkey();\n _o.recipientPubkey = this.recipientPubkey();\n}\n}\n\nexport class SignerRequestT implements flatbuffers.IGeneratedObject {\nconstructor(\n public requestId: bigint = BigInt('0'),\n public op: SignerOp = SignerOp.GetPubkey,\n public payload: string|Uint8Array|null = null,\n public pubkey: string|Uint8Array|null = null,\n public senderPubkey: string|Uint8Array|null = null,\n public recipientPubkey: string|Uint8Array|null = null\n){}\n\n\npack(builder:flatbuffers.Builder): flatbuffers.Offset {\n const payload = (this.payload !== null ? builder.createString(this.payload!) : 0);\n const pubkey = (this.pubkey !== null ? builder.createString(this.pubkey!) : 0);\n const senderPubkey = (this.senderPubkey !== null ? builder.createString(this.senderPubkey!) : 0);\n const recipientPubkey = (this.recipientPubkey !== null ? builder.createString(this.recipientPubkey!) : 0);\n\n return SignerRequest.createSignerRequest(builder,\n this.requestId,\n this.op,\n payload,\n pubkey,\n senderPubkey,\n recipientPubkey\n );\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\n\n\nexport class SignerResponse implements flatbuffers.IUnpackableObject<SignerResponseT> {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):SignerResponse {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsSignerResponse(bb:flatbuffers.ByteBuffer, obj?:SignerResponse):SignerResponse {\n return (obj || new SignerResponse()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsSignerResponse(bb:flatbuffers.ByteBuffer, obj?:SignerResponse):SignerResponse {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new SignerResponse()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nrequestId():bigint {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint64(this.bb_pos + offset) : BigInt('0');\n}\n\nresult():string|null\nresult(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nresult(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nerror():string|null\nerror(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nerror(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nstatic startSignerResponse(builder:flatbuffers.Builder) {\n builder.startObject(3);\n}\n\nstatic addRequestId(builder:flatbuffers.Builder, requestId:bigint) {\n builder.addFieldInt64(0, requestId, BigInt('0'));\n}\n\nstatic addResult(builder:flatbuffers.Builder, resultOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, resultOffset, 0);\n}\n\nstatic addError(builder:flatbuffers.Builder, errorOffset:flatbuffers.Offset) {\n builder.addFieldOffset(2, errorOffset, 0);\n}\n\nstatic endSignerResponse(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createSignerResponse(builder:flatbuffers.Builder, requestId:bigint, resultOffset:flatbuffers.Offset, errorOffset:flatbuffers.Offset):flatbuffers.Offset {\n SignerResponse.startSignerResponse(builder);\n SignerResponse.addRequestId(builder, requestId);\n SignerResponse.addResult(builder, resultOffset);\n SignerResponse.addError(builder, errorOffset);\n return SignerResponse.endSignerResponse(builder);\n}\n\nunpack(): SignerResponseT {\n return new SignerResponseT(\n this.requestId(),\n this.result(),\n this.error()\n );\n}\n\n\nunpackTo(_o: SignerResponseT): void {\n _o.requestId = this.requestId();\n _o.result = this.result();\n _o.error = this.error();\n}\n}\n\nexport class SignerResponseT implements flatbuffers.IGeneratedObject {\nconstructor(\n public requestId: bigint = BigInt('0'),\n public result: string|Uint8Array|null = null,\n public error: string|Uint8Array|null = null\n){}\n\n\npack(builder:flatbuffers.Builder): flatbuffers.Offset {\n const result = (this.result !== null ? builder.createString(this.result!) : 0);\n const error = (this.error !== null ? builder.createString(this.error!) : 0);\n\n return SignerResponse.createSignerResponse(builder,\n this.requestId,\n result,\n error\n );\n}\n}\n"],"names":["SignerOp","SignerRequest","i","bb","obj","flatbuffers","offset","optionalEncoding","builder","requestId","op","payloadOffset","pubkeyOffset","senderPubkeyOffset","recipientPubkeyOffset","SignerRequestT","_o","payload","pubkey","senderPubkey","recipientPubkey","SignerResponse","resultOffset","errorOffset","SignerResponseT","result","error"],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AAEnC;;GAEG;AACH,KAAK,cAAc,CAAC,CAAC,IAAI;KACvB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK;CAC3D,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,EACxD,GAAG,EAAE,CAAC,EACN,SAAS,EAAE,CAAC,GACV,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAoBtE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,EACrD,GAAG,EAAE,CAAC,EACN,SAAS,EAAE,CAAC,GACV,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAYnE;AAGD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,mBA6BxE"}
|
package/dist/utils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{nip19 as
|
|
2
|
-
`);let p=null,
|
|
3
|
-
`);w.push(new h(a.encode("mediaGrid"),a.encode(p),c.MediaGroupData,new $(
|
|
4
|
-
`);w.push(new h(a.encode("mediaGrid"),a.encode(s),c.MediaGroupData,new $(e)))}else w.push(u[0]);return w}function
|
|
1
|
+
import{nip19 as T,generateSecretKey as R,getPublicKey as I}from"nostr-tools";import{g as V}from"./index2.js";import{b as E}from"./NarrowTypes.js";import{l as j,Y as z,W as B,f as G,j as Z,g as H,X as _,Z as F,p as O,r as Q,F as U,H as W,D as q,B as J,J as X,t as Y,v as ee,x as se,z as ae,L as ne,N as te,P as oe,R as re,T as ie,a1 as de,$ as ce,V as le,a0 as ue,e as pe,d as ge,n as he,_ as fe,k as ye,h as me,c as we,o as Ke,q as ke,E as Se,G as ve,C as be,A as xe,I as Ce,s as De,u as Ae,w as Me,y as Re,K as Ie,M as Ee,O as $e,Q as Ne,S as Pe,U as Le,a as Te,i as Ve,m as je}from"./NarrowTypes.js";import{h,b as c,i as K,I as A,j as M,k as $,l as ze,m as Be,H as Ge,L as Ze,n as He}from"./worker-message.js";class _e{constructor(){this.knownRelays=new Map,this.incomingCount=0,this.resolvedCount=0}handleMessage(r){const i=E(r);if(!i)return;const l=i.relayUrl();l&&!this.knownRelays.has(l)&&(this.incomingCount++,this.knownRelays.set(l,i)),this.isResolved(i)&&this.resolvedCount++}isResolved(r){return r.status()?.toString()==="EOSE"}get totalIncoming(){return this.incomingCount}get totalResolved(){return this.resolvedCount}get resolutionRate(){return this.incomingCount===0?0:this.resolvedCount/this.incomingCount}}const a=new TextEncoder;async function Fe(d){const r=[],i=e=>new h(a.encode("text"),a.encode(e),c.NONE,null),l=e=>new h(a.encode("image"),a.encode(e),c.ImageData,new A(a.encode(e),null)),f=e=>new h(a.encode("video"),a.encode(e),c.VideoData,new M(a.encode(e),null)),m=(e,s)=>{const n=e.indexOf(`
|
|
2
|
+
`);let p=null,t=e;if(n!==-1){const g=e.slice(0,n).trim(),b=e.slice(n+1);g&&/^[a-zA-Z0-9+#\.\-_]+$/.test(g)&&(p=g,t=b)}return new h(a.encode("code"),a.encode(s),c.CodeData,new ze(a.encode(p||""),a.encode(t)))},y=e=>new h(a.encode("cashu"),a.encode(e),c.CashuData,new Be(a.encode(e))),k=e=>new h(a.encode("hashtag"),a.encode(`#${e}`),c.HashtagData,new Ge(a.encode(e))),S=e=>new h(a.encode("link"),a.encode(e),c.LinkPreviewData,new Ze(a.encode(e),null,null,null)),N=(e,s)=>{try{const n=T.decode(e),p=n.type;let t=null,g=[],b=null,D=BigInt(0);const o=n.data;switch(p){case"npub":t=o;break;case"nprofile":t=o.pubkey,g=Array.isArray(o.relays)?o.relays:[];break;case"note":t=o;break;case"nevent":t=o.id,g=Array.isArray(o.relays)?o.relays:[],b=typeof o.author=="string"?o.author:null,typeof o.kind=="number"&&(D=BigInt(o.kind));break;case"naddr":t=`${o.kind}:${o.pubkey}:${o.identifier}`,g=Array.isArray(o.relays)?o.relays:[],typeof o.kind=="number"&&(D=BigInt(o.kind)),b=typeof o.pubkey=="string"?o.pubkey:null;break}return t||(t=e),new h(a.encode(p),a.encode(s),c.NostrData,new He(a.encode(t),a.encode(e),g,a.encode(b||""),D))}catch{return i(s)}},P=[{type:"code",regex:/```([\s\S]*?)```/g,processMatch:e=>m(e[1]||"",e[0])},{type:"cashu",regex:/(cashuA[A-Za-z0-9_-]+)/g,processMatch:e=>y(e[0])},{type:"hashtag",regex:/(?<![^\s"'(])(#[a-zA-Z0-9_]+)(?![a-zA-Z0-9_])/g,processMatch:e=>k(e[0].substring(1))},{type:"image",regex:/(https?:\/\/\S+\.(?:jpg|jpeg|png|gif|webp|svg|ico)(?:\?\S*)?)/gi,processMatch:e=>l(e[0])},{type:"video",regex:/(https?:\/\/\S+\.(?:mp4|mov|avi|mkv|webm|m4v)(?:\?\S*)?)/gi,processMatch:e=>f(e[0])},{type:"nostr",regex:/nostr:([a-z0-9]+)/gi,processMatch:e=>{const s=e[1];return N(s||"",e[0])}},{type:"link",regex:/(https?:\/\/\S+)(?![\)])/gi,processMatch:async e=>S(e[0])}],C=[];for(const e of P){let s;for(e.regex.lastIndex=0;(s=e.regex.exec(d))!==null;){const n=s.index,p=n+s[0].length,t=await e.processMatch(s);C.push({start:n,end:p,block:t})}}C.sort((e,s)=>e.start-s.start);const x=[];for(const e of C)x.some(s=>e.start>=s.start&&e.start<s.end||e.end>s.start&&e.end<=s.end||e.start<=s.start&&e.end>=s.end)||x.push(e);x.sort((e,s)=>e.start-s.start);let v=0;for(const{start:e,end:s,block:n}of x)e>v&&r.push(i(d.substring(v,e))),r.push(n),v=s;v<d.length&&r.push(i(d.substring(v)));const w=[];let u=[];const L=e=>/^\s+$/.test(e);for(let e=0;e<r.length;e++){const s=r[e];if(s?.type?.toString()==="image"||s?.type?.toString()==="video"){u.push(s);continue}if(!(s?.type?.toString()==="text"&&typeof s?.text?.toString()=="string"&&L(s.text?.toString())&&u.length>0&&e+1<r.length&&(r[e+1]?.type?.toString()==="image"||r[e+1]?.type?.toString()==="video"))){if(u.length>0){if(u.length>1){const n=u.map(t=>{if(t.dataType===c.ImageData){const g=t.data;return new K(new A(a.encode(g.url??t.text),null),null)}else if(t.dataType===c.VideoData){const g=t.data;return new K(null,new M(a.encode(g.url??t.text),null))}return new K(null,null)}),p=u.map(t=>String(t.text??"")).join(`
|
|
3
|
+
`);w.push(new h(a.encode("mediaGrid"),a.encode(p),c.MediaGroupData,new $(n)))}else w.push(u[0]);u=[]}w.push(s)}}if(u.length>0)if(u.length>1){const e=u.map(n=>{if(n.dataType===c.ImageData){const p=n.data;return new K(new A(a.encode(p.url??n.text),null),null)}else if(n.dataType===c.VideoData){const p=n.data;return new K(null,new M(a.encode(p.url??n.text),null))}return new K(null,null)}),s=u.map(n=>String(n.text??"")).join(`
|
|
4
|
+
`);w.push(new h(a.encode("mediaGrid"),a.encode(s),c.MediaGroupData,new $(e)))}else w.push(u[0]);return w}function Oe(d,r){const i=d[`${String(r)}Length`]();return{[Symbol.iterator](){let l=0;return{next(){for(;l<i;){const f=d[r](l);if(l++,f!=null)return{value:f,done:!1}}return{value:void 0,done:!0}}}}}}function Qe(d,r){if(!d)return[];const i=d[`${String(r)}Length`]?.bind(d);if(!i)return[];const l=i(),f=[];for(let m=0;m<l;m++){const y=d[r](m);y!=null&&f.push(y)}return f}async function Ue(d,r){const i=R(),l=I(i),f=Array.from(i).map(S=>S.toString(16).padStart(2,"0")).join(""),m=I(R()),y=new URLSearchParams;for(const S of r)y.append("relay",S);y.set("secret",m),y.set("name",d);const k=`nostrconnect://${l}?${y.toString()}`;return console.log("connect url:",k),V().setNip46QR(k,f),k}export{_e as ConnectionTracker,j as asBufferFull,z as asCashuData,B as asCodeData,G as asConnectionStatus,Z as asCountResponse,H as asEoce,_ as asHashtagData,F as asImageData,O as asKind0,Q as asKind1,U as asKind10002,W as asKind10019,q as asKind1311,J as asKind17,X as asKind17375,Y as asKind3,ee as asKind4,se as asKind6,ae as asKind7,ne as asKind7374,te as asKind7375,oe as asKind7376,re as asKind9321,ie as asKind9735,de as asLinkPreview,ce as asMediaGroupData,le as asNip51,ue as asNostrData,pe as asNostrEvent,ge as asParsedEvent,he as asValidProofs,fe as asVideoData,Ue as connectWithQRCode,Qe as fbArray,Oe as fbIterable,ye as isBufferFull,E as isConnectionStatus,me as isCountResponse,we as isEoce,Ke as isKind0,ke as isKind1,Se as isKind10002,ve as isKind10019,be as isKind1311,xe as isKind17,Ce as isKind17375,De as isKind3,Ae as isKind4,Me as isKind6,Re as isKind7,Ie as isKind7374,Ee as isKind7375,$e as isKind7376,Ne as isKind9321,Pe as isKind9735,Le as isNip51,Te as isNostrEvent,Ve as isParsedEvent,je as isValidProofs,Fe as parseContent};
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../src/lib/ConnectionTracker.ts","../src/lib/ParseContent.ts","../src/utils.ts"],"sourcesContent":["import { ConnectionStatus, WorkerMessage } from \"src/generated/nostr/fb\";\nimport { isConnectionStatus } from \"./NarrowTypes\";\n\nexport class ConnectionTracker {\n private knownRelays: Map<number, ConnectionStatus> = new Map();\n private incomingCount = 0;\n private resolvedCount = 0;\n\n /**\n * Feed a new message into the tracker\n */\n handleMessage(msg: WorkerMessage) {\n const status = isConnectionStatus(msg);\n if (!status) return; // not a connection status, ignore\n\n const id = status.relayUrl()?.fnv1aHash()\n if(id && !this.knownRelays.has(id)) {\n this.incomingCount++;\n this.knownRelays.set(id, status);\n }\n if (this.isResolved(status)) {\n this.resolvedCount++;\n }\n }\n\n /**\n * Define what counts as a \"resolved\" connection.\n * Adjust based on your real ConnectionStatus enum/shape.\n */\n private isResolved(status: ConnectionStatus): boolean {\n return status.status()?.toString() === \"EOSE\";\n }\n\n /** Total connection attempts processed */\n get totalIncoming(): number {\n return this.incomingCount;\n }\n\n /** How many actually resolved */\n get totalResolved(): number {\n return this.resolvedCount;\n }\n\n /** Quick ratio (0...1) of resolved vs incoming */\n get resolutionRate(): number {\n return this.incomingCount === 0 ? 0 : this.resolvedCount / this.incomingCount;\n }\n}\n","import { nip19 } from 'nostr-tools';\n\nimport { ContentBlockT } from 'src/generated/nostr/fb/content-block';\nimport { ContentData } from 'src/generated/nostr/fb/content-data';\nimport { CodeDataT } from 'src/generated/nostr/fb/code-data';\nimport { CashuDataT } from 'src/generated/nostr/fb/cashu-data';\nimport { HashtagDataT } from 'src/generated/nostr/fb/hashtag-data';\nimport { ImageDataT } from 'src/generated/nostr/fb/image-data';\nimport { VideoDataT } from 'src/generated/nostr/fb/video-data';\nimport { MediaGroupDataT } from 'src/generated/nostr/fb/media-group-data';\nimport { MediaItemT } from 'src/generated/nostr/fb/media-item';\nimport { LinkPreviewDataT } from 'src/generated/nostr/fb/link-preview-data';\nimport { NostrDataT } from 'src/generated/nostr/fb/nostr-data';\n\ntype MatchProcessor = (match: RegExpExecArray) => ContentBlockT | Promise<ContentBlockT>;\n\nconst textEncoder = new TextEncoder();\n\nexport async function parseContent(content: string): Promise<ContentBlockT[]> {\n\tconst blocks: ContentBlockT[] = [];\n\n\t// Helpers\n\tconst textBlock = (text: string): ContentBlockT =>\n\t\tnew ContentBlockT(textEncoder.encode('text'), textEncoder.encode(text), ContentData.NONE, null);\n\n\tconst imageBlock = (url: string): ContentBlockT =>\n\t\tnew ContentBlockT(\n\t\t\ttextEncoder.encode('image'),\n\t\t\ttextEncoder.encode(url),\n\t\t\tContentData.ImageData,\n\t\t\tnew ImageDataT(textEncoder.encode(url), null)\n\t\t);\n\n\tconst videoBlock = (url: string): ContentBlockT =>\n\t\tnew ContentBlockT(\n\t\t\ttextEncoder.encode('video'),\n\t\t\ttextEncoder.encode(url),\n\t\t\tContentData.VideoData,\n\t\t\tnew VideoDataT(textEncoder.encode(url), null)\n\t\t);\n\n\tconst codeBlock = (raw: string, full: string): ContentBlockT => {\n\t\t// Try to extract optional language from first line of fenced code\n\t\t// Supports patterns like ```lang\\ncode\\n```\n\t\tconst nl = raw.indexOf('\\n');\n\t\tlet language: string | null = null;\n\t\tlet code = raw;\n\t\tif (nl !== -1) {\n\t\t\tconst firstLine = raw.slice(0, nl).trim();\n\t\t\tconst rest = raw.slice(nl + 1);\n\t\t\tif (firstLine && /^[a-zA-Z0-9+#\\.\\-_]+$/.test(firstLine)) {\n\t\t\t\tlanguage = firstLine;\n\t\t\t\tcode = rest;\n\t\t\t}\n\t\t}\n\n\t\treturn new ContentBlockT(\n\t\t\ttextEncoder.encode('code'),\n\t\t\ttextEncoder.encode(full),\n\t\t\tContentData.CodeData,\n\t\t\tnew CodeDataT(textEncoder.encode(language || ''), textEncoder.encode(code))\n\t\t);\n\t};\n\n\tconst cashuBlock = (token: string): ContentBlockT =>\n\t\tnew ContentBlockT(\n\t\t\ttextEncoder.encode('cashu'),\n\t\t\ttextEncoder.encode(token),\n\t\t\tContentData.CashuData,\n\t\t\tnew CashuDataT(textEncoder.encode(token))\n\t\t);\n\n\tconst hashtagBlock = (tag: string): ContentBlockT =>\n\t\tnew ContentBlockT(\n\t\t\ttextEncoder.encode('hashtag'),\n\t\t\ttextEncoder.encode(`#${tag}`),\n\t\t\tContentData.HashtagData,\n\t\t\tnew HashtagDataT(textEncoder.encode(tag))\n\t\t);\n\n\tconst linkBlock = (url: string): ContentBlockT =>\n\t\tnew ContentBlockT(\n\t\t\ttextEncoder.encode('link'),\n\t\t\ttextEncoder.encode(url),\n\t\t\tContentData.LinkPreviewData,\n\t\t\tnew LinkPreviewDataT(textEncoder.encode(url), null, null, null)\n\t\t);\n\n\tconst nostrBlock = (bech32: string, fullText: string): ContentBlockT => {\n\t\ttry {\n\t\t\tconst decoded = nip19.decode(bech32);\n\t\t\tconst type = decoded.type as 'npub' | 'nprofile' | 'note' | 'nevent' | 'naddr';\n\n\t\t\tlet id: string | null = null;\n\t\t\tlet relays: string[] = [];\n\t\t\tlet author: string | null = null;\n\t\t\tlet kind: bigint = BigInt(0);\n\n\t\t\tconst d = decoded.data as any;\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'npub':\n\t\t\t\t\t// data: hex pubkey\n\t\t\t\t\tid = d as string;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'nprofile':\n\t\t\t\t\t// data: { pubkey, relays? }\n\t\t\t\t\tid = d.pubkey;\n\t\t\t\t\trelays = Array.isArray(d.relays) ? d.relays : [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'note':\n\t\t\t\t\t// data: hex event id\n\t\t\t\t\tid = d as string;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'nevent':\n\t\t\t\t\t// data: { id, relays?, author?, kind? }\n\t\t\t\t\tid = d.id;\n\t\t\t\t\trelays = Array.isArray(d.relays) ? d.relays : [];\n\t\t\t\t\tauthor = typeof d.author === 'string' ? d.author : null;\n\t\t\t\t\tif (typeof d.kind === 'number') kind = BigInt(d.kind);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'naddr':\n\t\t\t\t\t// data: { identifier, pubkey, kind, relays? }\n\t\t\t\t\t// Build a stable id\n\t\t\t\t\tid = `${d.kind}:${d.pubkey}:${d.identifier}`;\n\t\t\t\t\trelays = Array.isArray(d.relays) ? d.relays : [];\n\t\t\t\t\tif (typeof d.kind === 'number') kind = BigInt(d.kind);\n\t\t\t\t\tauthor = typeof d.pubkey === 'string' ? d.pubkey : null;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Ensure required fields for NostrDataT: id and entity are required\n\t\t\tif (!id) {\n\t\t\t\tid = bech32;\n\t\t\t}\n\n\t\t\treturn new ContentBlockT(\n\t\t\t\ttextEncoder.encode(type),\n\t\t\t\ttextEncoder.encode(fullText),\n\t\t\t\tContentData.NostrData,\n\t\t\t\tnew NostrDataT(\n\t\t\t\t\ttextEncoder.encode(id),\n\t\t\t\t\ttextEncoder.encode(bech32),\n\t\t\t\t\trelays,\n\t\t\t\t\ttextEncoder.encode(author || ''),\n\t\t\t\t\tkind\n\t\t\t\t)\n\t\t\t);\n\t\t} catch {\n\t\t\t// Fallback to plain text block when decode fails\n\t\t\treturn textBlock(fullText);\n\t\t}\n\t};\n\n\t// Define all the patterns we want to match\n\tconst patterns: Array<{\n\t\ttype: string;\n\t\tregex: RegExp;\n\t\tprocessMatch: MatchProcessor;\n\t}> = [\n\t\t{\n\t\t\ttype: 'code',\n\t\t\tregex: /```([\\s\\S]*?)```/g,\n\t\t\tprocessMatch: (match) => codeBlock(match[1] || '', match[0])\n\t\t},\n\t\t{\n\t\t\ttype: 'cashu',\n\t\t\tregex: /(cashuA[A-Za-z0-9_-]+)/g,\n\t\t\tprocessMatch: (match) => cashuBlock(match[0])\n\t\t},\n\t\t{\n\t\t\ttype: 'hashtag',\n\t\t\t// Match hashtags that are not part of a URL\n\t\t\tregex: /(?<![^\\s\"'(])(#[a-zA-Z0-9_]+)(?![a-zA-Z0-9_])/g,\n\t\t\tprocessMatch: (match) => hashtagBlock(match[0].substring(1))\n\t\t},\n\t\t{\n\t\t\ttype: 'image',\n\t\t\tregex: /(https?:\\/\\/\\S+\\.(?:jpg|jpeg|png|gif|webp|svg|ico)(?:\\?\\S*)?)/gi,\n\t\t\tprocessMatch: (match) => imageBlock(match[0])\n\t\t},\n\t\t{\n\t\t\ttype: 'video',\n\t\t\tregex: /(https?:\\/\\/\\S+\\.(?:mp4|mov|avi|mkv|webm|m4v)(?:\\?\\S*)?)/gi,\n\t\t\tprocessMatch: (match) => videoBlock(match[0])\n\t\t},\n\t\t{\n\t\t\ttype: 'nostr',\n\t\t\tregex: /nostr:([a-z0-9]+)/gi,\n\t\t\tprocessMatch: (match) => {\n\t\t\t\tconst bech32 = match[1];\n\t\t\t\treturn nostrBlock(bech32 || '', match[0]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\ttype: 'link',\n\t\t\tregex: /(https?:\\/\\/\\S+)(?![\\)])/gi,\n\t\t\tprocessMatch: async (match) => linkBlock(match[0])\n\t\t}\n\t];\n\n\t// Find all matches with their positions\n\tconst allMatches: Array<{\n\t\tstart: number;\n\t\tend: number;\n\t\tblock: ContentBlockT;\n\t}> = [];\n\n\t// First, find all matches for all patterns\n\tfor (const pattern of patterns) {\n\t\tlet match: RegExpExecArray | null;\n\t\tpattern.regex.lastIndex = 0;\n\n\t\twhile ((match = pattern.regex.exec(content)) !== null) {\n\t\t\tconst start = match.index;\n\t\t\tconst end = start + match[0].length;\n\t\t\tconst block = await pattern.processMatch(match);\n\n\t\t\tallMatches.push({ start, end, block });\n\t\t}\n\t}\n\n\t// Sort matches by start position\n\tallMatches.sort((a, b) => a.start - b.start);\n\n\t// Remove overlapping matches (prioritize earlier patterns in the array)\n\tconst filteredMatches: typeof allMatches = [];\n\n\tfor (const match of allMatches) {\n\t\tconst overlaps = filteredMatches.some(\n\t\t\t(existing) =>\n\t\t\t\t(match.start >= existing.start && match.start < existing.end) ||\n\t\t\t\t(match.end > existing.start && match.end <= existing.end) ||\n\t\t\t\t(match.start <= existing.start && match.end >= existing.end)\n\t\t);\n\n\t\tif (!overlaps) {\n\t\t\tfilteredMatches.push(match);\n\t\t}\n\t}\n\n\t// Re-sort filtered matches\n\tfilteredMatches.sort((a, b) => a.start - b.start);\n\n\t// Build the final result, including text between matches\n\tlet lastIndex = 0;\n\n\tfor (const { start, end, block } of filteredMatches) {\n\t\t// Add text before this match\n\t\tif (start > lastIndex) {\n\t\t\tblocks.push(textBlock(content.substring(lastIndex, start)));\n\t\t}\n\n\t\t// Add the match\n\t\tblocks.push(block);\n\n\t\tlastIndex = end;\n\t}\n\n\t// Add any remaining text after the last match\n\tif (lastIndex < content.length) {\n\t\tblocks.push(textBlock(content.substring(lastIndex)));\n\t}\n\n\t// Post-processing: group consecutive media into grids\n\tconst processedBlocks: ContentBlockT[] = [];\n\tlet mediaGroup: ContentBlockT[] = [];\n\n\tconst isWhitespace = (s: string) => /^\\s+$/.test(s);\n\n\tfor (let i = 0; i < blocks.length; i++) {\n\t\tconst block = blocks[i];\n\n\t\t// If this is an image or video\n\t\tif (block?.type?.toString() === 'image' || block?.type?.toString() === 'video') {\n\t\t\tmediaGroup.push(block);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// If this is whitespace or newlines between media, check what follows\n\t\tif (\n\t\t\tblock?.type?.toString() === 'text' &&\n\t\t\ttypeof block?.text?.toString() === 'string' &&\n\t\t\tisWhitespace(block.text?.toString())\n\t\t) {\n\t\t\tif (\n\t\t\t\tmediaGroup.length > 0 &&\n\t\t\t\ti + 1 < blocks.length &&\n\t\t\t\t(blocks[i + 1]?.type?.toString() === 'image' || blocks[i + 1]?.type?.toString() === 'video')\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\t// If we have collected media and the current block breaks the sequence\n\t\tif (mediaGroup.length > 0) {\n\t\t\t// Add media group if it contains more than one item\n\t\t\tif (mediaGroup.length > 1) {\n\t\t\t\tconst items: MediaItemT[] = mediaGroup.map((m) => {\n\t\t\t\t\tif (m.dataType === ContentData.ImageData) {\n\t\t\t\t\t\tconst d = m.data as ImageDataT;\n\t\t\t\t\t\treturn new MediaItemT(\n\t\t\t\t\t\t\tnew ImageDataT(textEncoder.encode(d.url ?? (m.text as string)), null),\n\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (m.dataType === ContentData.VideoData) {\n\t\t\t\t\t\tconst d = m.data as VideoDataT;\n\t\t\t\t\t\treturn new MediaItemT(\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tnew VideoDataT(textEncoder.encode(d.url ?? (m.text as string)), null)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Fallback — shouldn't occur because we only collect image/video\n\t\t\t\t\treturn new MediaItemT(null, null);\n\t\t\t\t});\n\n\t\t\t\tconst text = mediaGroup.map((m) => String(m.text ?? '')).join('\\n');\n\t\t\t\tprocessedBlocks.push(\n\t\t\t\t\tnew ContentBlockT(\n\t\t\t\t\t\ttextEncoder.encode('mediaGrid'),\n\t\t\t\t\t\ttextEncoder.encode(text),\n\t\t\t\t\t\tContentData.MediaGroupData,\n\t\t\t\t\t\tnew MediaGroupDataT(items)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Just add the single media item\n\t\t\t\tprocessedBlocks.push(mediaGroup[0]);\n\t\t\t}\n\t\t\tmediaGroup = [];\n\t\t}\n\n\t\t// Add the current non-media block\n\t\tprocessedBlocks.push(block);\n\t}\n\n\t// Don't forget any remaining media\n\tif (mediaGroup.length > 0) {\n\t\tif (mediaGroup.length > 1) {\n\t\t\tconst items: MediaItemT[] = mediaGroup.map((m) => {\n\t\t\t\tif (m.dataType === ContentData.ImageData) {\n\t\t\t\t\tconst d = m.data as ImageDataT;\n\t\t\t\t\treturn new MediaItemT(\n\t\t\t\t\t\tnew ImageDataT(textEncoder.encode(d.url ?? (m.text as string)), null),\n\t\t\t\t\t\tnull\n\t\t\t\t\t);\n\t\t\t\t} else if (m.dataType === ContentData.VideoData) {\n\t\t\t\t\tconst d = m.data as VideoDataT;\n\t\t\t\t\treturn new MediaItemT(\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\tnew VideoDataT(textEncoder.encode(d.url ?? (m.text as string)), null)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn new MediaItemT(null, null);\n\t\t\t});\n\n\t\t\tconst text = mediaGroup.map((m) => String(m.text ?? '')).join('\\n');\n\t\t\tprocessedBlocks.push(\n\t\t\t\tnew ContentBlockT(\n\t\t\t\t\ttextEncoder.encode('mediaGrid'),\n\t\t\t\t\ttextEncoder.encode(text),\n\t\t\t\t\tContentData.MediaGroupData,\n\t\t\t\t\tnew MediaGroupDataT(items)\n\t\t\t\t)\n\t\t\t);\n\t\t} else {\n\t\t\tprocessedBlocks.push(mediaGroup[0]);\n\t\t}\n\t}\n\n\treturn processedBlocks;\n}\n","import { generateSecretKey, getPublicKey } from 'nostr-tools';\nimport { manager } from '.';\n\nexport { ConnectionTracker } from './lib/ConnectionTracker';\nexport { ByteString } from './lib/ByteString';\n\nexport * from './lib/NarrowTypes';\nexport * from './lib/ParseContent';\n\n/**\n * Extracts keys from T where the value is a `function(i: number): any`\n */\ntype FlatBufferKeys<T> = {\n\t[K in keyof T]: T[K] extends (i: number) => any ? K : never;\n}[keyof T];\n\n/**\n * Non-nullable version: Filters out null results\n */\nexport function fbIterable<T, K extends FlatBufferKeys<T>>(\n\tobj: T,\n\tfieldName: K\n): Iterable<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> {\n\tconst length = (obj as any)[`${String(fieldName)}Length`]();\n\treturn {\n\t\t[Symbol.iterator](): Iterator<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> {\n\t\t\tlet i = 0;\n\t\t\treturn {\n\t\t\t\tnext(): IteratorResult<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> {\n\t\t\t\t\twhile (i < length) {\n\t\t\t\t\t\tconst value = (obj as any)[fieldName](i);\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\t\treturn { value, done: false };\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// if null → skip this index\n\t\t\t\t\t}\n\t\t\t\t\treturn { value: undefined as any, done: true };\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n}\n\n/**\n * Eager array version (non-null)\n */\nexport function fbArray<T, K extends FlatBufferKeys<T>>(\n\tobj: T,\n\tfieldName: K\n): Array<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> {\n\tif (!obj) return [];\n\tconst lengthGetter = (obj as any)[`${String(fieldName)}Length`]?.bind(obj);\n\tif (!lengthGetter) return [];\n\tconst length = lengthGetter();\n\n\tconst result: Array<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> = [];\n\tfor (let i = 0; i < length; i++) {\n\t\tconst v = (obj as any)[fieldName](i);\n\t\tif (v != null) result.push(v);\n\t}\n\treturn result;\n}\n\n// In your frontend application\nexport async function connectWithQRCode(appName: string, relays: string[]) {\n\t// Generate a client keypair\n\tconst clientKeys = generateSecretKey();\n\tconst clientPubkey = getPublicKey(clientKeys);\n\tconst clientSecretHex = Array.from(clientKeys)\n\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t.join('');\n\n\t// Generate a random secret\n\tconst secret = getPublicKey(generateSecretKey());\n\n\tconst params = new URLSearchParams();\n\n\tfor (const relay of relays) {\n\t\tparams.append('relay', relay);\n\t}\n\n\tparams.set('secret', secret);\n\tparams.set('name', appName);\n\n\tconst nostrconnectUrl = `nostrconnect://${clientPubkey}?${params.toString()}`;\n\n\tconsole.log('connect url:', nostrconnectUrl);\n\n\t// Set up the NIP-46 signer with the client's pubkey and relays\n\t// Note: We don't know the remote signer's pubkey yet - that's what we're discovering\n\tmanager.setNip46QR(nostrconnectUrl, clientSecretHex);\n\n\treturn nostrconnectUrl;\n}\n"],"names":["ConnectionTracker","msg","status","isConnectionStatus","id","textEncoder","parseContent","content","blocks","textBlock","text","ContentBlockT","ContentData","imageBlock","url","ImageDataT","videoBlock","VideoDataT","codeBlock","raw","full","nl","language","code","firstLine","rest","CodeDataT","cashuBlock","token","CashuDataT","hashtagBlock","tag","HashtagDataT","linkBlock","LinkPreviewDataT","nostrBlock","bech32","fullText","decoded","nip19","type","relays","author","kind","d","NostrDataT","patterns","match","allMatches","pattern","start","end","block","a","b","filteredMatches","existing","lastIndex","processedBlocks","mediaGroup","isWhitespace","s","i","items","m","MediaItemT","MediaGroupDataT","fbIterable","obj","fieldName","length","value","fbArray","lengthGetter","result","v","connectWithQRCode","appName","clientKeys","generateSecretKey","clientPubkey","getPublicKey","clientSecretHex","secret","params","relay","nostrconnectUrl","manager"],"mappings":";;;;;;AAGO,MAAMA,EAAkB;AAAA,EAAxB,cAAA;AACL,SAAQ,kCAAiD,IAAA,GACzD,KAAQ,gBAAgB,GACxB,KAAQ,gBAAgB;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAKxB,cAAcC,GAAoB;AAChC,UAAMC,IAASC,EAAmBF,CAAG;AACrC,QAAI,CAACC,EAAQ;AAEb,UAAME,IAAKF,EAAO,SAAA,GAAY,UAAA;AAC9B,IAAGE,KAAM,CAAC,KAAK,YAAY,IAAIA,CAAE,MAC/B,KAAK,iBACN,KAAK,YAAY,IAAIA,GAAIF,CAAM,IAE5B,KAAK,WAAWA,CAAM,KACxB,KAAK;AAAA,EAET;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,WAAWA,GAAmC;AACpD,WAAOA,EAAO,UAAU,SAAA,MAAe;AAAA,EACzC;AAAA;AAAA,EAGA,IAAI,gBAAwB;AAC1B,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,gBAAwB;AAC1B,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,iBAAyB;AAC3B,WAAO,KAAK,kBAAkB,IAAI,IAAI,KAAK,gBAAgB,KAAK;AAAA,EAClE;AACF;AC/BA,MAAMG,IAAc,IAAI,YAAA;AAExB,eAAsBC,EAAaC,GAA2C;AAC7E,QAAMC,IAA0B,CAAA,GAG1BC,IAAY,CAACC,MAClB,IAAIC,EAAcN,EAAY,OAAO,MAAM,GAAGA,EAAY,OAAOK,CAAI,GAAGE,EAAY,MAAM,IAAI,GAEzFC,IAAa,CAACC,MACnB,IAAIH;AAAA,IACHN,EAAY,OAAO,OAAO;AAAA,IAC1BA,EAAY,OAAOS,CAAG;AAAA,IACtBF,EAAY;AAAA,IACZ,IAAIG,EAAWV,EAAY,OAAOS,CAAG,GAAG,IAAI;AAAA,EAAA,GAGxCE,IAAa,CAACF,MACnB,IAAIH;AAAA,IACHN,EAAY,OAAO,OAAO;AAAA,IAC1BA,EAAY,OAAOS,CAAG;AAAA,IACtBF,EAAY;AAAA,IACZ,IAAIK,EAAWZ,EAAY,OAAOS,CAAG,GAAG,IAAI;AAAA,EAAA,GAGxCI,IAAY,CAACC,GAAaC,MAAgC;AAG/D,UAAMC,IAAKF,EAAI,QAAQ;AAAA,CAAI;AAC3B,QAAIG,IAA0B,MAC1BC,IAAOJ;AACX,QAAIE,MAAO,IAAI;AACd,YAAMG,IAAYL,EAAI,MAAM,GAAGE,CAAE,EAAE,KAAA,GAC7BI,IAAON,EAAI,MAAME,IAAK,CAAC;AAC7B,MAAIG,KAAa,wBAAwB,KAAKA,CAAS,MACtDF,IAAWE,GACXD,IAAOE;AAAA,IAET;AAEA,WAAO,IAAId;AAAA,MACVN,EAAY,OAAO,MAAM;AAAA,MACzBA,EAAY,OAAOe,CAAI;AAAA,MACvBR,EAAY;AAAA,MACZ,IAAIc,EAAUrB,EAAY,OAAOiB,KAAY,EAAE,GAAGjB,EAAY,OAAOkB,CAAI,CAAC;AAAA,IAAA;AAAA,EAE5E,GAEMI,IAAa,CAACC,MACnB,IAAIjB;AAAA,IACHN,EAAY,OAAO,OAAO;AAAA,IAC1BA,EAAY,OAAOuB,CAAK;AAAA,IACxBhB,EAAY;AAAA,IACZ,IAAIiB,EAAWxB,EAAY,OAAOuB,CAAK,CAAC;AAAA,EAAA,GAGpCE,IAAe,CAACC,MACrB,IAAIpB;AAAA,IACHN,EAAY,OAAO,SAAS;AAAA,IAC5BA,EAAY,OAAO,IAAI0B,CAAG,EAAE;AAAA,IAC5BnB,EAAY;AAAA,IACZ,IAAIoB,EAAa3B,EAAY,OAAO0B,CAAG,CAAC;AAAA,EAAA,GAGpCE,IAAY,CAACnB,MAClB,IAAIH;AAAA,IACHN,EAAY,OAAO,MAAM;AAAA,IACzBA,EAAY,OAAOS,CAAG;AAAA,IACtBF,EAAY;AAAA,IACZ,IAAIsB,EAAiB7B,EAAY,OAAOS,CAAG,GAAG,MAAM,MAAM,IAAI;AAAA,EAAA,GAG1DqB,IAAa,CAACC,GAAgBC,MAAoC;AACvE,QAAI;AACH,YAAMC,IAAUC,EAAM,OAAOH,CAAM,GAC7BI,IAAOF,EAAQ;AAErB,UAAIlC,IAAoB,MACpBqC,IAAmB,CAAA,GACnBC,IAAwB,MACxBC,IAAe,OAAO,CAAC;AAE3B,YAAMC,IAAIN,EAAQ;AAElB,cAAQE,GAAA;AAAA,QACP,KAAK;AAEJ,UAAApC,IAAKwC;AACL;AAAA,QACD,KAAK;AAEJ,UAAAxC,IAAKwC,EAAE,QACPH,IAAS,MAAM,QAAQG,EAAE,MAAM,IAAIA,EAAE,SAAS,CAAA;AAC9C;AAAA,QACD,KAAK;AAEJ,UAAAxC,IAAKwC;AACL;AAAA,QACD,KAAK;AAEJ,UAAAxC,IAAKwC,EAAE,IACPH,IAAS,MAAM,QAAQG,EAAE,MAAM,IAAIA,EAAE,SAAS,CAAA,GAC9CF,IAAS,OAAOE,EAAE,UAAW,WAAWA,EAAE,SAAS,MAC/C,OAAOA,EAAE,QAAS,aAAUD,IAAO,OAAOC,EAAE,IAAI;AACpD;AAAA,QACD,KAAK;AAGJ,UAAAxC,IAAK,GAAGwC,EAAE,IAAI,IAAIA,EAAE,MAAM,IAAIA,EAAE,UAAU,IAC1CH,IAAS,MAAM,QAAQG,EAAE,MAAM,IAAIA,EAAE,SAAS,CAAA,GAC1C,OAAOA,EAAE,QAAS,aAAUD,IAAO,OAAOC,EAAE,IAAI,IACpDF,IAAS,OAAOE,EAAE,UAAW,WAAWA,EAAE,SAAS;AACnD;AAAA,MAAA;AAIF,aAAKxC,MACJA,IAAKgC,IAGC,IAAIzB;AAAA,QACVN,EAAY,OAAOmC,CAAI;AAAA,QACvBnC,EAAY,OAAOgC,CAAQ;AAAA,QAC3BzB,EAAY;AAAA,QACZ,IAAIiC;AAAA,UACHxC,EAAY,OAAOD,CAAE;AAAA,UACrBC,EAAY,OAAO+B,CAAM;AAAA,UACzBK;AAAA,UACApC,EAAY,OAAOqC,KAAU,EAAE;AAAA,UAC/BC;AAAA,QAAA;AAAA,MACD;AAAA,IAEF,QAAQ;AAEP,aAAOlC,EAAU4B,CAAQ;AAAA,IAC1B;AAAA,EACD,GAGMS,IAID;AAAA,IACJ;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,cAAc,CAACC,MAAU7B,EAAU6B,EAAM,CAAC,KAAK,IAAIA,EAAM,CAAC,CAAC;AAAA,IAAA;AAAA,IAE5D;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,cAAc,CAACA,MAAUpB,EAAWoB,EAAM,CAAC,CAAC;AAAA,IAAA;AAAA,IAE7C;AAAA,MACC,MAAM;AAAA;AAAA,MAEN,OAAO;AAAA,MACP,cAAc,CAACA,MAAUjB,EAAaiB,EAAM,CAAC,EAAE,UAAU,CAAC,CAAC;AAAA,IAAA;AAAA,IAE5D;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,cAAc,CAACA,MAAUlC,EAAWkC,EAAM,CAAC,CAAC;AAAA,IAAA;AAAA,IAE7C;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,cAAc,CAACA,MAAU/B,EAAW+B,EAAM,CAAC,CAAC;AAAA,IAAA;AAAA,IAE7C;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,cAAc,CAACA,MAAU;AACxB,cAAMX,IAASW,EAAM,CAAC;AACtB,eAAOZ,EAAWC,KAAU,IAAIW,EAAM,CAAC,CAAC;AAAA,MACzC;AAAA,IAAA;AAAA,IAED;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,cAAc,OAAOA,MAAUd,EAAUc,EAAM,CAAC,CAAC;AAAA,IAAA;AAAA,EAClD,GAIKC,IAID,CAAA;AAGL,aAAWC,KAAWH,GAAU;AAC/B,QAAIC;AAGJ,SAFAE,EAAQ,MAAM,YAAY,IAElBF,IAAQE,EAAQ,MAAM,KAAK1C,CAAO,OAAO,QAAM;AACtD,YAAM2C,IAAQH,EAAM,OACdI,IAAMD,IAAQH,EAAM,CAAC,EAAE,QACvBK,IAAQ,MAAMH,EAAQ,aAAaF,CAAK;AAE9C,MAAAC,EAAW,KAAK,EAAE,OAAAE,GAAO,KAAAC,GAAK,OAAAC,GAAO;AAAA,IACtC;AAAA,EACD;AAGA,EAAAJ,EAAW,KAAK,CAACK,GAAGC,MAAMD,EAAE,QAAQC,EAAE,KAAK;AAG3C,QAAMC,IAAqC,CAAA;AAE3C,aAAWR,KAASC;AAQnB,IAPiBO,EAAgB;AAAA,MAChC,CAACC,MACCT,EAAM,SAASS,EAAS,SAAST,EAAM,QAAQS,EAAS,OACxDT,EAAM,MAAMS,EAAS,SAAST,EAAM,OAAOS,EAAS,OACpDT,EAAM,SAASS,EAAS,SAAST,EAAM,OAAOS,EAAS;AAAA,IAAA,KAIzDD,EAAgB,KAAKR,CAAK;AAK5B,EAAAQ,EAAgB,KAAK,CAACF,GAAGC,MAAMD,EAAE,QAAQC,EAAE,KAAK;AAGhD,MAAIG,IAAY;AAEhB,aAAW,EAAE,OAAAP,GAAO,KAAAC,GAAK,OAAAC,EAAA,KAAWG;AAEnC,IAAIL,IAAQO,KACXjD,EAAO,KAAKC,EAAUF,EAAQ,UAAUkD,GAAWP,CAAK,CAAC,CAAC,GAI3D1C,EAAO,KAAK4C,CAAK,GAEjBK,IAAYN;AAIb,EAAIM,IAAYlD,EAAQ,UACvBC,EAAO,KAAKC,EAAUF,EAAQ,UAAUkD,CAAS,CAAC,CAAC;AAIpD,QAAMC,IAAmC,CAAA;AACzC,MAAIC,IAA8B,CAAA;AAElC,QAAMC,IAAe,CAACC,MAAc,QAAQ,KAAKA,CAAC;AAElD,WAASC,IAAI,GAAGA,IAAItD,EAAO,QAAQsD,KAAK;AACvC,UAAMV,IAAQ5C,EAAOsD,CAAC;AAGtB,QAAIV,GAAO,MAAM,eAAe,WAAWA,GAAO,MAAM,SAAA,MAAe,SAAS;AAC/E,MAAAO,EAAW,KAAKP,CAAK;AACrB;AAAA,IACD;AAGA,QACC,EAAAA,GAAO,MAAM,SAAA,MAAe,UAC5B,OAAOA,GAAO,MAAM,SAAA,KAAe,YACnCQ,EAAaR,EAAM,MAAM,SAAA,CAAU,KAGlCO,EAAW,SAAS,KACpBG,IAAI,IAAItD,EAAO,WACdA,EAAOsD,IAAI,CAAC,GAAG,MAAM,SAAA,MAAe,WAAWtD,EAAOsD,IAAI,CAAC,GAAG,MAAM,eAAe,WAOtF;AAAA,UAAIH,EAAW,SAAS,GAAG;AAE1B,YAAIA,EAAW,SAAS,GAAG;AAC1B,gBAAMI,IAAsBJ,EAAW,IAAI,CAACK,MAAM;AACjD,gBAAIA,EAAE,aAAapD,EAAY,WAAW;AACzC,oBAAMgC,IAAIoB,EAAE;AACZ,qBAAO,IAAIC;AAAA,gBACV,IAAIlD,EAAWV,EAAY,OAAOuC,EAAE,OAAQoB,EAAE,IAAe,GAAG,IAAI;AAAA,gBACpE;AAAA,cAAA;AAAA,YAEF,WAAWA,EAAE,aAAapD,EAAY,WAAW;AAChD,oBAAMgC,IAAIoB,EAAE;AACZ,qBAAO,IAAIC;AAAA,gBACV;AAAA,gBACA,IAAIhD,EAAWZ,EAAY,OAAOuC,EAAE,OAAQoB,EAAE,IAAe,GAAG,IAAI;AAAA,cAAA;AAAA,YAEtE;AAEA,mBAAO,IAAIC,EAAW,MAAM,IAAI;AAAA,UACjC,CAAC,GAEKvD,IAAOiD,EAAW,IAAI,CAACK,MAAM,OAAOA,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK;AAAA,CAAI;AAClE,UAAAN,EAAgB;AAAA,YACf,IAAI/C;AAAA,cACHN,EAAY,OAAO,WAAW;AAAA,cAC9BA,EAAY,OAAOK,CAAI;AAAA,cACvBE,EAAY;AAAA,cACZ,IAAIsD,EAAgBH,CAAK;AAAA,YAAA;AAAA,UAC1B;AAAA,QAEF;AAEC,UAAAL,EAAgB,KAAKC,EAAW,CAAC,CAAC;AAEnC,QAAAA,IAAa,CAAA;AAAA,MACd;AAGA,MAAAD,EAAgB,KAAKN,CAAK;AAAA;AAAA,EAC3B;AAGA,MAAIO,EAAW,SAAS;AACvB,QAAIA,EAAW,SAAS,GAAG;AAC1B,YAAMI,IAAsBJ,EAAW,IAAI,CAACK,MAAM;AACjD,YAAIA,EAAE,aAAapD,EAAY,WAAW;AACzC,gBAAMgC,IAAIoB,EAAE;AACZ,iBAAO,IAAIC;AAAA,YACV,IAAIlD,EAAWV,EAAY,OAAOuC,EAAE,OAAQoB,EAAE,IAAe,GAAG,IAAI;AAAA,YACpE;AAAA,UAAA;AAAA,QAEF,WAAWA,EAAE,aAAapD,EAAY,WAAW;AAChD,gBAAMgC,IAAIoB,EAAE;AACZ,iBAAO,IAAIC;AAAA,YACV;AAAA,YACA,IAAIhD,EAAWZ,EAAY,OAAOuC,EAAE,OAAQoB,EAAE,IAAe,GAAG,IAAI;AAAA,UAAA;AAAA,QAEtE;AACA,eAAO,IAAIC,EAAW,MAAM,IAAI;AAAA,MACjC,CAAC,GAEKvD,IAAOiD,EAAW,IAAI,CAACK,MAAM,OAAOA,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK;AAAA,CAAI;AAClE,MAAAN,EAAgB;AAAA,QACf,IAAI/C;AAAA,UACHN,EAAY,OAAO,WAAW;AAAA,UAC9BA,EAAY,OAAOK,CAAI;AAAA,UACvBE,EAAY;AAAA,UACZ,IAAIsD,EAAgBH,CAAK;AAAA,QAAA;AAAA,MAC1B;AAAA,IAEF;AACC,MAAAL,EAAgB,KAAKC,EAAW,CAAC,CAAC;AAIpC,SAAOD;AACR;AChWO,SAASS,EACfC,GACAC,GACuE;AACvE,QAAMC,IAAUF,EAAY,GAAG,OAAOC,CAAS,CAAC,QAAQ,EAAA;AACxD,SAAO;AAAA,IACN,CAAC,OAAO,QAAQ,IAA0E;AACzF,UAAIP,IAAI;AACR,aAAO;AAAA,QACN,OAAmF;AAClF,iBAAOA,IAAIQ,KAAQ;AAClB,kBAAMC,IAASH,EAAYC,CAAS,EAAEP,CAAC;AAEvC,gBADAA,KACIS,KAAS;AACZ,qBAAO,EAAE,OAAAA,GAAO,MAAM,GAAA;AAAA,UAGxB;AACA,iBAAO,EAAE,OAAO,QAAkB,MAAM,GAAA;AAAA,QACzC;AAAA,MAAA;AAAA,IAEF;AAAA,EAAA;AAEF;AAKO,SAASC,EACfJ,GACAC,GACoE;AACpE,MAAI,CAACD,EAAK,QAAO,CAAA;AACjB,QAAMK,IAAgBL,EAAY,GAAG,OAAOC,CAAS,CAAC,QAAQ,GAAG,KAAKD,CAAG;AACzE,MAAI,CAACK,EAAc,QAAO,CAAA;AAC1B,QAAMH,IAASG,EAAA,GAETC,IAA4E,CAAA;AAClF,WAASZ,IAAI,GAAGA,IAAIQ,GAAQR,KAAK;AAChC,UAAMa,IAAKP,EAAYC,CAAS,EAAEP,CAAC;AACnC,IAAIa,KAAK,QAAMD,EAAO,KAAKC,CAAC;AAAA,EAC7B;AACA,SAAOD;AACR;AAGA,eAAsBE,EAAkBC,GAAiBpC,GAAkB;AAE1E,QAAMqC,IAAaC,EAAA,GACbC,IAAeC,EAAaH,CAAU,GACtCI,IAAkB,MAAM,KAAKJ,CAAU,EAC3C,IAAI,CAACxB,MAAMA,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAC1C,KAAK,EAAE,GAGH6B,IAASF,EAAaF,GAAmB,GAEzCK,IAAS,IAAI,gBAAA;AAEnB,aAAWC,KAAS5C;AACnB,IAAA2C,EAAO,OAAO,SAASC,CAAK;AAG7B,EAAAD,EAAO,IAAI,UAAUD,CAAM,GAC3BC,EAAO,IAAI,QAAQP,CAAO;AAE1B,QAAMS,IAAkB,kBAAkBN,CAAY,IAAII,EAAO,UAAU;AAE3E,iBAAQ,IAAI,gBAAgBE,CAAe,GAI3CC,EAAQ,WAAWD,GAAiBJ,CAAe,GAE5CI;AACR;"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../src/lib/ConnectionTracker.ts","../src/lib/ParseContent.ts","../src/utils.ts"],"sourcesContent":["import { ConnectionStatus, WorkerMessage } from 'src/generated/nostr/fb';\nimport { isConnectionStatus } from './NarrowTypes';\n\nexport class ConnectionTracker {\n\tprivate knownRelays: Map<number, ConnectionStatus> = new Map();\n\tprivate incomingCount = 0;\n\tprivate resolvedCount = 0;\n\n\t/**\n\t * Feed a new message into the tracker\n\t */\n\thandleMessage(msg: WorkerMessage) {\n\t\tconst status = isConnectionStatus(msg);\n\t\tif (!status) return; // not a connection status, ignore\n\n\t\tconst id = status.relayUrl();\n\t\tif (id && !this.knownRelays.has(id)) {\n\t\t\tthis.incomingCount++;\n\t\t\tthis.knownRelays.set(id, status);\n\t\t}\n\t\tif (this.isResolved(status)) {\n\t\t\tthis.resolvedCount++;\n\t\t}\n\t}\n\n\t/**\n\t * Define what counts as a \"resolved\" connection.\n\t * Adjust based on your real ConnectionStatus enum/shape.\n\t */\n\tprivate isResolved(status: ConnectionStatus): boolean {\n\t\treturn status.status()?.toString() === 'EOSE';\n\t}\n\n\t/** Total connection attempts processed */\n\tget totalIncoming(): number {\n\t\treturn this.incomingCount;\n\t}\n\n\t/** How many actually resolved */\n\tget totalResolved(): number {\n\t\treturn this.resolvedCount;\n\t}\n\n\t/** Quick ratio (0...1) of resolved vs incoming */\n\tget resolutionRate(): number {\n\t\treturn this.incomingCount === 0 ? 0 : this.resolvedCount / this.incomingCount;\n\t}\n}\n","import { nip19 } from 'nostr-tools';\n\nimport { ContentBlockT } from 'src/generated/nostr/fb/content-block';\nimport { ContentData } from 'src/generated/nostr/fb/content-data';\nimport { CodeDataT } from 'src/generated/nostr/fb/code-data';\nimport { CashuDataT } from 'src/generated/nostr/fb/cashu-data';\nimport { HashtagDataT } from 'src/generated/nostr/fb/hashtag-data';\nimport { ImageDataT } from 'src/generated/nostr/fb/image-data';\nimport { VideoDataT } from 'src/generated/nostr/fb/video-data';\nimport { MediaGroupDataT } from 'src/generated/nostr/fb/media-group-data';\nimport { MediaItemT } from 'src/generated/nostr/fb/media-item';\nimport { LinkPreviewDataT } from 'src/generated/nostr/fb/link-preview-data';\nimport { NostrDataT } from 'src/generated/nostr/fb/nostr-data';\n\ntype MatchProcessor = (match: RegExpExecArray) => ContentBlockT | Promise<ContentBlockT>;\n\nconst textEncoder = new TextEncoder();\n\nexport async function parseContent(content: string): Promise<ContentBlockT[]> {\n\tconst blocks: ContentBlockT[] = [];\n\n\t// Helpers\n\tconst textBlock = (text: string): ContentBlockT =>\n\t\tnew ContentBlockT(textEncoder.encode('text'), textEncoder.encode(text), ContentData.NONE, null);\n\n\tconst imageBlock = (url: string): ContentBlockT =>\n\t\tnew ContentBlockT(\n\t\t\ttextEncoder.encode('image'),\n\t\t\ttextEncoder.encode(url),\n\t\t\tContentData.ImageData,\n\t\t\tnew ImageDataT(textEncoder.encode(url), null)\n\t\t);\n\n\tconst videoBlock = (url: string): ContentBlockT =>\n\t\tnew ContentBlockT(\n\t\t\ttextEncoder.encode('video'),\n\t\t\ttextEncoder.encode(url),\n\t\t\tContentData.VideoData,\n\t\t\tnew VideoDataT(textEncoder.encode(url), null)\n\t\t);\n\n\tconst codeBlock = (raw: string, full: string): ContentBlockT => {\n\t\t// Try to extract optional language from first line of fenced code\n\t\t// Supports patterns like ```lang\\ncode\\n```\n\t\tconst nl = raw.indexOf('\\n');\n\t\tlet language: string | null = null;\n\t\tlet code = raw;\n\t\tif (nl !== -1) {\n\t\t\tconst firstLine = raw.slice(0, nl).trim();\n\t\t\tconst rest = raw.slice(nl + 1);\n\t\t\tif (firstLine && /^[a-zA-Z0-9+#\\.\\-_]+$/.test(firstLine)) {\n\t\t\t\tlanguage = firstLine;\n\t\t\t\tcode = rest;\n\t\t\t}\n\t\t}\n\n\t\treturn new ContentBlockT(\n\t\t\ttextEncoder.encode('code'),\n\t\t\ttextEncoder.encode(full),\n\t\t\tContentData.CodeData,\n\t\t\tnew CodeDataT(textEncoder.encode(language || ''), textEncoder.encode(code))\n\t\t);\n\t};\n\n\tconst cashuBlock = (token: string): ContentBlockT =>\n\t\tnew ContentBlockT(\n\t\t\ttextEncoder.encode('cashu'),\n\t\t\ttextEncoder.encode(token),\n\t\t\tContentData.CashuData,\n\t\t\tnew CashuDataT(textEncoder.encode(token))\n\t\t);\n\n\tconst hashtagBlock = (tag: string): ContentBlockT =>\n\t\tnew ContentBlockT(\n\t\t\ttextEncoder.encode('hashtag'),\n\t\t\ttextEncoder.encode(`#${tag}`),\n\t\t\tContentData.HashtagData,\n\t\t\tnew HashtagDataT(textEncoder.encode(tag))\n\t\t);\n\n\tconst linkBlock = (url: string): ContentBlockT =>\n\t\tnew ContentBlockT(\n\t\t\ttextEncoder.encode('link'),\n\t\t\ttextEncoder.encode(url),\n\t\t\tContentData.LinkPreviewData,\n\t\t\tnew LinkPreviewDataT(textEncoder.encode(url), null, null, null)\n\t\t);\n\n\tconst nostrBlock = (bech32: string, fullText: string): ContentBlockT => {\n\t\ttry {\n\t\t\tconst decoded = nip19.decode(bech32);\n\t\t\tconst type = decoded.type as 'npub' | 'nprofile' | 'note' | 'nevent' | 'naddr';\n\n\t\t\tlet id: string | null = null;\n\t\t\tlet relays: string[] = [];\n\t\t\tlet author: string | null = null;\n\t\t\tlet kind: bigint = BigInt(0);\n\n\t\t\tconst d = decoded.data as any;\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'npub':\n\t\t\t\t\t// data: hex pubkey\n\t\t\t\t\tid = d as string;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'nprofile':\n\t\t\t\t\t// data: { pubkey, relays? }\n\t\t\t\t\tid = d.pubkey;\n\t\t\t\t\trelays = Array.isArray(d.relays) ? d.relays : [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'note':\n\t\t\t\t\t// data: hex event id\n\t\t\t\t\tid = d as string;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'nevent':\n\t\t\t\t\t// data: { id, relays?, author?, kind? }\n\t\t\t\t\tid = d.id;\n\t\t\t\t\trelays = Array.isArray(d.relays) ? d.relays : [];\n\t\t\t\t\tauthor = typeof d.author === 'string' ? d.author : null;\n\t\t\t\t\tif (typeof d.kind === 'number') kind = BigInt(d.kind);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'naddr':\n\t\t\t\t\t// data: { identifier, pubkey, kind, relays? }\n\t\t\t\t\t// Build a stable id\n\t\t\t\t\tid = `${d.kind}:${d.pubkey}:${d.identifier}`;\n\t\t\t\t\trelays = Array.isArray(d.relays) ? d.relays : [];\n\t\t\t\t\tif (typeof d.kind === 'number') kind = BigInt(d.kind);\n\t\t\t\t\tauthor = typeof d.pubkey === 'string' ? d.pubkey : null;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Ensure required fields for NostrDataT: id and entity are required\n\t\t\tif (!id) {\n\t\t\t\tid = bech32;\n\t\t\t}\n\n\t\t\treturn new ContentBlockT(\n\t\t\t\ttextEncoder.encode(type),\n\t\t\t\ttextEncoder.encode(fullText),\n\t\t\t\tContentData.NostrData,\n\t\t\t\tnew NostrDataT(\n\t\t\t\t\ttextEncoder.encode(id),\n\t\t\t\t\ttextEncoder.encode(bech32),\n\t\t\t\t\trelays,\n\t\t\t\t\ttextEncoder.encode(author || ''),\n\t\t\t\t\tkind\n\t\t\t\t)\n\t\t\t);\n\t\t} catch {\n\t\t\t// Fallback to plain text block when decode fails\n\t\t\treturn textBlock(fullText);\n\t\t}\n\t};\n\n\t// Define all the patterns we want to match\n\tconst patterns: Array<{\n\t\ttype: string;\n\t\tregex: RegExp;\n\t\tprocessMatch: MatchProcessor;\n\t}> = [\n\t\t{\n\t\t\ttype: 'code',\n\t\t\tregex: /```([\\s\\S]*?)```/g,\n\t\t\tprocessMatch: (match) => codeBlock(match[1] || '', match[0])\n\t\t},\n\t\t{\n\t\t\ttype: 'cashu',\n\t\t\tregex: /(cashuA[A-Za-z0-9_-]+)/g,\n\t\t\tprocessMatch: (match) => cashuBlock(match[0])\n\t\t},\n\t\t{\n\t\t\ttype: 'hashtag',\n\t\t\t// Match hashtags that are not part of a URL\n\t\t\tregex: /(?<![^\\s\"'(])(#[a-zA-Z0-9_]+)(?![a-zA-Z0-9_])/g,\n\t\t\tprocessMatch: (match) => hashtagBlock(match[0].substring(1))\n\t\t},\n\t\t{\n\t\t\ttype: 'image',\n\t\t\tregex: /(https?:\\/\\/\\S+\\.(?:jpg|jpeg|png|gif|webp|svg|ico)(?:\\?\\S*)?)/gi,\n\t\t\tprocessMatch: (match) => imageBlock(match[0])\n\t\t},\n\t\t{\n\t\t\ttype: 'video',\n\t\t\tregex: /(https?:\\/\\/\\S+\\.(?:mp4|mov|avi|mkv|webm|m4v)(?:\\?\\S*)?)/gi,\n\t\t\tprocessMatch: (match) => videoBlock(match[0])\n\t\t},\n\t\t{\n\t\t\ttype: 'nostr',\n\t\t\tregex: /nostr:([a-z0-9]+)/gi,\n\t\t\tprocessMatch: (match) => {\n\t\t\t\tconst bech32 = match[1];\n\t\t\t\treturn nostrBlock(bech32 || '', match[0]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\ttype: 'link',\n\t\t\tregex: /(https?:\\/\\/\\S+)(?![\\)])/gi,\n\t\t\tprocessMatch: async (match) => linkBlock(match[0])\n\t\t}\n\t];\n\n\t// Find all matches with their positions\n\tconst allMatches: Array<{\n\t\tstart: number;\n\t\tend: number;\n\t\tblock: ContentBlockT;\n\t}> = [];\n\n\t// First, find all matches for all patterns\n\tfor (const pattern of patterns) {\n\t\tlet match: RegExpExecArray | null;\n\t\tpattern.regex.lastIndex = 0;\n\n\t\twhile ((match = pattern.regex.exec(content)) !== null) {\n\t\t\tconst start = match.index;\n\t\t\tconst end = start + match[0].length;\n\t\t\tconst block = await pattern.processMatch(match);\n\n\t\t\tallMatches.push({ start, end, block });\n\t\t}\n\t}\n\n\t// Sort matches by start position\n\tallMatches.sort((a, b) => a.start - b.start);\n\n\t// Remove overlapping matches (prioritize earlier patterns in the array)\n\tconst filteredMatches: typeof allMatches = [];\n\n\tfor (const match of allMatches) {\n\t\tconst overlaps = filteredMatches.some(\n\t\t\t(existing) =>\n\t\t\t\t(match.start >= existing.start && match.start < existing.end) ||\n\t\t\t\t(match.end > existing.start && match.end <= existing.end) ||\n\t\t\t\t(match.start <= existing.start && match.end >= existing.end)\n\t\t);\n\n\t\tif (!overlaps) {\n\t\t\tfilteredMatches.push(match);\n\t\t}\n\t}\n\n\t// Re-sort filtered matches\n\tfilteredMatches.sort((a, b) => a.start - b.start);\n\n\t// Build the final result, including text between matches\n\tlet lastIndex = 0;\n\n\tfor (const { start, end, block } of filteredMatches) {\n\t\t// Add text before this match\n\t\tif (start > lastIndex) {\n\t\t\tblocks.push(textBlock(content.substring(lastIndex, start)));\n\t\t}\n\n\t\t// Add the match\n\t\tblocks.push(block);\n\n\t\tlastIndex = end;\n\t}\n\n\t// Add any remaining text after the last match\n\tif (lastIndex < content.length) {\n\t\tblocks.push(textBlock(content.substring(lastIndex)));\n\t}\n\n\t// Post-processing: group consecutive media into grids\n\tconst processedBlocks: ContentBlockT[] = [];\n\tlet mediaGroup: ContentBlockT[] = [];\n\n\tconst isWhitespace = (s: string) => /^\\s+$/.test(s);\n\n\tfor (let i = 0; i < blocks.length; i++) {\n\t\tconst block = blocks[i];\n\n\t\t// If this is an image or video\n\t\tif (block?.type?.toString() === 'image' || block?.type?.toString() === 'video') {\n\t\t\tmediaGroup.push(block);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// If this is whitespace or newlines between media, check what follows\n\t\tif (\n\t\t\tblock?.type?.toString() === 'text' &&\n\t\t\ttypeof block?.text?.toString() === 'string' &&\n\t\t\tisWhitespace(block.text?.toString())\n\t\t) {\n\t\t\tif (\n\t\t\t\tmediaGroup.length > 0 &&\n\t\t\t\ti + 1 < blocks.length &&\n\t\t\t\t(blocks[i + 1]?.type?.toString() === 'image' || blocks[i + 1]?.type?.toString() === 'video')\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\t// If we have collected media and the current block breaks the sequence\n\t\tif (mediaGroup.length > 0) {\n\t\t\t// Add media group if it contains more than one item\n\t\t\tif (mediaGroup.length > 1) {\n\t\t\t\tconst items: MediaItemT[] = mediaGroup.map((m) => {\n\t\t\t\t\tif (m.dataType === ContentData.ImageData) {\n\t\t\t\t\t\tconst d = m.data as ImageDataT;\n\t\t\t\t\t\treturn new MediaItemT(\n\t\t\t\t\t\t\tnew ImageDataT(textEncoder.encode(d.url ?? (m.text as string)), null),\n\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (m.dataType === ContentData.VideoData) {\n\t\t\t\t\t\tconst d = m.data as VideoDataT;\n\t\t\t\t\t\treturn new MediaItemT(\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tnew VideoDataT(textEncoder.encode(d.url ?? (m.text as string)), null)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Fallback — shouldn't occur because we only collect image/video\n\t\t\t\t\treturn new MediaItemT(null, null);\n\t\t\t\t});\n\n\t\t\t\tconst text = mediaGroup.map((m) => String(m.text ?? '')).join('\\n');\n\t\t\t\tprocessedBlocks.push(\n\t\t\t\t\tnew ContentBlockT(\n\t\t\t\t\t\ttextEncoder.encode('mediaGrid'),\n\t\t\t\t\t\ttextEncoder.encode(text),\n\t\t\t\t\t\tContentData.MediaGroupData,\n\t\t\t\t\t\tnew MediaGroupDataT(items)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Just add the single media item\n\t\t\t\tprocessedBlocks.push(mediaGroup[0]);\n\t\t\t}\n\t\t\tmediaGroup = [];\n\t\t}\n\n\t\t// Add the current non-media block\n\t\tprocessedBlocks.push(block);\n\t}\n\n\t// Don't forget any remaining media\n\tif (mediaGroup.length > 0) {\n\t\tif (mediaGroup.length > 1) {\n\t\t\tconst items: MediaItemT[] = mediaGroup.map((m) => {\n\t\t\t\tif (m.dataType === ContentData.ImageData) {\n\t\t\t\t\tconst d = m.data as ImageDataT;\n\t\t\t\t\treturn new MediaItemT(\n\t\t\t\t\t\tnew ImageDataT(textEncoder.encode(d.url ?? (m.text as string)), null),\n\t\t\t\t\t\tnull\n\t\t\t\t\t);\n\t\t\t\t} else if (m.dataType === ContentData.VideoData) {\n\t\t\t\t\tconst d = m.data as VideoDataT;\n\t\t\t\t\treturn new MediaItemT(\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\tnew VideoDataT(textEncoder.encode(d.url ?? (m.text as string)), null)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn new MediaItemT(null, null);\n\t\t\t});\n\n\t\t\tconst text = mediaGroup.map((m) => String(m.text ?? '')).join('\\n');\n\t\t\tprocessedBlocks.push(\n\t\t\t\tnew ContentBlockT(\n\t\t\t\t\ttextEncoder.encode('mediaGrid'),\n\t\t\t\t\ttextEncoder.encode(text),\n\t\t\t\t\tContentData.MediaGroupData,\n\t\t\t\t\tnew MediaGroupDataT(items)\n\t\t\t\t)\n\t\t\t);\n\t\t} else {\n\t\t\tprocessedBlocks.push(mediaGroup[0]);\n\t\t}\n\t}\n\n\treturn processedBlocks;\n}\n","import { generateSecretKey, getPublicKey } from 'nostr-tools';\nimport { getManager } from '.';\n\nexport { ConnectionTracker } from './lib/ConnectionTracker';\n\nexport * from './lib/NarrowTypes';\nexport * from './lib/ParseContent';\n\n/**\n * Extracts keys from T where the value is a `function(i: number): any`\n */\ntype FlatBufferKeys<T> = {\n\t[K in keyof T]: T[K] extends (i: number) => any ? K : never;\n}[keyof T];\n\n/**\n * Non-nullable version: Filters out null results\n */\nexport function fbIterable<T, K extends FlatBufferKeys<T>>(\n\tobj: T,\n\tfieldName: K\n): Iterable<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> {\n\tconst length = (obj as any)[`${String(fieldName)}Length`]();\n\treturn {\n\t\t[Symbol.iterator](): Iterator<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> {\n\t\t\tlet i = 0;\n\t\t\treturn {\n\t\t\t\tnext(): IteratorResult<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> {\n\t\t\t\t\twhile (i < length) {\n\t\t\t\t\t\tconst value = (obj as any)[fieldName](i);\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\t\treturn { value, done: false };\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// if null → skip this index\n\t\t\t\t\t}\n\t\t\t\t\treturn { value: undefined as any, done: true };\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n}\n\n/**\n * Eager array version (non-null)\n */\nexport function fbArray<T, K extends FlatBufferKeys<T>>(\n\tobj: T,\n\tfieldName: K\n): Array<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> {\n\tif (!obj) return [];\n\tconst lengthGetter = (obj as any)[`${String(fieldName)}Length`]?.bind(obj);\n\tif (!lengthGetter) return [];\n\tconst length = lengthGetter();\n\n\tconst result: Array<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> = [];\n\tfor (let i = 0; i < length; i++) {\n\t\tconst v = (obj as any)[fieldName](i);\n\t\tif (v != null) result.push(v);\n\t}\n\treturn result;\n}\n\n// In your frontend application\nexport async function connectWithQRCode(appName: string, relays: string[]) {\n\t// Generate a client keypair\n\tconst clientKeys = generateSecretKey();\n\tconst clientPubkey = getPublicKey(clientKeys);\n\tconst clientSecretHex = Array.from(clientKeys)\n\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t.join('');\n\n\t// Generate a random secret\n\tconst secret = getPublicKey(generateSecretKey());\n\n\tconst params = new URLSearchParams();\n\n\tfor (const relay of relays) {\n\t\tparams.append('relay', relay);\n\t}\n\n\tparams.set('secret', secret);\n\tparams.set('name', appName);\n\n\tconst nostrconnectUrl = `nostrconnect://${clientPubkey}?${params.toString()}`;\n\n\tconsole.log('connect url:', nostrconnectUrl);\n\n\t// Set up the NIP-46 signer with the client's pubkey and relays\n\t// Note: We don't know the remote signer's pubkey yet - that's what we're discovering\n\tgetManager().setNip46QR(nostrconnectUrl, clientSecretHex);\n\n\treturn nostrconnectUrl;\n}\n"],"names":["ConnectionTracker","msg","status","isConnectionStatus","id","textEncoder","parseContent","content","blocks","textBlock","text","ContentBlockT","ContentData","imageBlock","url","ImageDataT","videoBlock","VideoDataT","codeBlock","raw","full","nl","language","code","firstLine","rest","CodeDataT","cashuBlock","token","CashuDataT","hashtagBlock","tag","HashtagDataT","linkBlock","LinkPreviewDataT","nostrBlock","bech32","fullText","decoded","nip19","type","relays","author","kind","d","NostrDataT","patterns","match","allMatches","pattern","start","end","block","a","b","filteredMatches","existing","lastIndex","processedBlocks","mediaGroup","isWhitespace","s","i","items","m","MediaItemT","MediaGroupDataT","fbIterable","obj","fieldName","length","value","fbArray","lengthGetter","result","v","connectWithQRCode","appName","clientKeys","generateSecretKey","clientPubkey","getPublicKey","clientSecretHex","secret","params","relay","nostrconnectUrl","getManager"],"mappings":"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"}
|