@candypoets/nipworker 0.0.49 → 0.0.51
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/generated/nostr/fb/msg-kind.d.ts +10 -0
- package/dist/generated/nostr/fb/msg-kind.d.ts.map +1 -0
- package/dist/generated/nostr/fb/relay-ref.d.ts +24 -0
- package/dist/generated/nostr/fb/relay-ref.d.ts.map +1 -0
- package/dist/generated/nostr/fb/worker-line.d.ts +39 -0
- package/dist/generated/nostr/fb/worker-line.d.ts.map +1 -0
- package/dist/generated/nostr/fb.d.ts +3 -0
- package/dist/generated/nostr/fb.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index2.js +1 -1
- package/dist/index2.js.map +1 -1
- package/dist/lib/ByteString.d.ts.map +1 -1
- package/dist/lib/SharedBuffer.d.ts.map +1 -1
- package/dist/message-type.js +1 -1
- package/dist/message-type.js.map +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -1
- package/dist/utils.js.map +1 -1
- package/dist/ws/connection.d.ts +37 -0
- package/dist/ws/connection.d.ts.map +1 -0
- package/dist/ws/index.d.ts +24 -0
- package/dist/ws/index.d.ts.map +1 -0
- package/dist/ws/registry.d.ts +34 -0
- package/dist/ws/registry.d.ts.map +1 -0
- package/dist/ws/ring-buffer.d.ts +35 -0
- package/dist/ws/ring-buffer.d.ts.map +1 -0
- package/dist/ws/types.d.ts +55 -0
- package/dist/ws/types.d.ts.map +1 -0
- package/package.json +3 -3
package/dist/utils.d.ts
CHANGED
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAG3C,cAAc,mBAAmB,CAAC;AAGlC;;GAEG;AACH,KAAK,cAAc,CAAC,CAAC,IAAI;KACpB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK;CAC9D,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX;;GAEG;AACH,wBAAgB,UAAU,CACtB,CAAC,EACD,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,EAE3B,GAAG,EAAE,CAAC,EACN,SAAS,EAAE,CAAC,GACb,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAoBtE;AAGD;;GAEG;AACH,wBAAgB,OAAO,CACrB,CAAC,EACD,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,EAE3B,GAAG,EAAE,CAAC,EACN,SAAS,EAAE,CAAC,GACX,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAWnE"}
|
package/dist/utils.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{M as l,u as
|
|
1
|
+
import{M as l,u as K,E as v,C as T,B as w,V as D,P as e,a as s,b as r,c as u,d as C}from"./message-type.js";function c(n){return n.type()!==l.ConnectionStatus?null:K(n.contentType(),n.content.bind(n))}const S=c;function P(n){return n.type()!==l.Eoce?null:n.content(new v)??null}const m=P;function h(n){return n.type()!==l.CountResponse?null:n.content(new T)??null}const R=h;function y(n){return n.type()!==l.BufferFull?null:n.content(new w)??null}const E=y;function b(n){return n.type()!==l.ValidProofs?null:n.content(new D)??null}const k=b;function f(n){return n.type()!==l.ParsedNostrEvent?null:K(n.contentType(),n.content.bind(n))}const I=f;function i(n,t){if(!n)return null;const a=f(n);return!a||a.parsedType()!==t?null:s(t,a.parsed.bind(a))}function M(n){return i(n,e.Kind0Parsed)}function V(n){return!n||n.parsedType()!==e.Kind0Parsed?null:s(e.Kind0Parsed,n.parsed.bind(n))}function B(n){return i(n,e.Kind1Parsed)}function H(n){return n.parsedType()!==e.Kind1Parsed?null:s(e.Kind1Parsed,n.parsed.bind(n))}function _(n){return i(n,e.Kind3Parsed)}function x(n){return n.parsedType()!==e.Kind3Parsed?null:s(e.Kind3Parsed,n.parsed.bind(n))}function L(n){return i(n,e.Kind4Parsed)}function A(n){return n.parsedType()!==e.Kind4Parsed?null:s(e.Kind4Parsed,n.parsed.bind(n))}function N(n){return i(n,e.Kind6Parsed)}function F(n){return n.parsedType()!==e.Kind6Parsed?null:s(e.Kind6Parsed,n.parsed.bind(n))}function G(n){return i(n,e.Kind7Parsed)}function U(n){return n.parsedType()!==e.Kind7Parsed?null:s(e.Kind7Parsed,n.parsed.bind(n))}function $(n){return i(n,e.Kind17Parsed)}function j(n){return n.parsedType()!==e.Kind17Parsed?null:s(e.Kind17Parsed,n.parsed.bind(n))}function q(n){return i(n,e.Kind10002Parsed)}function O(n){return n.parsedType()!==e.Kind10002Parsed?null:s(e.Kind10002Parsed,n.parsed.bind(n))}function z(n){return i(n,e.Kind10019Parsed)}function J(n){return n.parsedType()!==e.Kind10019Parsed?null:s(e.Kind10019Parsed,n.parsed.bind(n))}function Q(n){return i(n,e.Kind17375Parsed)}function W(n){return n.parsedType()!==e.Kind17375Parsed?null:s(e.Kind17375Parsed,n.parsed.bind(n))}function X(n){return i(n,e.Kind39089Parsed)}function Y(n){return n.parsedType()!==e.Kind39089Parsed?null:s(e.Kind39089Parsed,n.parsed.bind(n))}function Z(n){return i(n,e.Kind7374Parsed)}function nn(n){return n.parsedType()!==e.Kind7374Parsed?null:s(e.Kind7374Parsed,n.parsed.bind(n))}function en(n){return i(n,e.Kind7375Parsed)}function tn(n){return n.parsedType()!==e.Kind7375Parsed?null:s(e.Kind7375Parsed,n.parsed.bind(n))}function an(n){return i(n,e.Kind7376Parsed)}function sn(n){return n.parsedType()!==e.Kind7376Parsed?null:s(e.Kind7376Parsed,n.parsed.bind(n))}function rn(n){return i(n,e.Kind9321Parsed)}function dn(n){return n.parsedType()!==e.Kind9321Parsed?null:s(e.Kind9321Parsed,n.parsed.bind(n))}function un(n){return i(n,e.Kind9735Parsed)}function on(n){return n.parsedType()!==e.Kind9735Parsed?null:s(e.Kind9735Parsed,n.parsed.bind(n))}function ln(n){return n.dataType()!==r.CodeData?null:u(r.CodeData,n.data.bind(n))}function cn(n){return n.dataType()!==r.HashtagData?null:u(r.HashtagData,n.data.bind(n))}function fn(n){return n.dataType()!==r.CashuData?null:u(r.CashuData,n.data.bind(n))}function pn(n){return n.dataType()!==r.ImageData?null:u(r.ImageData,n.data.bind(n))}function Kn(n){return n.dataType()!==r.VideoData?null:u(r.VideoData,n.data.bind(n))}function Pn(n){return n.dataType()!==r.MediaGroupData?null:u(r.MediaGroupData,n.data.bind(n))}function hn(n){return n.dataType()!==r.NostrData?null:u(r.NostrData,n.data.bind(n))}function yn(n){return n.dataType()!==r.LinkPreviewData?null:u(r.LinkPreviewData,n.data.bind(n))}class bn{constructor(){this.knownRelays=new Map,this.incomingCount=0,this.resolvedCount=0}handleMessage(t){const a=c(t);if(!a)return;const d=a.relayUrl()?.fnv1aHash();d&&!this.knownRelays.has(d)&&(this.incomingCount++,this.knownRelays.set(d,a)),this.isResolved(a)&&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}}C.prototype.__stringByteString=function(n){n+=this.readInt32(n);const t=this.readInt32(n),a=n+4,d=this.bytes().subarray(a,a+t);return new g(d)};class g{constructor(t){this.view=t}bytes(){return this.view}fnv1aHash(){let t=2166136261;for(let a=0;a<this.view.length;a++)t^=this.view[a],t=Math.imul(t,16777619);return t>>>0}toHex(){return Array.from(this.view).map(t=>t.toString(16).padStart(2,"0")).join("")}utf8String(){if(this._utf8!==void 0)return this._utf8;if(this.view.buffer instanceof SharedArrayBuffer){const t=new Uint8Array(this.view);return this._utf8=new TextDecoder("utf-8").decode(t)}return this._utf8=new TextDecoder("utf-8").decode(this.view)}toString(){return this.utf8String()}equals(t){if(this.view.length!==t.view.length)return!1;for(let a=0;a<this.view.length;a++)if(this.view[a]!==t.view[a])return!1;return!0}}function gn(n,t){const a=n[`${String(t)}Length`]();return{[Symbol.iterator](){let d=0;return{next(){for(;d<a;){const o=n[t](d);if(d++,o!=null)return{value:o,done:!1}}return{value:void 0,done:!0}}}}}}function vn(n,t){if(!n)return[];const a=n[`${String(t)}Length`].bind(n)(),d=[];for(let o=0;o<a;o++){const p=n[t](o);p!=null&&d.push(p)}return d}export{g as ByteString,bn as ConnectionTracker,E as asBufferFull,fn as asCashuData,ln as asCodeData,S as asConnectionStatus,R as asCountResponse,m as asEoce,cn as asHashtagData,pn as asImageData,V as asKind0,H as asKind1,O as asKind10002,J as asKind10019,j as asKind17,W as asKind17375,x as asKind3,Y as asKind39089,A as asKind4,F as asKind6,U as asKind7,nn as asKind7374,tn as asKind7375,sn as asKind7376,dn as asKind9321,on as asKind9735,yn as asLinkPreview,Pn as asMediaGroupData,hn as asNostrData,I as asParsedEvent,k as asValidProofs,Kn as asVideoData,vn as fbArray,gn as fbIterable,y as isBufferFull,c as isConnectionStatus,h as isCountResponse,P as isEoce,M as isKind0,B as isKind1,q as isKind10002,z as isKind10019,$ as isKind17,Q as isKind17375,_ as isKind3,X as isKind39089,L as isKind4,N as isKind6,G as isKind7,Z as isKind7374,en as isKind7375,an as isKind7376,rn as isKind9321,un as isKind9735,f as isParsedEvent,b as isValidProofs};
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../src/lib/NarrowTypes.ts","../src/lib/ConnectionTracker.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","export { ConnectionTracker } from \"./lib/ConnectionTracker\";\n\n\nexport * from \"./lib/NarrowTypes\";\n\n\n/**\n * Extracts keys from T where the value is a `function(i: number): any`\n */\ntype FlatBufferKeys<T> = {\n [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<\n T,\n K extends FlatBufferKeys<T>\n>(\n obj: T,\n fieldName: K\n): Iterable<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> {\n const length = (obj as any)[`${String(fieldName)}Length`]();\n return {\n [Symbol.iterator](): Iterator<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> {\n let i = 0;\n return {\n next(): IteratorResult<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> {\n while (i < length) {\n const value = (obj as any)[fieldName](i);\n i++;\n if (value != null) {\n return { value, done: false };\n }\n // if null → skip this index\n }\n return { value: undefined as any, done: true };\n }\n };\n }\n };\n}\n\n\n/**\n * Eager array version (non-null)\n */\nexport function fbArray<\n T,\n K extends FlatBufferKeys<T>\n>(\n obj: T,\n fieldName: K\n): Array<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> {\n if(!obj) return []\n const lengthGetter = (obj as any)[`${String(fieldName)}Length`].bind(obj);\n const length = lengthGetter();\n\n const result: Array<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> = [];\n for (let i = 0; i < length; i++) {\n const v = (obj as any)[fieldName](i);\n if (v != null) result.push(v);\n }\n return 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","fbIterable","obj","fieldName","length","i","value","fbArray","result","v"],"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/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 // Follow indirect: add the relative offset stored at this location\n offset += this.readInt32(offset);\n\n // Now at the start of the string object → first 4 bytes = length\n const length = this.readInt32(offset);\n const start = offset + 4;\n\n // Slice out exactly [start, start+length]\n const slice = this.bytes().subarray(start, start + length);\n\n return new ByteString(slice);\n}\n\n\n// lib/ByteString.ts\nexport class ByteString {\n private readonly view: Uint8Array;\n private _utf8?: string;\n\n constructor(view: Uint8Array) {\n this.view = view;\n }\n\n /**\n * Access underlying bytes\n */\n bytes(): Uint8Array {\n return this.view;\n }\n\n /**\n * Fast numeric discriminant (FNV-1a hash).\n * Not cryptographically secure, but great for Map/Set keys.\n */\n fnv1aHash(): number {\n let h = 2166136261 >>> 0;\n for (let i = 0; i < this.view.length; i++) {\n h ^= this.view[i];\n h = Math.imul(h, 16777619);\n }\n return h >>> 0;\n }\n\n /**\n * Return a stable hex string representation.\n */\n toHex(): string {\n return Array.from(this.view)\n .map(b => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n }\n\n /**\n * Decode as UTF-8 string.\n * If backed by SharedArrayBuffer, makes a safe copy.\n */\n utf8String(): string {\n if (this._utf8 !== undefined) return this._utf8;\n\n if (this.view.buffer instanceof SharedArrayBuffer) {\n const copy = new Uint8Array(this.view);\n return (this._utf8 = new TextDecoder(\"utf-8\").decode(copy));\n }\n return (this._utf8 = new TextDecoder(\"utf-8\").decode(this.view));\n }\n\n /**\n * For debugging/logging\n */\n toString(): string {\n return this.utf8String();\n }\n\n /**\n * Equality check by bytes\n */\n equals(other: ByteString): boolean {\n if (this.view.length !== other.view.length) return false;\n for (let i = 0; i < this.view.length; i++) {\n if (this.view[i] !== other.view[i]) return false;\n }\n return true;\n }\n}\n","export { ConnectionTracker } from \"./lib/ConnectionTracker\";\nexport {ByteString} from \"./lib/ByteString\"\n\n\nexport * from \"./lib/NarrowTypes\";\n\n\n/**\n * Extracts keys from T where the value is a `function(i: number): any`\n */\ntype FlatBufferKeys<T> = {\n [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<\n T,\n K extends FlatBufferKeys<T>\n>(\n obj: T,\n fieldName: K\n): Iterable<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> {\n const length = (obj as any)[`${String(fieldName)}Length`]();\n return {\n [Symbol.iterator](): Iterator<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> {\n let i = 0;\n return {\n next(): IteratorResult<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> {\n while (i < length) {\n const value = (obj as any)[fieldName](i);\n i++;\n if (value != null) {\n return { value, done: false };\n }\n // if null → skip this index\n }\n return { value: undefined as any, done: true };\n }\n };\n }\n };\n}\n\n\n/**\n * Eager array version (non-null)\n */\nexport function fbArray<\n T,\n K extends FlatBufferKeys<T>\n>(\n obj: T,\n fieldName: K\n): Array<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> {\n if(!obj) return []\n const lengthGetter = (obj as any)[`${String(fieldName)}Length`].bind(obj);\n const length = lengthGetter();\n\n const result: Array<NonNullable<ReturnType<Extract<T[K], (i: number) => any>>>> = [];\n for (let i = 0; i < length; i++) {\n const v = (obj as any)[fieldName](i);\n if (v != null) result.push(v);\n }\n return 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","view","h","i","b","copy","other","fbIterable","obj","fieldName","value","fbArray","result","v"],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ConnectionStatus, RelayConfig, RelayStats } from './types';
|
|
2
|
+
|
|
3
|
+
export type MessageHandler = (url: string, kind: number, // 1=EVENT, 2=EOSE, 3=OK, 4=CLOSED, 5=NOTICE, 6=AUTH, 0=UNKNOWN
|
|
4
|
+
subId: string | null, // present for EVENT/EOSE/CLOSED
|
|
5
|
+
rawText: string) => void;
|
|
6
|
+
export declare class RelayConnection {
|
|
7
|
+
private url;
|
|
8
|
+
private config;
|
|
9
|
+
private status;
|
|
10
|
+
private ws;
|
|
11
|
+
private reconnectTimer;
|
|
12
|
+
private abortController;
|
|
13
|
+
private attempts;
|
|
14
|
+
private givenUp;
|
|
15
|
+
private lastActivity;
|
|
16
|
+
private stats;
|
|
17
|
+
private readyWaiters;
|
|
18
|
+
messageHandler: MessageHandler | null;
|
|
19
|
+
constructor(url: string, config?: Partial<RelayConfig>);
|
|
20
|
+
getUrl(): string;
|
|
21
|
+
getStatus(): ConnectionStatus;
|
|
22
|
+
getStats(): RelayStats;
|
|
23
|
+
getLastActivity(): number;
|
|
24
|
+
hasGivenUp(): boolean;
|
|
25
|
+
setMessageHandler(handler: MessageHandler): void;
|
|
26
|
+
connect(): void;
|
|
27
|
+
sendMessage(frame: string): Promise<void>;
|
|
28
|
+
waitForReady(timeoutMs?: number): Promise<void>;
|
|
29
|
+
close(): Promise<void>;
|
|
30
|
+
shouldCloseDueToInactivity(): boolean;
|
|
31
|
+
private resolveReady;
|
|
32
|
+
private removeReadyResolver;
|
|
33
|
+
private closeWebSocket;
|
|
34
|
+
private scheduleReconnect;
|
|
35
|
+
private shallowScan;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/ws/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGpE,MAAM,MAAM,cAAc,GAAG,CAC5B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,+DAA+D;AAC7E,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,gCAAgC;AACtD,OAAO,EAAE,MAAM,KACX,IAAI,CAAC;AAEV,qBAAa,eAAe;IAC3B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAA6C;IAC3D,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,eAAe,CAAgC;IAEvD,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,KAAK,CAMX;IACF,OAAO,CAAC,YAAY,CAAoC;IACjD,cAAc,EAAE,cAAc,GAAG,IAAI,CAAQ;gBAExC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM;IAiB1D,MAAM,IAAI,MAAM;IAGhB,SAAS,IAAI,gBAAgB;IAG7B,QAAQ,IAAI,UAAU;IAGtB,eAAe,IAAI,MAAM;IAGzB,UAAU,IAAI,OAAO;IAIrB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAKhD,OAAO,IAAI,IAAI;IAwGT,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUzC,YAAY,CAAC,SAAS,GAAE,MAA8C,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBtF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B,0BAA0B,IAAI,OAAO;IAMrC,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,WAAW;CAmCnB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { RelayConfig } from './types';
|
|
2
|
+
|
|
3
|
+
declare class WSManager {
|
|
4
|
+
private inRing;
|
|
5
|
+
private outRing;
|
|
6
|
+
private inputRing;
|
|
7
|
+
private outputRing;
|
|
8
|
+
private registry;
|
|
9
|
+
private static readonly MIN_BACKOFF_MS;
|
|
10
|
+
private static readonly MAX_BACKOFF_MS;
|
|
11
|
+
private static readonly BACKOFF_MULTIPLIER;
|
|
12
|
+
private inputLoopBackoffMs;
|
|
13
|
+
private inputLoopTimer;
|
|
14
|
+
private decoder;
|
|
15
|
+
constructor(config: RelayConfig);
|
|
16
|
+
resetInputLoopBackoff(): void;
|
|
17
|
+
private scheduleInputLoop;
|
|
18
|
+
private processInputLoop;
|
|
19
|
+
getInRing(): SharedArrayBuffer;
|
|
20
|
+
getOutRing(): SharedArrayBuffer;
|
|
21
|
+
}
|
|
22
|
+
export declare const wsManager: WSManager;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ws/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAW,WAAW,EAAE,MAAM,cAAc,CAAC;AA0CpD,cAAM,SAAS;IACd,OAAO,CAAC,MAAM,CAA6D;IAC3E,OAAO,CAAC,OAAO,CAA6D;IAC5E,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,QAAQ,CAAqB;IAGrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAM;IAC5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAQ;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAK;IAE/C,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,OAAO,CAAqB;gBAExB,MAAM,EAAE,WAAW;IAsCxB,qBAAqB,IAAI,IAAI;IAUpC,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,gBAAgB,CAoCtB;IAEF,SAAS,IAAI,iBAAiB;IAI9B,UAAU,IAAI,iBAAiB;CAG/B;AAED,eAAO,MAAM,SAAS,WAAoB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { RelayConfig, ConnectionStatus } from './types';
|
|
2
|
+
import { RelayConnection } from './connection';
|
|
3
|
+
|
|
4
|
+
export declare class ConnectionRegistry {
|
|
5
|
+
private connections;
|
|
6
|
+
private disabledRelays;
|
|
7
|
+
private nextAllowed;
|
|
8
|
+
private subCounts;
|
|
9
|
+
private disconnectTimers;
|
|
10
|
+
private config;
|
|
11
|
+
private readonly cooldownMs;
|
|
12
|
+
private readonly closeDelayMs;
|
|
13
|
+
constructor(config: RelayConfig);
|
|
14
|
+
private now;
|
|
15
|
+
private detectKind;
|
|
16
|
+
private getCount;
|
|
17
|
+
private setCount;
|
|
18
|
+
private cancelPendingDisconnect;
|
|
19
|
+
private scheduleDisconnectIfIdle;
|
|
20
|
+
private bumpCount;
|
|
21
|
+
private giveUpOrCooldown;
|
|
22
|
+
private isCoolingDown;
|
|
23
|
+
ensureConnection(url: string): Promise<RelayConnection>;
|
|
24
|
+
sendFrame(url: string, frame: string): Promise<void>;
|
|
25
|
+
sendToRelays(relays: string[], frames: string[]): Promise<void>;
|
|
26
|
+
disconnect(url: string): Promise<void>;
|
|
27
|
+
disconnectAll(): Promise<void>;
|
|
28
|
+
enableRelay(url: string): void;
|
|
29
|
+
isRelayDisabled(url: string): boolean;
|
|
30
|
+
getActiveReqCount(url: string): number;
|
|
31
|
+
getConnectionStatus(url: string): ConnectionStatus | undefined;
|
|
32
|
+
getAllStatuses(): Map<string, ConnectionStatus>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/ws/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,MAAM,CAAc;IAE5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,MAAM,EAAE,WAAW;IAI/B,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,QAAQ;IAGhB,OAAO,CAAC,QAAQ;IAGhB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,wBAAwB;IAUhC,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,aAAa;IAKf,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAkCvD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBpD,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAe/D,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAMpC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK9B,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIrC,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAItC,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAK9D,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC;CAK/C"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export declare class ByteRingBuffer {
|
|
2
|
+
private readonly sab;
|
|
3
|
+
private readonly dataView;
|
|
4
|
+
private readonly dataStart;
|
|
5
|
+
private readonly capacity;
|
|
6
|
+
private dropped;
|
|
7
|
+
constructor(buffer: SharedArrayBuffer);
|
|
8
|
+
private getHead;
|
|
9
|
+
private setHead;
|
|
10
|
+
private getTail;
|
|
11
|
+
private setTail;
|
|
12
|
+
private getSeq;
|
|
13
|
+
private setSeq;
|
|
14
|
+
getFreeSpace(): number;
|
|
15
|
+
getDropped(): number;
|
|
16
|
+
hasRecords(): boolean;
|
|
17
|
+
readNext(): {
|
|
18
|
+
payload: Uint8Array;
|
|
19
|
+
} | null;
|
|
20
|
+
/**
|
|
21
|
+
* Writes a payload to the ring buffer, overwriting old records if necessary.
|
|
22
|
+
* Returns the sequence number if successful, -1 if dropped (couldn't make space).
|
|
23
|
+
*/
|
|
24
|
+
write(payload: Uint8Array): number;
|
|
25
|
+
/**
|
|
26
|
+
* Reads the next committed payload or null if none ready.
|
|
27
|
+
* Advances tail on success.
|
|
28
|
+
*/
|
|
29
|
+
read(): Uint8Array | null;
|
|
30
|
+
private skipRecord;
|
|
31
|
+
private copyBytes;
|
|
32
|
+
private copyFromRing;
|
|
33
|
+
}
|
|
34
|
+
export declare function initializeRingHeader(buffer: SharedArrayBuffer): void;
|
|
35
|
+
//# sourceMappingURL=ring-buffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ring-buffer.d.ts","sourceRoot":"","sources":["../../src/ws/ring-buffer.ts"],"names":[],"mappings":"AAIA,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,OAAO,CAAa;gBAEhB,MAAM,EAAE,iBAAiB;IASrC,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,MAAM;IAId,YAAY,IAAI,MAAM;IAOtB,UAAU,IAAI,MAAM;IAIpB,UAAU,IAAI,OAAO;IAIrB,QAAQ,IAAI;QAAE,OAAO,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI;IAK1C;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM;IAsDlC;;;OAGG;IACH,IAAI,IAAI,UAAU,GAAG,IAAI;IA0BzB,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,YAAY;CAgBrB;AAKD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CA6BpE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export declare enum ConnectionStatus {
|
|
2
|
+
Idle = "idle",
|
|
3
|
+
Connecting = "connecting",
|
|
4
|
+
Ready = "ready",
|
|
5
|
+
Closing = "closing",
|
|
6
|
+
Closed = "closed",
|
|
7
|
+
Error = "error"
|
|
8
|
+
}
|
|
9
|
+
export declare enum MsgKind {
|
|
10
|
+
Unknown = 0,
|
|
11
|
+
Event = 1,
|
|
12
|
+
Eose = 2,
|
|
13
|
+
Ok = 3,
|
|
14
|
+
Closed = 4,
|
|
15
|
+
Notice = 5,
|
|
16
|
+
Auth = 6
|
|
17
|
+
}
|
|
18
|
+
export interface RelayConfig {
|
|
19
|
+
connectTimeoutMs?: number;
|
|
20
|
+
writeTimeoutMs?: number;
|
|
21
|
+
retryBaseMs?: number;
|
|
22
|
+
retryMaxMs?: number;
|
|
23
|
+
retryMultiplier?: number;
|
|
24
|
+
retryJitter?: number;
|
|
25
|
+
retry?: {
|
|
26
|
+
baseMs: number;
|
|
27
|
+
maxMs: number;
|
|
28
|
+
multiplier: number;
|
|
29
|
+
jitter: number;
|
|
30
|
+
};
|
|
31
|
+
idleTimeoutMs?: number;
|
|
32
|
+
}
|
|
33
|
+
export interface RelayStats {
|
|
34
|
+
sent: number;
|
|
35
|
+
received: number;
|
|
36
|
+
reconnects: number;
|
|
37
|
+
lastActivity: number;
|
|
38
|
+
uptime?: number;
|
|
39
|
+
dropped: number;
|
|
40
|
+
}
|
|
41
|
+
export interface InboundEnvelope {
|
|
42
|
+
relays: string[];
|
|
43
|
+
frames: string[];
|
|
44
|
+
}
|
|
45
|
+
export interface WorkerLine {
|
|
46
|
+
relay: {
|
|
47
|
+
url: string;
|
|
48
|
+
};
|
|
49
|
+
kind: number;
|
|
50
|
+
sub_id?: string;
|
|
51
|
+
raw: Uint8Array;
|
|
52
|
+
}
|
|
53
|
+
export type FrameCallback = (frame: string) => void;
|
|
54
|
+
export type MessageHandler = (url: string, kind: MsgKind, subId: string | null, rawText: string) => void;
|
|
55
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ws/types.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB;IAC1B,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,KAAK,UAAU;CAChB;AAED,oBAAY,OAAO;IACjB,OAAO,IAAI;IACX,KAAK,IAAI;IACT,IAAI,IAAI;IACR,EAAE,IAAI;IACN,MAAM,IAAI;IACV,MAAM,IAAI;IACV,IAAI,IAAI;CACT;AAKD,MAAM,WAAW,WAAW;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AACpD,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@candypoets/nipworker",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.51",
|
|
4
4
|
"description": "Nostr client library with worker-based architecture using Rust WASM",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
},
|
|
52
52
|
"homepage": "https://github.com/candypoets/nipworker#readme",
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@types/node": "^20.
|
|
54
|
+
"@types/node": "^20.19.17",
|
|
55
55
|
"typescript": "^5.0.0",
|
|
56
56
|
"vite": "^5.0.0",
|
|
57
57
|
"vite-plugin-dts": "^3.0.0",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"vite-plugin-wasm": "^3.0.0"
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
|
-
"@candypoets/rust-worker": "0.0.
|
|
63
|
+
"@candypoets/rust-worker": "0.0.51",
|
|
64
64
|
"@msgpack/msgpack": "^3.0.0",
|
|
65
65
|
"flatbuffers": "^25.2.10",
|
|
66
66
|
"msgpackr": "^1.11.5",
|