@candypoets/nipworker 0.0.75 → 0.0.77
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 +2 -2
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/pkg/cache.d.ts +7 -7
- package/dist/cache/pkg/cache_bg.wasm.d.ts +7 -7
- package/dist/connections/index.d.ts +2 -0
- 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 +16 -11
- package/dist/connections/pkg/connections_bg.wasm.d.ts +11 -9
- package/dist/crypto/index.d.ts +10 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +2 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/pkg/crypto.d.ts +106 -0
- package/dist/crypto/pkg/crypto_bg.wasm.d.ts +28 -0
- package/dist/generated/nostr/fb/coordinate.d.ts +38 -0
- package/dist/generated/nostr/fb/coordinate.d.ts.map +1 -0
- package/dist/generated/nostr/fb/kind30023-parsed.d.ts +54 -0
- package/dist/generated/nostr/fb/kind30023-parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/list-parsed.d.ts +67 -0
- package/dist/generated/nostr/fb/list-parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/parsed-data-union.d.ts +4 -1
- package/dist/generated/nostr/fb/parsed-data-union.d.ts.map +1 -1
- package/dist/generated/nostr/fb/parsed-data.d.ts +13 -9
- package/dist/generated/nostr/fb/parsed-data.d.ts.map +1 -1
- package/dist/generated/nostr/fb/parsed-event.d.ts +5 -3
- package/dist/generated/nostr/fb/parsed-event.d.ts.map +1 -1
- package/dist/generated/nostr/fb/pre-generic-parsed.d.ts +121 -0
- package/dist/generated/nostr/fb/pre-generic-parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/pre-participant.d.ts +36 -0
- package/dist/generated/nostr/fb/pre-participant.d.ts.map +1 -0
- package/dist/generated/nostr/fb/pre-ref-event.d.ts +32 -0
- package/dist/generated/nostr/fb/pre-ref-event.d.ts.map +1 -0
- package/dist/generated/nostr/fb/set-pub-key.d.ts +24 -0
- package/dist/generated/nostr/fb/set-pub-key.d.ts.map +1 -0
- package/dist/generated/nostr/fb/signer-op.d.ts +12 -0
- package/dist/generated/nostr/fb/signer-op.d.ts.map +1 -0
- package/dist/generated/nostr/fb/signer-request.d.ts +43 -0
- package/dist/generated/nostr/fb/signer-request.d.ts.map +1 -0
- package/dist/generated/nostr/fb/signer-response.d.ts +31 -0
- package/dist/generated/nostr/fb/signer-response.d.ts.map +1 -0
- package/dist/generated/nostr/fb/template.d.ts +5 -2
- package/dist/generated/nostr/fb/template.d.ts.map +1 -1
- package/dist/generated/nostr/fb.d.ts +9 -1
- package/dist/generated/nostr/fb.d.ts.map +1 -1
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +1 -1
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +22 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index2.js +1 -1
- package/dist/index2.js.map +1 -1
- package/dist/lib/ByteString.d.ts +1 -5
- package/dist/lib/ByteString.d.ts.map +1 -1
- package/dist/lib/NarrowTypes.d.ts +5 -3
- package/dist/lib/NarrowTypes.d.ts.map +1 -1
- package/dist/lib/NostrUtils.d.ts +118 -0
- package/dist/lib/NostrUtils.d.ts.map +1 -0
- package/dist/parser/index.d.ts +2 -0
- package/dist/parser/index.d.ts.map +1 -1
- package/dist/parser/index.js +2 -2
- package/dist/parser/index.js.map +1 -1
- package/dist/parser/pkg/rust_worker.d.ts +4 -5
- package/dist/parser/pkg/rust_worker_bg.wasm.d.ts +2 -3
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +4 -4
- package/dist/utils.js.map +1 -1
- package/package.json +5 -7
- package/dist/generated/nostr/fb/message-kind.d.ts +0 -9
- package/dist/generated/nostr/fb/message-kind.d.ts.map +0 -1
- package/dist/generated/nostr/fb/msg-kind.d.ts +0 -10
- package/dist/generated/nostr/fb/msg-kind.d.ts.map +0 -1
- package/dist/generated/nostr/fb/out-envelope.d.ts +0 -49
- package/dist/generated/nostr/fb/out-envelope.d.ts.map +0 -1
- package/dist/generated/nostr/fb/proof-union.d.ts +0 -41
- package/dist/generated/nostr/fb/proof-union.d.ts.map +0 -1
- package/dist/generated/nostr/fb/proofs.d.ts +0 -25
- package/dist/generated/nostr/fb/proofs.d.ts.map +0 -1
- package/dist/generated/nostr/fb/relay-ref.d.ts +0 -24
- package/dist/generated/nostr/fb/relay-ref.d.ts.map +0 -1
- package/dist/generated/nostr/fb/worker-line.d.ts +0 -39
- package/dist/generated/nostr/fb/worker-line.d.ts.map +0 -1
- package/dist/message-type.js +0 -1
- package/dist/message-type.js.map +0 -1
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
export function init_tracing(level: string): void;
|
|
4
4
|
export class NostrClient {
|
|
5
5
|
free(): void;
|
|
6
|
-
get_public_key(): void
|
|
6
|
+
get_public_key(): Promise<void>;
|
|
7
7
|
handle_message(message_obj: any): Promise<void>;
|
|
8
8
|
close_subscription(subscription_id: string): Promise<void>;
|
|
9
|
-
constructor(db_ring: SharedArrayBuffer, cache_request: SharedArrayBuffer, cache_response: SharedArrayBuffer, ws_response: SharedArrayBuffer);
|
|
9
|
+
constructor(db_ring: SharedArrayBuffer, cache_request: SharedArrayBuffer, cache_response: SharedArrayBuffer, crypto_request: SharedArrayBuffer, crypto_response: SharedArrayBuffer, ws_response: SharedArrayBuffer);
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
|
|
@@ -15,16 +15,15 @@ export interface InitOutput {
|
|
|
15
15
|
readonly memory: WebAssembly.Memory;
|
|
16
16
|
readonly __wbg_nostrclient_free: (a: number, b: number) => void;
|
|
17
17
|
readonly nostrclient_close_subscription: (a: number, b: number, c: number) => number;
|
|
18
|
-
readonly nostrclient_get_public_key: (a: number
|
|
18
|
+
readonly nostrclient_get_public_key: (a: number) => number;
|
|
19
19
|
readonly nostrclient_handle_message: (a: number, b: number) => number;
|
|
20
|
-
readonly nostrclient_new: (a: number, b: number, c: number, d: number) => number;
|
|
20
|
+
readonly nostrclient_new: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
21
21
|
readonly init_tracing: (a: number, b: number) => void;
|
|
22
22
|
readonly __wbindgen_export_0: (a: number) => void;
|
|
23
23
|
readonly __wbindgen_export_1: (a: number, b: number, c: number) => void;
|
|
24
24
|
readonly __wbindgen_export_2: (a: number, b: number) => number;
|
|
25
25
|
readonly __wbindgen_export_3: (a: number, b: number, c: number, d: number) => number;
|
|
26
26
|
readonly __wbindgen_export_4: WebAssembly.Table;
|
|
27
|
-
readonly __wbindgen_add_to_stack_pointer: (a: number) => number;
|
|
28
27
|
readonly __wbindgen_export_5: (a: number, b: number) => void;
|
|
29
28
|
readonly __wbindgen_export_6: (a: number, b: number, c: number) => void;
|
|
30
29
|
readonly __wbindgen_export_7: (a: number, b: number, c: number, d: number) => void;
|
|
@@ -3,16 +3,15 @@
|
|
|
3
3
|
export const memory: WebAssembly.Memory;
|
|
4
4
|
export const __wbg_nostrclient_free: (a: number, b: number) => void;
|
|
5
5
|
export const nostrclient_close_subscription: (a: number, b: number, c: number) => number;
|
|
6
|
-
export const nostrclient_get_public_key: (a: number
|
|
6
|
+
export const nostrclient_get_public_key: (a: number) => number;
|
|
7
7
|
export const nostrclient_handle_message: (a: number, b: number) => number;
|
|
8
|
-
export const nostrclient_new: (a: number, b: number, c: number, d: number) => number;
|
|
8
|
+
export const nostrclient_new: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
9
9
|
export const init_tracing: (a: number, b: number) => void;
|
|
10
10
|
export const __wbindgen_export_0: (a: number) => void;
|
|
11
11
|
export const __wbindgen_export_1: (a: number, b: number, c: number) => void;
|
|
12
12
|
export const __wbindgen_export_2: (a: number, b: number) => number;
|
|
13
13
|
export const __wbindgen_export_3: (a: number, b: number, c: number, d: number) => number;
|
|
14
14
|
export const __wbindgen_export_4: WebAssembly.Table;
|
|
15
|
-
export const __wbindgen_add_to_stack_pointer: (a: number) => number;
|
|
16
15
|
export const __wbindgen_export_5: (a: number, b: number) => void;
|
|
17
16
|
export const __wbindgen_export_6: (a: number, b: number, c: number) => void;
|
|
18
17
|
export const __wbindgen_export_7: (a: number, b: number, c: number, d: number) => void;
|
package/dist/utils.d.ts
CHANGED
|
@@ -16,4 +16,5 @@ export declare function fbIterable<T, K extends FlatBufferKeys<T>>(obj: T, field
|
|
|
16
16
|
* Eager array version (non-null)
|
|
17
17
|
*/
|
|
18
18
|
export declare function fbArray<T, K extends FlatBufferKeys<T>>(obj: T, fieldName: K): Array<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>>;
|
|
19
|
+
export declare function connectWithQRCode(appName: string, relays: string[]): Promise<string>;
|
|
19
20
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,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{M as
|
|
2
|
-
`);let
|
|
3
|
-
`);
|
|
4
|
-
`);
|
|
1
|
+
import{nip19 as W,generateSecretKey as V,getPublicKey as $}from"nostr-tools";import{M as v,u as E,E as J,C as X,B as Y,V as nn,P as a,a as f,b as o,c as w,d as P,e as S,I as N,f as B,g as H,h as en,i as tn,H as an,L as sn,N as rn,m as dn}from"./index2.js";import{ByteBuffer as on}from"flatbuffers";function R(n){return n.type()!==v.ConnectionStatus?null:E(n.contentType(),n.content.bind(n))}const un=R;function G(n){return n.type()!==v.Eoce?null:n.content(new J)??null}const cn=G;function _(n){return n.type()!==v.CountResponse?null:n.content(new X)??null}const ln=_;function j(n){return n.type()!==v.BufferFull?null:n.content(new Y)??null}const pn=j;function z(n){return n.type()!==v.ValidProofs?null:n.content(new nn)??null}const fn=z;function L(n){return n.type()!==v.ParsedNostrEvent?null:E(n.contentType(),n.content.bind(n))}const yn=L,Z=n=>n.type()!==v.NostrEvent?null:E(n.contentType(),n.content.bind(n)),gn=Z;function y(n,t){if(!n)return null;const s=L(n);return!s||s?.parsedType?.()!==t?null:f(t,s.parsed.bind(s))}function hn(n){return y(n,a.Kind0Parsed)}function Kn(n){return!n||n?.parsedType?.()!==a.Kind0Parsed?null:f(a.Kind0Parsed,n.parsed.bind(n))}function Pn(n){return y(n,a.Kind1Parsed)}function bn(n){return n?.parsedType?.()!==a.Kind1Parsed?null:f(a.Kind1Parsed,n.parsed.bind(n))}function wn(n){return y(n,a.Kind3Parsed)}function mn(n){return n?.parsedType?.()!==a.Kind3Parsed?null:f(a.Kind3Parsed,n.parsed.bind(n))}function vn(n){return y(n,a.Kind4Parsed)}function Dn(n){return n?.parsedType?.()!==a.Kind4Parsed?null:f(a.Kind4Parsed,n.parsed.bind(n))}function Sn(n){return y(n,a.Kind6Parsed)}function Tn(n){return n?.parsedType?.()!==a.Kind6Parsed?null:f(a.Kind6Parsed,n.parsed.bind(n))}function xn(n){return y(n,a.Kind7Parsed)}function Cn(n){return n?.parsedType?.()!==a.Kind7Parsed?null:f(a.Kind7Parsed,n.parsed.bind(n))}function kn(n){return y(n,a.Kind17Parsed)}function Mn(n){return n?.parsedType?.()!==a.Kind17Parsed?null:f(a.Kind17Parsed,n.parsed.bind(n))}function An(n){return y(n,a.Kind10002Parsed)}function In(n){return n?.parsedType?.()!==a.Kind10002Parsed?null:f(a.Kind10002Parsed,n.parsed.bind(n))}function En(n){return y(n,a.Kind10019Parsed)}function Nn(n){return n?.parsedType?.()!==a.Kind10019Parsed?null:f(a.Kind10019Parsed,n.parsed.bind(n))}function Bn(n){return y(n,a.Kind17375Parsed)}function Rn(n){return n?.parsedType?.()!==a.Kind17375Parsed?null:f(a.Kind17375Parsed,n.parsed.bind(n))}function Ln(n){return y(n,a.Kind7374Parsed)}function Vn(n){return n?.parsedType?.()!==a.Kind7374Parsed?null:f(a.Kind7374Parsed,n.parsed.bind(n))}function $n(n){return y(n,a.Kind7375Parsed)}function Hn(n){return n?.parsedType?.()!==a.Kind7375Parsed?null:f(a.Kind7375Parsed,n.parsed.bind(n))}function Gn(n){return y(n,a.Kind7376Parsed)}function _n(n){return n?.parsedType?.()!==a.Kind7376Parsed?null:f(a.Kind7376Parsed,n.parsed.bind(n))}function jn(n){return y(n,a.Kind9321Parsed)}function zn(n){return n?.parsedType?.()!==a.Kind9321Parsed?null:f(a.Kind9321Parsed,n.parsed.bind(n))}function Zn(n){return y(n,a.Kind9735Parsed)}function Fn(n){return n?.parsedType?.()!==a.Kind9735Parsed?null:f(a.Kind9735Parsed,n.parsed.bind(n))}function On(n){return y(n,a.ListParsed)}function Un(n){return n?.parsedType?.()!==a.ListParsed?null:f(a.ListParsed,n.parsed.bind(n))}function Qn(n){return n.dataType()!==o.CodeData?null:w(o.CodeData,n.data.bind(n))}function qn(n){return n.dataType()!==o.HashtagData?null:w(o.HashtagData,n.data.bind(n))}function Wn(n){return n.dataType()!==o.CashuData?null:w(o.CashuData,n.data.bind(n))}function Jn(n){return n.dataType()!==o.ImageData?null:w(o.ImageData,n.data.bind(n))}function Xn(n){return n.dataType()!==o.VideoData?null:w(o.VideoData,n.data.bind(n))}function Yn(n){return n.dataType()!==o.MediaGroupData?null:w(o.MediaGroupData,n.data.bind(n))}function ne(n){return n.dataType()!==o.NostrData?null:w(o.NostrData,n.data.bind(n))}function ee(n){return n.dataType()!==o.LinkPreviewData?null:w(o.LinkPreviewData,n.data.bind(n))}class te{constructor(){this.knownRelays=new Map,this.incomingCount=0,this.resolvedCount=0}handleMessage(t){const s=R(t);if(!s)return;const r=s.relayUrl()?.fnv1aHash();r&&!this.knownRelays.has(r)&&(this.incomingCount++,this.knownRelays.set(r,s)),this.isResolved(s)&&this.resolvedCount++}isResolved(t){return t.status()?.toString()==="EOSE"}get totalIncoming(){return this.incomingCount}get totalResolved(){return this.resolvedCount}get resolutionRate(){return this.incomingCount===0?0:this.resolvedCount/this.incomingCount}}on.prototype.__stringByteString=function(n){n+=this.readInt32(n);const t=this.readInt32(n),s=n+4,r=this.bytes().subarray(s,s+t);return new O(r)};const F=new TextDecoder("utf-8"),ae=(()=>{const n=new Array(256);for(let t=0;t<256;t++)n[t]=t.toString(16).padStart(2,"0");return n})();class O{constructor(t){this.view=t}bytes(){return this.view}fnv1aHash(){let t=2166136261;const s=this.view;for(let r=0;r<s.length;r++)t^=s[r],t=Math.imul(t,16777619);return t>>>0}toHex(){const t=this.view;let s="";for(let r=0;r<t.length;r++)s+=ae[t[r]];return s}utf8String(){const t=this.view;let s=0;for(let r=0;r<t.length;r++)s|=t[r];if(!(s&128)){let r="";for(let p=0;p<t.length;p+=32768)r+=String.fromCharCode.apply(null,t.subarray(p,p+32768));return r}if(t.buffer instanceof SharedArrayBuffer){const r=new Uint8Array(t);return F.decode(r)}return F.decode(t)}toString(){return this.utf8String()}equals(t){const s=this.view,r=t.view;if(s.length!==r.length)return!1;for(let p=0;p<s.length;p++)if(s[p]!==r[p])return!1;return!0}}const d=new TextEncoder;async function se(n){const t=[],s=e=>new P(d.encode("text"),d.encode(e),o.NONE,null),r=e=>new P(d.encode("image"),d.encode(e),o.ImageData,new N(d.encode(e),null)),p=e=>new P(d.encode("video"),d.encode(e),o.VideoData,new B(d.encode(e),null)),m=(e,i)=>{const u=e.indexOf(`
|
|
2
|
+
`);let h=null,c=e;if(u!==-1){const K=e.slice(0,u).trim(),k=e.slice(u+1);K&&/^[a-zA-Z0-9+#\.\-_]+$/.test(K)&&(h=K,c=k)}return new P(d.encode("code"),d.encode(i),o.CodeData,new en(d.encode(h||""),d.encode(c)))},b=e=>new P(d.encode("cashu"),d.encode(e),o.CashuData,new tn(d.encode(e))),T=e=>new P(d.encode("hashtag"),d.encode(`#${e}`),o.HashtagData,new an(d.encode(e))),x=e=>new P(d.encode("link"),d.encode(e),o.LinkPreviewData,new sn(d.encode(e),null,null,null)),U=(e,i)=>{try{const u=W.decode(e),h=u.type;let c=null,K=[],k=null,I=BigInt(0);const l=u.data;switch(h){case"npub":c=l;break;case"nprofile":c=l.pubkey,K=Array.isArray(l.relays)?l.relays:[];break;case"note":c=l;break;case"nevent":c=l.id,K=Array.isArray(l.relays)?l.relays:[],k=typeof l.author=="string"?l.author:null,typeof l.kind=="number"&&(I=BigInt(l.kind));break;case"naddr":c=`${l.kind}:${l.pubkey}:${l.identifier}`,K=Array.isArray(l.relays)?l.relays:[],typeof l.kind=="number"&&(I=BigInt(l.kind)),k=typeof l.pubkey=="string"?l.pubkey:null;break}return c||(c=e),new P(d.encode(h),d.encode(i),o.NostrData,new rn(d.encode(c),d.encode(e),K,d.encode(k||""),I))}catch{return s(i)}},Q=[{type:"code",regex:/```([\s\S]*?)```/g,processMatch:e=>m(e[1]||"",e[0])},{type:"cashu",regex:/(cashuA[A-Za-z0-9_-]+)/g,processMatch:e=>b(e[0])},{type:"hashtag",regex:/(?<![^\s"'(])(#[a-zA-Z0-9_]+)(?![a-zA-Z0-9_])/g,processMatch:e=>T(e[0].substring(1))},{type:"image",regex:/(https?:\/\/\S+\.(?:jpg|jpeg|png|gif|webp|svg|ico)(?:\?\S*)?)/gi,processMatch:e=>r(e[0])},{type:"video",regex:/(https?:\/\/\S+\.(?:mp4|mov|avi|mkv|webm|m4v)(?:\?\S*)?)/gi,processMatch:e=>p(e[0])},{type:"nostr",regex:/nostr:([a-z0-9]+)/gi,processMatch:e=>{const i=e[1];return U(i||"",e[0])}},{type:"link",regex:/(https?:\/\/\S+)(?![\)])/gi,processMatch:async e=>x(e[0])}],A=[];for(const e of Q){let i;for(e.regex.lastIndex=0;(i=e.regex.exec(n))!==null;){const u=i.index,h=u+i[0].length,c=await e.processMatch(i);A.push({start:u,end:h,block:c})}}A.sort((e,i)=>e.start-i.start);const M=[];for(const e of A)M.some(i=>e.start>=i.start&&e.start<i.end||e.end>i.start&&e.end<=i.end||e.start<=i.start&&e.end>=i.end)||M.push(e);M.sort((e,i)=>e.start-i.start);let C=0;for(const{start:e,end:i,block:u}of M)e>C&&t.push(s(n.substring(C,e))),t.push(u),C=i;C<n.length&&t.push(s(n.substring(C)));const D=[];let g=[];const q=e=>/^\s+$/.test(e);for(let e=0;e<t.length;e++){const i=t[e];if(i?.type?.toString()==="image"||i?.type?.toString()==="video"){g.push(i);continue}if(!(i?.type?.toString()==="text"&&typeof i?.text?.toString()=="string"&&q(i.text?.toString())&&g.length>0&&e+1<t.length&&(t[e+1]?.type?.toString()==="image"||t[e+1]?.type?.toString()==="video"))){if(g.length>0){if(g.length>1){const u=g.map(c=>{if(c.dataType===o.ImageData){const K=c.data;return new S(new N(d.encode(K.url??c.text),null),null)}else if(c.dataType===o.VideoData){const K=c.data;return new S(null,new B(d.encode(K.url??c.text),null))}return new S(null,null)}),h=g.map(c=>String(c.text??"")).join(`
|
|
3
|
+
`);D.push(new P(d.encode("mediaGrid"),d.encode(h),o.MediaGroupData,new H(u)))}else D.push(g[0]);g=[]}D.push(i)}}if(g.length>0)if(g.length>1){const e=g.map(u=>{if(u.dataType===o.ImageData){const h=u.data;return new S(new N(d.encode(h.url??u.text),null),null)}else if(u.dataType===o.VideoData){const h=u.data;return new S(null,new B(d.encode(h.url??u.text),null))}return new S(null,null)}),i=g.map(u=>String(u.text??"")).join(`
|
|
4
|
+
`);D.push(new P(d.encode("mediaGrid"),d.encode(i),o.MediaGroupData,new H(e)))}else D.push(g[0]);return D}function re(n,t){const s=n[`${String(t)}Length`]();return{[Symbol.iterator](){let r=0;return{next(){for(;r<s;){const p=n[t](r);if(r++,p!=null)return{value:p,done:!1}}return{value:void 0,done:!0}}}}}}function ie(n,t){if(!n)return[];const s=n[`${String(t)}Length`]?.bind(n);if(!s)return[];const r=s(),p=[];for(let m=0;m<r;m++){const b=n[t](m);b!=null&&p.push(b)}return p}async function de(n,t){const s=V(),r=$(s),p=Array.from(s).map(x=>x.toString(16).padStart(2,"0")).join(""),m=$(V()),b=new URLSearchParams;for(const x of t)b.append("relay",x);b.set("secret",m),b.set("name",n);const T=`nostrconnect://${r}?${b.toString()}`;return console.log("connect url:",T),dn.setNip46QR(T,p),T}export{O as ByteString,te as ConnectionTracker,pn as asBufferFull,Wn as asCashuData,Qn as asCodeData,un as asConnectionStatus,ln as asCountResponse,cn as asEoce,qn as asHashtagData,Jn as asImageData,Kn as asKind0,bn as asKind1,In as asKind10002,Nn as asKind10019,Mn as asKind17,Rn as asKind17375,mn as asKind3,Dn as asKind4,Tn as asKind6,Cn as asKind7,Vn as asKind7374,Hn as asKind7375,_n as asKind7376,zn as asKind9321,Fn as asKind9735,ee as asLinkPreview,Yn as asMediaGroupData,Un as asNip51,ne as asNostrData,gn as asNostrEvent,yn as asParsedEvent,fn as asValidProofs,Xn as asVideoData,de as connectWithQRCode,ie as fbArray,re as fbIterable,j as isBufferFull,R as isConnectionStatus,_ as isCountResponse,G as isEoce,hn as isKind0,Pn as isKind1,An as isKind10002,En as isKind10019,kn as isKind17,Bn as isKind17375,wn as isKind3,vn as isKind4,Sn as isKind6,xn as isKind7,Ln as isKind7374,$n as isKind7375,Gn as isKind7376,jn as isKind9321,Zn as isKind9735,On as isNip51,Z as isNostrEvent,L as isParsedEvent,z as isValidProofs,se as parseContent};
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../src/lib/NarrowTypes.ts","../src/lib/ConnectionTracker.ts","../src/lib/ByteString.ts","../src/lib/ParseContent.ts","../src/utils.ts"],"sourcesContent":["import {\n WorkerMessage,\n MessageType,\n ConnectionStatus,\n Eoce,\n CountResponse,\n BufferFull,\n ValidProofs,\n ParsedEvent,\n Kind0Parsed,\n Kind1Parsed,\n Kind3Parsed,\n Kind4Parsed,\n Kind6Parsed,\n Kind7Parsed,\n Kind17Parsed,\n Kind10002Parsed,\n Kind10019Parsed,\n Kind17375Parsed,\n Kind39089Parsed,\n Kind7374Parsed,\n Kind7375Parsed,\n Kind7376Parsed,\n Kind9321Parsed,\n Kind9735Parsed,\n ContentBlock,\n LinkPreviewData,\n ContentData,\n CashuData,\n HashtagData,\n CodeData,\n MediaGroupData,\n NostrData,\n VideoData,\n} from \"src/generated/nostr/fb\";\nimport { unionToContentData } from \"src/generated/nostr/fb/content-data\";\nimport { unionToMessage } from \"src/generated/nostr/fb/message\";\nimport { unionToParsedData, ParsedData } from \"src/generated/nostr/fb/parsed-data\";\n\n// ---- Top-level Message helpers ----\nexport function isConnectionStatus(msg: WorkerMessage): ConnectionStatus | null {\n if (msg.type() !== MessageType.ConnectionStatus) return null;\n return unionToMessage(msg.contentType(), msg.content.bind(msg)) as ConnectionStatus;\n}\n\nexport const asConnectionStatus = isConnectionStatus;\n\nexport function isEoce(msg: WorkerMessage): Eoce | null {\n if (msg.type() !== MessageType.Eoce) return null;\n return msg.content(new Eoce()) ?? null;\n}\n\nexport const asEoce = isEoce;\n\nexport function isCountResponse(msg: WorkerMessage): CountResponse | null {\n if (msg.type() !== MessageType.CountResponse) return null;\n return msg.content(new CountResponse()) ?? null;\n}\n\nexport const asCountResponse = isCountResponse;\n\nexport function isBufferFull(msg: WorkerMessage): BufferFull | null {\n if (msg.type() !== MessageType.BufferFull) return null;\n return msg.content(new BufferFull()) ?? null;\n}\n\nexport const asBufferFull = isBufferFull;\n\nexport function isValidProofs(msg: WorkerMessage): ValidProofs | null {\n if (msg.type() !== MessageType.ValidProofs) return null;\n return msg.content(new ValidProofs()) ?? null;\n}\n\nexport const asValidProofs = isValidProofs;\n\n// ---- Generic ParsedEvent --------\nexport function isParsedEvent(msg: WorkerMessage): ParsedEvent | null {\n if (msg.type() !== MessageType.ParsedNostrEvent) return null;\n return unionToMessage(msg.contentType(), msg.content.bind(msg)) as ParsedEvent;\n}\n\nexport const asParsedEvent = isParsedEvent;\n\n// ---- ParsedData Kind helpers ----\nfunction parsedKind<T>(msg: WorkerMessage, kind: ParsedData): T | null {\n if (!msg) return null;\n const ev = isParsedEvent(msg);\n if (!ev) return null;\n if (ev.parsedType() !== kind) return null;\n return unionToParsedData(kind, ev.parsed.bind(ev)) as T;\n}\n\nexport function isKind0(msg: WorkerMessage): Kind0Parsed | null {\n return parsedKind<Kind0Parsed>(msg, ParsedData.Kind0Parsed);\n}\nexport function asKind0(ev: ParsedEvent): Kind0Parsed | null {\n if (!ev) return null;\n if (ev.parsedType() !== ParsedData.Kind0Parsed) return null;\n return unionToParsedData(ParsedData.Kind0Parsed, ev.parsed.bind(ev)) as Kind0Parsed;\n}\nexport function isKind1(msg: WorkerMessage): Kind1Parsed | null {\n return parsedKind<Kind1Parsed>(msg, ParsedData.Kind1Parsed);\n}\nexport function asKind1(ev: ParsedEvent): Kind1Parsed | null {\n if (ev.parsedType() !== ParsedData.Kind1Parsed) return null;\n return unionToParsedData(ParsedData.Kind1Parsed, ev.parsed.bind(ev)) as Kind1Parsed;\n}\nexport function isKind3(msg: WorkerMessage): Kind3Parsed | null {\n return parsedKind<Kind3Parsed>(msg, ParsedData.Kind3Parsed);\n}\nexport function asKind3(ev: ParsedEvent): Kind3Parsed | null {\n if (ev.parsedType() !== ParsedData.Kind3Parsed) return null;\n return unionToParsedData(ParsedData.Kind3Parsed, ev.parsed.bind(ev)) as Kind3Parsed;\n}\nexport function isKind4(msg: WorkerMessage): Kind4Parsed | null {\n return parsedKind<Kind4Parsed>(msg, ParsedData.Kind4Parsed);\n}\nexport function asKind4(ev: ParsedEvent): Kind4Parsed | null {\n if (ev.parsedType() !== ParsedData.Kind4Parsed) return null;\n return unionToParsedData(ParsedData.Kind4Parsed, ev.parsed.bind(ev)) as Kind4Parsed;\n}\nexport function isKind6(msg: WorkerMessage): Kind6Parsed | null {\n return parsedKind<Kind6Parsed>(msg, ParsedData.Kind6Parsed);\n}\nexport function asKind6(ev: ParsedEvent): Kind6Parsed | null {\n if (ev.parsedType() !== ParsedData.Kind6Parsed) return null;\n return unionToParsedData(ParsedData.Kind6Parsed, ev.parsed.bind(ev)) as Kind6Parsed;\n}\nexport function isKind7(msg: WorkerMessage): Kind7Parsed | null {\n return parsedKind<Kind7Parsed>(msg, ParsedData.Kind7Parsed);\n}\nexport function asKind7(ev: ParsedEvent): Kind7Parsed | null {\n if (ev.parsedType() !== ParsedData.Kind7Parsed) return null;\n return unionToParsedData(ParsedData.Kind7Parsed, ev.parsed.bind(ev)) as Kind7Parsed;\n}\nexport function isKind17(msg: WorkerMessage): Kind17Parsed | null {\n return parsedKind<Kind17Parsed>(msg, ParsedData.Kind17Parsed);\n}\nexport function asKind17(ev: ParsedEvent): Kind17Parsed | null {\n if (ev.parsedType() !== ParsedData.Kind17Parsed) return null;\n return unionToParsedData(ParsedData.Kind17Parsed, ev.parsed.bind(ev)) as Kind17Parsed;\n}\nexport function isKind10002(msg: WorkerMessage): Kind10002Parsed | null {\n return parsedKind<Kind10002Parsed>(msg, ParsedData.Kind10002Parsed);\n}\nexport function asKind10002(ev: ParsedEvent): Kind10002Parsed | null {\n if (ev.parsedType() !== ParsedData.Kind10002Parsed) return null;\n return unionToParsedData(ParsedData.Kind10002Parsed, ev.parsed.bind(ev)) as Kind10002Parsed;\n}\n\nexport function isKind10019(msg: WorkerMessage): Kind10019Parsed | null {\n return parsedKind<Kind10019Parsed>(msg, ParsedData.Kind10019Parsed);\n}\nexport function asKind10019(ev: ParsedEvent): Kind10019Parsed | null {\n if (ev.parsedType() !== ParsedData.Kind10019Parsed) return null;\n return unionToParsedData(ParsedData.Kind10019Parsed, ev.parsed.bind(ev)) as Kind10019Parsed;\n}\n\nexport function isKind17375(msg: WorkerMessage): Kind17375Parsed | null {\n return parsedKind<Kind17375Parsed>(msg, ParsedData.Kind17375Parsed);\n}\nexport function asKind17375(ev: ParsedEvent): Kind17375Parsed | null {\n if (ev.parsedType() !== ParsedData.Kind17375Parsed) return null;\n return unionToParsedData(ParsedData.Kind17375Parsed, ev.parsed.bind(ev)) as Kind17375Parsed;\n}\nexport function isKind39089(msg: WorkerMessage): Kind39089Parsed | null {\n return parsedKind<Kind39089Parsed>(msg, ParsedData.Kind39089Parsed);\n}\nexport function asKind39089(ev: ParsedEvent): Kind39089Parsed | null {\n if (ev.parsedType() !== ParsedData.Kind39089Parsed) return null;\n return unionToParsedData(ParsedData.Kind39089Parsed, ev.parsed.bind(ev)) as Kind39089Parsed;\n}\n\nexport function isKind7374(msg: WorkerMessage): Kind7374Parsed | null {\n return parsedKind<Kind7374Parsed>(msg, ParsedData.Kind7374Parsed);\n}\nexport function asKind7374(ev: ParsedEvent): Kind7374Parsed | null {\n if (ev.parsedType() !== ParsedData.Kind7374Parsed) return null;\n return unionToParsedData(ParsedData.Kind7374Parsed, ev.parsed.bind(ev)) as Kind7374Parsed;\n}\n\nexport function isKind7375(msg: WorkerMessage): Kind7375Parsed | null {\n return parsedKind<Kind7375Parsed>(msg, ParsedData.Kind7375Parsed);\n}\nexport function asKind7375(ev: ParsedEvent): Kind7375Parsed | null {\n if (ev.parsedType() !== ParsedData.Kind7375Parsed) return null;\n return unionToParsedData(ParsedData.Kind7375Parsed, ev.parsed.bind(ev)) as Kind7375Parsed;\n}\n\nexport function isKind7376(msg: WorkerMessage): Kind7376Parsed | null {\n return parsedKind<Kind7376Parsed>(msg, ParsedData.Kind7376Parsed);\n}\nexport function asKind7376(ev: ParsedEvent): Kind7376Parsed | null {\n if (ev.parsedType() !== ParsedData.Kind7376Parsed) return null;\n return unionToParsedData(ParsedData.Kind7376Parsed, ev.parsed.bind(ev)) as Kind7376Parsed;\n}\n\nexport function isKind9321(msg: WorkerMessage): Kind9321Parsed | null {\n return parsedKind<Kind9321Parsed>(msg, ParsedData.Kind9321Parsed);\n}\nexport function asKind9321(ev: ParsedEvent): Kind9321Parsed | null {\n if (ev.parsedType() !== ParsedData.Kind9321Parsed) return null;\n return unionToParsedData(ParsedData.Kind9321Parsed, ev.parsed.bind(ev)) as Kind9321Parsed;\n}\n\nexport function isKind9735(msg: WorkerMessage): Kind9735Parsed | null {\n return parsedKind<Kind9735Parsed>(msg, ParsedData.Kind9735Parsed);\n}\nexport function asKind9735(ev: ParsedEvent): Kind9735Parsed | null {\n if (ev.parsedType() !== ParsedData.Kind9735Parsed) return null;\n return unionToParsedData(ParsedData.Kind9735Parsed, ev.parsed.bind(ev)) as Kind9735Parsed;\n}\n\nexport function asCodeData(block: ContentBlock): CodeData | null {\n if (block.dataType() !== ContentData.CodeData) return null;\n return unionToContentData(ContentData.CodeData, block.data.bind(block)) as CodeData;\n}\n\nexport function asHashtagData(block: ContentBlock): HashtagData | null {\n if (block.dataType() !== ContentData.HashtagData) return null;\n return unionToContentData(ContentData.HashtagData, block.data.bind(block)) as HashtagData;\n}\n\nexport function asCashuData(block: ContentBlock): CashuData | null {\n if (block.dataType() !== ContentData.CashuData) return null;\n return unionToContentData(ContentData.CashuData, block.data.bind(block)) as CashuData;\n}\n\nexport function asImageData(block: ContentBlock): ImageData | null {\n if (block.dataType() !== ContentData.ImageData) return null;\n return unionToContentData(ContentData.ImageData, block.data.bind(block)) as unknown as ImageData;\n}\n\nexport function asVideoData(block: ContentBlock): VideoData | null {\n if (block.dataType() !== ContentData.VideoData) return null;\n return unionToContentData(ContentData.VideoData, block.data.bind(block)) as VideoData;\n}\n\nexport function asMediaGroupData(block: ContentBlock): MediaGroupData | null {\n if (block.dataType() !== ContentData.MediaGroupData) return null;\n return unionToContentData(ContentData.MediaGroupData, block.data.bind(block)) as MediaGroupData;\n}\n\nexport function asNostrData(block: ContentBlock): NostrData | null {\n if (block.dataType() !== ContentData.NostrData) return null;\n return unionToContentData(ContentData.NostrData, block.data.bind(block)) as NostrData;\n}\n\nexport function asLinkPreview(block: ContentBlock): LinkPreviewData | null {\n if (block.dataType() !== ContentData.LinkPreviewData) return null;\n return unionToContentData(ContentData.LinkPreviewData, block.data.bind(block)) as LinkPreviewData;\n}\n","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 { 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// Cross-instance cache: per underlying buffer → (offset:length) → decoded string\n// WeakMap ensures entries are eligible for GC once the ArrayBuffer becomes unreachable.\nconst BUFFER_STRING_CACHE = new WeakMap<ArrayBufferLike, Map<string, string>>();\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// lib/ByteString.ts\nexport class ByteString {\n\tprivate readonly view: Uint8Array;\n\tprivate _utf8?: string;\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 * Optimizations:\n\t * - Reuses a shared TextDecoder\n\t * - ASCII fast path\n\t * - Cross-instance cache (non-SAB only) keyed by buffer+offset+length\n\t */\n\tutf8String(): string {\n\t\tif (this._utf8 !== undefined) return this._utf8;\n\n\t\tconst v = this.view;\n\n\t\t// 1) ASCII fast path (quick OR-scan for any high bit)\n\t\tlet acc = 0;\n\t\tfor (let i = 0; i < v.length; i++) acc |= v[i];\n\t\tif ((acc & 0x80) === 0) {\n\t\t\t// All ASCII → decode via String.fromCharCode in chunks\n\t\t\tlet s = '';\n\t\t\tconst CHUNK = 0x8000; // 32k is safe for apply()\n\t\t\tfor (let i = 0; i < v.length; i += CHUNK) {\n\t\t\t\ts += String.fromCharCode.apply(null, v.subarray(i, i + CHUNK) as unknown as number[]);\n\t\t\t}\n\t\t\treturn (this._utf8 = s);\n\t\t}\n\n\t\t// 2) Non-ASCII: try cross-instance cache (non-SAB only)\n\t\tconst buf = v.buffer;\n\t\tif (!(buf instanceof SharedArrayBuffer)) {\n\t\t\tlet cache = BUFFER_STRING_CACHE.get(buf);\n\t\t\tif (!cache) {\n\t\t\t\tcache = new Map<string, string>();\n\t\t\t\tBUFFER_STRING_CACHE.set(buf, cache);\n\t\t\t}\n\t\t\tconst key = `${v.byteOffset}:${v.byteLength}`;\n\t\t\tconst cached = cache.get(key);\n\t\t\tif (cached !== undefined) return (this._utf8 = cached);\n\n\t\t\tconst s = UTF8_DECODER.decode(v);\n\t\t\tcache.set(key, s);\n\t\t\treturn (this._utf8 = s);\n\t\t}\n\n\t\t// 3) SAB path: copy then decode, avoid cross-instance cache by default\n\t\tconst safeCopy = new Uint8Array(v);\n\t\tconst s = UTF8_DECODER.decode(safeCopy);\n\t\treturn (this._utf8 = s);\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 { 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","export { 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\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"],"names":["isConnectionStatus","msg","MessageType","unionToMessage","asConnectionStatus","isEoce","Eoce","asEoce","isCountResponse","CountResponse","asCountResponse","isBufferFull","BufferFull","asBufferFull","isValidProofs","ValidProofs","asValidProofs","isParsedEvent","asParsedEvent","parsedKind","kind","ev","unionToParsedData","isKind0","ParsedData","asKind0","isKind1","asKind1","isKind3","asKind3","isKind4","asKind4","isKind6","asKind6","isKind7","asKind7","isKind17","asKind17","isKind10002","asKind10002","isKind10019","asKind10019","isKind17375","asKind17375","isKind39089","asKind39089","isKind7374","asKind7374","isKind7375","asKind7375","isKind7376","asKind7376","isKind9321","asKind9321","isKind9735","asKind9735","asCodeData","block","ContentData","unionToContentData","asHashtagData","asCashuData","asImageData","asVideoData","asMediaGroupData","asNostrData","asLinkPreview","ConnectionTracker","status","id","ByteBuffer","offset","length","start","slice","ByteString","UTF8_DECODER","BUFFER_STRING_CACHE","HEX_TABLE","t","i","view","h","v","out","acc","s","buf","cache","key","cached","safeCopy","other","a","b","textEncoder","parseContent","content","blocks","textBlock","text","ContentBlockT","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","d","NostrDataT","patterns","match","allMatches","pattern","end","filteredMatches","existing","lastIndex","processedBlocks","mediaGroup","isWhitespace","items","m","MediaItemT","MediaGroupDataT","fbIterable","obj","fieldName","value","fbArray","result"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../src/lib/NarrowTypes.ts","../src/lib/ConnectionTracker.ts","../src/lib/ByteString.ts","../src/lib/ParseContent.ts","../src/utils.ts"],"sourcesContent":["import {\n\tWorkerMessage,\n\tMessageType,\n\tConnectionStatus,\n\tEoce,\n\tCountResponse,\n\tBufferFull,\n\tValidProofs,\n\tParsedEvent,\n\tKind0Parsed,\n\tKind1Parsed,\n\tKind3Parsed,\n\tKind4Parsed,\n\tKind6Parsed,\n\tKind7Parsed,\n\tKind17Parsed,\n\tKind10002Parsed,\n\tKind10019Parsed,\n\tKind17375Parsed,\n\tKind7374Parsed,\n\tKind7375Parsed,\n\tKind7376Parsed,\n\tKind9321Parsed,\n\tKind9735Parsed,\n\tContentBlock,\n\tLinkPreviewData,\n\tContentData,\n\tCashuData,\n\tHashtagData,\n\tCodeData,\n\tMediaGroupData,\n\tNostrData,\n\tVideoData,\n\tNostrEvent,\n\tListParsed\n} from 'src/generated/nostr/fb';\nimport { unionToContentData } from 'src/generated/nostr/fb/content-data';\nimport { unionToMessage } from 'src/generated/nostr/fb/message';\nimport { unionToParsedData, ParsedData } from 'src/generated/nostr/fb/parsed-data';\n\n// ---- Top-level Message helpers ----\nexport function isConnectionStatus(msg: WorkerMessage): ConnectionStatus | null {\n\tif (msg.type() !== MessageType.ConnectionStatus) return null;\n\treturn unionToMessage(msg.contentType(), msg.content.bind(msg)) as ConnectionStatus;\n}\n\nexport const asConnectionStatus = isConnectionStatus;\n\nexport function isEoce(msg: WorkerMessage): Eoce | null {\n\tif (msg.type() !== MessageType.Eoce) return null;\n\treturn msg.content(new Eoce()) ?? null;\n}\n\nexport const asEoce = isEoce;\n\nexport function isCountResponse(msg: WorkerMessage): CountResponse | null {\n\tif (msg.type() !== MessageType.CountResponse) return null;\n\treturn msg.content(new CountResponse()) ?? null;\n}\n\nexport const asCountResponse = isCountResponse;\n\nexport function isBufferFull(msg: WorkerMessage): BufferFull | null {\n\tif (msg.type() !== MessageType.BufferFull) return null;\n\treturn msg.content(new BufferFull()) ?? null;\n}\n\nexport const asBufferFull = isBufferFull;\n\nexport function isValidProofs(msg: WorkerMessage): ValidProofs | null {\n\tif (msg.type() !== MessageType.ValidProofs) return null;\n\treturn msg.content(new ValidProofs()) ?? null;\n}\n\nexport const asValidProofs = isValidProofs;\n\n// ---- Generic ParsedEvent --------\nexport function isParsedEvent(msg: WorkerMessage): ParsedEvent | null {\n\tif (msg.type() !== MessageType.ParsedNostrEvent) return null;\n\treturn unionToMessage(msg.contentType(), msg.content.bind(msg)) as ParsedEvent;\n}\n\nexport const asParsedEvent = isParsedEvent;\n\nexport const isNostrEvent = (msg: WorkerMessage): NostrEvent | null => {\n\tif (msg.type() !== MessageType.NostrEvent) return null;\n\treturn unionToMessage(msg.contentType(), msg.content.bind(msg)) as NostrEvent;\n};\n\nexport const asNostrEvent = isNostrEvent;\n\n// ---- ParsedData Kind helpers ----\nfunction parsedKind<T>(msg: WorkerMessage, kind: ParsedData): T | null {\n\tif (!msg) return null;\n\tconst ev = isParsedEvent(msg);\n\tif (!ev) return null;\n\tif (ev?.parsedType?.() !== kind) return null;\n\treturn unionToParsedData(kind, ev.parsed.bind(ev)) as T;\n}\n\nexport function isKind0(msg: WorkerMessage): Kind0Parsed | null {\n\treturn parsedKind<Kind0Parsed>(msg, ParsedData.Kind0Parsed);\n}\nexport function asKind0(ev: ParsedEvent): Kind0Parsed | null {\n\tif (!ev) return null;\n\tif (ev?.parsedType?.() !== ParsedData.Kind0Parsed) return null;\n\treturn unionToParsedData(ParsedData.Kind0Parsed, ev.parsed.bind(ev)) as Kind0Parsed;\n}\nexport function isKind1(msg: WorkerMessage): Kind1Parsed | null {\n\treturn parsedKind<Kind1Parsed>(msg, ParsedData.Kind1Parsed);\n}\nexport function asKind1(ev: ParsedEvent): Kind1Parsed | null {\n\tif (ev?.parsedType?.() !== ParsedData.Kind1Parsed) return null;\n\treturn unionToParsedData(ParsedData.Kind1Parsed, ev.parsed.bind(ev)) as Kind1Parsed;\n}\nexport function isKind3(msg: WorkerMessage): Kind3Parsed | null {\n\treturn parsedKind<Kind3Parsed>(msg, ParsedData.Kind3Parsed);\n}\nexport function asKind3(ev: ParsedEvent): Kind3Parsed | null {\n\tif (ev?.parsedType?.() !== ParsedData.Kind3Parsed) return null;\n\treturn unionToParsedData(ParsedData.Kind3Parsed, ev.parsed.bind(ev)) as Kind3Parsed;\n}\nexport function isKind4(msg: WorkerMessage): Kind4Parsed | null {\n\treturn parsedKind<Kind4Parsed>(msg, ParsedData.Kind4Parsed);\n}\nexport function asKind4(ev: ParsedEvent): Kind4Parsed | null {\n\tif (ev?.parsedType?.() !== ParsedData.Kind4Parsed) return null;\n\treturn unionToParsedData(ParsedData.Kind4Parsed, ev.parsed.bind(ev)) as Kind4Parsed;\n}\nexport function isKind6(msg: WorkerMessage): Kind6Parsed | null {\n\treturn parsedKind<Kind6Parsed>(msg, ParsedData.Kind6Parsed);\n}\nexport function asKind6(ev: ParsedEvent): Kind6Parsed | null {\n\tif (ev?.parsedType?.() !== ParsedData.Kind6Parsed) return null;\n\treturn unionToParsedData(ParsedData.Kind6Parsed, ev.parsed.bind(ev)) as Kind6Parsed;\n}\nexport function isKind7(msg: WorkerMessage): Kind7Parsed | null {\n\treturn parsedKind<Kind7Parsed>(msg, ParsedData.Kind7Parsed);\n}\nexport function asKind7(ev: ParsedEvent): Kind7Parsed | null {\n\tif (ev?.parsedType?.() !== ParsedData.Kind7Parsed) return null;\n\treturn unionToParsedData(ParsedData.Kind7Parsed, ev.parsed.bind(ev)) as Kind7Parsed;\n}\nexport function isKind17(msg: WorkerMessage): Kind17Parsed | null {\n\treturn parsedKind<Kind17Parsed>(msg, ParsedData.Kind17Parsed);\n}\nexport function asKind17(ev: ParsedEvent): Kind17Parsed | null {\n\tif (ev?.parsedType?.() !== ParsedData.Kind17Parsed) return null;\n\treturn unionToParsedData(ParsedData.Kind17Parsed, ev.parsed.bind(ev)) as Kind17Parsed;\n}\nexport function isKind10002(msg: WorkerMessage): Kind10002Parsed | null {\n\treturn parsedKind<Kind10002Parsed>(msg, ParsedData.Kind10002Parsed);\n}\nexport function asKind10002(ev: ParsedEvent): Kind10002Parsed | null {\n\tif (ev?.parsedType?.() !== ParsedData.Kind10002Parsed) return null;\n\treturn unionToParsedData(ParsedData.Kind10002Parsed, ev.parsed.bind(ev)) as Kind10002Parsed;\n}\n\nexport function isKind10019(msg: WorkerMessage): Kind10019Parsed | null {\n\treturn parsedKind<Kind10019Parsed>(msg, ParsedData.Kind10019Parsed);\n}\nexport function asKind10019(ev: ParsedEvent): Kind10019Parsed | null {\n\tif (ev?.parsedType?.() !== ParsedData.Kind10019Parsed) return null;\n\treturn unionToParsedData(ParsedData.Kind10019Parsed, ev.parsed.bind(ev)) as Kind10019Parsed;\n}\n\nexport function isKind17375(msg: WorkerMessage): Kind17375Parsed | null {\n\treturn parsedKind<Kind17375Parsed>(msg, ParsedData.Kind17375Parsed);\n}\nexport function asKind17375(ev: ParsedEvent): Kind17375Parsed | null {\n\tif (ev?.parsedType?.() !== ParsedData.Kind17375Parsed) return null;\n\treturn unionToParsedData(ParsedData.Kind17375Parsed, ev.parsed.bind(ev)) as Kind17375Parsed;\n}\n\nexport function isKind7374(msg: WorkerMessage): Kind7374Parsed | null {\n\treturn parsedKind<Kind7374Parsed>(msg, ParsedData.Kind7374Parsed);\n}\nexport function asKind7374(ev: ParsedEvent): Kind7374Parsed | null {\n\tif (ev?.parsedType?.() !== ParsedData.Kind7374Parsed) return null;\n\treturn unionToParsedData(ParsedData.Kind7374Parsed, ev.parsed.bind(ev)) as Kind7374Parsed;\n}\n\nexport function isKind7375(msg: WorkerMessage): Kind7375Parsed | null {\n\treturn parsedKind<Kind7375Parsed>(msg, ParsedData.Kind7375Parsed);\n}\nexport function asKind7375(ev: ParsedEvent): Kind7375Parsed | null {\n\tif (ev?.parsedType?.() !== ParsedData.Kind7375Parsed) return null;\n\treturn unionToParsedData(ParsedData.Kind7375Parsed, ev.parsed.bind(ev)) as Kind7375Parsed;\n}\n\nexport function isKind7376(msg: WorkerMessage): Kind7376Parsed | null {\n\treturn parsedKind<Kind7376Parsed>(msg, ParsedData.Kind7376Parsed);\n}\nexport function asKind7376(ev: ParsedEvent): Kind7376Parsed | null {\n\tif (ev?.parsedType?.() !== ParsedData.Kind7376Parsed) return null;\n\treturn unionToParsedData(ParsedData.Kind7376Parsed, ev.parsed.bind(ev)) as Kind7376Parsed;\n}\n\nexport function isKind9321(msg: WorkerMessage): Kind9321Parsed | null {\n\treturn parsedKind<Kind9321Parsed>(msg, ParsedData.Kind9321Parsed);\n}\nexport function asKind9321(ev: ParsedEvent): Kind9321Parsed | null {\n\tif (ev?.parsedType?.() !== ParsedData.Kind9321Parsed) return null;\n\treturn unionToParsedData(ParsedData.Kind9321Parsed, ev.parsed.bind(ev)) as Kind9321Parsed;\n}\n\nexport function isKind9735(msg: WorkerMessage): Kind9735Parsed | null {\n\treturn parsedKind<Kind9735Parsed>(msg, ParsedData.Kind9735Parsed);\n}\nexport function asKind9735(ev: ParsedEvent): Kind9735Parsed | null {\n\tif (ev?.parsedType?.() !== ParsedData.Kind9735Parsed) return null;\n\treturn unionToParsedData(ParsedData.Kind9735Parsed, ev.parsed.bind(ev)) as Kind9735Parsed;\n}\n\nexport function isNip51(msg: WorkerMessage): ListParsed | null {\n\treturn parsedKind<ListParsed>(msg, ParsedData.ListParsed);\n}\n\nexport function asNip51(ev: ParsedEvent): ListParsed | null {\n\tif (ev?.parsedType?.() !== ParsedData.ListParsed) return null;\n\treturn unionToParsedData(ParsedData.ListParsed, ev.parsed.bind(ev)) as ListParsed;\n}\n\nexport function asCodeData(block: ContentBlock): CodeData | null {\n\tif (block.dataType() !== ContentData.CodeData) return null;\n\treturn unionToContentData(ContentData.CodeData, block.data.bind(block)) as CodeData;\n}\n\nexport function asHashtagData(block: ContentBlock): HashtagData | null {\n\tif (block.dataType() !== ContentData.HashtagData) return null;\n\treturn unionToContentData(ContentData.HashtagData, block.data.bind(block)) as HashtagData;\n}\n\nexport function asCashuData(block: ContentBlock): CashuData | null {\n\tif (block.dataType() !== ContentData.CashuData) return null;\n\treturn unionToContentData(ContentData.CashuData, block.data.bind(block)) as CashuData;\n}\n\nexport function asImageData(block: ContentBlock): ImageData | null {\n\tif (block.dataType() !== ContentData.ImageData) return null;\n\treturn unionToContentData(ContentData.ImageData, block.data.bind(block)) as unknown as ImageData;\n}\n\nexport function asVideoData(block: ContentBlock): VideoData | null {\n\tif (block.dataType() !== ContentData.VideoData) return null;\n\treturn unionToContentData(ContentData.VideoData, block.data.bind(block)) as VideoData;\n}\n\nexport function asMediaGroupData(block: ContentBlock): MediaGroupData | null {\n\tif (block.dataType() !== ContentData.MediaGroupData) return null;\n\treturn unionToContentData(ContentData.MediaGroupData, block.data.bind(block)) as MediaGroupData;\n}\n\nexport function asNostrData(block: ContentBlock): NostrData | null {\n\tif (block.dataType() !== ContentData.NostrData) return null;\n\treturn unionToContentData(ContentData.NostrData, block.data.bind(block)) as NostrData;\n}\n\nexport function asLinkPreview(block: ContentBlock): LinkPreviewData | null {\n\tif (block.dataType() !== ContentData.LinkPreviewData) return null;\n\treturn unionToContentData(ContentData.LinkPreviewData, block.data.bind(block)) as LinkPreviewData;\n}\n","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 { 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// 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\tconst v = this.view;\n\n\t\t// ASCII fast path (quick OR-scan for any high bit)\n\t\tlet acc = 0;\n\t\tfor (let i = 0; i < v.length; i++) acc |= v[i];\n\t\tif ((acc & 0x80) === 0) {\n\t\t\t// All ASCII → decode via String.fromCharCode in chunks\n\t\t\tlet s = '';\n\t\t\tconst CHUNK = 0x8000; // 32k is safe for apply()\n\t\t\tfor (let i = 0; i < v.length; i += CHUNK) {\n\t\t\t\ts += String.fromCharCode.apply(null, v.subarray(i, i + CHUNK) as unknown as number[]);\n\t\t\t}\n\t\t\treturn s;\n\t\t}\n\n\t\t// Non-ASCII: decode directly\n\t\t// For SAB: make a safe copy first\n\t\tconst buf = v.buffer;\n\t\tif (buf instanceof SharedArrayBuffer) {\n\t\t\tconst safeCopy = new Uint8Array(v);\n\t\t\treturn UTF8_DECODER.decode(safeCopy);\n\t\t}\n\n\t\treturn UTF8_DECODER.decode(v);\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 { 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":["isConnectionStatus","msg","MessageType","unionToMessage","asConnectionStatus","isEoce","Eoce","asEoce","isCountResponse","CountResponse","asCountResponse","isBufferFull","BufferFull","asBufferFull","isValidProofs","ValidProofs","asValidProofs","isParsedEvent","asParsedEvent","isNostrEvent","asNostrEvent","parsedKind","kind","ev","unionToParsedData","isKind0","ParsedData","asKind0","isKind1","asKind1","isKind3","asKind3","isKind4","asKind4","isKind6","asKind6","isKind7","asKind7","isKind17","asKind17","isKind10002","asKind10002","isKind10019","asKind10019","isKind17375","asKind17375","isKind7374","asKind7374","isKind7375","asKind7375","isKind7376","asKind7376","isKind9321","asKind9321","isKind9735","asKind9735","isNip51","asNip51","asCodeData","block","ContentData","unionToContentData","asHashtagData","asCashuData","asImageData","asVideoData","asMediaGroupData","asNostrData","asLinkPreview","ConnectionTracker","status","id","ByteBuffer","offset","length","start","slice","ByteString","UTF8_DECODER","HEX_TABLE","t","i","view","h","v","out","acc","s","safeCopy","other","b","textEncoder","parseContent","content","blocks","textBlock","text","ContentBlockT","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","d","NostrDataT","patterns","match","allMatches","pattern","end","a","filteredMatches","existing","lastIndex","processedBlocks","mediaGroup","isWhitespace","items","m","MediaItemT","MediaGroupDataT","fbIterable","obj","fieldName","value","fbArray","lengthGetter","result","connectWithQRCode","appName","clientKeys","generateSecretKey","clientPubkey","getPublicKey","clientSecretHex","secret","params","relay","nostrconnectUrl","manager"],"mappings":";;;AAyCO,SAASA,EAAmBC,GAA6C;AAC/E,SAAIA,EAAI,KAAA,MAAWC,EAAY,mBAAyB,OACjDC,EAAeF,EAAI,YAAA,GAAeA,EAAI,QAAQ,KAAKA,CAAG,CAAC;AAC/D;AAEO,MAAMG,KAAqBJ;AAE3B,SAASK,GAAOJ,GAAiC;AACvD,SAAIA,EAAI,KAAA,MAAWC,EAAY,OAAa,OACrCD,EAAI,QAAQ,IAAIK,EAAA,CAAM,KAAK;AACnC;AAEO,MAAMC,KAASF;AAEf,SAASG,GAAgBP,GAA0C;AACzE,SAAIA,EAAI,KAAA,MAAWC,EAAY,gBAAsB,OAC9CD,EAAI,QAAQ,IAAIQ,EAAA,CAAe,KAAK;AAC5C;AAEO,MAAMC,KAAkBF;AAExB,SAASG,GAAaV,GAAuC;AACnE,SAAIA,EAAI,KAAA,MAAWC,EAAY,aAAmB,OAC3CD,EAAI,QAAQ,IAAIW,EAAA,CAAY,KAAK;AACzC;AAEO,MAAMC,KAAeF;AAErB,SAASG,GAAcb,GAAwC;AACrE,SAAIA,EAAI,KAAA,MAAWC,EAAY,cAAoB,OAC5CD,EAAI,QAAQ,IAAIc,EAAA,CAAa,KAAK;AAC1C;AAEO,MAAMC,KAAgBF;AAGtB,SAASG,EAAchB,GAAwC;AACrE,SAAIA,EAAI,KAAA,MAAWC,EAAY,mBAAyB,OACjDC,EAAeF,EAAI,YAAA,GAAeA,EAAI,QAAQ,KAAKA,CAAG,CAAC;AAC/D;AAEO,MAAMiB,KAAgBD,GAEhBE,KAAe,CAAClB,MACxBA,EAAI,KAAA,MAAWC,EAAY,aAAmB,OAC3CC,EAAeF,EAAI,YAAA,GAAeA,EAAI,QAAQ,KAAKA,CAAG,CAAC,GAGlDmB,KAAeD;AAG5B,SAASE,EAAcpB,GAAoBqB,GAA4B;AACtE,MAAI,CAACrB,EAAK,QAAO;AACjB,QAAMsB,IAAKN,EAAchB,CAAG;AAE5B,SADI,CAACsB,KACDA,GAAI,mBAAmBD,IAAa,OACjCE,EAAkBF,GAAMC,EAAG,OAAO,KAAKA,CAAE,CAAC;AAClD;AAEO,SAASE,GAAQxB,GAAwC;AAC/D,SAAOoB,EAAwBpB,GAAKyB,EAAW,WAAW;AAC3D;AACO,SAASC,GAAQJ,GAAqC;AAE5D,SADI,CAACA,KACDA,GAAI,aAAA,MAAmBG,EAAW,cAAoB,OACnDF,EAAkBE,EAAW,aAAaH,EAAG,OAAO,KAAKA,CAAE,CAAC;AACpE;AACO,SAASK,GAAQ3B,GAAwC;AAC/D,SAAOoB,EAAwBpB,GAAKyB,EAAW,WAAW;AAC3D;AACO,SAASG,GAAQN,GAAqC;AAC5D,SAAIA,GAAI,aAAA,MAAmBG,EAAW,cAAoB,OACnDF,EAAkBE,EAAW,aAAaH,EAAG,OAAO,KAAKA,CAAE,CAAC;AACpE;AACO,SAASO,GAAQ7B,GAAwC;AAC/D,SAAOoB,EAAwBpB,GAAKyB,EAAW,WAAW;AAC3D;AACO,SAASK,GAAQR,GAAqC;AAC5D,SAAIA,GAAI,aAAA,MAAmBG,EAAW,cAAoB,OACnDF,EAAkBE,EAAW,aAAaH,EAAG,OAAO,KAAKA,CAAE,CAAC;AACpE;AACO,SAASS,GAAQ/B,GAAwC;AAC/D,SAAOoB,EAAwBpB,GAAKyB,EAAW,WAAW;AAC3D;AACO,SAASO,GAAQV,GAAqC;AAC5D,SAAIA,GAAI,aAAA,MAAmBG,EAAW,cAAoB,OACnDF,EAAkBE,EAAW,aAAaH,EAAG,OAAO,KAAKA,CAAE,CAAC;AACpE;AACO,SAASW,GAAQjC,GAAwC;AAC/D,SAAOoB,EAAwBpB,GAAKyB,EAAW,WAAW;AAC3D;AACO,SAASS,GAAQZ,GAAqC;AAC5D,SAAIA,GAAI,aAAA,MAAmBG,EAAW,cAAoB,OACnDF,EAAkBE,EAAW,aAAaH,EAAG,OAAO,KAAKA,CAAE,CAAC;AACpE;AACO,SAASa,GAAQnC,GAAwC;AAC/D,SAAOoB,EAAwBpB,GAAKyB,EAAW,WAAW;AAC3D;AACO,SAASW,GAAQd,GAAqC;AAC5D,SAAIA,GAAI,aAAA,MAAmBG,EAAW,cAAoB,OACnDF,EAAkBE,EAAW,aAAaH,EAAG,OAAO,KAAKA,CAAE,CAAC;AACpE;AACO,SAASe,GAASrC,GAAyC;AACjE,SAAOoB,EAAyBpB,GAAKyB,EAAW,YAAY;AAC7D;AACO,SAASa,GAAShB,GAAsC;AAC9D,SAAIA,GAAI,aAAA,MAAmBG,EAAW,eAAqB,OACpDF,EAAkBE,EAAW,cAAcH,EAAG,OAAO,KAAKA,CAAE,CAAC;AACrE;AACO,SAASiB,GAAYvC,GAA4C;AACvE,SAAOoB,EAA4BpB,GAAKyB,EAAW,eAAe;AACnE;AACO,SAASe,GAAYlB,GAAyC;AACpE,SAAIA,GAAI,aAAA,MAAmBG,EAAW,kBAAwB,OACvDF,EAAkBE,EAAW,iBAAiBH,EAAG,OAAO,KAAKA,CAAE,CAAC;AACxE;AAEO,SAASmB,GAAYzC,GAA4C;AACvE,SAAOoB,EAA4BpB,GAAKyB,EAAW,eAAe;AACnE;AACO,SAASiB,GAAYpB,GAAyC;AACpE,SAAIA,GAAI,aAAA,MAAmBG,EAAW,kBAAwB,OACvDF,EAAkBE,EAAW,iBAAiBH,EAAG,OAAO,KAAKA,CAAE,CAAC;AACxE;AAEO,SAASqB,GAAY3C,GAA4C;AACvE,SAAOoB,EAA4BpB,GAAKyB,EAAW,eAAe;AACnE;AACO,SAASmB,GAAYtB,GAAyC;AACpE,SAAIA,GAAI,aAAA,MAAmBG,EAAW,kBAAwB,OACvDF,EAAkBE,EAAW,iBAAiBH,EAAG,OAAO,KAAKA,CAAE,CAAC;AACxE;AAEO,SAASuB,GAAW7C,GAA2C;AACrE,SAAOoB,EAA2BpB,GAAKyB,EAAW,cAAc;AACjE;AACO,SAASqB,GAAWxB,GAAwC;AAClE,SAAIA,GAAI,aAAA,MAAmBG,EAAW,iBAAuB,OACtDF,EAAkBE,EAAW,gBAAgBH,EAAG,OAAO,KAAKA,CAAE,CAAC;AACvE;AAEO,SAASyB,GAAW/C,GAA2C;AACrE,SAAOoB,EAA2BpB,GAAKyB,EAAW,cAAc;AACjE;AACO,SAASuB,GAAW1B,GAAwC;AAClE,SAAIA,GAAI,aAAA,MAAmBG,EAAW,iBAAuB,OACtDF,EAAkBE,EAAW,gBAAgBH,EAAG,OAAO,KAAKA,CAAE,CAAC;AACvE;AAEO,SAAS2B,GAAWjD,GAA2C;AACrE,SAAOoB,EAA2BpB,GAAKyB,EAAW,cAAc;AACjE;AACO,SAASyB,GAAW5B,GAAwC;AAClE,SAAIA,GAAI,aAAA,MAAmBG,EAAW,iBAAuB,OACtDF,EAAkBE,EAAW,gBAAgBH,EAAG,OAAO,KAAKA,CAAE,CAAC;AACvE;AAEO,SAAS6B,GAAWnD,GAA2C;AACrE,SAAOoB,EAA2BpB,GAAKyB,EAAW,cAAc;AACjE;AACO,SAAS2B,GAAW9B,GAAwC;AAClE,SAAIA,GAAI,aAAA,MAAmBG,EAAW,iBAAuB,OACtDF,EAAkBE,EAAW,gBAAgBH,EAAG,OAAO,KAAKA,CAAE,CAAC;AACvE;AAEO,SAAS+B,GAAWrD,GAA2C;AACrE,SAAOoB,EAA2BpB,GAAKyB,EAAW,cAAc;AACjE;AACO,SAAS6B,GAAWhC,GAAwC;AAClE,SAAIA,GAAI,aAAA,MAAmBG,EAAW,iBAAuB,OACtDF,EAAkBE,EAAW,gBAAgBH,EAAG,OAAO,KAAKA,CAAE,CAAC;AACvE;AAEO,SAASiC,GAAQvD,GAAuC;AAC9D,SAAOoB,EAAuBpB,GAAKyB,EAAW,UAAU;AACzD;AAEO,SAAS+B,GAAQlC,GAAoC;AAC3D,SAAIA,GAAI,aAAA,MAAmBG,EAAW,aAAmB,OAClDF,EAAkBE,EAAW,YAAYH,EAAG,OAAO,KAAKA,CAAE,CAAC;AACnE;AAEO,SAASmC,GAAWC,GAAsC;AAChE,SAAIA,EAAM,SAAA,MAAeC,EAAY,WAAiB,OAC/CC,EAAmBD,EAAY,UAAUD,EAAM,KAAK,KAAKA,CAAK,CAAC;AACvE;AAEO,SAASG,GAAcH,GAAyC;AACtE,SAAIA,EAAM,SAAA,MAAeC,EAAY,cAAoB,OAClDC,EAAmBD,EAAY,aAAaD,EAAM,KAAK,KAAKA,CAAK,CAAC;AAC1E;AAEO,SAASI,GAAYJ,GAAuC;AAClE,SAAIA,EAAM,SAAA,MAAeC,EAAY,YAAkB,OAChDC,EAAmBD,EAAY,WAAWD,EAAM,KAAK,KAAKA,CAAK,CAAC;AACxE;AAEO,SAASK,GAAYL,GAAuC;AAClE,SAAIA,EAAM,SAAA,MAAeC,EAAY,YAAkB,OAChDC,EAAmBD,EAAY,WAAWD,EAAM,KAAK,KAAKA,CAAK,CAAC;AACxE;AAEO,SAASM,GAAYN,GAAuC;AAClE,SAAIA,EAAM,SAAA,MAAeC,EAAY,YAAkB,OAChDC,EAAmBD,EAAY,WAAWD,EAAM,KAAK,KAAKA,CAAK,CAAC;AACxE;AAEO,SAASO,GAAiBP,GAA4C;AAC5E,SAAIA,EAAM,SAAA,MAAeC,EAAY,iBAAuB,OACrDC,EAAmBD,EAAY,gBAAgBD,EAAM,KAAK,KAAKA,CAAK,CAAC;AAC7E;AAEO,SAASQ,GAAYR,GAAuC;AAClE,SAAIA,EAAM,SAAA,MAAeC,EAAY,YAAkB,OAChDC,EAAmBD,EAAY,WAAWD,EAAM,KAAK,KAAKA,CAAK,CAAC;AACxE;AAEO,SAASS,GAAcT,GAA6C;AAC1E,SAAIA,EAAM,SAAA,MAAeC,EAAY,kBAAwB,OACtDC,EAAmBD,EAAY,iBAAiBD,EAAM,KAAK,KAAKA,CAAK,CAAC;AAC9E;AClQO,MAAMU,GAAkB;AAAA,EAAxB,cAAA;AACL,SAAQ,kCAAiD,IAAA,GACzD,KAAQ,gBAAgB,GACxB,KAAQ,gBAAgB;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAKxB,cAAcpE,GAAoB;AAChC,UAAMqE,IAAStE,EAAmBC,CAAG;AACrC,QAAI,CAACqE,EAAQ;AAEb,UAAMC,IAAKD,EAAO,SAAA,GAAY,UAAA;AAC9B,IAAGC,KAAM,CAAC,KAAK,YAAY,IAAIA,CAAE,MAC/B,KAAK,iBACN,KAAK,YAAY,IAAIA,GAAID,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;AC7CCE,GAAW,UAAkB,qBAAqB,SAAUC,GAA4B;AAExF,EAAAA,KAAU,KAAK,UAAUA,CAAM;AAG/B,QAAMC,IAAS,KAAK,UAAUD,CAAM,GAC9BE,IAAQF,IAAS,GAGjBG,IAAQ,KAAK,MAAA,EAAQ,SAASD,GAAOA,IAAQD,CAAM;AAEzD,SAAO,IAAIG,GAAWD,CAAK;AAC5B;AAGA,MAAME,IAAe,IAAI,YAAY,OAAO,GAGtCC,MAAuB,MAAM;AAClC,QAAMC,IAAI,IAAI,MAAM,GAAG;AACvB,WAASC,IAAI,GAAGA,IAAI,KAAKA,IAAK,CAAAD,EAAEC,CAAC,IAAIA,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AACnE,SAAOD;AACR,GAAA;AAGO,MAAMH,GAAW;AAAA,EAGvB,YAAYK,GAAkB;AAC7B,SAAK,OAAOA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKA,QAAoB;AACnB,WAAO,KAAK;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAoB;AACnB,QAAIC,IAAI;AACR,UAAMC,IAAI,KAAK;AACf,aAASH,IAAI,GAAGA,IAAIG,EAAE,QAAQH;AAC7B,MAAAE,KAAKC,EAAEH,CAAC,GACRE,IAAI,KAAK,KAAKA,GAAG,QAAQ;AAE1B,WAAOA,MAAM;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,QAAgB;AACf,UAAMC,IAAI,KAAK;AACf,QAAIC,IAAM;AACV,aAASJ,IAAI,GAAGA,IAAIG,EAAE,QAAQH,IAAK,CAAAI,KAAON,GAAUK,EAAEH,CAAC,CAAC;AACxD,WAAOI;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAqB;AACpB,UAAMD,IAAI,KAAK;AAGf,QAAIE,IAAM;AACV,aAASL,IAAI,GAAGA,IAAIG,EAAE,QAAQH,IAAK,CAAAK,KAAOF,EAAEH,CAAC;AAC7C,QAAK,EAAAK,IAAM,MAAa;AAEvB,UAAIC,IAAI;AAER,eAASN,IAAI,GAAGA,IAAIG,EAAE,QAAQH,KAAK;AAClC,QAAAM,KAAK,OAAO,aAAa,MAAM,MAAMH,EAAE,SAASH,GAAGA,IAAI,KAAK,CAAwB;AAErF,aAAOM;AAAA,IACR;AAKA,QADYH,EAAE,kBACK,mBAAmB;AACrC,YAAMI,IAAW,IAAI,WAAWJ,CAAC;AACjC,aAAON,EAAa,OAAOU,CAAQ;AAAA,IACpC;AAEA,WAAOV,EAAa,OAAOM,CAAC;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,WAAmB;AAClB,WAAO,KAAK,WAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAOK,GAA4B;AAClC,UAAM,IAAI,KAAK,MACdC,IAAID,EAAM;AACX,QAAI,EAAE,WAAWC,EAAE,OAAQ,QAAO;AAClC,aAAST,IAAI,GAAGA,IAAI,EAAE,QAAQA;AAC7B,UAAI,EAAEA,CAAC,MAAMS,EAAET,CAAC,EAAG,QAAO;AAE3B,WAAO;AAAA,EACR;AACD;ACpGA,MAAMU,IAAc,IAAI,YAAA;AAExB,eAAsBC,GAAaC,GAA2C;AAC7E,QAAMC,IAA0B,CAAA,GAG1BC,IAAY,CAACC,MAClB,IAAIC,EAAcN,EAAY,OAAO,MAAM,GAAGA,EAAY,OAAOK,CAAI,GAAGpC,EAAY,MAAM,IAAI,GAEzFsC,IAAa,CAACC,MACnB,IAAIF;AAAA,IACHN,EAAY,OAAO,OAAO;AAAA,IAC1BA,EAAY,OAAOQ,CAAG;AAAA,IACtBvC,EAAY;AAAA,IACZ,IAAIwC,EAAWT,EAAY,OAAOQ,CAAG,GAAG,IAAI;AAAA,EAAA,GAGxCE,IAAa,CAACF,MACnB,IAAIF;AAAA,IACHN,EAAY,OAAO,OAAO;AAAA,IAC1BA,EAAY,OAAOQ,CAAG;AAAA,IACtBvC,EAAY;AAAA,IACZ,IAAI0C,EAAWX,EAAY,OAAOQ,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,IAAIb;AAAA,MACVN,EAAY,OAAO,MAAM;AAAA,MACzBA,EAAY,OAAOc,CAAI;AAAA,MACvB7C,EAAY;AAAA,MACZ,IAAImD,EAAUpB,EAAY,OAAOgB,KAAY,EAAE,GAAGhB,EAAY,OAAOiB,CAAI,CAAC;AAAA,IAAA;AAAA,EAE5E,GAEMI,IAAa,CAACC,MACnB,IAAIhB;AAAA,IACHN,EAAY,OAAO,OAAO;AAAA,IAC1BA,EAAY,OAAOsB,CAAK;AAAA,IACxBrD,EAAY;AAAA,IACZ,IAAIsD,EAAWvB,EAAY,OAAOsB,CAAK,CAAC;AAAA,EAAA,GAGpCE,IAAe,CAACC,MACrB,IAAInB;AAAA,IACHN,EAAY,OAAO,SAAS;AAAA,IAC5BA,EAAY,OAAO,IAAIyB,CAAG,EAAE;AAAA,IAC5BxD,EAAY;AAAA,IACZ,IAAIyD,EAAa1B,EAAY,OAAOyB,CAAG,CAAC;AAAA,EAAA,GAGpCE,IAAY,CAACnB,MAClB,IAAIF;AAAA,IACHN,EAAY,OAAO,MAAM;AAAA,IACzBA,EAAY,OAAOQ,CAAG;AAAA,IACtBvC,EAAY;AAAA,IACZ,IAAI2D,EAAiB5B,EAAY,OAAOQ,CAAG,GAAG,MAAM,MAAM,IAAI;AAAA,EAAA,GAG1DqB,IAAa,CAACC,GAAgBC,MAAoC;AACvE,QAAI;AACH,YAAMC,IAAUC,EAAM,OAAOH,CAAM,GAC7BI,IAAOF,EAAQ;AAErB,UAAIpD,IAAoB,MACpBuD,IAAmB,CAAA,GACnBC,IAAwB,MACxBzG,IAAe,OAAO,CAAC;AAE3B,YAAM0G,IAAIL,EAAQ;AAElB,cAAQE,GAAA;AAAA,QACP,KAAK;AAEJ,UAAAtD,IAAKyD;AACL;AAAA,QACD,KAAK;AAEJ,UAAAzD,IAAKyD,EAAE,QACPF,IAAS,MAAM,QAAQE,EAAE,MAAM,IAAIA,EAAE,SAAS,CAAA;AAC9C;AAAA,QACD,KAAK;AAEJ,UAAAzD,IAAKyD;AACL;AAAA,QACD,KAAK;AAEJ,UAAAzD,IAAKyD,EAAE,IACPF,IAAS,MAAM,QAAQE,EAAE,MAAM,IAAIA,EAAE,SAAS,CAAA,GAC9CD,IAAS,OAAOC,EAAE,UAAW,WAAWA,EAAE,SAAS,MAC/C,OAAOA,EAAE,QAAS,aAAU1G,IAAO,OAAO0G,EAAE,IAAI;AACpD;AAAA,QACD,KAAK;AAGJ,UAAAzD,IAAK,GAAGyD,EAAE,IAAI,IAAIA,EAAE,MAAM,IAAIA,EAAE,UAAU,IAC1CF,IAAS,MAAM,QAAQE,EAAE,MAAM,IAAIA,EAAE,SAAS,CAAA,GAC1C,OAAOA,EAAE,QAAS,aAAU1G,IAAO,OAAO0G,EAAE,IAAI,IACpDD,IAAS,OAAOC,EAAE,UAAW,WAAWA,EAAE,SAAS;AACnD;AAAA,MAAA;AAIF,aAAKzD,MACJA,IAAKkD,IAGC,IAAIxB;AAAA,QACVN,EAAY,OAAOkC,CAAI;AAAA,QACvBlC,EAAY,OAAO+B,CAAQ;AAAA,QAC3B9D,EAAY;AAAA,QACZ,IAAIqE;AAAA,UACHtC,EAAY,OAAOpB,CAAE;AAAA,UACrBoB,EAAY,OAAO8B,CAAM;AAAA,UACzBK;AAAA,UACAnC,EAAY,OAAOoC,KAAU,EAAE;AAAA,UAC/BzG;AAAA,QAAA;AAAA,MACD;AAAA,IAEF,QAAQ;AAEP,aAAOyE,EAAU2B,CAAQ;AAAA,IAC1B;AAAA,EACD,GAGMQ,IAID;AAAA,IACJ;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,cAAc,CAACC,MAAU5B,EAAU4B,EAAM,CAAC,KAAK,IAAIA,EAAM,CAAC,CAAC;AAAA,IAAA;AAAA,IAE5D;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,cAAc,CAACA,MAAUnB,EAAWmB,EAAM,CAAC,CAAC;AAAA,IAAA;AAAA,IAE7C;AAAA,MACC,MAAM;AAAA;AAAA,MAEN,OAAO;AAAA,MACP,cAAc,CAACA,MAAUhB,EAAagB,EAAM,CAAC,EAAE,UAAU,CAAC,CAAC;AAAA,IAAA;AAAA,IAE5D;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,cAAc,CAACA,MAAUjC,EAAWiC,EAAM,CAAC,CAAC;AAAA,IAAA;AAAA,IAE7C;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,cAAc,CAACA,MAAU9B,EAAW8B,EAAM,CAAC,CAAC;AAAA,IAAA;AAAA,IAE7C;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,cAAc,CAACA,MAAU;AACxB,cAAMV,IAASU,EAAM,CAAC;AACtB,eAAOX,EAAWC,KAAU,IAAIU,EAAM,CAAC,CAAC;AAAA,MACzC;AAAA,IAAA;AAAA,IAED;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,cAAc,OAAOA,MAAUb,EAAUa,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,KAAKxC,CAAO,OAAO,QAAM;AACtD,YAAMlB,IAAQwD,EAAM,OACdG,IAAM3D,IAAQwD,EAAM,CAAC,EAAE,QACvBxE,IAAQ,MAAM0E,EAAQ,aAAaF,CAAK;AAE9C,MAAAC,EAAW,KAAK,EAAE,OAAAzD,GAAO,KAAA2D,GAAK,OAAA3E,GAAO;AAAA,IACtC;AAAA,EACD;AAGA,EAAAyE,EAAW,KAAK,CAACG,GAAG7C,MAAM6C,EAAE,QAAQ7C,EAAE,KAAK;AAG3C,QAAM8C,IAAqC,CAAA;AAE3C,aAAWL,KAASC;AAQnB,IAPiBI,EAAgB;AAAA,MAChC,CAACC,MACCN,EAAM,SAASM,EAAS,SAASN,EAAM,QAAQM,EAAS,OACxDN,EAAM,MAAMM,EAAS,SAASN,EAAM,OAAOM,EAAS,OACpDN,EAAM,SAASM,EAAS,SAASN,EAAM,OAAOM,EAAS;AAAA,IAAA,KAIzDD,EAAgB,KAAKL,CAAK;AAK5B,EAAAK,EAAgB,KAAK,CAACD,GAAG7C,MAAM6C,EAAE,QAAQ7C,EAAE,KAAK;AAGhD,MAAIgD,IAAY;AAEhB,aAAW,EAAE,OAAA/D,GAAO,KAAA2D,GAAK,OAAA3E,EAAA,KAAW6E;AAEnC,IAAI7D,IAAQ+D,KACX5C,EAAO,KAAKC,EAAUF,EAAQ,UAAU6C,GAAW/D,CAAK,CAAC,CAAC,GAI3DmB,EAAO,KAAKnC,CAAK,GAEjB+E,IAAYJ;AAIb,EAAII,IAAY7C,EAAQ,UACvBC,EAAO,KAAKC,EAAUF,EAAQ,UAAU6C,CAAS,CAAC,CAAC;AAIpD,QAAMC,IAAmC,CAAA;AACzC,MAAIC,IAA8B,CAAA;AAElC,QAAMC,IAAe,CAACtD,MAAc,QAAQ,KAAKA,CAAC;AAElD,WAASN,IAAI,GAAGA,IAAIa,EAAO,QAAQb,KAAK;AACvC,UAAMtB,IAAQmC,EAAOb,CAAC;AAGtB,QAAItB,GAAO,MAAM,eAAe,WAAWA,GAAO,MAAM,SAAA,MAAe,SAAS;AAC/E,MAAAiF,EAAW,KAAKjF,CAAK;AACrB;AAAA,IACD;AAGA,QACC,EAAAA,GAAO,MAAM,SAAA,MAAe,UAC5B,OAAOA,GAAO,MAAM,SAAA,KAAe,YACnCkF,EAAalF,EAAM,MAAM,SAAA,CAAU,KAGlCiF,EAAW,SAAS,KACpB3D,IAAI,IAAIa,EAAO,WACdA,EAAOb,IAAI,CAAC,GAAG,MAAM,SAAA,MAAe,WAAWa,EAAOb,IAAI,CAAC,GAAG,MAAM,eAAe,WAOtF;AAAA,UAAI2D,EAAW,SAAS,GAAG;AAE1B,YAAIA,EAAW,SAAS,GAAG;AAC1B,gBAAME,IAAsBF,EAAW,IAAI,CAACG,MAAM;AACjD,gBAAIA,EAAE,aAAanF,EAAY,WAAW;AACzC,oBAAMoE,IAAIe,EAAE;AACZ,qBAAO,IAAIC;AAAA,gBACV,IAAI5C,EAAWT,EAAY,OAAOqC,EAAE,OAAQe,EAAE,IAAe,GAAG,IAAI;AAAA,gBACpE;AAAA,cAAA;AAAA,YAEF,WAAWA,EAAE,aAAanF,EAAY,WAAW;AAChD,oBAAMoE,IAAIe,EAAE;AACZ,qBAAO,IAAIC;AAAA,gBACV;AAAA,gBACA,IAAI1C,EAAWX,EAAY,OAAOqC,EAAE,OAAQe,EAAE,IAAe,GAAG,IAAI;AAAA,cAAA;AAAA,YAEtE;AAEA,mBAAO,IAAIC,EAAW,MAAM,IAAI;AAAA,UACjC,CAAC,GAEKhD,IAAO4C,EAAW,IAAI,CAACG,MAAM,OAAOA,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK;AAAA,CAAI;AAClE,UAAAJ,EAAgB;AAAA,YACf,IAAI1C;AAAA,cACHN,EAAY,OAAO,WAAW;AAAA,cAC9BA,EAAY,OAAOK,CAAI;AAAA,cACvBpC,EAAY;AAAA,cACZ,IAAIqF,EAAgBH,CAAK;AAAA,YAAA;AAAA,UAC1B;AAAA,QAEF;AAEC,UAAAH,EAAgB,KAAKC,EAAW,CAAC,CAAC;AAEnC,QAAAA,IAAa,CAAA;AAAA,MACd;AAGA,MAAAD,EAAgB,KAAKhF,CAAK;AAAA;AAAA,EAC3B;AAGA,MAAIiF,EAAW,SAAS;AACvB,QAAIA,EAAW,SAAS,GAAG;AAC1B,YAAME,IAAsBF,EAAW,IAAI,CAACG,MAAM;AACjD,YAAIA,EAAE,aAAanF,EAAY,WAAW;AACzC,gBAAMoE,IAAIe,EAAE;AACZ,iBAAO,IAAIC;AAAA,YACV,IAAI5C,EAAWT,EAAY,OAAOqC,EAAE,OAAQe,EAAE,IAAe,GAAG,IAAI;AAAA,YACpE;AAAA,UAAA;AAAA,QAEF,WAAWA,EAAE,aAAanF,EAAY,WAAW;AAChD,gBAAMoE,IAAIe,EAAE;AACZ,iBAAO,IAAIC;AAAA,YACV;AAAA,YACA,IAAI1C,EAAWX,EAAY,OAAOqC,EAAE,OAAQe,EAAE,IAAe,GAAG,IAAI;AAAA,UAAA;AAAA,QAEtE;AACA,eAAO,IAAIC,EAAW,MAAM,IAAI;AAAA,MACjC,CAAC,GAEKhD,IAAO4C,EAAW,IAAI,CAACG,MAAM,OAAOA,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK;AAAA,CAAI;AAClE,MAAAJ,EAAgB;AAAA,QACf,IAAI1C;AAAA,UACHN,EAAY,OAAO,WAAW;AAAA,UAC9BA,EAAY,OAAOK,CAAI;AAAA,UACvBpC,EAAY;AAAA,UACZ,IAAIqF,EAAgBH,CAAK;AAAA,QAAA;AAAA,MAC1B;AAAA,IAEF;AACC,MAAAH,EAAgB,KAAKC,EAAW,CAAC,CAAC;AAIpC,SAAOD;AACR;AChWO,SAASO,GACfC,GACAC,GACuE;AACvE,QAAM1E,IAAUyE,EAAY,GAAG,OAAOC,CAAS,CAAC,QAAQ,EAAA;AACxD,SAAO;AAAA,IACN,CAAC,OAAO,QAAQ,IAA0E;AACzF,UAAInE,IAAI;AACR,aAAO;AAAA,QACN,OAAmF;AAClF,iBAAOA,IAAIP,KAAQ;AAClB,kBAAM2E,IAASF,EAAYC,CAAS,EAAEnE,CAAC;AAEvC,gBADAA,KACIoE,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,GACfH,GACAC,GACoE;AACpE,MAAI,CAACD,EAAK,QAAO,CAAA;AACjB,QAAMI,IAAgBJ,EAAY,GAAG,OAAOC,CAAS,CAAC,QAAQ,GAAG,KAAKD,CAAG;AACzE,MAAI,CAACI,EAAc,QAAO,CAAA;AAC1B,QAAM7E,IAAS6E,EAAA,GAETC,IAA4E,CAAA;AAClF,WAASvE,IAAI,GAAGA,IAAIP,GAAQO,KAAK;AAChC,UAAMG,IAAK+D,EAAYC,CAAS,EAAEnE,CAAC;AACnC,IAAIG,KAAK,QAAMoE,EAAO,KAAKpE,CAAC;AAAA,EAC7B;AACA,SAAOoE;AACR;AAGA,eAAsBC,GAAkBC,GAAiB5B,GAAkB;AAE1E,QAAM6B,IAAaC,EAAA,GACbC,IAAeC,EAAaH,CAAU,GACtCI,IAAkB,MAAM,KAAKJ,CAAU,EAC3C,IAAI,CAACjE,MAAMA,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAC1C,KAAK,EAAE,GAGHsE,IAASF,EAAaF,GAAmB,GAEzCK,IAAS,IAAI,gBAAA;AAEnB,aAAWC,KAASpC;AACnB,IAAAmC,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,GAAQ,WAAWD,GAAiBJ,CAAe,GAE5CI;AACR;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@candypoets/nipworker",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.77",
|
|
4
4
|
"description": "Nostr client library with worker-based architecture using Rust WASM",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -24,14 +24,13 @@
|
|
|
24
24
|
"README.md"
|
|
25
25
|
],
|
|
26
26
|
"scripts": {
|
|
27
|
-
"build": "npm run build:connections && npm run build:cache && npm run build:parser && vite build",
|
|
27
|
+
"build": "npm run build:connections && npm run build:cache && npm run build:parser && npm run build:crypto && vite build",
|
|
28
28
|
"build:connections": "wasm-pack build ./src/connections --release --target web",
|
|
29
29
|
"build:cache": "wasm-pack build ./src/cache --release --target web",
|
|
30
30
|
"build:parser": "wasm-pack build ./src/parser --release --target web",
|
|
31
|
-
"
|
|
32
|
-
"flatc
|
|
33
|
-
"flatc:
|
|
34
|
-
"flatc:parser": "flatc --rust --gen-object-api --gen-all --filename-suffix '' -o ./src/parser/src/generated ./schemas/message.fbs",
|
|
31
|
+
"build:crypto": "wasm-pack build ./src/crypto --release --target web",
|
|
32
|
+
"flatc": "npm run flatc:rust && npm run flatc:ts",
|
|
33
|
+
"flatc:rust": "flatc --rust --gen-object-api --gen-all --filename-suffix '' -o ./src/shared/src/generated ./schemas/message.fbs",
|
|
35
34
|
"flatc:ts": "flatc --ts --gen-object-api --gen-all --filename-suffix '' -o ./src/generated ./schemas/message.fbs && node ./scripts/patch-strings.js",
|
|
36
35
|
"build:types": "tsc --emitDeclarationOnly --outDir dist",
|
|
37
36
|
"publish": "npm publish --access public",
|
|
@@ -69,7 +68,6 @@
|
|
|
69
68
|
"vite-plugin-wasm": "^3.0.0"
|
|
70
69
|
},
|
|
71
70
|
"dependencies": {
|
|
72
|
-
"@candypoets/rust-worker": "0.0.69",
|
|
73
71
|
"nostr-tools": "^2.0.0"
|
|
74
72
|
},
|
|
75
73
|
"engines": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message-kind.d.ts","sourceRoot":"","sources":["../../../../src/generated/nostr/fb/message-kind.ts"],"names":[],"mappings":"AAKA,oBAAY,WAAW;IACrB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,EAAE,IAAI;IACN,MAAM,IAAI;IACV,IAAI,IAAI;IACR,MAAM,IAAI;CACX"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"msg-kind.d.ts","sourceRoot":"","sources":["../../../../src/generated/nostr/fb/msg-kind.ts"],"names":[],"mappings":"AAKA,oBAAY,OAAO;IACjB,OAAO,IAAI;IACX,KAAK,IAAI;IACT,IAAI,IAAI;IACR,EAAE,IAAI;IACN,MAAM,IAAI;IACV,MAAM,IAAI;IACV,IAAI,IAAI;CACT"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { ByteString } from '../../../lib/ByteString';
|
|
2
|
-
import { NostrEvent, NostrEventT } from '../../nostr/fb/nostr-event.js';
|
|
3
|
-
import { ParsedEvent, ParsedEventT } from '../../nostr/fb/parsed-event.js';
|
|
4
|
-
|
|
5
|
-
import * as flatbuffers from 'flatbuffers';
|
|
6
|
-
export declare class OutEnvelope implements flatbuffers.IUnpackableObject<OutEnvelopeT> {
|
|
7
|
-
bb: flatbuffers.ByteBuffer | null;
|
|
8
|
-
bb_pos: number;
|
|
9
|
-
__init(i: number, bb: flatbuffers.ByteBuffer): OutEnvelope;
|
|
10
|
-
static getRootAsOutEnvelope(bb: flatbuffers.ByteBuffer, obj?: OutEnvelope): OutEnvelope;
|
|
11
|
-
static getSizePrefixedRootAsOutEnvelope(bb: flatbuffers.ByteBuffer, obj?: OutEnvelope): OutEnvelope;
|
|
12
|
-
subId(): ByteString | null;
|
|
13
|
-
subId(optionalEncoding: flatbuffers.Encoding): ByteString | Uint8Array | null;
|
|
14
|
-
url(): ByteString | null;
|
|
15
|
-
url(optionalEncoding: flatbuffers.Encoding): ByteString | Uint8Array | null;
|
|
16
|
-
kind(): ByteString | null;
|
|
17
|
-
kind(optionalEncoding: flatbuffers.Encoding): ByteString | Uint8Array | null;
|
|
18
|
-
isEose(): boolean;
|
|
19
|
-
event(obj?: NostrEvent): NostrEvent | null;
|
|
20
|
-
parsedEvent(obj?: ParsedEvent): ParsedEvent | null;
|
|
21
|
-
message(): ByteString | null;
|
|
22
|
-
message(optionalEncoding: flatbuffers.Encoding): ByteString | Uint8Array | null;
|
|
23
|
-
success(): boolean;
|
|
24
|
-
static startOutEnvelope(builder: flatbuffers.Builder): void;
|
|
25
|
-
static addSubId(builder: flatbuffers.Builder, subIdOffset: flatbuffers.Offset): void;
|
|
26
|
-
static addUrl(builder: flatbuffers.Builder, urlOffset: flatbuffers.Offset): void;
|
|
27
|
-
static addKind(builder: flatbuffers.Builder, kindOffset: flatbuffers.Offset): void;
|
|
28
|
-
static addIsEose(builder: flatbuffers.Builder, isEose: boolean): void;
|
|
29
|
-
static addEvent(builder: flatbuffers.Builder, eventOffset: flatbuffers.Offset): void;
|
|
30
|
-
static addParsedEvent(builder: flatbuffers.Builder, parsedEventOffset: flatbuffers.Offset): void;
|
|
31
|
-
static addMessage(builder: flatbuffers.Builder, messageOffset: flatbuffers.Offset): void;
|
|
32
|
-
static addSuccess(builder: flatbuffers.Builder, success: boolean): void;
|
|
33
|
-
static endOutEnvelope(builder: flatbuffers.Builder): flatbuffers.Offset;
|
|
34
|
-
unpack(): OutEnvelopeT;
|
|
35
|
-
unpackTo(_o: OutEnvelopeT): void;
|
|
36
|
-
}
|
|
37
|
-
export declare class OutEnvelopeT implements flatbuffers.IGeneratedObject {
|
|
38
|
-
subId: ByteString | Uint8Array | null;
|
|
39
|
-
url: ByteString | Uint8Array | null;
|
|
40
|
-
kind: ByteString | Uint8Array | null;
|
|
41
|
-
isEose: boolean;
|
|
42
|
-
event: NostrEventT | null;
|
|
43
|
-
parsedEvent: ParsedEventT | null;
|
|
44
|
-
message: ByteString | Uint8Array | null;
|
|
45
|
-
success: boolean;
|
|
46
|
-
constructor(subId?: ByteString | Uint8Array | null, url?: ByteString | Uint8Array | null, kind?: ByteString | Uint8Array | null, isEose?: boolean, event?: NostrEventT | null, parsedEvent?: ParsedEventT | null, message?: ByteString | Uint8Array | null, success?: boolean);
|
|
47
|
-
pack(builder: flatbuffers.Builder): flatbuffers.Offset;
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=out-envelope.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"out-envelope.d.ts","sourceRoot":"","sources":["../../../../src/generated/nostr/fb/out-envelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAKhD,OAAO,KAAK,WAAW,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAG3E,qBAAa,WAAY,YAAW,WAAW,CAAC,iBAAiB,CAAC,YAAY,CAAC;IAC7E,EAAE,EAAE,WAAW,CAAC,UAAU,GAAC,IAAI,CAAQ;IACvC,MAAM,SAAK;IACX,MAAM,CAAC,CAAC,EAAC,MAAM,EAAE,EAAE,EAAC,WAAW,CAAC,UAAU,GAAE,WAAW;IAMzD,MAAM,CAAC,oBAAoB,CAAC,EAAE,EAAC,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,EAAC,WAAW,GAAE,WAAW;IAIpF,MAAM,CAAC,gCAAgC,CAAC,EAAE,EAAC,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,EAAC,WAAW,GAAE,WAAW;IAKhG,KAAK,IAAI,UAAU,GAAC,IAAI;IACxB,KAAK,CAAC,gBAAgB,EAAC,WAAW,CAAC,QAAQ,GAAG,UAAU,GAAC,UAAU,GAAC,IAAI;IAMxE,GAAG,IAAI,UAAU,GAAC,IAAI;IACtB,GAAG,CAAC,gBAAgB,EAAC,WAAW,CAAC,QAAQ,GAAG,UAAU,GAAC,UAAU,GAAC,IAAI;IAMtE,IAAI,IAAI,UAAU,GAAC,IAAI;IACvB,IAAI,CAAC,gBAAgB,EAAC,WAAW,CAAC,QAAQ,GAAG,UAAU,GAAC,UAAU,GAAC,IAAI;IAMvE,MAAM,IAAG,OAAO;IAKhB,KAAK,CAAC,GAAG,CAAC,EAAC,UAAU,GAAE,UAAU,GAAC,IAAI;IAKtC,WAAW,CAAC,GAAG,CAAC,EAAC,WAAW,GAAE,WAAW,GAAC,IAAI;IAK9C,OAAO,IAAI,UAAU,GAAC,IAAI;IAC1B,OAAO,CAAC,gBAAgB,EAAC,WAAW,CAAC,QAAQ,GAAG,UAAU,GAAC,UAAU,GAAC,IAAI;IAM1E,OAAO,IAAG,OAAO;IAKjB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO;IAInD,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,WAAW,EAAC,WAAW,CAAC,MAAM;IAI3E,MAAM,CAAC,MAAM,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAC,WAAW,CAAC,MAAM;IAIvE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,UAAU,EAAC,WAAW,CAAC,MAAM;IAIzE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAC,OAAO;IAI5D,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,WAAW,EAAC,WAAW,CAAC,MAAM;IAI3E,MAAM,CAAC,cAAc,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,iBAAiB,EAAC,WAAW,CAAC,MAAM;IAIvF,MAAM,CAAC,UAAU,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,aAAa,EAAC,WAAW,CAAC,MAAM;IAI/E,MAAM,CAAC,UAAU,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAC,OAAO;IAI9D,MAAM,CAAC,cAAc,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,GAAE,WAAW,CAAC,MAAM;IAQrE,MAAM,IAAI,YAAY;IActB,QAAQ,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI;CAU/B;AAED,qBAAa,YAAa,YAAW,WAAW,CAAC,gBAAgB;IAExD,KAAK,EAAE,UAAU,GAAC,UAAU,GAAC,IAAI;IACjC,GAAG,EAAE,UAAU,GAAC,UAAU,GAAC,IAAI;IAC/B,IAAI,EAAE,UAAU,GAAC,UAAU,GAAC,IAAI;IAChC,MAAM,EAAE,OAAO;IACf,KAAK,EAAE,WAAW,GAAC,IAAI;IACvB,WAAW,EAAE,YAAY,GAAC,IAAI;IAC9B,OAAO,EAAE,UAAU,GAAC,UAAU,GAAC,IAAI;IACnC,OAAO,EAAE,OAAO;gBAPhB,KAAK,GAAE,UAAU,GAAC,UAAU,GAAC,IAAW,EACxC,GAAG,GAAE,UAAU,GAAC,UAAU,GAAC,IAAW,EACtC,IAAI,GAAE,UAAU,GAAC,UAAU,GAAC,IAAW,EACvC,MAAM,GAAE,OAAe,EACvB,KAAK,GAAE,WAAW,GAAC,IAAW,EAC9B,WAAW,GAAE,YAAY,GAAC,IAAW,EACrC,OAAO,GAAE,UAAU,GAAC,UAAU,GAAC,IAAW,EAC1C,OAAO,GAAE,OAAe;IAIjC,IAAI,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,MAAM;CAoBpD"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { ByteString } from '../../../lib/ByteString';
|
|
2
|
-
import { DLEQProof, DLEQProofT } from '../../nostr/fb/dleqproof.js';
|
|
3
|
-
|
|
4
|
-
import * as flatbuffers from 'flatbuffers';
|
|
5
|
-
export declare class ProofUnion implements flatbuffers.IUnpackableObject<ProofUnionT> {
|
|
6
|
-
bb: flatbuffers.ByteBuffer | null;
|
|
7
|
-
bb_pos: number;
|
|
8
|
-
__init(i: number, bb: flatbuffers.ByteBuffer): ProofUnion;
|
|
9
|
-
static getRootAsProofUnion(bb: flatbuffers.ByteBuffer, obj?: ProofUnion): ProofUnion;
|
|
10
|
-
static getSizePrefixedRootAsProofUnion(bb: flatbuffers.ByteBuffer, obj?: ProofUnion): ProofUnion;
|
|
11
|
-
amount(): bigint;
|
|
12
|
-
id(): ByteString | null;
|
|
13
|
-
id(optionalEncoding: flatbuffers.Encoding): ByteString | Uint8Array | null;
|
|
14
|
-
secret(): ByteString | null;
|
|
15
|
-
secret(optionalEncoding: flatbuffers.Encoding): ByteString | Uint8Array | null;
|
|
16
|
-
c(): ByteString | null;
|
|
17
|
-
c(optionalEncoding: flatbuffers.Encoding): ByteString | Uint8Array | null;
|
|
18
|
-
dleq(obj?: DLEQProof): DLEQProof | null;
|
|
19
|
-
version(): number;
|
|
20
|
-
static startProofUnion(builder: flatbuffers.Builder): void;
|
|
21
|
-
static addAmount(builder: flatbuffers.Builder, amount: bigint): void;
|
|
22
|
-
static addId(builder: flatbuffers.Builder, idOffset: flatbuffers.Offset): void;
|
|
23
|
-
static addSecret(builder: flatbuffers.Builder, secretOffset: flatbuffers.Offset): void;
|
|
24
|
-
static addC(builder: flatbuffers.Builder, cOffset: flatbuffers.Offset): void;
|
|
25
|
-
static addDleq(builder: flatbuffers.Builder, dleqOffset: flatbuffers.Offset): void;
|
|
26
|
-
static addVersion(builder: flatbuffers.Builder, version: number): void;
|
|
27
|
-
static endProofUnion(builder: flatbuffers.Builder): flatbuffers.Offset;
|
|
28
|
-
unpack(): ProofUnionT;
|
|
29
|
-
unpackTo(_o: ProofUnionT): void;
|
|
30
|
-
}
|
|
31
|
-
export declare class ProofUnionT implements flatbuffers.IGeneratedObject {
|
|
32
|
-
amount: bigint;
|
|
33
|
-
id: ByteString | Uint8Array | null;
|
|
34
|
-
secret: ByteString | Uint8Array | null;
|
|
35
|
-
c: ByteString | Uint8Array | null;
|
|
36
|
-
dleq: DLEQProofT | null;
|
|
37
|
-
version: number;
|
|
38
|
-
constructor(amount?: bigint, id?: ByteString | Uint8Array | null, secret?: ByteString | Uint8Array | null, c?: ByteString | Uint8Array | null, dleq?: DLEQProofT | null, version?: number);
|
|
39
|
-
pack(builder: flatbuffers.Builder): flatbuffers.Offset;
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=proof-union.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"proof-union.d.ts","sourceRoot":"","sources":["../../../../src/generated/nostr/fb/proof-union.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Proof, ProofT } from '../../nostr/fb/proof.js';
|
|
2
|
-
import * as flatbuffers from 'flatbuffers';
|
|
3
|
-
export declare class Proofs implements flatbuffers.IUnpackableObject<ProofsT> {
|
|
4
|
-
bb: flatbuffers.ByteBuffer | null;
|
|
5
|
-
bb_pos: number;
|
|
6
|
-
__init(i: number, bb: flatbuffers.ByteBuffer): Proofs;
|
|
7
|
-
static getRootAsProofs(bb: flatbuffers.ByteBuffer, obj?: Proofs): Proofs;
|
|
8
|
-
static getSizePrefixedRootAsProofs(bb: flatbuffers.ByteBuffer, obj?: Proofs): Proofs;
|
|
9
|
-
proofs(index: number, obj?: Proof): Proof | null;
|
|
10
|
-
proofsLength(): number;
|
|
11
|
-
static startProofs(builder: flatbuffers.Builder): void;
|
|
12
|
-
static addProofs(builder: flatbuffers.Builder, proofsOffset: flatbuffers.Offset): void;
|
|
13
|
-
static createProofsVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset;
|
|
14
|
-
static startProofsVector(builder: flatbuffers.Builder, numElems: number): void;
|
|
15
|
-
static endProofs(builder: flatbuffers.Builder): flatbuffers.Offset;
|
|
16
|
-
static createProofs(builder: flatbuffers.Builder, proofsOffset: flatbuffers.Offset): flatbuffers.Offset;
|
|
17
|
-
unpack(): ProofsT;
|
|
18
|
-
unpackTo(_o: ProofsT): void;
|
|
19
|
-
}
|
|
20
|
-
export declare class ProofsT implements flatbuffers.IGeneratedObject {
|
|
21
|
-
proofs: (ProofT)[];
|
|
22
|
-
constructor(proofs?: (ProofT)[]);
|
|
23
|
-
pack(builder: flatbuffers.Builder): flatbuffers.Offset;
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=proofs.d.ts.map
|