@candypoets/nipworker 0.0.39 → 0.0.41
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/nostr-data.d.ts +6 -2
- package/dist/generated/nostr/fb/nostr-data.d.ts.map +1 -1
- package/dist/hooks.d.ts +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.map +1 -1
- package/dist/index2.js +1 -1
- package/dist/index2.js.map +1 -1
- package/dist/message-type.js +1 -1
- package/dist/message-type.js.map +1 -1
- package/package.json +2 -2
|
@@ -9,6 +9,8 @@ export declare class NostrData implements flatbuffers.IUnpackableObject<NostrDat
|
|
|
9
9
|
static getSizePrefixedRootAsNostrData(bb: flatbuffers.ByteBuffer, obj?: NostrData): NostrData;
|
|
10
10
|
id(): ByteString | null;
|
|
11
11
|
id(optionalEncoding: flatbuffers.Encoding): ByteString | Uint8Array | null;
|
|
12
|
+
entity(): ByteString | null;
|
|
13
|
+
entity(optionalEncoding: flatbuffers.Encoding): ByteString | Uint8Array | null;
|
|
12
14
|
relays(index: number): ByteString;
|
|
13
15
|
relays(index: number, optionalEncoding: flatbuffers.Encoding): ByteString | Uint8Array;
|
|
14
16
|
relaysLength(): number;
|
|
@@ -17,22 +19,24 @@ export declare class NostrData implements flatbuffers.IUnpackableObject<NostrDat
|
|
|
17
19
|
kind(): bigint;
|
|
18
20
|
static startNostrData(builder: flatbuffers.Builder): void;
|
|
19
21
|
static addId(builder: flatbuffers.Builder, idOffset: flatbuffers.Offset): void;
|
|
22
|
+
static addEntity(builder: flatbuffers.Builder, entityOffset: flatbuffers.Offset): void;
|
|
20
23
|
static addRelays(builder: flatbuffers.Builder, relaysOffset: flatbuffers.Offset): void;
|
|
21
24
|
static createRelaysVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset;
|
|
22
25
|
static startRelaysVector(builder: flatbuffers.Builder, numElems: number): void;
|
|
23
26
|
static addAuthor(builder: flatbuffers.Builder, authorOffset: flatbuffers.Offset): void;
|
|
24
27
|
static addKind(builder: flatbuffers.Builder, kind: bigint): void;
|
|
25
28
|
static endNostrData(builder: flatbuffers.Builder): flatbuffers.Offset;
|
|
26
|
-
static createNostrData(builder: flatbuffers.Builder, idOffset: flatbuffers.Offset, relaysOffset: flatbuffers.Offset, authorOffset: flatbuffers.Offset, kind: bigint): flatbuffers.Offset;
|
|
29
|
+
static createNostrData(builder: flatbuffers.Builder, idOffset: flatbuffers.Offset, entityOffset: flatbuffers.Offset, relaysOffset: flatbuffers.Offset, authorOffset: flatbuffers.Offset, kind: bigint): flatbuffers.Offset;
|
|
27
30
|
unpack(): NostrDataT;
|
|
28
31
|
unpackTo(_o: NostrDataT): void;
|
|
29
32
|
}
|
|
30
33
|
export declare class NostrDataT implements flatbuffers.IGeneratedObject {
|
|
31
34
|
id: ByteString | Uint8Array | null;
|
|
35
|
+
entity: ByteString | Uint8Array | null;
|
|
32
36
|
relays: (string)[];
|
|
33
37
|
author: ByteString | Uint8Array | null;
|
|
34
38
|
kind: bigint;
|
|
35
|
-
constructor(id?: ByteString | Uint8Array | null, relays?: (string)[], author?: ByteString | Uint8Array | null, kind?: bigint);
|
|
39
|
+
constructor(id?: ByteString | Uint8Array | null, entity?: ByteString | Uint8Array | null, relays?: (string)[], author?: ByteString | Uint8Array | null, kind?: bigint);
|
|
36
40
|
pack(builder: flatbuffers.Builder): flatbuffers.Offset;
|
|
37
41
|
}
|
|
38
42
|
//# sourceMappingURL=nostr-data.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nostr-data.d.ts","sourceRoot":"","sources":["../../../../src/generated/nostr/fb/nostr-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAKhD,OAAO,KAAK,WAAW,MAAM,aAAa,CAAC;AAI3C,qBAAa,SAAU,YAAW,WAAW,CAAC,iBAAiB,CAAC,UAAU,CAAC;IACzE,EAAE,EAAE,WAAW,CAAC,UAAU,GAAC,IAAI,CAAQ;IACvC,MAAM,SAAK;IACX,MAAM,CAAC,CAAC,EAAC,MAAM,EAAE,EAAE,EAAC,WAAW,CAAC,UAAU,GAAE,SAAS;IAMvD,MAAM,CAAC,kBAAkB,CAAC,EAAE,EAAC,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,EAAC,SAAS,GAAE,SAAS;IAI9E,MAAM,CAAC,8BAA8B,CAAC,EAAE,EAAC,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,EAAC,SAAS,GAAE,SAAS;IAK1F,EAAE,IAAI,UAAU,GAAC,IAAI;IACrB,EAAE,CAAC,gBAAgB,EAAC,WAAW,CAAC,QAAQ,GAAG,UAAU,GAAC,UAAU,GAAC,IAAI;IAMrE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IACjC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAC,gBAAgB,EAAC,WAAW,CAAC,QAAQ,GAAG,UAAU,GAAC,UAAU;IAMlF,YAAY,IAAG,MAAM;IAKrB,MAAM,IAAI,UAAU,GAAC,IAAI;IACzB,MAAM,CAAC,gBAAgB,EAAC,WAAW,CAAC,QAAQ,GAAG,UAAU,GAAC,UAAU,GAAC,IAAI;IAMzE,IAAI,IAAG,MAAM;IAKb,MAAM,CAAC,cAAc,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO;IAIjD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAC,WAAW,CAAC,MAAM;IAIrE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,YAAY,EAAC,WAAW,CAAC,MAAM;IAI7E,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAC,WAAW,CAAC,MAAM,EAAE,GAAE,WAAW,CAAC,MAAM;IAQpG,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAC,MAAM;IAIrE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,YAAY,EAAC,WAAW,CAAC,MAAM;IAI7E,MAAM,CAAC,OAAO,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAC,MAAM;IAIvD,MAAM,CAAC,YAAY,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,GAAE,WAAW,CAAC,MAAM;
|
|
1
|
+
{"version":3,"file":"nostr-data.d.ts","sourceRoot":"","sources":["../../../../src/generated/nostr/fb/nostr-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAKhD,OAAO,KAAK,WAAW,MAAM,aAAa,CAAC;AAI3C,qBAAa,SAAU,YAAW,WAAW,CAAC,iBAAiB,CAAC,UAAU,CAAC;IACzE,EAAE,EAAE,WAAW,CAAC,UAAU,GAAC,IAAI,CAAQ;IACvC,MAAM,SAAK;IACX,MAAM,CAAC,CAAC,EAAC,MAAM,EAAE,EAAE,EAAC,WAAW,CAAC,UAAU,GAAE,SAAS;IAMvD,MAAM,CAAC,kBAAkB,CAAC,EAAE,EAAC,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,EAAC,SAAS,GAAE,SAAS;IAI9E,MAAM,CAAC,8BAA8B,CAAC,EAAE,EAAC,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,EAAC,SAAS,GAAE,SAAS;IAK1F,EAAE,IAAI,UAAU,GAAC,IAAI;IACrB,EAAE,CAAC,gBAAgB,EAAC,WAAW,CAAC,QAAQ,GAAG,UAAU,GAAC,UAAU,GAAC,IAAI;IAMrE,MAAM,IAAI,UAAU,GAAC,IAAI;IACzB,MAAM,CAAC,gBAAgB,EAAC,WAAW,CAAC,QAAQ,GAAG,UAAU,GAAC,UAAU,GAAC,IAAI;IAMzE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IACjC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAC,gBAAgB,EAAC,WAAW,CAAC,QAAQ,GAAG,UAAU,GAAC,UAAU;IAMlF,YAAY,IAAG,MAAM;IAKrB,MAAM,IAAI,UAAU,GAAC,IAAI;IACzB,MAAM,CAAC,gBAAgB,EAAC,WAAW,CAAC,QAAQ,GAAG,UAAU,GAAC,UAAU,GAAC,IAAI;IAMzE,IAAI,IAAG,MAAM;IAKb,MAAM,CAAC,cAAc,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO;IAIjD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAC,WAAW,CAAC,MAAM;IAIrE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,YAAY,EAAC,WAAW,CAAC,MAAM;IAI7E,MAAM,CAAC,SAAS,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,YAAY,EAAC,WAAW,CAAC,MAAM;IAI7E,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAC,WAAW,CAAC,MAAM,EAAE,GAAE,WAAW,CAAC,MAAM;IAQpG,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAC,MAAM;IAIrE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,YAAY,EAAC,WAAW,CAAC,MAAM;IAI7E,MAAM,CAAC,OAAO,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAC,MAAM;IAIvD,MAAM,CAAC,YAAY,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,GAAE,WAAW,CAAC,MAAM;IAOnE,MAAM,CAAC,eAAe,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAC,WAAW,CAAC,MAAM,EAAE,YAAY,EAAC,WAAW,CAAC,MAAM,EAAE,YAAY,EAAC,WAAW,CAAC,MAAM,EAAE,YAAY,EAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAC,MAAM,GAAE,WAAW,CAAC,MAAM;IAUnN,MAAM,IAAI,UAAU;IAWpB,QAAQ,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;CAO7B;AAED,qBAAa,UAAW,YAAW,WAAW,CAAC,gBAAgB;IAEtD,EAAE,EAAE,UAAU,GAAC,UAAU,GAAC,IAAI;IAC9B,MAAM,EAAE,UAAU,GAAC,UAAU,GAAC,IAAI;IAClC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE;IAClB,MAAM,EAAE,UAAU,GAAC,UAAU,GAAC,IAAI;IAClC,IAAI,EAAE,MAAM;gBAJZ,EAAE,GAAE,UAAU,GAAC,UAAU,GAAC,IAAW,EACrC,MAAM,GAAE,UAAU,GAAC,UAAU,GAAC,IAAW,EACzC,MAAM,GAAE,CAAC,MAAM,CAAC,EAAO,EACvB,MAAM,GAAE,UAAU,GAAC,UAAU,GAAC,IAAW,EACzC,IAAI,GAAE,MAAoB;IAInC,IAAI,CAAC,OAAO,EAAC,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,MAAM;CAcpD"}
|
package/dist/hooks.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { RequestObject } from './types';
|
|
|
4
4
|
import { WorkerMessage } from './generated/nostr/fb';
|
|
5
5
|
|
|
6
6
|
export declare function useSubscription(subId: string, requests: RequestObject[], callback?: (message: WorkerMessage) => void, options?: SubscriptionOptions, manager?: NostrManager): () => void;
|
|
7
|
-
export declare function usePublish(pubId: string, event: NostrEvent, callback?:
|
|
7
|
+
export declare function usePublish(pubId: string, event: NostrEvent, callback?: (message: WorkerMessage) => void, options?: {
|
|
8
8
|
trackStatus?: boolean;
|
|
9
9
|
}): () => void;
|
|
10
10
|
//# sourceMappingURL=hooks.d.ts.map
|
package/dist/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAG,UAAU,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAgB,mBAAmB,EAAE,KAAK,YAAY,EAAE,MAAM,GAAG,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa,EAAE,EACzB,QAAQ,GAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAe,EACrD,OAAO,GAAE,mBAA4C,EACrD,OAAO,GAAE,YAA2B,GACnC,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAG,UAAU,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAgB,mBAAmB,EAAE,KAAK,YAAY,EAAE,MAAM,GAAG,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa,EAAE,EACzB,QAAQ,GAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAe,EACrD,OAAO,GAAE,mBAA4C,EACrD,OAAO,GAAE,YAA2B,GACnC,MAAM,IAAI,CAyCZ;AAGD,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,UAAU,EACjB,QAAQ,GAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAe,EACrD,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAA0B,GACzD,MAAM,IAAI,CAqCZ"}
|
package/dist/hooks.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as
|
|
1
|
+
import{n as c,S as h}from"./index2.js";function v(s,l,d=()=>{},b={closeOnEose:!1},e=c){if(!s)return console.warn("useSharedSubscription: No subscription ID provided"),()=>{};let t=null,r=4,i=!0,n=!1,o=!1;const a=()=>{i=!1,o&&!n&&(e.removeEventListener(`subscription:${s}`,p),e.unsubscribe(s),n=!0)};s=e.createShortId(s),t=e.subscribe(s,l,b),o=!0;const p=()=>{if(!i||!t)return;let u=h.readMessages(t,r);for(;u.hasNewData;){for(const f of u.messages)d(f);r=u.newReadPosition,u=h.readMessages(t,r)}};return e.addEventListener(`subscription:${s}`,p),queueMicrotask(p),a}function S(s,l,d=()=>{},b={trackStatus:!0}){if(!s)return console.warn("usePublish: No publish ID provided"),()=>{};let e=null,t=4,r=!0;const i=()=>{r=!1,c.removeEventListener(`publish:${s}`,n)};e=c.publish(s,l);const n=()=>{if(!r||!e)return;const o=h.readMessages(e,t);o.hasNewData&&(o.messages.forEach(a=>{console.log(a),d(a)}),t=o.newReadPosition)};return b.trackStatus&&(c.addEventListener(`publish:${s}`,n),queueMicrotask(n)),i}export{S as usePublish,v as useSubscription};
|
package/dist/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sources":["../src/hooks.ts"],"sourcesContent":["import { NostrEvent } from \"nostr-tools\";\nimport { nostrManager, SubscriptionOptions, type NostrManager } from \".\";\nimport { SharedBufferReader } from \"src/lib/SharedBuffer\";\nimport type { RequestObject } from \"src/types\";\nimport { WorkerMessage } from \"./generated/nostr/fb\";\n\nexport function useSubscription(\n subId: string,\n requests: RequestObject[],\n callback: (message: WorkerMessage) => void = () => {},\n options: SubscriptionOptions = { closeOnEose: false },\n manager: NostrManager = nostrManager\n): () => void {\n if (!subId) {\n console.warn(\"useSharedSubscription: No subscription ID provided\");\n return () => {};\n }\n let buffer: SharedArrayBuffer | null = null;\n let lastReadPos: number = 4;\n let running: boolean = true;\n let hasUnsubscribed = false;\n let hasSubscribed = false;\n\n const unsubscribe = (): void => {\n running = false;\n if (hasSubscribed && !hasUnsubscribed) {\n manager.removeEventListener(`subscription:${subId}`, processEvents);\n manager.unsubscribe(subId);\n hasUnsubscribed = true;\n }\n };\n subId = manager.createShortId(subId);\n buffer = manager.subscribe(subId, requests, options);\n\n hasSubscribed = true;\n\n const processEvents = (): void => {\n if (!running || !buffer) return;\n
|
|
1
|
+
{"version":3,"file":"hooks.js","sources":["../src/hooks.ts"],"sourcesContent":["import { NostrEvent } from \"nostr-tools\";\nimport { nostrManager, SubscriptionOptions, type NostrManager } from \".\";\nimport { SharedBufferReader } from \"src/lib/SharedBuffer\";\nimport type { RequestObject } from \"src/types\";\nimport { WorkerMessage } from \"./generated/nostr/fb\";\n\nexport function useSubscription(\n subId: string,\n requests: RequestObject[],\n callback: (message: WorkerMessage) => void = () => {},\n options: SubscriptionOptions = { closeOnEose: false },\n manager: NostrManager = nostrManager\n): () => void {\n if (!subId) {\n console.warn(\"useSharedSubscription: No subscription ID provided\");\n return () => {};\n }\n let buffer: SharedArrayBuffer | null = null;\n let lastReadPos: number = 4;\n let running: boolean = true;\n let hasUnsubscribed = false;\n let hasSubscribed = false;\n\n const unsubscribe = (): void => {\n running = false;\n if (hasSubscribed && !hasUnsubscribed) {\n manager.removeEventListener(`subscription:${subId}`, processEvents);\n manager.unsubscribe(subId);\n hasUnsubscribed = true;\n }\n };\n subId = manager.createShortId(subId);\n buffer = manager.subscribe(subId, requests, options);\n\n hasSubscribed = true;\n\n const processEvents = (): void => {\n if (!running || !buffer) return;\n let result = SharedBufferReader.readMessages(buffer, lastReadPos);\n while (result.hasNewData) {\n for (const message of result.messages) {\n callback(message)\n }\n lastReadPos = result.newReadPosition;\n result = SharedBufferReader.readMessages(buffer, lastReadPos);\n }\n };\n\n manager.addEventListener(`subscription:${subId}`, processEvents)\n\n queueMicrotask(processEvents);\n\n return unsubscribe\n}\n\n\nexport function usePublish(\n pubId: string,\n event: NostrEvent,\n callback: (message: WorkerMessage) => void = () => {},\n options: { trackStatus?: boolean } = { trackStatus: true }\n): () => void {\n if (!pubId) {\n console.warn(\"usePublish: No publish ID provided\");\n return () => {};\n }\n\n let buffer: SharedArrayBuffer | null = null;\n let lastReadPos: number = 4;\n let running = true;\n\n const unsubscribe = (): void => {\n running = false;\n nostrManager.removeEventListener(`publish:${pubId}`, processEvents);\n };\n\n buffer = nostrManager.publish(pubId, event);\n\n const processEvents = (): void => {\n if (!running || !buffer) {\n return;\n }\n const result = SharedBufferReader.readMessages(buffer, lastReadPos);\n if (result.hasNewData) {\n result.messages.forEach((message: WorkerMessage) => {\n console.log(message);\n callback(message);\n });\n lastReadPos = result.newReadPosition;\n }\n };\n\n if (options.trackStatus) {\n nostrManager.addEventListener(`publish:${pubId}`, processEvents);\n queueMicrotask(processEvents);\n }\n\n return unsubscribe;\n}\n"],"names":["useSubscription","subId","requests","callback","options","manager","nostrManager","buffer","lastReadPos","running","hasUnsubscribed","hasSubscribed","unsubscribe","processEvents","result","SharedBufferReader","message","usePublish","pubId","event"],"mappings":";AAMO,SAASA,EACdC,GACAC,GACAC,IAA6C,MAAM;AAAC,GACpDC,IAA+B,EAAE,aAAa,GAAA,GAC9CC,IAAwBC,GACZ;AACZ,MAAI,CAACL;AACH,mBAAQ,KAAK,oDAAoD,GAC1D,MAAM;AAAA,IAAC;AAEhB,MAAIM,IAAmC,MACnCC,IAAsB,GACtBC,IAAmB,IACnBC,IAAkB,IAClBC,IAAgB;AAEpB,QAAMC,IAAc,MAAY;AAC9B,IAAAH,IAAU,IACNE,KAAiB,CAACD,MACpBL,EAAQ,oBAAoB,gBAAgBJ,CAAK,IAAIY,CAAa,GAClER,EAAQ,YAAYJ,CAAK,GACzBS,IAAkB;AAAA,EAEtB;AACA,EAAAT,IAAQI,EAAQ,cAAcJ,CAAK,GACnCM,IAASF,EAAQ,UAAUJ,GAAOC,GAAUE,CAAO,GAEnDO,IAAgB;AAEhB,QAAME,IAAgB,MAAY;AAChC,QAAI,CAACJ,KAAW,CAACF,EAAQ;AACzB,QAAIO,IAASC,EAAmB,aAAaR,GAAQC,CAAW;AAChE,WAAOM,EAAO,cAAY;AACxB,iBAAWE,KAAWF,EAAO;AAC3B,QAAAX,EAASa,CAAO;AAElB,MAAAR,IAAcM,EAAO,iBACrBA,IAASC,EAAmB,aAAaR,GAAQC,CAAW;AAAA,IAC9D;AAAA,EACF;AAEA,SAAAH,EAAQ,iBAAiB,gBAAgBJ,CAAK,IAAIY,CAAa,GAE/D,eAAeA,CAAa,GAErBD;AACT;AAGO,SAASK,EACdC,GACAC,GACAhB,IAA6C,MAAM;AAAC,GACpDC,IAAqC,EAAE,aAAa,MACxC;AACZ,MAAI,CAACc;AACH,mBAAQ,KAAK,oCAAoC,GAC1C,MAAM;AAAA,IAAC;AAGhB,MAAIX,IAAmC,MACnCC,IAAsB,GACtBC,IAAU;AAEd,QAAMG,IAAc,MAAY;AAC9B,IAAAH,IAAU,IACVH,EAAa,oBAAoB,WAAWY,CAAK,IAAIL,CAAa;AAAA,EACpE;AAEA,EAAAN,IAASD,EAAa,QAAQY,GAAOC,CAAK;AAE1C,QAAMN,IAAgB,MAAY;AAChC,QAAI,CAACJ,KAAW,CAACF;AACf;AAEF,UAAMO,IAASC,EAAmB,aAAaR,GAAQC,CAAW;AAClE,IAAIM,EAAO,eACTA,EAAO,SAAS,QAAQ,CAACE,MAA2B;AAChD,cAAQ,IAAIA,CAAO,GACnBb,EAASa,CAAO;AAAA,IACpB,CAAC,GACDR,IAAcM,EAAO;AAAA,EAEzB;AAEA,SAAIV,EAAQ,gBACRE,EAAa,iBAAiB,WAAWY,CAAK,IAAIL,CAAa,GAC/D,eAAeA,CAAa,IAGzBD;AACT;"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAwB,cAAc,EAAE,aAAa,EAAsB,aAAa,EAAE,MAAM,WAAW,CAAC;AAGxH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAO9C,MAAM,MAAM,oBAAoB,GAAG,CACjC,IAAI,EAAE,aAAa,KAChB,IAAI,CAAC;AAGV,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,UAAU,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAID;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAOjB;IACJ,OAAO,CAAC,SAAS,CAAkD;IACnE,OAAO,CAAC,OAAO,CAA6B;IAE5C,OAAO,CAAC,WAAW,CAAqB;IAEjC,uBAAuB,WAAoC;gBAKtD,MAAM,GAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAwB,cAAc,EAAE,aAAa,EAAsB,aAAa,EAAE,MAAM,WAAW,CAAC;AAGxH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAO9C,MAAM,MAAM,oBAAoB,GAAG,CACjC,IAAI,EAAE,aAAa,KAChB,IAAI,CAAC;AAGV,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,UAAU,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAID;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAOjB;IACJ,OAAO,CAAC,SAAS,CAAkD;IACnE,OAAO,CAAC,OAAO,CAA6B;IAE5C,OAAO,CAAC,WAAW,CAAqB;IAEjC,uBAAuB,WAAoC;gBAKtD,MAAM,GAAE,kBAAqE;IAMzF,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,mBAAmB;IAuBpB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAYpC,gBAAgB,CACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,kCAAkC,EAC5C,OAAO,CAAC,EAAE,uBAAuB,GAChC,IAAI;IAIA,mBAAmB,CACxB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,kCAAkC,EAC5C,OAAO,CAAC,EAAE,oBAAoB,GAC7B,IAAI;IAIP,OAAO,CAAC,QAAQ;IAIhB,SAAS,CACP,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,GAAE,mBAAwB,GAChC,iBAAiB;IAyFpB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IASvD,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAWzC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,iBAAiB;IAkCjE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAanD,SAAS,CAAC,KAAK,EAAE,UAAU;IAgB3B,YAAY;IAQZ,OAAO,IAAI,IAAI;CA0BhB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,GACzB,YAAY,CAEd;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,cAAqB,CAAC;AAE/C,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,cAAc,SAAS,CAAC"}
|
package/dist/index2.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{encode as l}from"@msgpack/msgpack";import{i as p,f as m,d as P,e as M,S as w,F as y,g as x,h as U,j as z,M as S,k as B,u as K}from"./message-type.js";import j from"@candypoets/rust-worker/worker.js?worker";class v{constructor(t){this.bytes_=t,this.position_=0,this.text_decoder_=new TextDecoder}static allocate(t){return new v(new Uint8Array(t))}clear(){this.position_=0}bytes(){return this.bytes_}position(){return this.position_}setPosition(t){this.position_=t}capacity(){return this.bytes_.length}readInt8(t){return this.readUint8(t)<<24>>24}readUint8(t){return this.bytes_[t]}readInt16(t){return this.readUint16(t)<<16>>16}readUint16(t){return this.bytes_[t]|this.bytes_[t+1]<<8}readInt32(t){return this.bytes_[t]|this.bytes_[t+1]<<8|this.bytes_[t+2]<<16|this.bytes_[t+3]<<24}readUint32(t){return this.readInt32(t)>>>0}readInt64(t){return BigInt.asIntN(64,BigInt(this.readUint32(t))+(BigInt(this.readUint32(t+4))<<BigInt(32)))}readUint64(t){return BigInt.asUintN(64,BigInt(this.readUint32(t))+(BigInt(this.readUint32(t+4))<<BigInt(32)))}readFloat32(t){return p[0]=this.readInt32(t),m[0]}readFloat64(t){return p[P?0:1]=this.readInt32(t),p[P?1:0]=this.readInt32(t+4),M[0]}writeInt8(t,e){this.bytes_[t]=e}writeUint8(t,e){this.bytes_[t]=e}writeInt16(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8}writeUint16(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8}writeInt32(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8,this.bytes_[t+2]=e>>16,this.bytes_[t+3]=e>>24}writeUint32(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8,this.bytes_[t+2]=e>>16,this.bytes_[t+3]=e>>24}writeInt64(t,e){this.writeInt32(t,Number(BigInt.asIntN(32,e))),this.writeInt32(t+4,Number(BigInt.asIntN(32,e>>BigInt(32))))}writeUint64(t,e){this.writeUint32(t,Number(BigInt.asUintN(32,e))),this.writeUint32(t+4,Number(BigInt.asUintN(32,e>>BigInt(32))))}writeFloat32(t,e){m[0]=e,this.writeInt32(t,p[0])}writeFloat64(t,e){M[0]=e,this.writeInt32(t,p[P?0:1]),this.writeInt32(t+4,p[P?1:0])}getBufferIdentifier(){if(this.bytes_.length<this.position_+w+y)throw new Error("FlatBuffers: ByteBuffer is too short to contain an identifier.");let t="";for(let e=0;e<y;e++)t+=String.fromCharCode(this.readInt8(this.position_+w+e));return t}__offset(t,e){const s=t-this.readInt32(t);return e<this.readInt16(s)?this.readInt16(s+e):0}__union(t,e){return t.bb_pos=e+this.readInt32(e),t.bb=this,t}__string(t,e){t+=this.readInt32(t);const s=this.readInt32(t);t+=w;const n=this.bytes_.subarray(t,t+s);return e===x.UTF8_BYTES?n:this.text_decoder_.decode(n)}__union_with_string(t,e){return typeof t=="string"?this.__string(e):this.__union(t,e)}__indirect(t){return t+this.readInt32(t)}__vector(t){return t+this.readInt32(t)+w}__vector_len(t){return this.readInt32(t+this.readInt32(t))}__has_identifier(t){if(t.length!=y)throw new Error("FlatBuffers: file identifier must be length "+y);for(let e=0;e<y;e++)if(t.charCodeAt(e)!=this.readInt8(this.position()+w+e))return!1;return!0}createScalarList(t,e){const s=[];for(let n=0;n<e;++n){const r=t(n);r!==null&&s.push(r)}return s}createObjList(t,e){const s=[];for(let n=0;n<e;++n){const r=t(n);r!==null&&s.push(r.unpack())}return s}}class h{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsNostrEvent(t,e){return(e||new h).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsNostrEvent(t,e){return t.setPosition(t.position()+U),(e||new h).__init(t.readInt32(t.position())+t.position(),t)}id(t){const e=this.bb.__offset(this.bb_pos,4);return e?this.bb.__stringByteString(this.bb_pos+e,t):null}pubkey(t){const e=this.bb.__offset(this.bb_pos,6);return e?this.bb.__stringByteString(this.bb_pos+e,t):null}kind(){const t=this.bb.__offset(this.bb_pos,8);return t?this.bb.readUint16(this.bb_pos+t):0}content(t){const e=this.bb.__offset(this.bb_pos,10);return e?this.bb.__stringByteString(this.bb_pos+e,t):null}tags(t,e){const s=this.bb.__offset(this.bb_pos,12);return s?(e||new z).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+s)+t*4),this.bb):null}tagsLength(){const t=this.bb.__offset(this.bb_pos,12);return t?this.bb.__vector_len(this.bb_pos+t):0}createdAt(){const t=this.bb.__offset(this.bb_pos,14);return t?this.bb.readInt32(this.bb_pos+t):0}sig(t){const e=this.bb.__offset(this.bb_pos,16);return e?this.bb.__stringByteString(this.bb_pos+e,t):null}static startNostrEvent(t){t.startObject(7)}static addId(t,e){t.addFieldOffset(0,e,0)}static addPubkey(t,e){t.addFieldOffset(1,e,0)}static addKind(t,e){t.addFieldInt16(2,e,0)}static addContent(t,e){t.addFieldOffset(3,e,0)}static addTags(t,e){t.addFieldOffset(4,e,0)}static createTagsVector(t,e){t.startVector(4,e.length,4);for(let s=e.length-1;s>=0;s--)t.addOffset(e[s]);return t.endVector()}static startTagsVector(t,e){t.startVector(4,e,4)}static addCreatedAt(t,e){t.addFieldInt32(5,e,0)}static addSig(t,e){t.addFieldOffset(6,e,0)}static endNostrEvent(t){const e=t.endObject();return t.requiredField(e,4),t.requiredField(e,6),t.requiredField(e,10),t.requiredField(e,12),t.requiredField(e,16),e}static createNostrEvent(t,e,s,n,r,a,o,f){return h.startNostrEvent(t),h.addId(t,e),h.addPubkey(t,s),h.addKind(t,n),h.addContent(t,r),h.addTags(t,a),h.addCreatedAt(t,o),h.addSig(t,f),h.endNostrEvent(t)}unpack(){return new F(this.id(),this.pubkey(),this.kind(),this.content(),this.bb.createObjList(this.tags.bind(this),this.tagsLength()),this.createdAt(),this.sig())}unpackTo(t){t.id=this.id(),t.pubkey=this.pubkey(),t.kind=this.kind(),t.content=this.content(),t.tags=this.bb.createObjList(this.tags.bind(this),this.tagsLength()),t.createdAt=this.createdAt(),t.sig=this.sig()}}class F{constructor(t=null,e=null,s=0,n=null,r=[],a=0,o=null){this.id=t,this.pubkey=e,this.kind=s,this.content=n,this.tags=r,this.createdAt=a,this.sig=o}pack(t){const e=this.id!==null?t.createString(this.id):0,s=this.pubkey!==null?t.createString(this.pubkey):0,n=this.content!==null?t.createString(this.content):0,r=h.createTagsVector(t,t.createObjectOffsetList(this.tags)),a=this.sig!==null?t.createString(this.sig):0;return h.createNostrEvent(t,e,s,this.kind,n,r,this.createdAt,a)}}var N=(i=>(i[i.Kind0Parsed=0]="Kind0Parsed",i[i.Kind1Parsed=1]="Kind1Parsed",i[i.Kind3Parsed=3]="Kind3Parsed",i[i.Kind4Parsed=4]="Kind4Parsed",i[i.Kind6Parsed=6]="Kind6Parsed",i[i.Kind7Parsed=7]="Kind7Parsed",i[i.Kind17Parsed=17]="Kind17Parsed",i[i.Kind7374Parsed=7374]="Kind7374Parsed",i[i.Kind7375Parsed=7375]="Kind7375Parsed",i[i.Kind7376Parsed=7376]="Kind7376Parsed",i[i.Kind9321Parsed=9321]="Kind9321Parsed",i[i.Kind9735Parsed=9735]="Kind9735Parsed",i[i.Kind10002Parsed=10002]="Kind10002Parsed",i[i.Kind10019Parsed=10019]="Kind10019Parsed",i[i.Kind17375Parsed=17375]="Kind17375Parsed",i[i.Kind39089Parsed=39089]="Kind39089Parsed",i))(N||{}),T=(i=>(i[i.CachedEvent=0]="CachedEvent",i[i.FetchedEvent=1]="FetchedEvent",i[i.Count=2]="Count",i[i.ConnectionStatus=3]="ConnectionStatus",i[i.Eoce=4]="Eoce",i[i.BufferFull=5]="BufferFull",i))(T||{});class c{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsWorkerMessage(t,e){return(e||new c).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsWorkerMessage(t,e){return t.setPosition(t.position()+U),(e||new c).__init(t.readInt32(t.position())+t.position(),t)}type(){const t=this.bb.__offset(this.bb_pos,4);return t?this.bb.readUint32(this.bb_pos+t):S.ParsedNostrEvent}contentType(){const t=this.bb.__offset(this.bb_pos,6);return t?this.bb.readUint8(this.bb_pos+t):B.NONE}content(t){const e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__union(t,this.bb_pos+e):null}static startWorkerMessage(t){t.startObject(3)}static addType(t,e){t.addFieldInt32(0,e,S.ParsedNostrEvent)}static addContentType(t,e){t.addFieldInt8(1,e,B.NONE)}static addContent(t,e){t.addFieldOffset(2,e,0)}static endWorkerMessage(t){return t.endObject()}static finishWorkerMessageBuffer(t,e){t.finish(e)}static finishSizePrefixedWorkerMessageBuffer(t,e){t.finish(e,void 0,!0)}static createWorkerMessage(t,e,s,n){return c.startWorkerMessage(t),c.addType(t,e),c.addContentType(t,s),c.addContent(t,n),c.endWorkerMessage(t)}unpack(){return new C(this.type(),this.contentType(),(()=>{const t=K(this.contentType(),this.content.bind(this));return t===null?null:t.unpack()})())}unpackTo(t){t.type=this.type(),t.contentType=this.contentType(),t.content=(()=>{const e=K(this.contentType(),this.content.bind(this));return e===null?null:e.unpack()})()}}class C{constructor(t=S.ParsedNostrEvent,e=B.NONE,s=null){this.type=t,this.contentType=e,this.content=s}pack(t){const e=t.createObjectOffset(this.content);return c.createWorkerMessage(t,this.type,this.contentType,e)}}class R{constructor(t){this.view=t}bytes(){return this.view}fnv1aHash(){let t=2166136261;for(let e=0;e<this.view.length;e++)t^=this.view[e],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 e=0;e<this.view.length;e++)if(this.view[e]!==t.view[e])return!1;return!0}}v.prototype.__stringByteString=function(i){i+=this.readInt32(i);const t=this.readInt32(i),e=i+4,s=this.bytes().subarray(e,e+t);return new R(s)};class I{static initializeBuffer(t){new DataView(t).setUint32(0,4,!0)}static writeMessage(t,e){const s=new DataView(t),n=new Uint8Array(t),r=s.getUint32(0,!0),a=4+e.length;if(r+a>t.byteLength)return console.warn("Buffer full, cannot write message"),!1;s.setUint32(r,e.length,!0),n.set(e,r+4);const o=r+a;return s.setUint32(0,o,!0),!0}static writeMessageObject(t,e){try{const s=l(e);return this.writeMessage(t,new Uint8Array(s))}catch(s){return console.error("Failed to encode message:",s),!1}}static readMessages(t,e=0){const s=new DataView(t),n=new Uint8Array(t),r=s.getUint32(0,!0),a=4;let o=e<a?a:e;if(r<=o)return{messages:[],newReadPosition:o,hasNewData:!1};const f=256,u=new Array(f);let d=0;try{for(;o<r&&!(d>=f||o+4>r);){const g=o,k=s.getUint32(g,!0),b=g+4,_=b+k;if(_>r)break;const O=n.subarray(b,_),W=new v(O),L=c.getRootAsWorkerMessage(W);u[d++]=L,o=_}return u.length=d,{messages:u,newReadPosition:o,hasNewData:d>0}}catch(g){return console.error("Failed to decode FlatBuffer data from SharedArrayBuffer:",g),u.length=d,{messages:u,newReadPosition:e<a?a:e,hasNewData:!1}}}static readAllMessages(t){const e=this.readMessages(t,0);return{messages:e.messages,totalMessages:e.messages.length}}static getCurrentWritePosition(t){return new DataView(t).getUint32(0,!0)}static hasNewData(t,e){const s=this.getCurrentWritePosition(t),n=Math.max(e,4);return s>n}static calculateBufferSize(t=100,e=3072){const s=t*e,n=Math.floor(s*.25);return 4+s+n}}class E{constructor(t={bufferKey:"general",maxBufferSize:1e7}){this.subscriptions=new Map,this.publishes=new Map,this.signers=new Map,this.eventTarget=new EventTarget,this.PERPETUAL_SUBSCRIPTIONS=["notifications","starterpack"],this.worker=this.createWorker(),this.worker.postMessage({type:"init",payload:t}),this.setupWorkerListener()}createWorker(){return new j}setupWorkerListener(){this.worker.onmessage=async t=>{const e=typeof t.data=="string"?t.data:void 0;if(e){if(this.subscriptions.has(e)){this.dispatch(`subscription:${e}`,e);return}if(this.publishes.has(e)){this.dispatch(`publish:${e}`,e);return}}},this.worker.onerror=t=>{console.error("Worker error:",t)}}createShortId(t){if(t.length<64)return t;let e=0;for(let s=0;s<t.length;s++){const n=t.charCodeAt(s);e=(e<<5)-e+n,e=e&e}return Math.abs(e).toString(36).substring(0,63)}addEventListener(t,e,s){this.eventTarget.addEventListener(t,e,s)}removeEventListener(t,e,s){this.eventTarget.removeEventListener(t,e,s)}dispatch(t,e){this.eventTarget.dispatchEvent(new CustomEvent(t,{detail:e}))}subscribe(t,e,s={}){const n=this.createShortId(t),r=this.subscriptions.get(n);if(r)return r.refCount++,r.buffer;const a={closeOnEose:!1,cacheFirst:!0,skipCache:!1,force:!1,enableOptimization:!0,...s},o=e.reduce((b,_)=>b+(_.limit||100),0),f=I.calculateBufferSize(o,s.bytesPerEvent);let u=new Uint8Array;s.initialMessage&&(u=l(s.initialMessage));const d=new SharedArrayBuffer(f+u.length);I.initializeBuffer(d),u.length>0&&(I.writeMessage(d,u)||console.error("Failed to write initial message to buffer")),this.subscriptions.set(n,{buffer:d,options:a,refCount:1});const g={pipeline:a.pipeline,closeOnEose:a.closeOnEose,cacheFirst:a.cacheFirst,timeoutMs:a.timeoutMs,maxEvents:a.maxEvents,enableOptimization:a.enableOptimization,skipCache:a.skipCache,force:a.force,bytesPerEvent:a.bytesPerEvent},k={Subscribe:{subscription_id:n,requests:e,config:g}};try{console.log("encoding message",k);const b=l(k);return this.worker.postMessage({serializedMessage:b,sharedBuffer:d}),d}catch(b){throw this.subscriptions.delete(n),b}}getBuffer(t){const e=this.subscriptions.get(t);if(e)return e.refCount++,e.buffer}unsubscribe(t){const e=t.length<64?t:this.createShortId(t),s=this.subscriptions.get(e);s&&s.refCount--}publish(t,e){const s=new SharedArrayBuffer(3072);I.initializeBuffer(s);try{const n={kind:e.kind,content:e.content,tags:e.tags||[]},r=l({Publish:{publish_id:t,template:n}});return this.worker.postMessage({serializedMessage:r,sharedBuffer:s}),this.publishes.set(t,{buffer:s}),s}catch(n){throw console.error("Failed to publish event:",n),n}}setSigner(t,e){const s=l({SetSigner:{signer_type:t,private_key:e}});this.worker.postMessage(s),this.signers.set(t,e)}signEvent(t){const e={SignEvent:{template:{kind:t.kind,content:t.content,tags:t.tags}}},s=l(e);this.worker.postMessage(s)}getPublicKey(){const t=l({GetPublicKey:{}});this.worker.postMessage(t)}cleanup(){const t=[];for(const[e,s]of this.subscriptions.entries())s.refCount<=0&&!this.PERPETUAL_SUBSCRIPTIONS.includes(e)&&t.push(e);for(const e of t)if(this.subscriptions.get(e)){const s=l({Unsubscribe:{subscription_id:e}});this.worker.postMessage(s),this.subscriptions.delete(e)}}}function D(i){return new E(i)}const A=new E;function V(){A.cleanup()}export{E as N,N as P,I as S,c as W,V as a,h as b,D as c,F as d,T as e,C as f,A as n};
|
|
1
|
+
import{encode as l}from"@msgpack/msgpack";import{i as p,f as m,d as k,e as M,S as w,F as y,g as x,h as U,j as z,M as S,k as B,u as K}from"./message-type.js";import j from"@candypoets/rust-worker/worker.js?worker";class P{constructor(t){this.bytes_=t,this.position_=0,this.text_decoder_=new TextDecoder}static allocate(t){return new P(new Uint8Array(t))}clear(){this.position_=0}bytes(){return this.bytes_}position(){return this.position_}setPosition(t){this.position_=t}capacity(){return this.bytes_.length}readInt8(t){return this.readUint8(t)<<24>>24}readUint8(t){return this.bytes_[t]}readInt16(t){return this.readUint16(t)<<16>>16}readUint16(t){return this.bytes_[t]|this.bytes_[t+1]<<8}readInt32(t){return this.bytes_[t]|this.bytes_[t+1]<<8|this.bytes_[t+2]<<16|this.bytes_[t+3]<<24}readUint32(t){return this.readInt32(t)>>>0}readInt64(t){return BigInt.asIntN(64,BigInt(this.readUint32(t))+(BigInt(this.readUint32(t+4))<<BigInt(32)))}readUint64(t){return BigInt.asUintN(64,BigInt(this.readUint32(t))+(BigInt(this.readUint32(t+4))<<BigInt(32)))}readFloat32(t){return p[0]=this.readInt32(t),m[0]}readFloat64(t){return p[k?0:1]=this.readInt32(t),p[k?1:0]=this.readInt32(t+4),M[0]}writeInt8(t,e){this.bytes_[t]=e}writeUint8(t,e){this.bytes_[t]=e}writeInt16(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8}writeUint16(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8}writeInt32(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8,this.bytes_[t+2]=e>>16,this.bytes_[t+3]=e>>24}writeUint32(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8,this.bytes_[t+2]=e>>16,this.bytes_[t+3]=e>>24}writeInt64(t,e){this.writeInt32(t,Number(BigInt.asIntN(32,e))),this.writeInt32(t+4,Number(BigInt.asIntN(32,e>>BigInt(32))))}writeUint64(t,e){this.writeUint32(t,Number(BigInt.asUintN(32,e))),this.writeUint32(t+4,Number(BigInt.asUintN(32,e>>BigInt(32))))}writeFloat32(t,e){m[0]=e,this.writeInt32(t,p[0])}writeFloat64(t,e){M[0]=e,this.writeInt32(t,p[k?0:1]),this.writeInt32(t+4,p[k?1:0])}getBufferIdentifier(){if(this.bytes_.length<this.position_+w+y)throw new Error("FlatBuffers: ByteBuffer is too short to contain an identifier.");let t="";for(let e=0;e<y;e++)t+=String.fromCharCode(this.readInt8(this.position_+w+e));return t}__offset(t,e){const s=t-this.readInt32(t);return e<this.readInt16(s)?this.readInt16(s+e):0}__union(t,e){return t.bb_pos=e+this.readInt32(e),t.bb=this,t}__string(t,e){t+=this.readInt32(t);const s=this.readInt32(t);t+=w;const n=this.bytes_.subarray(t,t+s);return e===x.UTF8_BYTES?n:this.text_decoder_.decode(n)}__union_with_string(t,e){return typeof t=="string"?this.__string(e):this.__union(t,e)}__indirect(t){return t+this.readInt32(t)}__vector(t){return t+this.readInt32(t)+w}__vector_len(t){return this.readInt32(t+this.readInt32(t))}__has_identifier(t){if(t.length!=y)throw new Error("FlatBuffers: file identifier must be length "+y);for(let e=0;e<y;e++)if(t.charCodeAt(e)!=this.readInt8(this.position()+w+e))return!1;return!0}createScalarList(t,e){const s=[];for(let n=0;n<e;++n){const r=t(n);r!==null&&s.push(r)}return s}createObjList(t,e){const s=[];for(let n=0;n<e;++n){const r=t(n);r!==null&&s.push(r.unpack())}return s}}class h{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsNostrEvent(t,e){return(e||new h).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsNostrEvent(t,e){return t.setPosition(t.position()+U),(e||new h).__init(t.readInt32(t.position())+t.position(),t)}id(t){const e=this.bb.__offset(this.bb_pos,4);return e?this.bb.__stringByteString(this.bb_pos+e,t):null}pubkey(t){const e=this.bb.__offset(this.bb_pos,6);return e?this.bb.__stringByteString(this.bb_pos+e,t):null}kind(){const t=this.bb.__offset(this.bb_pos,8);return t?this.bb.readUint16(this.bb_pos+t):0}content(t){const e=this.bb.__offset(this.bb_pos,10);return e?this.bb.__stringByteString(this.bb_pos+e,t):null}tags(t,e){const s=this.bb.__offset(this.bb_pos,12);return s?(e||new z).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+s)+t*4),this.bb):null}tagsLength(){const t=this.bb.__offset(this.bb_pos,12);return t?this.bb.__vector_len(this.bb_pos+t):0}createdAt(){const t=this.bb.__offset(this.bb_pos,14);return t?this.bb.readInt32(this.bb_pos+t):0}sig(t){const e=this.bb.__offset(this.bb_pos,16);return e?this.bb.__stringByteString(this.bb_pos+e,t):null}static startNostrEvent(t){t.startObject(7)}static addId(t,e){t.addFieldOffset(0,e,0)}static addPubkey(t,e){t.addFieldOffset(1,e,0)}static addKind(t,e){t.addFieldInt16(2,e,0)}static addContent(t,e){t.addFieldOffset(3,e,0)}static addTags(t,e){t.addFieldOffset(4,e,0)}static createTagsVector(t,e){t.startVector(4,e.length,4);for(let s=e.length-1;s>=0;s--)t.addOffset(e[s]);return t.endVector()}static startTagsVector(t,e){t.startVector(4,e,4)}static addCreatedAt(t,e){t.addFieldInt32(5,e,0)}static addSig(t,e){t.addFieldOffset(6,e,0)}static endNostrEvent(t){const e=t.endObject();return t.requiredField(e,4),t.requiredField(e,6),t.requiredField(e,10),t.requiredField(e,12),t.requiredField(e,16),e}static createNostrEvent(t,e,s,n,r,a,o,f){return h.startNostrEvent(t),h.addId(t,e),h.addPubkey(t,s),h.addKind(t,n),h.addContent(t,r),h.addTags(t,a),h.addCreatedAt(t,o),h.addSig(t,f),h.endNostrEvent(t)}unpack(){return new F(this.id(),this.pubkey(),this.kind(),this.content(),this.bb.createObjList(this.tags.bind(this),this.tagsLength()),this.createdAt(),this.sig())}unpackTo(t){t.id=this.id(),t.pubkey=this.pubkey(),t.kind=this.kind(),t.content=this.content(),t.tags=this.bb.createObjList(this.tags.bind(this),this.tagsLength()),t.createdAt=this.createdAt(),t.sig=this.sig()}}class F{constructor(t=null,e=null,s=0,n=null,r=[],a=0,o=null){this.id=t,this.pubkey=e,this.kind=s,this.content=n,this.tags=r,this.createdAt=a,this.sig=o}pack(t){const e=this.id!==null?t.createString(this.id):0,s=this.pubkey!==null?t.createString(this.pubkey):0,n=this.content!==null?t.createString(this.content):0,r=h.createTagsVector(t,t.createObjectOffsetList(this.tags)),a=this.sig!==null?t.createString(this.sig):0;return h.createNostrEvent(t,e,s,this.kind,n,r,this.createdAt,a)}}var N=(i=>(i[i.Kind0Parsed=0]="Kind0Parsed",i[i.Kind1Parsed=1]="Kind1Parsed",i[i.Kind3Parsed=3]="Kind3Parsed",i[i.Kind4Parsed=4]="Kind4Parsed",i[i.Kind6Parsed=6]="Kind6Parsed",i[i.Kind7Parsed=7]="Kind7Parsed",i[i.Kind17Parsed=17]="Kind17Parsed",i[i.Kind7374Parsed=7374]="Kind7374Parsed",i[i.Kind7375Parsed=7375]="Kind7375Parsed",i[i.Kind7376Parsed=7376]="Kind7376Parsed",i[i.Kind9321Parsed=9321]="Kind9321Parsed",i[i.Kind9735Parsed=9735]="Kind9735Parsed",i[i.Kind10002Parsed=10002]="Kind10002Parsed",i[i.Kind10019Parsed=10019]="Kind10019Parsed",i[i.Kind17375Parsed=17375]="Kind17375Parsed",i[i.Kind39089Parsed=39089]="Kind39089Parsed",i))(N||{}),T=(i=>(i[i.CachedEvent=0]="CachedEvent",i[i.FetchedEvent=1]="FetchedEvent",i[i.Count=2]="Count",i[i.ConnectionStatus=3]="ConnectionStatus",i[i.Eoce=4]="Eoce",i[i.BufferFull=5]="BufferFull",i))(T||{});class c{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsWorkerMessage(t,e){return(e||new c).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsWorkerMessage(t,e){return t.setPosition(t.position()+U),(e||new c).__init(t.readInt32(t.position())+t.position(),t)}type(){const t=this.bb.__offset(this.bb_pos,4);return t?this.bb.readUint32(this.bb_pos+t):S.ParsedNostrEvent}contentType(){const t=this.bb.__offset(this.bb_pos,6);return t?this.bb.readUint8(this.bb_pos+t):B.NONE}content(t){const e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__union(t,this.bb_pos+e):null}static startWorkerMessage(t){t.startObject(3)}static addType(t,e){t.addFieldInt32(0,e,S.ParsedNostrEvent)}static addContentType(t,e){t.addFieldInt8(1,e,B.NONE)}static addContent(t,e){t.addFieldOffset(2,e,0)}static endWorkerMessage(t){return t.endObject()}static finishWorkerMessageBuffer(t,e){t.finish(e)}static finishSizePrefixedWorkerMessageBuffer(t,e){t.finish(e,void 0,!0)}static createWorkerMessage(t,e,s,n){return c.startWorkerMessage(t),c.addType(t,e),c.addContentType(t,s),c.addContent(t,n),c.endWorkerMessage(t)}unpack(){return new C(this.type(),this.contentType(),(()=>{const t=K(this.contentType(),this.content.bind(this));return t===null?null:t.unpack()})())}unpackTo(t){t.type=this.type(),t.contentType=this.contentType(),t.content=(()=>{const e=K(this.contentType(),this.content.bind(this));return e===null?null:e.unpack()})()}}class C{constructor(t=S.ParsedNostrEvent,e=B.NONE,s=null){this.type=t,this.contentType=e,this.content=s}pack(t){const e=t.createObjectOffset(this.content);return c.createWorkerMessage(t,this.type,this.contentType,e)}}class R{constructor(t){this.view=t}bytes(){return this.view}fnv1aHash(){let t=2166136261;for(let e=0;e<this.view.length;e++)t^=this.view[e],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 e=0;e<this.view.length;e++)if(this.view[e]!==t.view[e])return!1;return!0}}P.prototype.__stringByteString=function(i){i+=this.readInt32(i);const t=this.readInt32(i),e=i+4,s=this.bytes().subarray(e,e+t);return new R(s)};class I{static initializeBuffer(t){new DataView(t).setUint32(0,4,!0)}static writeMessage(t,e){const s=new DataView(t),n=new Uint8Array(t),r=s.getUint32(0,!0),a=4+e.length;if(r+a>t.byteLength)return console.warn("Buffer full, cannot write message"),!1;s.setUint32(r,e.length,!0),n.set(e,r+4);const o=r+a;return s.setUint32(0,o,!0),!0}static writeMessageObject(t,e){try{const s=l(e);return this.writeMessage(t,new Uint8Array(s))}catch(s){return console.error("Failed to encode message:",s),!1}}static readMessages(t,e=0){const s=new DataView(t),n=new Uint8Array(t),r=s.getUint32(0,!0),a=4;let o=e<a?a:e;if(r<=o)return{messages:[],newReadPosition:o,hasNewData:!1};const f=128,u=new Array(f);let d=0;try{for(;o<r&&!(d>=f||o+4>r);){const g=o,v=s.getUint32(g,!0),b=g+4,_=b+v;if(_>r)break;const O=n.subarray(b,_),W=new P(O),L=c.getRootAsWorkerMessage(W);u[d++]=L,o=_}return u.length=d,{messages:u,newReadPosition:o,hasNewData:d>0}}catch(g){return console.error("Failed to decode FlatBuffer data from SharedArrayBuffer:",g),u.length=d,{messages:u,newReadPosition:e<a?a:e,hasNewData:!1}}}static readAllMessages(t){const e=this.readMessages(t,0);return{messages:e.messages,totalMessages:e.messages.length}}static getCurrentWritePosition(t){return new DataView(t).getUint32(0,!0)}static hasNewData(t,e){const s=this.getCurrentWritePosition(t),n=Math.max(e,4);return s>n}static calculateBufferSize(t=100,e=3072){const s=t*e,n=Math.floor(s*.25);return 4+s+n}}class E{constructor(t={bufferKey:"general",maxBufferSize:5e6}){this.subscriptions=new Map,this.publishes=new Map,this.signers=new Map,this.eventTarget=new EventTarget,this.PERPETUAL_SUBSCRIPTIONS=["notifications","starterpack"],this.worker=this.createWorker(),this.worker.postMessage({type:"init",payload:t}),this.setupWorkerListener()}createWorker(){return new j}setupWorkerListener(){this.worker.onmessage=async t=>{const e=typeof t.data=="string"?t.data:void 0;if(e){if(this.subscriptions.has(e)){this.dispatch(`subscription:${e}`,e);return}if(this.publishes.has(e)){this.dispatch(`publish:${e}`,e);return}}},this.worker.onerror=t=>{console.error("Worker error:",t)}}createShortId(t){if(t.length<64)return t;let e=0;for(let s=0;s<t.length;s++){const n=t.charCodeAt(s);e=(e<<5)-e+n,e=e&e}return Math.abs(e).toString(36).substring(0,63)}addEventListener(t,e,s){this.eventTarget.addEventListener(t,e,s)}removeEventListener(t,e,s){this.eventTarget.removeEventListener(t,e,s)}dispatch(t,e){this.eventTarget.dispatchEvent(new CustomEvent(t,{detail:e}))}subscribe(t,e,s={}){const n=this.createShortId(t),r=this.subscriptions.get(n);if(r)return r.refCount++,r.buffer;const a={closeOnEose:!1,cacheFirst:!0,skipCache:!1,force:!1,enableOptimization:!0,...s},o=e.reduce((b,_)=>b+(_.limit||100),0),f=I.calculateBufferSize(o,s.bytesPerEvent);let u=new Uint8Array;s.initialMessage&&(u=l(s.initialMessage));const d=new SharedArrayBuffer(f+u.length);I.initializeBuffer(d),u.length>0&&(I.writeMessage(d,u)||console.error("Failed to write initial message to buffer")),this.subscriptions.set(n,{buffer:d,options:a,refCount:1});const g={pipeline:a.pipeline,closeOnEose:a.closeOnEose,cacheFirst:a.cacheFirst,timeoutMs:a.timeoutMs,maxEvents:a.maxEvents,enableOptimization:a.enableOptimization,skipCache:a.skipCache,force:a.force,bytesPerEvent:a.bytesPerEvent},v={Subscribe:{subscription_id:n,requests:e,config:g}};try{const b=l(v);return this.worker.postMessage({serializedMessage:b,sharedBuffer:d}),d}catch(b){throw this.subscriptions.delete(n),b}}getBuffer(t){const e=this.subscriptions.get(t);if(e)return e.refCount++,e.buffer}unsubscribe(t){const e=t.length<64?t:this.createShortId(t),s=this.subscriptions.get(e);s&&s.refCount--}publish(t,e){const s=new SharedArrayBuffer(3072);I.initializeBuffer(s);try{const n={kind:e.kind,content:e.content,tags:e.tags||[]},r=l({Publish:{publish_id:t,template:n}});return this.worker.postMessage({serializedMessage:r,sharedBuffer:s}),this.publishes.set(t,{buffer:s}),s}catch(n){throw console.error("Failed to publish event:",n),n}}setSigner(t,e){const s=l({SetSigner:{signer_type:t,private_key:e}});this.worker.postMessage(s),this.signers.set(t,e)}signEvent(t){const e={SignEvent:{template:{kind:t.kind,content:t.content,tags:t.tags}}},s=l(e);this.worker.postMessage(s)}getPublicKey(){const t=l({GetPublicKey:{}});this.worker.postMessage(t)}cleanup(){const t=[];for(const[e,s]of this.subscriptions.entries())s.refCount<=0&&!this.PERPETUAL_SUBSCRIPTIONS.includes(e)&&t.push(e);for(const e of t)if(this.subscriptions.get(e)){const s=l({Unsubscribe:{subscription_id:e}});this.worker.postMessage(s),this.subscriptions.delete(e)}}}function D(i){return new E(i)}const A=new E;function V(){A.cleanup()}export{E as N,N as P,I as S,c as W,V as a,h as b,D as c,F as d,T as e,C as f,A as n};
|
package/dist/index2.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index2.js","sources":["../../../node_modules/flatbuffers/mjs/byte-buffer.js","../src/generated/nostr/fb/nostr-event.ts","../src/generated/nostr/fb/parsed-data-union.ts","../src/generated/nostr/fb/subscribe-kind.ts","../src/generated/nostr/fb/worker-message.ts","../src/lib/ByteString.ts","../src/lib/SharedBuffer.ts","../src/index.ts"],"sourcesContent":["import { FILE_IDENTIFIER_LENGTH, SIZEOF_INT } from \"./constants.js\";\nimport { int32, isLittleEndian, float32, float64 } from \"./utils.js\";\nimport { Encoding } from \"./encoding.js\";\nexport class ByteBuffer {\n /**\n * Create a new ByteBuffer with a given array of bytes (`Uint8Array`)\n */\n constructor(bytes_) {\n this.bytes_ = bytes_;\n this.position_ = 0;\n this.text_decoder_ = new TextDecoder();\n }\n /**\n * Create and allocate a new ByteBuffer with a given size.\n */\n static allocate(byte_size) {\n return new ByteBuffer(new Uint8Array(byte_size));\n }\n clear() {\n this.position_ = 0;\n }\n /**\n * Get the underlying `Uint8Array`.\n */\n bytes() {\n return this.bytes_;\n }\n /**\n * Get the buffer's position.\n */\n position() {\n return this.position_;\n }\n /**\n * Set the buffer's position.\n */\n setPosition(position) {\n this.position_ = position;\n }\n /**\n * Get the buffer's capacity.\n */\n capacity() {\n return this.bytes_.length;\n }\n readInt8(offset) {\n return this.readUint8(offset) << 24 >> 24;\n }\n readUint8(offset) {\n return this.bytes_[offset];\n }\n readInt16(offset) {\n return this.readUint16(offset) << 16 >> 16;\n }\n readUint16(offset) {\n return this.bytes_[offset] | this.bytes_[offset + 1] << 8;\n }\n readInt32(offset) {\n return this.bytes_[offset] | this.bytes_[offset + 1] << 8 | this.bytes_[offset + 2] << 16 | this.bytes_[offset + 3] << 24;\n }\n readUint32(offset) {\n return this.readInt32(offset) >>> 0;\n }\n readInt64(offset) {\n return BigInt.asIntN(64, BigInt(this.readUint32(offset)) + (BigInt(this.readUint32(offset + 4)) << BigInt(32)));\n }\n readUint64(offset) {\n return BigInt.asUintN(64, BigInt(this.readUint32(offset)) + (BigInt(this.readUint32(offset + 4)) << BigInt(32)));\n }\n readFloat32(offset) {\n int32[0] = this.readInt32(offset);\n return float32[0];\n }\n readFloat64(offset) {\n int32[isLittleEndian ? 0 : 1] = this.readInt32(offset);\n int32[isLittleEndian ? 1 : 0] = this.readInt32(offset + 4);\n return float64[0];\n }\n writeInt8(offset, value) {\n this.bytes_[offset] = value;\n }\n writeUint8(offset, value) {\n this.bytes_[offset] = value;\n }\n writeInt16(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n }\n writeUint16(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n }\n writeInt32(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n this.bytes_[offset + 2] = value >> 16;\n this.bytes_[offset + 3] = value >> 24;\n }\n writeUint32(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n this.bytes_[offset + 2] = value >> 16;\n this.bytes_[offset + 3] = value >> 24;\n }\n writeInt64(offset, value) {\n this.writeInt32(offset, Number(BigInt.asIntN(32, value)));\n this.writeInt32(offset + 4, Number(BigInt.asIntN(32, value >> BigInt(32))));\n }\n writeUint64(offset, value) {\n this.writeUint32(offset, Number(BigInt.asUintN(32, value)));\n this.writeUint32(offset + 4, Number(BigInt.asUintN(32, value >> BigInt(32))));\n }\n writeFloat32(offset, value) {\n float32[0] = value;\n this.writeInt32(offset, int32[0]);\n }\n writeFloat64(offset, value) {\n float64[0] = value;\n this.writeInt32(offset, int32[isLittleEndian ? 0 : 1]);\n this.writeInt32(offset + 4, int32[isLittleEndian ? 1 : 0]);\n }\n /**\n * Return the file identifier. Behavior is undefined for FlatBuffers whose\n * schema does not include a file_identifier (likely points at padding or the\n * start of a the root vtable).\n */\n getBufferIdentifier() {\n if (this.bytes_.length < this.position_ + SIZEOF_INT +\n FILE_IDENTIFIER_LENGTH) {\n throw new Error('FlatBuffers: ByteBuffer is too short to contain an identifier.');\n }\n let result = \"\";\n for (let i = 0; i < FILE_IDENTIFIER_LENGTH; i++) {\n result += String.fromCharCode(this.readInt8(this.position_ + SIZEOF_INT + i));\n }\n return result;\n }\n /**\n * Look up a field in the vtable, return an offset into the object, or 0 if the\n * field is not present.\n */\n __offset(bb_pos, vtable_offset) {\n const vtable = bb_pos - this.readInt32(bb_pos);\n return vtable_offset < this.readInt16(vtable) ? this.readInt16(vtable + vtable_offset) : 0;\n }\n /**\n * Initialize any Table-derived type to point to the union at the given offset.\n */\n __union(t, offset) {\n t.bb_pos = offset + this.readInt32(offset);\n t.bb = this;\n return t;\n }\n /**\n * Create a JavaScript string from UTF-8 data stored inside the FlatBuffer.\n * This allocates a new string and converts to wide chars upon each access.\n *\n * To avoid the conversion to string, pass Encoding.UTF8_BYTES as the\n * \"optionalEncoding\" argument. This is useful for avoiding conversion when\n * the data will just be packaged back up in another FlatBuffer later on.\n *\n * @param offset\n * @param opt_encoding Defaults to UTF16_STRING\n */\n __string(offset, opt_encoding) {\n offset += this.readInt32(offset);\n const length = this.readInt32(offset);\n offset += SIZEOF_INT;\n const utf8bytes = this.bytes_.subarray(offset, offset + length);\n if (opt_encoding === Encoding.UTF8_BYTES)\n return utf8bytes;\n else\n return this.text_decoder_.decode(utf8bytes);\n }\n /**\n * Handle unions that can contain string as its member, if a Table-derived type then initialize it,\n * if a string then return a new one\n *\n * WARNING: strings are immutable in JS so we can't change the string that the user gave us, this\n * makes the behaviour of __union_with_string different compared to __union\n */\n __union_with_string(o, offset) {\n if (typeof o === 'string') {\n return this.__string(offset);\n }\n return this.__union(o, offset);\n }\n /**\n * Retrieve the relative offset stored at \"offset\"\n */\n __indirect(offset) {\n return offset + this.readInt32(offset);\n }\n /**\n * Get the start of data of a vector whose offset is stored at \"offset\" in this object.\n */\n __vector(offset) {\n return offset + this.readInt32(offset) + SIZEOF_INT; // data starts after the length\n }\n /**\n * Get the length of a vector whose offset is stored at \"offset\" in this object.\n */\n __vector_len(offset) {\n return this.readInt32(offset + this.readInt32(offset));\n }\n __has_identifier(ident) {\n if (ident.length != FILE_IDENTIFIER_LENGTH) {\n throw new Error('FlatBuffers: file identifier must be length ' +\n FILE_IDENTIFIER_LENGTH);\n }\n for (let i = 0; i < FILE_IDENTIFIER_LENGTH; i++) {\n if (ident.charCodeAt(i) != this.readInt8(this.position() + SIZEOF_INT + i)) {\n return false;\n }\n }\n return true;\n }\n /**\n * A helper function for generating list for obj api\n */\n createScalarList(listAccessor, listLength) {\n const ret = [];\n for (let i = 0; i < listLength; ++i) {\n const val = listAccessor(i);\n if (val !== null) {\n ret.push(val);\n }\n }\n return ret;\n }\n /**\n * A helper function for generating list for obj api\n * @param listAccessor function that accepts an index and return data at that index\n * @param listLength listLength\n * @param res result list\n */\n createObjList(listAccessor, listLength) {\n const ret = [];\n for (let i = 0; i < listLength; ++i) {\n const val = listAccessor(i);\n if (val !== null) {\n ret.push(val.unpack());\n }\n }\n return ret;\n }\n}\n","import { ByteString } from \"src/lib/ByteString\";\n// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { StringVec, StringVecT } from '../../nostr/fb/string-vec.js';\n\n\nexport class NostrEvent implements flatbuffers.IUnpackableObject<NostrEventT> {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):NostrEvent {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsNostrEvent(bb:flatbuffers.ByteBuffer, obj?:NostrEvent):NostrEvent {\n return (obj || new NostrEvent()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsNostrEvent(bb:flatbuffers.ByteBuffer, obj?:NostrEvent):NostrEvent {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new NostrEvent()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nid(): ByteString|null\nid(optionalEncoding:flatbuffers.Encoding): ByteString|Uint8Array|null\nid(optionalEncoding?:any): ByteString|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__stringByteString(this.bb_pos + offset, optionalEncoding) : null;\n}\n\npubkey(): ByteString|null\npubkey(optionalEncoding:flatbuffers.Encoding): ByteString|Uint8Array|null\npubkey(optionalEncoding?:any): ByteString|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__stringByteString(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nkind():number {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 0;\n}\n\ncontent(): ByteString|null\ncontent(optionalEncoding:flatbuffers.Encoding): ByteString|Uint8Array|null\ncontent(optionalEncoding?:any): ByteString|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? this.bb!.__stringByteString(this.bb_pos + offset, optionalEncoding) : null;\n}\n\ntags(index: number, obj?:StringVec):StringVec|null {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? (obj || new StringVec()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\ntagsLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\ncreatedAt():number {\n const offset = this.bb!.__offset(this.bb_pos, 14);\n return offset ? this.bb!.readInt32(this.bb_pos + offset) : 0;\n}\n\nsig(): ByteString|null\nsig(optionalEncoding:flatbuffers.Encoding): ByteString|Uint8Array|null\nsig(optionalEncoding?:any): ByteString|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 16);\n return offset ? this.bb!.__stringByteString(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nstatic startNostrEvent(builder:flatbuffers.Builder) {\n builder.startObject(7);\n}\n\nstatic addId(builder:flatbuffers.Builder, idOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, idOffset, 0);\n}\n\nstatic addPubkey(builder:flatbuffers.Builder, pubkeyOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, pubkeyOffset, 0);\n}\n\nstatic addKind(builder:flatbuffers.Builder, kind:number) {\n builder.addFieldInt16(2, kind, 0);\n}\n\nstatic addContent(builder:flatbuffers.Builder, contentOffset:flatbuffers.Offset) {\n builder.addFieldOffset(3, contentOffset, 0);\n}\n\nstatic addTags(builder:flatbuffers.Builder, tagsOffset:flatbuffers.Offset) {\n builder.addFieldOffset(4, tagsOffset, 0);\n}\n\nstatic createTagsVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startTagsVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addCreatedAt(builder:flatbuffers.Builder, createdAt:number) {\n builder.addFieldInt32(5, createdAt, 0);\n}\n\nstatic addSig(builder:flatbuffers.Builder, sigOffset:flatbuffers.Offset) {\n builder.addFieldOffset(6, sigOffset, 0);\n}\n\nstatic endNostrEvent(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n builder.requiredField(offset, 4) // id\n builder.requiredField(offset, 6) // pubkey\n builder.requiredField(offset, 10) // content\n builder.requiredField(offset, 12) // tags\n builder.requiredField(offset, 16) // sig\n return offset;\n}\n\nstatic createNostrEvent(builder:flatbuffers.Builder, idOffset:flatbuffers.Offset, pubkeyOffset:flatbuffers.Offset, kind:number, contentOffset:flatbuffers.Offset, tagsOffset:flatbuffers.Offset, createdAt:number, sigOffset:flatbuffers.Offset):flatbuffers.Offset {\n NostrEvent.startNostrEvent(builder);\n NostrEvent.addId(builder, idOffset);\n NostrEvent.addPubkey(builder, pubkeyOffset);\n NostrEvent.addKind(builder, kind);\n NostrEvent.addContent(builder, contentOffset);\n NostrEvent.addTags(builder, tagsOffset);\n NostrEvent.addCreatedAt(builder, createdAt);\n NostrEvent.addSig(builder, sigOffset);\n return NostrEvent.endNostrEvent(builder);\n}\n\nunpack(): NostrEventT {\n return new NostrEventT(\n this.id(),\n this.pubkey(),\n this.kind(),\n this.content(),\n this.bb!.createObjList<StringVec, StringVecT>(this.tags.bind(this), this.tagsLength()),\n this.createdAt(),\n this.sig()\n );\n}\n\n\nunpackTo(_o: NostrEventT): void {\n _o.id = this.id();\n _o.pubkey = this.pubkey();\n _o.kind = this.kind();\n _o.content = this.content();\n _o.tags = this.bb!.createObjList<StringVec, StringVecT>(this.tags.bind(this), this.tagsLength());\n _o.createdAt = this.createdAt();\n _o.sig = this.sig();\n}\n}\n\nexport class NostrEventT implements flatbuffers.IGeneratedObject {\nconstructor(\n public id: ByteString|Uint8Array|null = null,\n public pubkey: ByteString|Uint8Array|null = null,\n public kind: number = 0,\n public content: ByteString|Uint8Array|null = null,\n public tags: (StringVecT)[] = [],\n public createdAt: number = 0,\n public sig: ByteString|Uint8Array|null = null\n){}\n\n\npack(builder:flatbuffers.Builder): flatbuffers.Offset {\n const id = (this.id !== null ? builder.createString(this.id!) : 0);\n const pubkey = (this.pubkey !== null ? builder.createString(this.pubkey!) : 0);\n const content = (this.content !== null ? builder.createString(this.content!) : 0);\n const tags = NostrEvent.createTagsVector(builder, builder.createObjectOffsetList(this.tags));\n const sig = (this.sig !== null ? builder.createString(this.sig!) : 0);\n\n return NostrEvent.createNostrEvent(builder,\n id,\n pubkey,\n this.kind,\n content,\n tags,\n this.createdAt,\n sig\n );\n}\n}\n","import { ByteString } from \"src/lib/ByteString\";\n// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nexport enum ParsedDataUnion {\n Kind0Parsed = 0,\n Kind1Parsed = 1,\n Kind3Parsed = 3,\n Kind4Parsed = 4,\n Kind6Parsed = 6,\n Kind7Parsed = 7,\n Kind17Parsed = 17,\n Kind7374Parsed = 7374,\n Kind7375Parsed = 7375,\n Kind7376Parsed = 7376,\n Kind9321Parsed = 9321,\n Kind9735Parsed = 9735,\n Kind10002Parsed = 10002,\n Kind10019Parsed = 10019,\n Kind17375Parsed = 17375,\n Kind39089Parsed = 39089\n}\n","import { ByteString } from \"src/lib/ByteString\";\n// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nexport enum SubscribeKind {\n CachedEvent = 0,\n FetchedEvent = 1,\n Count = 2,\n ConnectionStatus = 3,\n Eoce = 4,\n BufferFull = 5\n}\n","import { ByteString } from \"src/lib/ByteString\";\n// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { BufferFull, BufferFullT } from '../../nostr/fb/buffer-full.js';\nimport { ConnectionStatus, ConnectionStatusT } from '../../nostr/fb/connection-status.js';\nimport { CountResponse, CountResponseT } from '../../nostr/fb/count-response.js';\nimport { Eoce, EoceT } from '../../nostr/fb/eoce.js';\nimport { Message, unionToMessage, unionListToMessage } from '../../nostr/fb/message.js';\nimport { MessageType } from '../../nostr/fb/message-type.js';\nimport { ParsedEvent, ParsedEventT } from '../../nostr/fb/parsed-event.js';\nimport { ValidProofs, ValidProofsT } from '../../nostr/fb/valid-proofs.js';\n\n\nexport class WorkerMessage implements flatbuffers.IUnpackableObject<WorkerMessageT> {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):WorkerMessage {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsWorkerMessage(bb:flatbuffers.ByteBuffer, obj?:WorkerMessage):WorkerMessage {\n return (obj || new WorkerMessage()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsWorkerMessage(bb:flatbuffers.ByteBuffer, obj?:WorkerMessage):WorkerMessage {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new WorkerMessage()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\ntype():MessageType {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint32(this.bb_pos + offset) : MessageType.ParsedNostrEvent;\n}\n\ncontentType():Message {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : Message.NONE;\n}\n\ncontent<T extends flatbuffers.Table>(obj:any):any|null {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.__union(obj, this.bb_pos + offset) : null;\n}\n\nstatic startWorkerMessage(builder:flatbuffers.Builder) {\n builder.startObject(3);\n}\n\nstatic addType(builder:flatbuffers.Builder, type:MessageType) {\n builder.addFieldInt32(0, type, MessageType.ParsedNostrEvent);\n}\n\nstatic addContentType(builder:flatbuffers.Builder, contentType:Message) {\n builder.addFieldInt8(1, contentType, Message.NONE);\n}\n\nstatic addContent(builder:flatbuffers.Builder, contentOffset:flatbuffers.Offset) {\n builder.addFieldOffset(2, contentOffset, 0);\n}\n\nstatic endWorkerMessage(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic finishWorkerMessageBuffer(builder:flatbuffers.Builder, offset:flatbuffers.Offset) {\n builder.finish(offset);\n}\n\nstatic finishSizePrefixedWorkerMessageBuffer(builder:flatbuffers.Builder, offset:flatbuffers.Offset) {\n builder.finish(offset, undefined, true);\n}\n\nstatic createWorkerMessage(builder:flatbuffers.Builder, type:MessageType, contentType:Message, contentOffset:flatbuffers.Offset):flatbuffers.Offset {\n WorkerMessage.startWorkerMessage(builder);\n WorkerMessage.addType(builder, type);\n WorkerMessage.addContentType(builder, contentType);\n WorkerMessage.addContent(builder, contentOffset);\n return WorkerMessage.endWorkerMessage(builder);\n}\n\nunpack(): WorkerMessageT {\n return new WorkerMessageT(\n this.type(),\n this.contentType(),\n (() => {\n const temp = unionToMessage(this.contentType(), this.content.bind(this));\n if(temp === null) { return null; }\n return temp.unpack()\n })()\n );\n}\n\n\nunpackTo(_o: WorkerMessageT): void {\n _o.type = this.type();\n _o.contentType = this.contentType();\n _o.content = (() => {\n const temp = unionToMessage(this.contentType(), this.content.bind(this));\n if(temp === null) { return null; }\n return temp.unpack()\n })();\n}\n}\n\nexport class WorkerMessageT implements flatbuffers.IGeneratedObject {\nconstructor(\n public type: MessageType = MessageType.ParsedNostrEvent,\n public contentType: Message = Message.NONE,\n public content: BufferFullT|ConnectionStatusT|CountResponseT|EoceT|ParsedEventT|ValidProofsT|null = null\n){}\n\n\npack(builder:flatbuffers.Builder): flatbuffers.Offset {\n const content = builder.createObjectOffset(this.content);\n\n return WorkerMessage.createWorkerMessage(builder,\n this.type,\n this.contentType,\n content\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","import { encode } from \"@msgpack/msgpack\";\nimport { ByteBuffer } from \"flatbuffers\";\nimport { WorkerMessage } from \"src/generated/nostr/fb\";\nimport { ByteString } from \"src/lib/ByteString\";\n\nconst WorkerToMainMessageBufferFull = Object.freeze({\n SubscriptionEvent: {\n subscription_id: \"\",\n event_type: \"BUFFER_FULL\",\n event_data: []\n }\n});\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/**\n * Utility library for reading from SharedArrayBuffer with 4-byte header approach\n * Header format: [0-3]: Write position (4 bytes, little endian)\n * Data format: [4+]: [4-byte length][msgpack event][4-byte length][msgpack event]...\n */\nexport class SharedBufferReader {\n /**\n * Initialize a buffer for writing - sets the write position header to 4\n * @param buffer The SharedArrayBuffer to initialize\n */\n static initializeBuffer(buffer: SharedArrayBuffer): void {\n const view = new DataView(buffer);\n // Set initial write position to 4 (right after the header)\n view.setUint32(0, 4, true);\n }\n\n /**\n * Write a message to the SharedArrayBuffer\n * @param buffer The SharedArrayBuffer to write to\n * @param data The data to write (already encoded as Uint8Array)\n * @returns True if written successfully, false if buffer is full\n */\n static writeMessage(buffer: SharedArrayBuffer, data: Uint8Array): boolean {\n const view = new DataView(buffer);\n const uint8View = new Uint8Array(buffer);\n\n // Get current write position\n const currentWritePosition = view.getUint32(0, true);\n\n // Check if there's enough space (4 bytes for length + data length)\n const requiredSpace = 4 + data.length;\n if (currentWritePosition + requiredSpace > buffer.byteLength) {\n console.warn(\"Buffer full, cannot write message\");\n return false;\n }\n\n // Write the length prefix (4 bytes, little endian)\n view.setUint32(currentWritePosition, data.length, true);\n\n // Write the actual data\n uint8View.set(data, currentWritePosition + 4);\n\n // Update the write position header\n const newWritePosition = currentWritePosition + requiredSpace;\n view.setUint32(0, newWritePosition, true);\n\n return true;\n }\n\n /**\n * Write a message object to the SharedArrayBuffer (handles encoding)\n * @param buffer The SharedArrayBuffer to write to\n * @param message The message object to write\n * @returns True if written successfully, false if buffer is full\n */\n static writeMessageObject(buffer: SharedArrayBuffer, message: any): boolean {\n try {\n const encoded = encode(message);\n return this.writeMessage(buffer, new Uint8Array(encoded));\n } catch (error) {\n console.error(\"Failed to encode message:\", error);\n return false;\n }\n }\n\n\n /**\n * Read new messages from SharedArrayBuffer since last read position\n * @param buffer The SharedArrayBuffer to read from\n * @param lastReadPosition Last position read (default: 0, meaning read from beginning)\n * @returns Object containing new messages and updated read position\n */\n static readMessages(buffer: SharedArrayBuffer, lastReadPosition: number = 0) {\n const view = new DataView(buffer);\n const uint8View = new Uint8Array(buffer);\n\n const currentWritePosition = view.getUint32(0, true);\n const dataStartOffset = 4;\n let currentPos = lastReadPosition < dataStartOffset\n ? dataStartOffset\n : lastReadPosition;\n if (currentWritePosition <= currentPos) {\n return { messages: [], newReadPosition: currentPos, hasNewData: false };\n }\n\n const maxMessages = 256;\n const messages: WorkerMessage[] = new Array(maxMessages);\n let msgCount = 0;\n\n try {\n while (currentPos < currentWritePosition) {\n // Stop if we've filled this batch; leave currentPos at the start of the next message\n if (msgCount >= maxMessages) break;\n\n // Need enough bytes for header\n if (currentPos + 4 > currentWritePosition) break;\n\n const headerPos = currentPos;\n const eventLength = view.getUint32(headerPos, true);\n const payloadStart = headerPos + 4;\n const nextPos = payloadStart + eventLength;\n\n // Need the full payload to be available\n if (nextPos > currentWritePosition) break;\n\n // ⚡ ZERO-COPY: create subarray view directly over SharedArrayBuffer\n const flatBufferData = uint8View.subarray(payloadStart, nextPos);\n\n // Parse directly\n const bb = new ByteBuffer(flatBufferData);\n const message = WorkerMessage.getRootAsWorkerMessage(bb);\n\n messages[msgCount++] = message;\n\n // Advance to next message boundary\n currentPos = nextPos;\n }\n\n messages.length = msgCount;\n return {\n messages,\n newReadPosition: currentPos,\n hasNewData: msgCount > 0,\n };\n } catch (error) {\n console.error('Failed to decode FlatBuffer data from SharedArrayBuffer:', error);\n messages.length = msgCount;\n return {\n messages,\n newReadPosition: lastReadPosition < dataStartOffset\n ? dataStartOffset\n : lastReadPosition,\n hasNewData: false,\n };\n }\n }\n\n\n /**\n * Read all messages from SharedArrayBuffer from the beginning (ignores lastReadPosition)\n * @param buffer The SharedArrayBuffer to read from\n * @returns Object containing all messages in the buffer\n */\n static readAllMessages(buffer: SharedArrayBuffer): {\n messages: WorkerMessage[];\n totalMessages: number;\n } {\n const result = this.readMessages(buffer, 0); // Always start from beginning\n return {\n messages: result.messages,\n totalMessages: result.messages.length,\n };\n }\n\n /**\n * Get current write position from buffer header\n * @param buffer The SharedArrayBuffer to read from\n * @returns Current write position\n */\n static getCurrentWritePosition(buffer: SharedArrayBuffer): number {\n const view = new DataView(buffer);\n return view.getUint32(0, true);\n }\n\n /**\n * Check if buffer has new data since last read\n * @param buffer The SharedArrayBuffer to check\n * @param lastReadPosition Last position read\n * @returns True if there's new data to read\n */\n static hasNewData(\n buffer: SharedArrayBuffer,\n lastReadPosition: number,\n ): boolean {\n const currentWritePosition = this.getCurrentWritePosition(buffer);\n const dataStartOffset = 4;\n const actualLastReadPosition = Math.max(lastReadPosition, dataStartOffset);\n return currentWritePosition > actualLastReadPosition;\n }\n\n /**\n * Calculate recommended buffer size based on request limits\n * @param totalEventLimit Total expected events across all requests\n * @param bytesPerEvent Estimated bytes per event (default: 3072)\n * @returns Recommended buffer size in bytes\n */\n static calculateBufferSize(\n totalEventLimit: number = 100,\n bytesPerEvent: number = 3072,\n ): number {\n const headerSize = 4;\n const dataSize = totalEventLimit * bytesPerEvent;\n const overhead = Math.floor(dataSize * 0.25); // 25% overhead\n return headerSize + dataSize + overhead;\n }\n}\n","import { SharedBufferReader } from \"src/lib/SharedBuffer\";\n\nimport type { MainToWorkerMessage, PipelineConfig, RequestObject, SubscriptionConfig, WorkerMessage } from \"src/types\";\n\nimport { decode, encode } from \"@msgpack/msgpack\";\nimport type { NostrEvent } from \"nostr-tools\";\n\nimport RustWorker from \"@candypoets/rust-worker/worker.js?worker\";\n\n\n\n// Callback for subscription events\nexport type SubscriptionCallback = (\n data: WorkerMessage,\n) => void;\n\n\nexport interface SubscriptionOptions {\n pipeline?: PipelineConfig;\n closeOnEose?: boolean;\n cacheFirst?: boolean;\n timeoutMs?: number;\n maxEvents?: number;\n enableOptimization?: boolean;\n skipCache?: boolean;\n force?: boolean;\n bytesPerEvent?: number;\n initialMessage?: Uint8Array;\n}\n\n/**\n * Configuration for the Nostr Manager\n */\nexport interface NostrManagerConfig {\n bufferKey: string;\n maxBufferSize: number;\n}\n\n// const wasmReady = init(mainWasmUrl);\n\n/**\n * Pure TypeScript NostrClient that manages worker communication and state.\n * Uses WASM utilities for heavy lifting (encoding, decoding, crypto).\n */\nexport class NostrManager {\n private worker: Worker;\n private subscriptions = new Map<\n string,\n {\n buffer: SharedArrayBuffer;\n options: SubscriptionOptions;\n refCount: number;\n }\n >();\n private publishes = new Map<string, {buffer: SharedArrayBuffer}>();\n private signers = new Map<string, string>(); // name -> secret key hex\n\n private eventTarget = new EventTarget();\n\n public PERPETUAL_SUBSCRIPTIONS = [\"notifications\", \"starterpack\"];\n\n\n\n\n constructor(config: NostrManagerConfig = {bufferKey: \"general\", maxBufferSize: 10_000_000}) {\n this.worker = this.createWorker();\n this.worker.postMessage({ type: \"init\", payload: config });\n this.setupWorkerListener();\n }\n\n private createWorker(): Worker {\n return new RustWorker();\n }\n\n private setupWorkerListener() {\n this.worker.onmessage = async (event) => {\n const id = typeof event.data === \"string\" ? event.data : undefined;\n if (!id) return;\n\n // Prefer O(1) routing via your existing maps\n if (this.subscriptions.has(id)) {\n // Notify only the listeners for this subscription\n this.dispatch(`subscription:${id}`, id);\n return;\n }\n\n if (this.publishes.has(id)) {\n this.dispatch(`publish:${id}`, id);\n return;\n }\n };\n\n this.worker.onerror = (error) => {\n console.error(\"Worker error:\", error);\n };\n }\n\n public createShortId(input: string): string {\n if (input.length < 64) return input;\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n const shortId = Math.abs(hash).toString(36);\n return shortId.substring(0, 63);\n }\n\n public addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: AddEventListenerOptions\n ): void {\n this.eventTarget.addEventListener(type, listener as EventListener, options);\n }\n\n public removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: EventListenerOptions\n ): void {\n this.eventTarget.removeEventListener(type, listener as EventListener, options);\n }\n\n private dispatch(type: string, detail?: unknown): void {\n this.eventTarget.dispatchEvent(new CustomEvent(type, { detail }));\n }\n\n subscribe(\n subscriptionId: string,\n requests: RequestObject[],\n options: SubscriptionOptions = {},\n ): SharedArrayBuffer {\n const subId = this.createShortId(subscriptionId);\n\n const existingSubscription = this.subscriptions.get(subId);\n\n if (existingSubscription) {\n existingSubscription.refCount++;\n return existingSubscription.buffer;\n }\n\n const defaultOptions: SubscriptionOptions = {\n closeOnEose: false,\n cacheFirst: true,\n skipCache: false,\n force: false,\n enableOptimization: true,\n ...options,\n };\n\n const totalLimit = requests.reduce(\n (sum, req) => sum + (req.limit || 100),\n 0,\n );\n\n const bufferSize = SharedBufferReader.calculateBufferSize(\n totalLimit,\n options.bytesPerEvent,\n );\n\n let initialMessage: Uint8Array<ArrayBufferLike> = new Uint8Array();\n\n if(options.initialMessage) {\n initialMessage = encode(options.initialMessage);\n }\n\n const buffer = new SharedArrayBuffer(bufferSize + initialMessage.length);\n\n // Initialize the buffer (sets write position to 4)\n SharedBufferReader.initializeBuffer(buffer);\n\n // Write the initial message if provided\n if(initialMessage.length > 0) {\n const success = SharedBufferReader.writeMessage(buffer, initialMessage);\n if (!success) {\n console.error(\"Failed to write initial message to buffer\");\n }\n }\n\n this.subscriptions.set(subId, {\n buffer,\n options: defaultOptions,\n refCount: 1,\n });\n\n // Convert SubscriptionOptions to SubscriptionConfig for the worker\n const config: SubscriptionConfig = {\n pipeline: defaultOptions.pipeline,\n closeOnEose: defaultOptions.closeOnEose,\n cacheFirst: defaultOptions.cacheFirst,\n timeoutMs: defaultOptions.timeoutMs,\n maxEvents: defaultOptions.maxEvents,\n enableOptimization: defaultOptions.enableOptimization,\n skipCache: defaultOptions.skipCache,\n force: defaultOptions.force,\n bytesPerEvent: defaultOptions.bytesPerEvent,\n };\n\n const message: MainToWorkerMessage = {\n Subscribe: {\n subscription_id: subId,\n requests: requests,\n config: config,\n },\n };\n\n try {\n console.log(\"encoding message\", message)\n const pack = encode(message);\n this.worker.postMessage({\n serializedMessage: pack,\n sharedBuffer: buffer,\n });\n\n return buffer;\n } catch (error) {\n this.subscriptions.delete(subId);\n throw error;\n }\n }\n\n getBuffer(subId: string): SharedArrayBuffer | undefined {\n const existingSubscription = this.subscriptions.get(subId);\n if (existingSubscription) {\n existingSubscription.refCount++;\n return existingSubscription.buffer;\n }\n return undefined;\n }\n\n unsubscribe(subscriptionId: string): void {\n const subId =\n subscriptionId.length < 64\n ? subscriptionId\n : this.createShortId(subscriptionId);\n const subscription = this.subscriptions.get(subId);\n if (subscription) {\n subscription.refCount--;\n }\n }\n\n publish(publish_id: string, event: NostrEvent): SharedArrayBuffer {\n\n // a publish buffer fit in 3kb\n const buffer = new SharedArrayBuffer(3072);\n\n // Initialize the buffer (sets write position to 4)\n SharedBufferReader.initializeBuffer(buffer);\n\n try {\n const template = {\n kind: event.kind,\n content: event.content,\n tags: event.tags || [],\n };\n\n const message: MainToWorkerMessage = {\n Publish: {\n publish_id: publish_id,\n template,\n },\n };\n\n const p = encode(message);\n\n this.worker.postMessage({ serializedMessage: p, sharedBuffer: buffer });\n\n this.publishes.set(publish_id, {buffer});\n return buffer;\n } catch (error) {\n console.error(\"Failed to publish event:\", error);\n throw error;\n }\n }\n\n setSigner(name: string, secretKeyHex: string): void {\n const message: MainToWorkerMessage = {\n SetSigner: {\n signer_type: name,\n private_key: secretKeyHex,\n },\n };\n\n const pack = encode(message);\n this.worker.postMessage(pack);\n this.signers.set(name, secretKeyHex);\n }\n\n signEvent(event: NostrEvent) {\n const template = {\n kind: event.kind,\n content: event.content,\n tags: event.tags,\n };\n\n const message: MainToWorkerMessage = {\n SignEvent: {\n template: template,\n },\n };\n const pack = encode(message);\n this.worker.postMessage(pack);\n }\n\n getPublicKey() {\n const message: MainToWorkerMessage = {\n GetPublicKey: {},\n };\n const pack = encode(message);\n this.worker.postMessage(pack);\n }\n\n cleanup(): void {\n const subscriptionsToDelete: string[] = [];\n\n for (const [subId, subscription] of this.subscriptions.entries()) {\n if (\n subscription.refCount <= 0 &&\n !this.PERPETUAL_SUBSCRIPTIONS.includes(subId)\n ) {\n subscriptionsToDelete.push(subId);\n }\n }\n\n for (const subId of subscriptionsToDelete) {\n const subscription = this.subscriptions.get(subId);\n if (subscription) {\n const message: MainToWorkerMessage = {\n Unsubscribe: {\n subscription_id: subId,\n },\n };\n const pack = encode(message);\n this.worker.postMessage(pack);\n this.subscriptions.delete(subId);\n }\n }\n }\n}\n\n/**\n * Factory function to create a new NostrManager instance.\n * @param config - Configuration for the NostrManager.\n * @returns A new instance of NostrManager.\n */\nexport function createNostrManager(\n config: NostrManagerConfig,\n): NostrManager {\n return new NostrManager(config);\n}\n\n/**\n * Default singleton instance of the NostrManager.\n * Useful for applications that only need one instance.\n */\nexport const nostrManager = new NostrManager();\n\nexport function cleanup(): void {\n nostrManager.cleanup();\n}\n\nexport * from \"./types\";\n"],"names":["ByteBuffer","bytes_","byte_size","position","offset","int32","float32","isLittleEndian","float64","value","SIZEOF_INT","FILE_IDENTIFIER_LENGTH","result","i","bb_pos","vtable_offset","vtable","opt_encoding","length","utf8bytes","Encoding","o","ident","listAccessor","listLength","ret","val","NostrEvent","bb","obj","flatbuffers.SIZE_PREFIX_LENGTH","optionalEncoding","index","StringVec","builder","idOffset","pubkeyOffset","kind","contentOffset","tagsOffset","data","numElems","createdAt","sigOffset","NostrEventT","_o","id","pubkey","content","tags","sig","ParsedDataUnion","SubscribeKind","WorkerMessage","MessageType","Message","type","contentType","WorkerMessageT","temp","unionToMessage","ByteString","view","h","b","copy","other","start","slice","SharedBufferReader","buffer","uint8View","currentWritePosition","requiredSpace","newWritePosition","message","encoded","encode","error","lastReadPosition","dataStartOffset","currentPos","maxMessages","messages","msgCount","headerPos","eventLength","payloadStart","nextPos","flatBufferData","actualLastReadPosition","totalEventLimit","bytesPerEvent","dataSize","overhead","NostrManager","config","RustWorker","event","input","hash","char","listener","options","detail","subscriptionId","requests","subId","existingSubscription","defaultOptions","totalLimit","sum","req","bufferSize","initialMessage","pack","subscription","publish_id","template","p","name","secretKeyHex","subscriptionsToDelete","createNostrManager","nostrManager","cleanup"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index2.js","sources":["../../../node_modules/flatbuffers/mjs/byte-buffer.js","../src/generated/nostr/fb/nostr-event.ts","../src/generated/nostr/fb/parsed-data-union.ts","../src/generated/nostr/fb/subscribe-kind.ts","../src/generated/nostr/fb/worker-message.ts","../src/lib/ByteString.ts","../src/lib/SharedBuffer.ts","../src/index.ts"],"sourcesContent":["import { FILE_IDENTIFIER_LENGTH, SIZEOF_INT } from \"./constants.js\";\nimport { int32, isLittleEndian, float32, float64 } from \"./utils.js\";\nimport { Encoding } from \"./encoding.js\";\nexport class ByteBuffer {\n /**\n * Create a new ByteBuffer with a given array of bytes (`Uint8Array`)\n */\n constructor(bytes_) {\n this.bytes_ = bytes_;\n this.position_ = 0;\n this.text_decoder_ = new TextDecoder();\n }\n /**\n * Create and allocate a new ByteBuffer with a given size.\n */\n static allocate(byte_size) {\n return new ByteBuffer(new Uint8Array(byte_size));\n }\n clear() {\n this.position_ = 0;\n }\n /**\n * Get the underlying `Uint8Array`.\n */\n bytes() {\n return this.bytes_;\n }\n /**\n * Get the buffer's position.\n */\n position() {\n return this.position_;\n }\n /**\n * Set the buffer's position.\n */\n setPosition(position) {\n this.position_ = position;\n }\n /**\n * Get the buffer's capacity.\n */\n capacity() {\n return this.bytes_.length;\n }\n readInt8(offset) {\n return this.readUint8(offset) << 24 >> 24;\n }\n readUint8(offset) {\n return this.bytes_[offset];\n }\n readInt16(offset) {\n return this.readUint16(offset) << 16 >> 16;\n }\n readUint16(offset) {\n return this.bytes_[offset] | this.bytes_[offset + 1] << 8;\n }\n readInt32(offset) {\n return this.bytes_[offset] | this.bytes_[offset + 1] << 8 | this.bytes_[offset + 2] << 16 | this.bytes_[offset + 3] << 24;\n }\n readUint32(offset) {\n return this.readInt32(offset) >>> 0;\n }\n readInt64(offset) {\n return BigInt.asIntN(64, BigInt(this.readUint32(offset)) + (BigInt(this.readUint32(offset + 4)) << BigInt(32)));\n }\n readUint64(offset) {\n return BigInt.asUintN(64, BigInt(this.readUint32(offset)) + (BigInt(this.readUint32(offset + 4)) << BigInt(32)));\n }\n readFloat32(offset) {\n int32[0] = this.readInt32(offset);\n return float32[0];\n }\n readFloat64(offset) {\n int32[isLittleEndian ? 0 : 1] = this.readInt32(offset);\n int32[isLittleEndian ? 1 : 0] = this.readInt32(offset + 4);\n return float64[0];\n }\n writeInt8(offset, value) {\n this.bytes_[offset] = value;\n }\n writeUint8(offset, value) {\n this.bytes_[offset] = value;\n }\n writeInt16(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n }\n writeUint16(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n }\n writeInt32(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n this.bytes_[offset + 2] = value >> 16;\n this.bytes_[offset + 3] = value >> 24;\n }\n writeUint32(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n this.bytes_[offset + 2] = value >> 16;\n this.bytes_[offset + 3] = value >> 24;\n }\n writeInt64(offset, value) {\n this.writeInt32(offset, Number(BigInt.asIntN(32, value)));\n this.writeInt32(offset + 4, Number(BigInt.asIntN(32, value >> BigInt(32))));\n }\n writeUint64(offset, value) {\n this.writeUint32(offset, Number(BigInt.asUintN(32, value)));\n this.writeUint32(offset + 4, Number(BigInt.asUintN(32, value >> BigInt(32))));\n }\n writeFloat32(offset, value) {\n float32[0] = value;\n this.writeInt32(offset, int32[0]);\n }\n writeFloat64(offset, value) {\n float64[0] = value;\n this.writeInt32(offset, int32[isLittleEndian ? 0 : 1]);\n this.writeInt32(offset + 4, int32[isLittleEndian ? 1 : 0]);\n }\n /**\n * Return the file identifier. Behavior is undefined for FlatBuffers whose\n * schema does not include a file_identifier (likely points at padding or the\n * start of a the root vtable).\n */\n getBufferIdentifier() {\n if (this.bytes_.length < this.position_ + SIZEOF_INT +\n FILE_IDENTIFIER_LENGTH) {\n throw new Error('FlatBuffers: ByteBuffer is too short to contain an identifier.');\n }\n let result = \"\";\n for (let i = 0; i < FILE_IDENTIFIER_LENGTH; i++) {\n result += String.fromCharCode(this.readInt8(this.position_ + SIZEOF_INT + i));\n }\n return result;\n }\n /**\n * Look up a field in the vtable, return an offset into the object, or 0 if the\n * field is not present.\n */\n __offset(bb_pos, vtable_offset) {\n const vtable = bb_pos - this.readInt32(bb_pos);\n return vtable_offset < this.readInt16(vtable) ? this.readInt16(vtable + vtable_offset) : 0;\n }\n /**\n * Initialize any Table-derived type to point to the union at the given offset.\n */\n __union(t, offset) {\n t.bb_pos = offset + this.readInt32(offset);\n t.bb = this;\n return t;\n }\n /**\n * Create a JavaScript string from UTF-8 data stored inside the FlatBuffer.\n * This allocates a new string and converts to wide chars upon each access.\n *\n * To avoid the conversion to string, pass Encoding.UTF8_BYTES as the\n * \"optionalEncoding\" argument. This is useful for avoiding conversion when\n * the data will just be packaged back up in another FlatBuffer later on.\n *\n * @param offset\n * @param opt_encoding Defaults to UTF16_STRING\n */\n __string(offset, opt_encoding) {\n offset += this.readInt32(offset);\n const length = this.readInt32(offset);\n offset += SIZEOF_INT;\n const utf8bytes = this.bytes_.subarray(offset, offset + length);\n if (opt_encoding === Encoding.UTF8_BYTES)\n return utf8bytes;\n else\n return this.text_decoder_.decode(utf8bytes);\n }\n /**\n * Handle unions that can contain string as its member, if a Table-derived type then initialize it,\n * if a string then return a new one\n *\n * WARNING: strings are immutable in JS so we can't change the string that the user gave us, this\n * makes the behaviour of __union_with_string different compared to __union\n */\n __union_with_string(o, offset) {\n if (typeof o === 'string') {\n return this.__string(offset);\n }\n return this.__union(o, offset);\n }\n /**\n * Retrieve the relative offset stored at \"offset\"\n */\n __indirect(offset) {\n return offset + this.readInt32(offset);\n }\n /**\n * Get the start of data of a vector whose offset is stored at \"offset\" in this object.\n */\n __vector(offset) {\n return offset + this.readInt32(offset) + SIZEOF_INT; // data starts after the length\n }\n /**\n * Get the length of a vector whose offset is stored at \"offset\" in this object.\n */\n __vector_len(offset) {\n return this.readInt32(offset + this.readInt32(offset));\n }\n __has_identifier(ident) {\n if (ident.length != FILE_IDENTIFIER_LENGTH) {\n throw new Error('FlatBuffers: file identifier must be length ' +\n FILE_IDENTIFIER_LENGTH);\n }\n for (let i = 0; i < FILE_IDENTIFIER_LENGTH; i++) {\n if (ident.charCodeAt(i) != this.readInt8(this.position() + SIZEOF_INT + i)) {\n return false;\n }\n }\n return true;\n }\n /**\n * A helper function for generating list for obj api\n */\n createScalarList(listAccessor, listLength) {\n const ret = [];\n for (let i = 0; i < listLength; ++i) {\n const val = listAccessor(i);\n if (val !== null) {\n ret.push(val);\n }\n }\n return ret;\n }\n /**\n * A helper function for generating list for obj api\n * @param listAccessor function that accepts an index and return data at that index\n * @param listLength listLength\n * @param res result list\n */\n createObjList(listAccessor, listLength) {\n const ret = [];\n for (let i = 0; i < listLength; ++i) {\n const val = listAccessor(i);\n if (val !== null) {\n ret.push(val.unpack());\n }\n }\n return ret;\n }\n}\n","import { ByteString } from \"src/lib/ByteString\";\n// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { StringVec, StringVecT } from '../../nostr/fb/string-vec.js';\n\n\nexport class NostrEvent implements flatbuffers.IUnpackableObject<NostrEventT> {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):NostrEvent {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsNostrEvent(bb:flatbuffers.ByteBuffer, obj?:NostrEvent):NostrEvent {\n return (obj || new NostrEvent()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsNostrEvent(bb:flatbuffers.ByteBuffer, obj?:NostrEvent):NostrEvent {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new NostrEvent()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nid(): ByteString|null\nid(optionalEncoding:flatbuffers.Encoding): ByteString|Uint8Array|null\nid(optionalEncoding?:any): ByteString|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__stringByteString(this.bb_pos + offset, optionalEncoding) : null;\n}\n\npubkey(): ByteString|null\npubkey(optionalEncoding:flatbuffers.Encoding): ByteString|Uint8Array|null\npubkey(optionalEncoding?:any): ByteString|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__stringByteString(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nkind():number {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 0;\n}\n\ncontent(): ByteString|null\ncontent(optionalEncoding:flatbuffers.Encoding): ByteString|Uint8Array|null\ncontent(optionalEncoding?:any): ByteString|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? this.bb!.__stringByteString(this.bb_pos + offset, optionalEncoding) : null;\n}\n\ntags(index: number, obj?:StringVec):StringVec|null {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? (obj || new StringVec()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\ntagsLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\ncreatedAt():number {\n const offset = this.bb!.__offset(this.bb_pos, 14);\n return offset ? this.bb!.readInt32(this.bb_pos + offset) : 0;\n}\n\nsig(): ByteString|null\nsig(optionalEncoding:flatbuffers.Encoding): ByteString|Uint8Array|null\nsig(optionalEncoding?:any): ByteString|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 16);\n return offset ? this.bb!.__stringByteString(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nstatic startNostrEvent(builder:flatbuffers.Builder) {\n builder.startObject(7);\n}\n\nstatic addId(builder:flatbuffers.Builder, idOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, idOffset, 0);\n}\n\nstatic addPubkey(builder:flatbuffers.Builder, pubkeyOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, pubkeyOffset, 0);\n}\n\nstatic addKind(builder:flatbuffers.Builder, kind:number) {\n builder.addFieldInt16(2, kind, 0);\n}\n\nstatic addContent(builder:flatbuffers.Builder, contentOffset:flatbuffers.Offset) {\n builder.addFieldOffset(3, contentOffset, 0);\n}\n\nstatic addTags(builder:flatbuffers.Builder, tagsOffset:flatbuffers.Offset) {\n builder.addFieldOffset(4, tagsOffset, 0);\n}\n\nstatic createTagsVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startTagsVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addCreatedAt(builder:flatbuffers.Builder, createdAt:number) {\n builder.addFieldInt32(5, createdAt, 0);\n}\n\nstatic addSig(builder:flatbuffers.Builder, sigOffset:flatbuffers.Offset) {\n builder.addFieldOffset(6, sigOffset, 0);\n}\n\nstatic endNostrEvent(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n builder.requiredField(offset, 4) // id\n builder.requiredField(offset, 6) // pubkey\n builder.requiredField(offset, 10) // content\n builder.requiredField(offset, 12) // tags\n builder.requiredField(offset, 16) // sig\n return offset;\n}\n\nstatic createNostrEvent(builder:flatbuffers.Builder, idOffset:flatbuffers.Offset, pubkeyOffset:flatbuffers.Offset, kind:number, contentOffset:flatbuffers.Offset, tagsOffset:flatbuffers.Offset, createdAt:number, sigOffset:flatbuffers.Offset):flatbuffers.Offset {\n NostrEvent.startNostrEvent(builder);\n NostrEvent.addId(builder, idOffset);\n NostrEvent.addPubkey(builder, pubkeyOffset);\n NostrEvent.addKind(builder, kind);\n NostrEvent.addContent(builder, contentOffset);\n NostrEvent.addTags(builder, tagsOffset);\n NostrEvent.addCreatedAt(builder, createdAt);\n NostrEvent.addSig(builder, sigOffset);\n return NostrEvent.endNostrEvent(builder);\n}\n\nunpack(): NostrEventT {\n return new NostrEventT(\n this.id(),\n this.pubkey(),\n this.kind(),\n this.content(),\n this.bb!.createObjList<StringVec, StringVecT>(this.tags.bind(this), this.tagsLength()),\n this.createdAt(),\n this.sig()\n );\n}\n\n\nunpackTo(_o: NostrEventT): void {\n _o.id = this.id();\n _o.pubkey = this.pubkey();\n _o.kind = this.kind();\n _o.content = this.content();\n _o.tags = this.bb!.createObjList<StringVec, StringVecT>(this.tags.bind(this), this.tagsLength());\n _o.createdAt = this.createdAt();\n _o.sig = this.sig();\n}\n}\n\nexport class NostrEventT implements flatbuffers.IGeneratedObject {\nconstructor(\n public id: ByteString|Uint8Array|null = null,\n public pubkey: ByteString|Uint8Array|null = null,\n public kind: number = 0,\n public content: ByteString|Uint8Array|null = null,\n public tags: (StringVecT)[] = [],\n public createdAt: number = 0,\n public sig: ByteString|Uint8Array|null = null\n){}\n\n\npack(builder:flatbuffers.Builder): flatbuffers.Offset {\n const id = (this.id !== null ? builder.createString(this.id!) : 0);\n const pubkey = (this.pubkey !== null ? builder.createString(this.pubkey!) : 0);\n const content = (this.content !== null ? builder.createString(this.content!) : 0);\n const tags = NostrEvent.createTagsVector(builder, builder.createObjectOffsetList(this.tags));\n const sig = (this.sig !== null ? builder.createString(this.sig!) : 0);\n\n return NostrEvent.createNostrEvent(builder,\n id,\n pubkey,\n this.kind,\n content,\n tags,\n this.createdAt,\n sig\n );\n}\n}\n","import { ByteString } from \"src/lib/ByteString\";\n// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nexport enum ParsedDataUnion {\n Kind0Parsed = 0,\n Kind1Parsed = 1,\n Kind3Parsed = 3,\n Kind4Parsed = 4,\n Kind6Parsed = 6,\n Kind7Parsed = 7,\n Kind17Parsed = 17,\n Kind7374Parsed = 7374,\n Kind7375Parsed = 7375,\n Kind7376Parsed = 7376,\n Kind9321Parsed = 9321,\n Kind9735Parsed = 9735,\n Kind10002Parsed = 10002,\n Kind10019Parsed = 10019,\n Kind17375Parsed = 17375,\n Kind39089Parsed = 39089\n}\n","import { ByteString } from \"src/lib/ByteString\";\n// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nexport enum SubscribeKind {\n CachedEvent = 0,\n FetchedEvent = 1,\n Count = 2,\n ConnectionStatus = 3,\n Eoce = 4,\n BufferFull = 5\n}\n","import { ByteString } from \"src/lib/ByteString\";\n// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { BufferFull, BufferFullT } from '../../nostr/fb/buffer-full.js';\nimport { ConnectionStatus, ConnectionStatusT } from '../../nostr/fb/connection-status.js';\nimport { CountResponse, CountResponseT } from '../../nostr/fb/count-response.js';\nimport { Eoce, EoceT } from '../../nostr/fb/eoce.js';\nimport { Message, unionToMessage, unionListToMessage } from '../../nostr/fb/message.js';\nimport { MessageType } from '../../nostr/fb/message-type.js';\nimport { ParsedEvent, ParsedEventT } from '../../nostr/fb/parsed-event.js';\nimport { ValidProofs, ValidProofsT } from '../../nostr/fb/valid-proofs.js';\n\n\nexport class WorkerMessage implements flatbuffers.IUnpackableObject<WorkerMessageT> {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):WorkerMessage {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsWorkerMessage(bb:flatbuffers.ByteBuffer, obj?:WorkerMessage):WorkerMessage {\n return (obj || new WorkerMessage()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsWorkerMessage(bb:flatbuffers.ByteBuffer, obj?:WorkerMessage):WorkerMessage {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new WorkerMessage()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\ntype():MessageType {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint32(this.bb_pos + offset) : MessageType.ParsedNostrEvent;\n}\n\ncontentType():Message {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : Message.NONE;\n}\n\ncontent<T extends flatbuffers.Table>(obj:any):any|null {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.__union(obj, this.bb_pos + offset) : null;\n}\n\nstatic startWorkerMessage(builder:flatbuffers.Builder) {\n builder.startObject(3);\n}\n\nstatic addType(builder:flatbuffers.Builder, type:MessageType) {\n builder.addFieldInt32(0, type, MessageType.ParsedNostrEvent);\n}\n\nstatic addContentType(builder:flatbuffers.Builder, contentType:Message) {\n builder.addFieldInt8(1, contentType, Message.NONE);\n}\n\nstatic addContent(builder:flatbuffers.Builder, contentOffset:flatbuffers.Offset) {\n builder.addFieldOffset(2, contentOffset, 0);\n}\n\nstatic endWorkerMessage(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic finishWorkerMessageBuffer(builder:flatbuffers.Builder, offset:flatbuffers.Offset) {\n builder.finish(offset);\n}\n\nstatic finishSizePrefixedWorkerMessageBuffer(builder:flatbuffers.Builder, offset:flatbuffers.Offset) {\n builder.finish(offset, undefined, true);\n}\n\nstatic createWorkerMessage(builder:flatbuffers.Builder, type:MessageType, contentType:Message, contentOffset:flatbuffers.Offset):flatbuffers.Offset {\n WorkerMessage.startWorkerMessage(builder);\n WorkerMessage.addType(builder, type);\n WorkerMessage.addContentType(builder, contentType);\n WorkerMessage.addContent(builder, contentOffset);\n return WorkerMessage.endWorkerMessage(builder);\n}\n\nunpack(): WorkerMessageT {\n return new WorkerMessageT(\n this.type(),\n this.contentType(),\n (() => {\n const temp = unionToMessage(this.contentType(), this.content.bind(this));\n if(temp === null) { return null; }\n return temp.unpack()\n })()\n );\n}\n\n\nunpackTo(_o: WorkerMessageT): void {\n _o.type = this.type();\n _o.contentType = this.contentType();\n _o.content = (() => {\n const temp = unionToMessage(this.contentType(), this.content.bind(this));\n if(temp === null) { return null; }\n return temp.unpack()\n })();\n}\n}\n\nexport class WorkerMessageT implements flatbuffers.IGeneratedObject {\nconstructor(\n public type: MessageType = MessageType.ParsedNostrEvent,\n public contentType: Message = Message.NONE,\n public content: BufferFullT|ConnectionStatusT|CountResponseT|EoceT|ParsedEventT|ValidProofsT|null = null\n){}\n\n\npack(builder:flatbuffers.Builder): flatbuffers.Offset {\n const content = builder.createObjectOffset(this.content);\n\n return WorkerMessage.createWorkerMessage(builder,\n this.type,\n this.contentType,\n content\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","import { encode } from \"@msgpack/msgpack\";\nimport { ByteBuffer } from \"flatbuffers\";\nimport { WorkerMessage } from \"src/generated/nostr/fb\";\nimport { ByteString } from \"src/lib/ByteString\";\n\nconst WorkerToMainMessageBufferFull = Object.freeze({\n SubscriptionEvent: {\n subscription_id: \"\",\n event_type: \"BUFFER_FULL\",\n event_data: []\n }\n});\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/**\n * Utility library for reading from SharedArrayBuffer with 4-byte header approach\n * Header format: [0-3]: Write position (4 bytes, little endian)\n * Data format: [4+]: [4-byte length][msgpack event][4-byte length][msgpack event]...\n */\nexport class SharedBufferReader {\n /**\n * Initialize a buffer for writing - sets the write position header to 4\n * @param buffer The SharedArrayBuffer to initialize\n */\n static initializeBuffer(buffer: SharedArrayBuffer): void {\n const view = new DataView(buffer);\n // Set initial write position to 4 (right after the header)\n view.setUint32(0, 4, true);\n }\n\n /**\n * Write a message to the SharedArrayBuffer\n * @param buffer The SharedArrayBuffer to write to\n * @param data The data to write (already encoded as Uint8Array)\n * @returns True if written successfully, false if buffer is full\n */\n static writeMessage(buffer: SharedArrayBuffer, data: Uint8Array): boolean {\n const view = new DataView(buffer);\n const uint8View = new Uint8Array(buffer);\n\n // Get current write position\n const currentWritePosition = view.getUint32(0, true);\n\n // Check if there's enough space (4 bytes for length + data length)\n const requiredSpace = 4 + data.length;\n if (currentWritePosition + requiredSpace > buffer.byteLength) {\n console.warn(\"Buffer full, cannot write message\");\n return false;\n }\n\n // Write the length prefix (4 bytes, little endian)\n view.setUint32(currentWritePosition, data.length, true);\n\n // Write the actual data\n uint8View.set(data, currentWritePosition + 4);\n\n // Update the write position header\n const newWritePosition = currentWritePosition + requiredSpace;\n view.setUint32(0, newWritePosition, true);\n\n return true;\n }\n\n /**\n * Write a message object to the SharedArrayBuffer (handles encoding)\n * @param buffer The SharedArrayBuffer to write to\n * @param message The message object to write\n * @returns True if written successfully, false if buffer is full\n */\n static writeMessageObject(buffer: SharedArrayBuffer, message: any): boolean {\n try {\n const encoded = encode(message);\n return this.writeMessage(buffer, new Uint8Array(encoded));\n } catch (error) {\n console.error(\"Failed to encode message:\", error);\n return false;\n }\n }\n\n\n /**\n * Read new messages from SharedArrayBuffer since last read position\n * @param buffer The SharedArrayBuffer to read from\n * @param lastReadPosition Last position read (default: 0, meaning read from beginning)\n * @returns Object containing new messages and updated read position\n */\n static readMessages(buffer: SharedArrayBuffer, lastReadPosition: number = 0) {\n const view = new DataView(buffer);\n const uint8View = new Uint8Array(buffer);\n\n const currentWritePosition = view.getUint32(0, true);\n const dataStartOffset = 4;\n let currentPos = lastReadPosition < dataStartOffset\n ? dataStartOffset\n : lastReadPosition;\n if (currentWritePosition <= currentPos) {\n return { messages: [], newReadPosition: currentPos, hasNewData: false };\n }\n\n const maxMessages = 128;\n const messages: WorkerMessage[] = new Array(maxMessages);\n let msgCount = 0;\n\n try {\n while (currentPos < currentWritePosition) {\n // Stop if we've filled this batch; leave currentPos at the start of the next message\n if (msgCount >= maxMessages) break;\n\n // Need enough bytes for header\n if (currentPos + 4 > currentWritePosition) break;\n\n const headerPos = currentPos;\n const eventLength = view.getUint32(headerPos, true);\n const payloadStart = headerPos + 4;\n const nextPos = payloadStart + eventLength;\n\n // Need the full payload to be available\n if (nextPos > currentWritePosition) break;\n\n // ⚡ ZERO-COPY: create subarray view directly over SharedArrayBuffer\n const flatBufferData = uint8View.subarray(payloadStart, nextPos);\n\n // Parse directly\n const bb = new ByteBuffer(flatBufferData);\n const message = WorkerMessage.getRootAsWorkerMessage(bb);\n\n messages[msgCount++] = message;\n\n // Advance to next message boundary\n currentPos = nextPos;\n }\n\n messages.length = msgCount;\n return {\n messages,\n newReadPosition: currentPos,\n hasNewData: msgCount > 0,\n };\n } catch (error) {\n console.error('Failed to decode FlatBuffer data from SharedArrayBuffer:', error);\n messages.length = msgCount;\n return {\n messages,\n newReadPosition: lastReadPosition < dataStartOffset\n ? dataStartOffset\n : lastReadPosition,\n hasNewData: false,\n };\n }\n }\n\n\n /**\n * Read all messages from SharedArrayBuffer from the beginning (ignores lastReadPosition)\n * @param buffer The SharedArrayBuffer to read from\n * @returns Object containing all messages in the buffer\n */\n static readAllMessages(buffer: SharedArrayBuffer): {\n messages: WorkerMessage[];\n totalMessages: number;\n } {\n const result = this.readMessages(buffer, 0); // Always start from beginning\n return {\n messages: result.messages,\n totalMessages: result.messages.length,\n };\n }\n\n /**\n * Get current write position from buffer header\n * @param buffer The SharedArrayBuffer to read from\n * @returns Current write position\n */\n static getCurrentWritePosition(buffer: SharedArrayBuffer): number {\n const view = new DataView(buffer);\n return view.getUint32(0, true);\n }\n\n /**\n * Check if buffer has new data since last read\n * @param buffer The SharedArrayBuffer to check\n * @param lastReadPosition Last position read\n * @returns True if there's new data to read\n */\n static hasNewData(\n buffer: SharedArrayBuffer,\n lastReadPosition: number,\n ): boolean {\n const currentWritePosition = this.getCurrentWritePosition(buffer);\n const dataStartOffset = 4;\n const actualLastReadPosition = Math.max(lastReadPosition, dataStartOffset);\n return currentWritePosition > actualLastReadPosition;\n }\n\n /**\n * Calculate recommended buffer size based on request limits\n * @param totalEventLimit Total expected events across all requests\n * @param bytesPerEvent Estimated bytes per event (default: 3072)\n * @returns Recommended buffer size in bytes\n */\n static calculateBufferSize(\n totalEventLimit: number = 100,\n bytesPerEvent: number = 3072,\n ): number {\n const headerSize = 4;\n const dataSize = totalEventLimit * bytesPerEvent;\n const overhead = Math.floor(dataSize * 0.25); // 25% overhead\n return headerSize + dataSize + overhead;\n }\n}\n","import { SharedBufferReader } from \"src/lib/SharedBuffer\";\n\nimport type { MainToWorkerMessage, PipelineConfig, RequestObject, SubscriptionConfig, WorkerMessage } from \"src/types\";\n\nimport { decode, encode } from \"@msgpack/msgpack\";\nimport type { NostrEvent } from \"nostr-tools\";\n\nimport RustWorker from \"@candypoets/rust-worker/worker.js?worker\";\n\n\n\n// Callback for subscription events\nexport type SubscriptionCallback = (\n data: WorkerMessage,\n) => void;\n\n\nexport interface SubscriptionOptions {\n pipeline?: PipelineConfig;\n closeOnEose?: boolean;\n cacheFirst?: boolean;\n timeoutMs?: number;\n maxEvents?: number;\n enableOptimization?: boolean;\n skipCache?: boolean;\n force?: boolean;\n bytesPerEvent?: number;\n initialMessage?: Uint8Array;\n}\n\n/**\n * Configuration for the Nostr Manager\n */\nexport interface NostrManagerConfig {\n bufferKey: string;\n maxBufferSize: number;\n}\n\n// const wasmReady = init(mainWasmUrl);\n\n/**\n * Pure TypeScript NostrClient that manages worker communication and state.\n * Uses WASM utilities for heavy lifting (encoding, decoding, crypto).\n */\nexport class NostrManager {\n private worker: Worker;\n private subscriptions = new Map<\n string,\n {\n buffer: SharedArrayBuffer;\n options: SubscriptionOptions;\n refCount: number;\n }\n >();\n private publishes = new Map<string, {buffer: SharedArrayBuffer}>();\n private signers = new Map<string, string>(); // name -> secret key hex\n\n private eventTarget = new EventTarget();\n\n public PERPETUAL_SUBSCRIPTIONS = [\"notifications\", \"starterpack\"];\n\n\n\n\n constructor(config: NostrManagerConfig = {bufferKey: \"general\", maxBufferSize: 5_000_000}) {\n this.worker = this.createWorker();\n this.worker.postMessage({ type: \"init\", payload: config });\n this.setupWorkerListener();\n }\n\n private createWorker(): Worker {\n return new RustWorker();\n }\n\n private setupWorkerListener() {\n this.worker.onmessage = async (event) => {\n const id = typeof event.data === \"string\" ? event.data : undefined;\n if (!id) return;\n\n // Prefer O(1) routing via your existing maps\n if (this.subscriptions.has(id)) {\n // Notify only the listeners for this subscription\n this.dispatch(`subscription:${id}`, id);\n return;\n }\n\n if (this.publishes.has(id)) {\n this.dispatch(`publish:${id}`, id);\n return;\n }\n };\n\n this.worker.onerror = (error) => {\n console.error(\"Worker error:\", error);\n };\n }\n\n public createShortId(input: string): string {\n if (input.length < 64) return input;\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n const shortId = Math.abs(hash).toString(36);\n return shortId.substring(0, 63);\n }\n\n public addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: AddEventListenerOptions\n ): void {\n this.eventTarget.addEventListener(type, listener as EventListener, options);\n }\n\n public removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: EventListenerOptions\n ): void {\n this.eventTarget.removeEventListener(type, listener as EventListener, options);\n }\n\n private dispatch(type: string, detail?: unknown): void {\n this.eventTarget.dispatchEvent(new CustomEvent(type, { detail }));\n }\n\n subscribe(\n subscriptionId: string,\n requests: RequestObject[],\n options: SubscriptionOptions = {},\n ): SharedArrayBuffer {\n const subId = this.createShortId(subscriptionId);\n\n const existingSubscription = this.subscriptions.get(subId);\n\n if (existingSubscription) {\n existingSubscription.refCount++;\n return existingSubscription.buffer;\n }\n\n const defaultOptions: SubscriptionOptions = {\n closeOnEose: false,\n cacheFirst: true,\n skipCache: false,\n force: false,\n enableOptimization: true,\n ...options,\n };\n\n const totalLimit = requests.reduce(\n (sum, req) => sum + (req.limit || 100),\n 0,\n );\n\n const bufferSize = SharedBufferReader.calculateBufferSize(\n totalLimit,\n options.bytesPerEvent,\n );\n\n let initialMessage: Uint8Array<ArrayBufferLike> = new Uint8Array();\n\n if(options.initialMessage) {\n initialMessage = encode(options.initialMessage);\n }\n\n const buffer = new SharedArrayBuffer(bufferSize + initialMessage.length);\n\n // Initialize the buffer (sets write position to 4)\n SharedBufferReader.initializeBuffer(buffer);\n\n // Write the initial message if provided\n if(initialMessage.length > 0) {\n const success = SharedBufferReader.writeMessage(buffer, initialMessage);\n if (!success) {\n console.error(\"Failed to write initial message to buffer\");\n }\n }\n\n this.subscriptions.set(subId, {\n buffer,\n options: defaultOptions,\n refCount: 1,\n });\n\n // Convert SubscriptionOptions to SubscriptionConfig for the worker\n const config: SubscriptionConfig = {\n pipeline: defaultOptions.pipeline,\n closeOnEose: defaultOptions.closeOnEose,\n cacheFirst: defaultOptions.cacheFirst,\n timeoutMs: defaultOptions.timeoutMs,\n maxEvents: defaultOptions.maxEvents,\n enableOptimization: defaultOptions.enableOptimization,\n skipCache: defaultOptions.skipCache,\n force: defaultOptions.force,\n bytesPerEvent: defaultOptions.bytesPerEvent,\n };\n\n const message: MainToWorkerMessage = {\n Subscribe: {\n subscription_id: subId,\n requests: requests,\n config: config,\n },\n };\n\n try {\n const pack = encode(message);\n this.worker.postMessage({\n serializedMessage: pack,\n sharedBuffer: buffer,\n });\n\n return buffer;\n } catch (error) {\n this.subscriptions.delete(subId);\n throw error;\n }\n }\n\n getBuffer(subId: string): SharedArrayBuffer | undefined {\n const existingSubscription = this.subscriptions.get(subId);\n if (existingSubscription) {\n existingSubscription.refCount++;\n return existingSubscription.buffer;\n }\n return undefined;\n }\n\n unsubscribe(subscriptionId: string): void {\n const subId =\n subscriptionId.length < 64\n ? subscriptionId\n : this.createShortId(subscriptionId);\n const subscription = this.subscriptions.get(subId);\n if (subscription) {\n subscription.refCount--;\n }\n }\n\n publish(publish_id: string, event: NostrEvent): SharedArrayBuffer {\n\n // a publish buffer fit in 3kb\n const buffer = new SharedArrayBuffer(3072);\n\n // Initialize the buffer (sets write position to 4)\n SharedBufferReader.initializeBuffer(buffer);\n\n try {\n const template = {\n kind: event.kind,\n content: event.content,\n tags: event.tags || [],\n };\n\n const message: MainToWorkerMessage = {\n Publish: {\n publish_id: publish_id,\n template,\n },\n };\n\n const p = encode(message);\n\n this.worker.postMessage({ serializedMessage: p, sharedBuffer: buffer });\n\n this.publishes.set(publish_id, {buffer});\n return buffer;\n } catch (error) {\n console.error(\"Failed to publish event:\", error);\n throw error;\n }\n }\n\n setSigner(name: string, secretKeyHex: string): void {\n const message: MainToWorkerMessage = {\n SetSigner: {\n signer_type: name,\n private_key: secretKeyHex,\n },\n };\n\n const pack = encode(message);\n this.worker.postMessage(pack);\n this.signers.set(name, secretKeyHex);\n }\n\n signEvent(event: NostrEvent) {\n const template = {\n kind: event.kind,\n content: event.content,\n tags: event.tags,\n };\n\n const message: MainToWorkerMessage = {\n SignEvent: {\n template: template,\n },\n };\n const pack = encode(message);\n this.worker.postMessage(pack);\n }\n\n getPublicKey() {\n const message: MainToWorkerMessage = {\n GetPublicKey: {},\n };\n const pack = encode(message);\n this.worker.postMessage(pack);\n }\n\n cleanup(): void {\n const subscriptionsToDelete: string[] = [];\n\n for (const [subId, subscription] of this.subscriptions.entries()) {\n if (\n subscription.refCount <= 0 &&\n !this.PERPETUAL_SUBSCRIPTIONS.includes(subId)\n ) {\n subscriptionsToDelete.push(subId);\n }\n }\n\n for (const subId of subscriptionsToDelete) {\n const subscription = this.subscriptions.get(subId);\n if (subscription) {\n const message: MainToWorkerMessage = {\n Unsubscribe: {\n subscription_id: subId,\n },\n };\n const pack = encode(message);\n this.worker.postMessage(pack);\n this.subscriptions.delete(subId);\n }\n }\n }\n}\n\n/**\n * Factory function to create a new NostrManager instance.\n * @param config - Configuration for the NostrManager.\n * @returns A new instance of NostrManager.\n */\nexport function createNostrManager(\n config: NostrManagerConfig,\n): NostrManager {\n return new NostrManager(config);\n}\n\n/**\n * Default singleton instance of the NostrManager.\n * Useful for applications that only need one instance.\n */\nexport const nostrManager = new NostrManager();\n\nexport function cleanup(): void {\n nostrManager.cleanup();\n}\n\nexport * from \"./types\";\n"],"names":["ByteBuffer","bytes_","byte_size","position","offset","int32","float32","isLittleEndian","float64","value","SIZEOF_INT","FILE_IDENTIFIER_LENGTH","result","i","bb_pos","vtable_offset","vtable","opt_encoding","length","utf8bytes","Encoding","o","ident","listAccessor","listLength","ret","val","NostrEvent","bb","obj","flatbuffers.SIZE_PREFIX_LENGTH","optionalEncoding","index","StringVec","builder","idOffset","pubkeyOffset","kind","contentOffset","tagsOffset","data","numElems","createdAt","sigOffset","NostrEventT","_o","id","pubkey","content","tags","sig","ParsedDataUnion","SubscribeKind","WorkerMessage","MessageType","Message","type","contentType","WorkerMessageT","temp","unionToMessage","ByteString","view","h","b","copy","other","start","slice","SharedBufferReader","buffer","uint8View","currentWritePosition","requiredSpace","newWritePosition","message","encoded","encode","error","lastReadPosition","dataStartOffset","currentPos","maxMessages","messages","msgCount","headerPos","eventLength","payloadStart","nextPos","flatBufferData","actualLastReadPosition","totalEventLimit","bytesPerEvent","dataSize","overhead","NostrManager","config","RustWorker","event","input","hash","char","listener","options","detail","subscriptionId","requests","subId","existingSubscription","defaultOptions","totalLimit","sum","req","bufferSize","initialMessage","pack","subscription","publish_id","template","p","name","secretKeyHex","subscriptionsToDelete","createNostrManager","nostrManager","cleanup"],"mappings":"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","x_google_ignoreList":[0]}
|