@qntx/nostr 0.5.0 → 0.7.0
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/{abort-Ba8tDrOI.mjs → abort-DBq2STPj.mjs} +13 -6
- package/dist/abort-DBq2STPj.mjs.map +1 -0
- package/dist/{builder-9tjI6WQ3.mjs → builder-CdLE4J6O.mjs} +11 -17
- package/dist/builder-CdLE4J6O.mjs.map +1 -0
- package/dist/{builder-sSflu6nB.d.mts → builder-DgkqDylK.d.mts} +5 -6
- package/dist/{client-BtIAtxrL.mjs → client-CILhdfsF.mjs} +104 -314
- package/dist/client-CILhdfsF.mjs.map +1 -0
- package/dist/client.d.mts +2 -2
- package/dist/client.mjs +2 -2
- package/dist/collections-DtwMc1NU.mjs +33 -0
- package/dist/collections-DtwMc1NU.mjs.map +1 -0
- package/dist/core.d.mts +9 -8
- package/dist/core.mjs +7 -7
- package/dist/{error-BW7re1UN.d.mts → error-BD_0QFKT.d.mts} +2 -2
- package/dist/{error-CR8Urc84.d.mts → error-BquXDmIN.d.mts} +4 -4
- package/dist/{error-DrEIM7FO.mjs → error-L_QdmSnV.mjs} +2 -2
- package/dist/{error-DrEIM7FO.mjs.map → error-L_QdmSnV.mjs.map} +1 -1
- package/dist/{error-B__OMBRY.mjs → error-gtJvV6YS.mjs} +2 -2
- package/dist/{error-B__OMBRY.mjs.map → error-gtJvV6YS.mjs.map} +1 -1
- package/dist/{event-fU3Y01PR.d.mts → event-DJeb_DIL.d.mts} +4 -2
- package/dist/{event-D8Nfoh4K.mjs → event-DinQMmJ1.mjs} +16 -10
- package/dist/event-DinQMmJ1.mjs.map +1 -0
- package/dist/{filter-C0IMByE3.d.mts → filter-jI_9htF7.d.mts} +2 -2
- package/dist/{gossip-DpIvkBuj.d.mts → gossip-C7HLW5kI.d.mts} +35 -26
- package/dist/{gossip-oloDMWEj.mjs → gossip-CcTp9VpU.mjs} +23 -33
- package/dist/gossip-CcTp9VpU.mjs.map +1 -0
- package/dist/gossip.d.mts +1 -1
- package/dist/gossip.mjs +1 -1
- package/dist/{index-CvkvqB16.d.mts → index-DU9tRFTZ.d.mts} +7 -20
- package/dist/{index-q4MDce_r.d.mts → index-DiXwNn2M.d.mts} +6 -8
- package/dist/{index-QxvrpMfF.d.mts → index-DocgD9K0.d.mts} +92 -167
- package/dist/{index-D1bqFHKB.d.mts → index-InQZpHyQ.d.mts} +18 -18
- package/dist/{index-MxC28S4P.d.mts → index-Tx15HGAD.d.mts} +26 -28
- package/dist/{index-Dmc8FJgO.d.mts → index-iLT8UzY3.d.mts} +19 -37
- package/dist/index.d.mts +23 -21
- package/dist/index.mjs +21 -19
- package/dist/instance-BcKzxHIP.mjs +220 -0
- package/dist/instance-BcKzxHIP.mjs.map +1 -0
- package/dist/instance-DjsL8h84.d.mts +15 -0
- package/dist/{key-Cv4_pN3x.d.mts → key-D_5OgGT7.d.mts} +11 -7
- package/dist/{key-Bps-LqX7.mjs → key-bshqfmZL.mjs} +13 -9
- package/dist/key-bshqfmZL.mjs.map +1 -0
- package/dist/{loaders-o6YXB_Ri.mjs → loaders-DD0XAGzw.mjs} +73 -82
- package/dist/loaders-DD0XAGzw.mjs.map +1 -0
- package/dist/loaders.d.mts +3 -3
- package/dist/loaders.mjs +2 -2
- package/dist/{memory-C2EVx0_O.mjs → memory-D_-5-T31.mjs} +2 -2
- package/dist/memory-D_-5-T31.mjs.map +1 -0
- package/dist/{memory-index-Do1mz0WF.mjs → memory-index-C6rujtoc.mjs} +30 -247
- package/dist/memory-index-C6rujtoc.mjs.map +1 -0
- package/dist/message-CWLcFTQ1.mjs +194 -0
- package/dist/message-CWLcFTQ1.mjs.map +1 -0
- package/dist/{message-iGPIqnn0.d.mts → message-CbBZOhq3.d.mts} +3 -3
- package/dist/{nip17-CKIufV98.d.mts → nip17-cTDFfFVt.d.mts} +5 -6
- package/dist/{nip19-BevCJZsp.d.mts → nip19-D1OnJ192.d.mts} +3 -9
- package/dist/{nip46-DDV4dC56.d.mts → nip46-DrsPI8EX.d.mts} +3 -5
- package/dist/nip51-DoPUvQ--.d.mts +87 -0
- package/dist/{nip59-zQgdLcEr.d.mts → nip59-BFIihLYY.d.mts} +3 -4
- package/dist/nip65-52HiwiyD.d.mts +23 -0
- package/dist/{nip77-DH4RhS5r.d.mts → nip77-C9QcZn7b.d.mts} +3 -4
- package/dist/nips/blossom.d.mts +12 -8
- package/dist/nips/blossom.mjs +30 -9
- package/dist/nips/blossom.mjs.map +1 -1
- package/dist/nips/nip04.mjs +17 -7
- package/dist/nips/nip04.mjs.map +1 -1
- package/dist/nips/nip05.d.mts +2 -3
- package/dist/nips/nip05.mjs +1 -4
- package/dist/nips/nip05.mjs.map +1 -1
- package/dist/nips/nip10.d.mts +3 -3
- package/dist/nips/nip10.mjs +3 -3
- package/dist/nips/nip11.d.mts +1 -1
- package/dist/nips/nip11.mjs +4 -4
- package/dist/nips/nip11.mjs.map +1 -1
- package/dist/nips/nip13.d.mts +7 -7
- package/dist/nips/nip13.mjs +32 -10
- package/dist/nips/nip13.mjs.map +1 -1
- package/dist/nips/nip17.d.mts +1 -1
- package/dist/nips/nip17.mjs +13 -33
- package/dist/nips/nip17.mjs.map +1 -1
- package/dist/nips/nip19.d.mts +2 -2
- package/dist/nips/nip19.mjs +16 -28
- package/dist/nips/nip19.mjs.map +1 -1
- package/dist/nips/nip21.d.mts +6 -1
- package/dist/nips/nip21.mjs +15 -5
- package/dist/nips/nip21.mjs.map +1 -1
- package/dist/nips/nip27.d.mts +4 -4
- package/dist/nips/nip27.mjs.map +1 -1
- package/dist/nips/nip42.d.mts +1 -1
- package/dist/nips/nip42.mjs +2 -1
- package/dist/nips/nip42.mjs.map +1 -1
- package/dist/nips/nip44.mjs +1 -1
- package/dist/nips/nip46.d.mts +2 -2
- package/dist/nips/nip46.mjs +15 -19
- package/dist/nips/nip46.mjs.map +1 -1
- package/dist/nips/nip49.d.mts +5 -5
- package/dist/nips/nip49.mjs +4 -4
- package/dist/nips/nip49.mjs.map +1 -1
- package/dist/nips/nip51.d.mts +2 -86
- package/dist/nips/nip51.mjs +7 -23
- package/dist/nips/nip51.mjs.map +1 -1
- package/dist/nips/nip57.d.mts +7 -5
- package/dist/nips/nip57.mjs +12 -17
- package/dist/nips/nip57.mjs.map +1 -1
- package/dist/nips/nip59.d.mts +1 -1
- package/dist/nips/nip59.mjs +16 -16
- package/dist/nips/nip59.mjs.map +1 -1
- package/dist/nips/nip65.d.mts +2 -2
- package/dist/nips/nip65.mjs +14 -37
- package/dist/nips/nip65.mjs.map +1 -1
- package/dist/nips/nip77.d.mts +1 -1
- package/dist/nips/nip77.mjs +33 -32
- package/dist/nips/nip77.mjs.map +1 -1
- package/dist/nips/nip98.d.mts +5 -5
- package/dist/nips/nip98.mjs +8 -8
- package/dist/nips/nip98.mjs.map +1 -1
- package/dist/nostr_crypto_wasm_bg.wasm +0 -0
- package/dist/{pool-DBIYMtwy.d.mts → pool-SzJKPIa3.d.mts} +96 -91
- package/dist/pool-YHRZgcQ3.mjs +596 -0
- package/dist/pool-YHRZgcQ3.mjs.map +1 -0
- package/dist/put-DS0yzVJx.mjs +187 -0
- package/dist/put-DS0yzVJx.mjs.map +1 -0
- package/dist/{reactive-DFpqtIf_.d.mts → reactive-BJ1ggn4d.d.mts} +9 -22
- package/dist/{reactive-DDlThDSZ.mjs → reactive-BJRoVHxU.mjs} +113 -64
- package/dist/reactive-BJRoVHxU.mjs.map +1 -0
- package/dist/{pool-As20OGxB.mjs → relay-CvxPiQ_m.mjs} +178 -721
- package/dist/relay-CvxPiQ_m.mjs.map +1 -0
- package/dist/relay.d.mts +4 -4
- package/dist/relay.mjs +3 -2
- package/dist/serial-Bzpw-xz3.mjs +21 -0
- package/dist/serial-Bzpw-xz3.mjs.map +1 -0
- package/dist/{signer-CYQutDzD.mjs → signer-yW3slDC2.mjs} +12 -14
- package/dist/signer-yW3slDC2.mjs.map +1 -0
- package/dist/signer.d.mts +2 -2
- package/dist/signer.mjs +2 -2
- package/dist/{storage-Dky3wuoH.mjs → storage-CZ52ifcQ.mjs} +17 -42
- package/dist/storage-CZ52ifcQ.mjs.map +1 -0
- package/dist/storage.d.mts +3 -3
- package/dist/storage.mjs +4 -4
- package/dist/store.d.mts +1 -1
- package/dist/store.mjs +1 -1
- package/dist/testing.d.mts +18 -18
- package/dist/testing.mjs +9 -9
- package/dist/testing.mjs.map +1 -1
- package/dist/{types-2pCUprRU.d.mts → types-Cm-XMgtH.d.mts} +6 -6
- package/dist/{types-CRQEk0Oi.d.mts → types-DNmiscfd.d.mts} +2 -2
- package/dist/{util-LfQirgDk.mjs → util-yFYzlbrm.mjs} +29 -7
- package/dist/util-yFYzlbrm.mjs.map +1 -0
- package/dist/{verifier-t5WoWbtY.mjs → verifier-BTLOpo1n.mjs} +3 -3
- package/dist/verifier-BTLOpo1n.mjs.map +1 -0
- package/dist/verifier-CgTFpgsC.d.mts +22 -0
- package/dist/wasm.browser.d.mts +8 -0
- package/dist/wasm.browser.mjs +19 -0
- package/dist/wasm.browser.mjs.map +1 -0
- package/dist/wasm.d.mts +3 -13
- package/dist/wasm.mjs +7 -208
- package/dist/wasm.mjs.map +1 -1
- package/package.json +13 -10
- package/dist/abort-Ba8tDrOI.mjs.map +0 -1
- package/dist/builder-9tjI6WQ3.mjs.map +0 -1
- package/dist/client-BtIAtxrL.mjs.map +0 -1
- package/dist/event-D8Nfoh4K.mjs.map +0 -1
- package/dist/gossip-oloDMWEj.mjs.map +0 -1
- package/dist/key-Bps-LqX7.mjs.map +0 -1
- package/dist/loaders-o6YXB_Ri.mjs.map +0 -1
- package/dist/memory-C2EVx0_O.mjs.map +0 -1
- package/dist/memory-index-Do1mz0WF.mjs.map +0 -1
- package/dist/message-DcY6Fi9o.mjs +0 -193
- package/dist/message-DcY6Fi9o.mjs.map +0 -1
- package/dist/nip65-CjgmdpPB.d.mts +0 -26
- package/dist/nips/nip96.d.mts +0 -40
- package/dist/nips/nip96.mjs +0 -118
- package/dist/nips/nip96.mjs.map +0 -1
- package/dist/pool-As20OGxB.mjs.map +0 -1
- package/dist/reactive-DDlThDSZ.mjs.map +0 -1
- package/dist/signer-CYQutDzD.mjs.map +0 -1
- package/dist/storage-Dky3wuoH.mjs.map +0 -1
- package/dist/util-LfQirgDk.mjs.map +0 -1
- package/dist/verifier-t5WoWbtY.mjs.map +0 -1
|
@@ -8,6 +8,14 @@ function abortReason(signal) {
|
|
|
8
8
|
function throwIfAborted(signal) {
|
|
9
9
|
if (signal?.aborted === true) throw abortReason(signal);
|
|
10
10
|
}
|
|
11
|
+
/** Listen for `abort` once; the returned disposer removes the listener. No-op without a signal. */
|
|
12
|
+
function onAbort(signal, listener) {
|
|
13
|
+
if (!signal) return () => {};
|
|
14
|
+
signal.addEventListener("abort", listener, { once: true });
|
|
15
|
+
return () => {
|
|
16
|
+
signal.removeEventListener("abort", listener);
|
|
17
|
+
};
|
|
18
|
+
}
|
|
11
19
|
/**
|
|
12
20
|
* Race `promise` against the caller's `signal` without cancelling the shared work: on abort the
|
|
13
21
|
* returned promise rejects with `signal.reason` (or an `AbortError`-named Error) while `promise`
|
|
@@ -17,22 +25,21 @@ async function raceSignal(promise, signal) {
|
|
|
17
25
|
if (!signal) return promise;
|
|
18
26
|
if (signal.aborted) throw abortReason(signal);
|
|
19
27
|
return new Promise((resolve, reject) => {
|
|
20
|
-
const
|
|
28
|
+
const dispose = onAbort(signal, () => {
|
|
21
29
|
reject(abortReason(signal));
|
|
22
|
-
};
|
|
23
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
30
|
+
});
|
|
24
31
|
(async () => {
|
|
25
32
|
try {
|
|
26
33
|
resolve(await promise);
|
|
27
34
|
} catch (error) {
|
|
28
35
|
reject(error);
|
|
29
36
|
} finally {
|
|
30
|
-
|
|
37
|
+
dispose();
|
|
31
38
|
}
|
|
32
39
|
})();
|
|
33
40
|
});
|
|
34
41
|
}
|
|
35
42
|
//#endregion
|
|
36
|
-
export {
|
|
43
|
+
export { throwIfAborted as i, onAbort as n, raceSignal as r, abortReason as t };
|
|
37
44
|
|
|
38
|
-
//# sourceMappingURL=abort-
|
|
45
|
+
//# sourceMappingURL=abort-DBq2STPj.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abort-DBq2STPj.mjs","names":[],"sources":["../src/core/abort.ts"],"sourcesContent":["export function abortReason(signal: AbortSignal): unknown {\n if (signal.reason !== undefined) {\n return signal.reason;\n }\n const error = new Error(\"This operation was aborted\");\n error.name = \"AbortError\";\n return error;\n}\n\nexport function throwIfAborted(signal: AbortSignal | undefined): void {\n if (signal?.aborted === true) {\n throw abortReason(signal);\n }\n}\n\n/** Listen for `abort` once; the returned disposer removes the listener. No-op without a signal. */\nexport function onAbort(signal: AbortSignal | undefined, listener: () => void): () => void {\n if (!signal) {\n return () => {\n // no signal — nothing to remove\n };\n }\n signal.addEventListener(\"abort\", listener, { once: true });\n return () => {\n signal.removeEventListener(\"abort\", listener);\n };\n}\n\n/**\n * Race `promise` against the caller's `signal` without cancelling the shared work: on abort the\n * returned promise rejects with `signal.reason` (or an `AbortError`-named Error) while `promise`\n * itself keeps running. With no signal the original promise is returned.\n */\nexport async function raceSignal<T>(\n promise: Promise<T>,\n signal: AbortSignal | undefined,\n): Promise<T> {\n if (!signal) {\n return promise;\n }\n if (signal.aborted) {\n throw abortReason(signal);\n }\n return new Promise<T>((resolve, reject) => {\n const dispose = onAbort(signal, () => {\n // oxlint-disable-next-line typescript/prefer-promise-reject-errors -- the rejection is the caller's signal.reason verbatim\n reject(abortReason(signal));\n });\n void (async (): Promise<void> => {\n try {\n resolve(await promise);\n } catch (error) {\n // oxlint-disable-next-line typescript/prefer-promise-reject-errors -- forwards the raced promise's own rejection\n reject(error);\n } finally {\n dispose();\n }\n })();\n });\n}\n"],"mappings":";AAAA,SAAgB,YAAY,QAA8B;CACxD,IAAI,OAAO,WAAW,KAAA,GACpB,OAAO,OAAO;CAEhB,MAAM,wBAAQ,IAAI,MAAM,4BAA4B;CACpD,MAAM,OAAO;CACb,OAAO;AACT;AAEA,SAAgB,eAAe,QAAuC;CACpE,IAAI,QAAQ,YAAY,MACtB,MAAM,YAAY,MAAM;AAE5B;;AAGA,SAAgB,QAAQ,QAAiC,UAAkC;CACzF,IAAI,CAAC,QACH,aAAa,CAEb;CAEF,OAAO,iBAAiB,SAAS,UAAU,EAAE,MAAM,KAAK,CAAC;CACzD,aAAa;EACX,OAAO,oBAAoB,SAAS,QAAQ;CAC9C;AACF;;;;;;AAOA,eAAsB,WACpB,SACA,QACY;CACZ,IAAI,CAAC,QACH,OAAO;CAET,IAAI,OAAO,SACT,MAAM,YAAY,MAAM;CAE1B,OAAO,IAAI,SAAY,SAAS,WAAW;EACzC,MAAM,UAAU,QAAQ,cAAc;GAEpC,OAAO,YAAY,MAAM,CAAC;EAC5B,CAAC;EACD,CAAM,YAA2B;GAC/B,IAAI;IACF,QAAQ,MAAM,OAAO;GACvB,SAAS,OAAO;IAEd,OAAO,KAAK;GACd,UAAU;IACR,QAAQ;GACV;EACF,EAAA,CAAG;CACL,CAAC;AACH"}
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { d as nowSeconds, h as EventValidationError, u as normalizeURL } from "./util-yFYzlbrm.mjs";
|
|
2
2
|
import { o as isReplaceableKind, r as isAddressableKind, t as Kind } from "./kind-Cxwhhkx8.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import { r as finalizeEvent } from "./key-
|
|
3
|
+
import { h as Tag, v as formatEventAddress, x as parseEventAddress, y as getDTag } from "./event-DinQMmJ1.mjs";
|
|
4
|
+
import { r as finalizeEvent } from "./key-bshqfmZL.mjs";
|
|
5
5
|
//#region src/core/builder.ts
|
|
6
|
-
function hasProtectedTag(event) {
|
|
7
|
-
for (const tag of event.tags) if (tag[0] === "-") return true;
|
|
8
|
-
return false;
|
|
9
|
-
}
|
|
10
6
|
/** NIP-18 e third entry MUST be a relay URL; empty string is not one. */
|
|
11
7
|
function requireRelayUrl(relayHint) {
|
|
12
8
|
if (relayHint === void 0 || relayHint === "") throw new EventValidationError("relayHint must be a relay URL");
|
|
@@ -19,13 +15,11 @@ function requireRelayUrl(relayHint) {
|
|
|
19
15
|
var EventBuilder = class EventBuilder {
|
|
20
16
|
#kind;
|
|
21
17
|
#content;
|
|
22
|
-
#tags;
|
|
18
|
+
#tags = [];
|
|
23
19
|
#createdAt;
|
|
24
20
|
constructor(kind, content = "") {
|
|
25
21
|
this.#kind = kind;
|
|
26
22
|
this.#content = content;
|
|
27
|
-
this.#tags = [];
|
|
28
|
-
this.#createdAt = void 0;
|
|
29
23
|
}
|
|
30
24
|
static textNote(content) {
|
|
31
25
|
return new EventBuilder(Kind.TextNote, content);
|
|
@@ -84,8 +78,8 @@ var EventBuilder = class EventBuilder {
|
|
|
84
78
|
}
|
|
85
79
|
static repost(target, opts) {
|
|
86
80
|
if (target.kind !== Kind.TextNote) throw new EventValidationError("non-kind-1 uses EventBuilder.genericRepost");
|
|
87
|
-
const hint = requireRelayUrl(opts
|
|
88
|
-
const content =
|
|
81
|
+
const hint = requireRelayUrl(opts.relayHint);
|
|
82
|
+
const content = target.tags.some((tag) => tag[0] === "-") ? "" : JSON.stringify(target);
|
|
89
83
|
const b = new EventBuilder(Kind.Repost, content);
|
|
90
84
|
b.#tags.push(Tag.e(target.id, hint));
|
|
91
85
|
b.#tags.push(Tag.p(target.pubkey));
|
|
@@ -93,15 +87,15 @@ var EventBuilder = class EventBuilder {
|
|
|
93
87
|
}
|
|
94
88
|
static genericRepost(target, opts) {
|
|
95
89
|
if (target.kind === Kind.TextNote) throw new EventValidationError("kind 1 uses EventBuilder.repost");
|
|
96
|
-
const hint = requireRelayUrl(opts
|
|
90
|
+
const hint = requireRelayUrl(opts.relayHint);
|
|
97
91
|
const replaceable = isReplaceableKind(target.kind);
|
|
98
92
|
const addressable = isAddressableKind(target.kind);
|
|
99
93
|
const d = getDTag(target.tags);
|
|
100
94
|
if (addressable && d === void 0) throw new EventValidationError("addressable event is missing d tag");
|
|
101
|
-
const content =
|
|
95
|
+
const content = target.tags.some((tag) => tag[0] === "-") || replaceable || addressable ? "" : JSON.stringify(target);
|
|
102
96
|
const b = new EventBuilder(Kind.GenericRepost, content);
|
|
103
97
|
b.#tags.push(Tag.e(target.id, hint));
|
|
104
|
-
b.#tags.push(Tag.p(opts
|
|
98
|
+
b.#tags.push(Tag.p(opts.pPubkey ?? target.pubkey));
|
|
105
99
|
b.#tags.push(Tag.k(target.kind));
|
|
106
100
|
if (replaceable || addressable) b.#tags.push(Tag.a(formatEventAddress(target.kind, target.pubkey, d ?? "")));
|
|
107
101
|
return b;
|
|
@@ -144,7 +138,7 @@ var EventBuilder = class EventBuilder {
|
|
|
144
138
|
kind: this.#kind,
|
|
145
139
|
content: this.#content,
|
|
146
140
|
tags: [...this.#tags],
|
|
147
|
-
created_at: this.#createdAt ??
|
|
141
|
+
created_at: this.#createdAt ?? nowSeconds()
|
|
148
142
|
};
|
|
149
143
|
}
|
|
150
144
|
/** Build unsigned event with the given pubkey. */
|
|
@@ -170,4 +164,4 @@ var EventBuilder = class EventBuilder {
|
|
|
170
164
|
//#endregion
|
|
171
165
|
export { EventBuilder as t };
|
|
172
166
|
|
|
173
|
-
//# sourceMappingURL=builder-
|
|
167
|
+
//# sourceMappingURL=builder-CdLE4J6O.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder-CdLE4J6O.mjs","names":[],"sources":["../src/core/builder.ts"],"sourcesContent":["import { EventValidationError } from \"./error.ts\";\nimport type { Event, EventTemplate, UnsignedEvent } from \"./event.ts\";\nimport { finalizeEvent } from \"./key.ts\";\nimport type { Keys, SecretKeyInput } from \"./key.ts\";\nimport { Kind, isAddressableKind, isReplaceableKind } from \"./kind.ts\";\nimport { Tag, formatEventAddress, getDTag, parseEventAddress } from \"./tag.ts\";\nimport { normalizeURL, nowSeconds } from \"./util.ts\";\n\n/** NIP-18 e third entry MUST be a relay URL; empty string is not one. */\nfunction requireRelayUrl(relayHint: string | undefined): string {\n if (relayHint === undefined || relayHint === \"\") {\n throw new EventValidationError(\"relayHint must be a relay URL\");\n }\n return normalizeURL(relayHint);\n}\n\n/** Profile metadata JSON (kind 0 content). NIP-05 is not verified here. */\nexport type ProfileMetadata = {\n name?: string;\n display_name?: string;\n about?: string;\n picture?: string;\n banner?: string;\n website?: string;\n nip05?: string;\n lud06?: string;\n lud16?: string;\n};\n\n/**\n * Fluent builder for event templates. Decouples intent (kind/content/tags) from signing (Keys /\n * NostrSigner).\n */\nexport class EventBuilder {\n #kind: number;\n #content: string;\n readonly #tags: Tag[] = [];\n #createdAt: number | undefined;\n\n constructor(kind: number, content = \"\") {\n this.#kind = kind;\n this.#content = content;\n }\n\n static textNote(content: string): EventBuilder {\n return new EventBuilder(Kind.TextNote, content);\n }\n\n static metadata(meta: ProfileMetadata): EventBuilder {\n return new EventBuilder(Kind.Metadata, JSON.stringify(meta));\n }\n\n static contacts(pubkeys: ReadonlyArray<string>): EventBuilder {\n const b = new EventBuilder(Kind.Contacts, \"\");\n for (const pk of pubkeys) {\n b.#tags.push(Tag.p(pk));\n }\n return b;\n }\n\n /**\n * Kind-5 deletion. Each target is a bare event id string (or `{ id, kind }`), or `{ address }`\n * for a `kind:pubkey:d` coordinate. Known kinds are emitted as deduped `k` tags (NIP-09 SHOULD).\n */\n static deletion(\n targets: ReadonlyArray<string | { id: string; kind?: number } | { address: string }>,\n reason = \"\",\n ): EventBuilder {\n const b = new EventBuilder(Kind.EventDeletion, reason);\n const kinds = new Set<number>();\n for (const target of targets) {\n if (typeof target === \"string\") {\n b.#tags.push(Tag.e(target));\n continue;\n }\n if (\"address\" in target) {\n const parsed = parseEventAddress(target.address);\n if (parsed) {\n kinds.add(parsed.kind);\n }\n b.#tags.push(Tag.a(target.address));\n continue;\n }\n b.#tags.push(Tag.e(target.id));\n if (target.kind !== undefined) {\n kinds.add(target.kind);\n }\n }\n for (const kind of kinds) {\n b.#tags.push(Tag.k(kind));\n }\n return b;\n }\n\n static reaction(target: Event, content = \"+\", opts?: { relayHint?: string }): EventBuilder {\n const hint = opts?.relayHint === undefined ? undefined : requireRelayUrl(opts.relayHint);\n let coord: string | undefined;\n if (isAddressableKind(target.kind)) {\n const d = getDTag(target.tags);\n if (d === undefined) {\n throw new EventValidationError(\"addressable event is missing d tag\");\n }\n coord = formatEventAddress(target.kind, target.pubkey, d);\n }\n\n const b = new EventBuilder(Kind.Reaction, content);\n // NIP-25 e is [e, id, relay, pubkey]; Tag.e third arg is a NIP-10 marker.\n b.#tags.push([\"e\", target.id.toLowerCase(), hint ?? \"\", target.pubkey.toLowerCase()]);\n b.#tags.push(Tag.p(target.pubkey, hint));\n b.#tags.push([\"k\", String(target.kind)]);\n if (coord !== undefined) {\n b.#tags.push(Tag.a(coord, hint));\n }\n return b;\n }\n\n static repost(target: Event, opts: { relayHint: string }): EventBuilder {\n if (target.kind !== Kind.TextNote) {\n throw new EventValidationError(\"non-kind-1 uses EventBuilder.genericRepost\");\n }\n const hint = requireRelayUrl(opts.relayHint);\n const content = target.tags.some((tag) => tag[0] === \"-\") ? \"\" : JSON.stringify(target);\n const b = new EventBuilder(Kind.Repost, content);\n b.#tags.push(Tag.e(target.id, hint));\n b.#tags.push(Tag.p(target.pubkey));\n return b;\n }\n\n static genericRepost(target: Event, opts: { relayHint: string; pPubkey?: string }): EventBuilder {\n if (target.kind === Kind.TextNote) {\n throw new EventValidationError(\"kind 1 uses EventBuilder.repost\");\n }\n const hint = requireRelayUrl(opts.relayHint);\n const replaceable = isReplaceableKind(target.kind);\n const addressable = isAddressableKind(target.kind);\n const d = getDTag(target.tags);\n if (addressable && d === undefined) {\n throw new EventValidationError(\"addressable event is missing d tag\");\n }\n\n const protectedTag = target.tags.some((tag) => tag[0] === \"-\");\n const content = protectedTag || replaceable || addressable ? \"\" : JSON.stringify(target);\n const b = new EventBuilder(Kind.GenericRepost, content);\n b.#tags.push(Tag.e(target.id, hint));\n b.#tags.push(Tag.p(opts.pPubkey ?? target.pubkey));\n b.#tags.push(Tag.k(target.kind));\n if (replaceable || addressable) {\n b.#tags.push(Tag.a(formatEventAddress(target.kind, target.pubkey, d ?? \"\")));\n }\n return b;\n }\n\n kind(kind: number): this {\n this.#kind = kind;\n return this;\n }\n\n content(content: string): this {\n this.#content = content;\n return this;\n }\n\n tag(tag: Tag): this {\n this.#tags.push(tag);\n return this;\n }\n\n tags(tags: Iterable<Tag>): this {\n for (const t of tags) {\n this.#tags.push(t);\n }\n return this;\n }\n\n createdAt(ts: number): this {\n this.#createdAt = ts;\n return this;\n }\n\n get currentKind(): number {\n return this.#kind;\n }\n\n get currentContent(): string {\n return this.#content;\n }\n\n get currentTags(): ReadonlyArray<Tag> {\n return this.#tags;\n }\n\n get currentCreatedAt(): number | undefined {\n return this.#createdAt;\n }\n\n /** Snapshot as EventTemplate (uses wall clock if created_at unset). */\n toTemplate(): EventTemplate {\n return {\n kind: this.#kind,\n content: this.#content,\n tags: [...this.#tags],\n created_at: this.#createdAt ?? nowSeconds(),\n };\n }\n\n /** Build unsigned event with the given pubkey. */\n buildUnsigned(pubkey: string): UnsignedEvent {\n const template = this.toTemplate();\n return {\n ...template,\n pubkey: pubkey.toLowerCase(),\n };\n }\n\n /** Sign with local Keys (synchronous). */\n signWithKeys(keys: Keys | SecretKeyInput): Event {\n return finalizeEvent(this.toTemplate(), keys);\n }\n\n /**\n * Sign via any NostrSigner-shaped object. Accepts a structural type so core does not depend on\n * the signer module.\n */\n async sign(signer: {\n getPublicKey: () => Promise<string>;\n signEvent: (unsigned: UnsignedEvent) => Promise<Event>;\n }): Promise<Event> {\n const pubkey = await signer.getPublicKey();\n return signer.signEvent(this.buildUnsigned(pubkey));\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { _ as Tag, n as EventTemplate, r as UnsignedEvent, t as Event } from "./event-
|
|
2
|
-
import {
|
|
1
|
+
import { _ as Tag, n as EventTemplate, r as UnsignedEvent, t as Event } from "./event-DJeb_DIL.mjs";
|
|
2
|
+
import { i as SecretKeyInput, t as Keys } from "./key-D_5OgGT7.mjs";
|
|
3
3
|
//#region src/core/builder.d.ts
|
|
4
4
|
/** Profile metadata JSON (kind 0 content). NIP-05 is not verified here. */
|
|
5
5
|
type ProfileMetadata = {
|
|
@@ -22,7 +22,7 @@ declare class EventBuilder {
|
|
|
22
22
|
constructor(kind: number, content?: string);
|
|
23
23
|
static textNote(content: string): EventBuilder;
|
|
24
24
|
static metadata(meta: ProfileMetadata): EventBuilder;
|
|
25
|
-
static contacts(pubkeys: string
|
|
25
|
+
static contacts(pubkeys: ReadonlyArray<string>): EventBuilder;
|
|
26
26
|
/**
|
|
27
27
|
* Kind-5 deletion. Each target is a bare event id string (or `{ id, kind }`), or `{ address }`
|
|
28
28
|
* for a `kind:pubkey:d` coordinate. Known kinds are emitted as deduped `k` tags (NIP-09 SHOULD).
|
|
@@ -57,7 +57,7 @@ declare class EventBuilder {
|
|
|
57
57
|
/** Build unsigned event with the given pubkey. */
|
|
58
58
|
buildUnsigned(pubkey: string): UnsignedEvent;
|
|
59
59
|
/** Sign with local Keys (synchronous). */
|
|
60
|
-
signWithKeys(keys: Keys |
|
|
60
|
+
signWithKeys(keys: Keys | SecretKeyInput): Event;
|
|
61
61
|
/**
|
|
62
62
|
* Sign via any NostrSigner-shaped object. Accepts a structural type so core does not depend on
|
|
63
63
|
* the signer module.
|
|
@@ -67,7 +67,6 @@ declare class EventBuilder {
|
|
|
67
67
|
signEvent: (unsigned: UnsignedEvent) => Promise<Event>;
|
|
68
68
|
}): Promise<Event>;
|
|
69
69
|
}
|
|
70
|
-
type SecretKeyLike = SecretKey | Uint8Array | string;
|
|
71
70
|
//#endregion
|
|
72
71
|
export { ProfileMetadata as n, EventBuilder as t };
|
|
73
|
-
//# sourceMappingURL=builder-
|
|
72
|
+
//# sourceMappingURL=builder-DgkqDylK.d.mts.map
|