@welshman/app 0.12.1 → 0.12.2

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.
Files changed (52) hide show
  1. package/dist/app/src/plugins/plaintext.d.ts +3 -0
  2. package/dist/app/src/plugins/plaintext.d.ts.map +1 -1
  3. package/dist/app/src/plugins/plaintext.js +18 -2
  4. package/dist/app/src/plugins/plaintext.js.map +1 -1
  5. package/dist/domain/src/index.d.ts +3 -0
  6. package/dist/domain/src/index.d.ts.map +1 -1
  7. package/dist/domain/src/index.js +3 -0
  8. package/dist/domain/src/index.js.map +1 -1
  9. package/dist/domain/src/kinds/Bolt12Offer.d.ts +19 -0
  10. package/dist/domain/src/kinds/Bolt12Offer.d.ts.map +1 -0
  11. package/dist/domain/src/kinds/Bolt12Offer.js +54 -0
  12. package/dist/domain/src/kinds/Bolt12Offer.js.map +1 -0
  13. package/dist/domain/src/kinds/Bolt12Zap.d.ts +81 -0
  14. package/dist/domain/src/kinds/Bolt12Zap.d.ts.map +1 -0
  15. package/dist/domain/src/kinds/Bolt12Zap.js +261 -0
  16. package/dist/domain/src/kinds/Bolt12Zap.js.map +1 -0
  17. package/dist/domain/src/kinds/Bolt12ZapIntent.d.ts +32 -0
  18. package/dist/domain/src/kinds/Bolt12ZapIntent.d.ts.map +1 -0
  19. package/dist/domain/src/kinds/Bolt12ZapIntent.js +105 -0
  20. package/dist/domain/src/kinds/Bolt12ZapIntent.js.map +1 -0
  21. package/dist/domain/src/kinds/ZapGoal.js +3 -3
  22. package/dist/domain/src/kinds/ZapGoal.js.map +1 -1
  23. package/dist/domain/src/kinds/ZapRequest.d.ts.map +1 -1
  24. package/dist/domain/src/kinds/ZapRequest.js +9 -5
  25. package/dist/domain/src/kinds/ZapRequest.js.map +1 -1
  26. package/dist/domain/src/other/Zapper.js +3 -3
  27. package/dist/domain/src/other/Zapper.js.map +1 -1
  28. package/dist/util/src/Blossom.d.ts +11 -3
  29. package/dist/util/src/Blossom.d.ts.map +1 -1
  30. package/dist/util/src/Blossom.js +18 -6
  31. package/dist/util/src/Blossom.js.map +1 -1
  32. package/dist/util/src/Bolt12.d.ts +29 -0
  33. package/dist/util/src/Bolt12.d.ts.map +1 -0
  34. package/dist/util/src/Bolt12.js +242 -0
  35. package/dist/util/src/Bolt12.js.map +1 -0
  36. package/dist/util/src/Kinds.d.ts +3 -0
  37. package/dist/util/src/Kinds.d.ts.map +1 -1
  38. package/dist/util/src/Kinds.js +3 -0
  39. package/dist/util/src/Kinds.js.map +1 -1
  40. package/dist/util/src/Lightning.d.ts +6 -0
  41. package/dist/util/src/Lightning.d.ts.map +1 -1
  42. package/dist/util/src/Lightning.js +11 -1
  43. package/dist/util/src/Lightning.js.map +1 -1
  44. package/dist/util/src/Tags.d.ts +1 -0
  45. package/dist/util/src/Tags.d.ts.map +1 -1
  46. package/dist/util/src/Tags.js +3 -1
  47. package/dist/util/src/Tags.js.map +1 -1
  48. package/dist/util/src/index.d.ts +1 -0
  49. package/dist/util/src/index.d.ts.map +1 -1
  50. package/dist/util/src/index.js +1 -0
  51. package/dist/util/src/index.js.map +1 -1
  52. package/package.json +15 -15
@@ -4,8 +4,11 @@ import { MapPlugin } from "./base.js";
4
4
  * supplied by the caller (the signer's underlying decrypt), so the cache stays
5
5
  * independent of which signer produced the plaintext — and `appPolicyCacheDecrypt`
6
6
  * can layer it onto `user.signer` without recursing back into the wrapped signer.
7
+ * Concurrent callers for one ciphertext share a single decrypt.
7
8
  */
8
9
  export declare class Plaintext extends MapPlugin<string> {
10
+ private pending;
9
11
  ensure: (ciphertext: string, decrypt: () => Promise<string>) => Promise<string>;
12
+ private decryptOnce;
10
13
  }
11
14
  //# sourceMappingURL=plaintext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plaintext.d.ts","sourceRoot":"","sources":["../../../../src/plugins/plaintext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,WAAW,CAAA;AAEnC;;;;;GAKG;AACH,qBAAa,SAAU,SAAQ,SAAS,CAAC,MAAM,CAAC;IAC9C,MAAM,GAAU,YAAY,MAAM,EAAE,SAAS,MAAM,OAAO,CAAC,MAAM,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC,CAUnF;CACF"}
1
+ {"version":3,"file":"plaintext.d.ts","sourceRoot":"","sources":["../../../../src/plugins/plaintext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,WAAW,CAAA;AAEnC;;;;;;GAMG;AACH,qBAAa,SAAU,SAAQ,SAAS,CAAC,MAAM,CAAC;IAC9C,OAAO,CAAC,OAAO,CAAqC;IAEpD,MAAM,GAAU,YAAY,MAAM,EAAE,SAAS,MAAM,OAAO,CAAC,MAAM,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC,CAQnF;IAED,OAAO,CAAC,WAAW,CAkBlB;CACF"}
@@ -4,15 +4,31 @@ import { MapPlugin } from "./base.js";
4
4
  * supplied by the caller (the signer's underlying decrypt), so the cache stays
5
5
  * independent of which signer produced the plaintext — and `appPolicyCacheDecrypt`
6
6
  * can layer it onto `user.signer` without recursing back into the wrapped signer.
7
+ * Concurrent callers for one ciphertext share a single decrypt.
7
8
  */
8
9
  export class Plaintext extends MapPlugin {
10
+ pending = new Map();
9
11
  ensure = async (ciphertext, decrypt) => {
10
12
  let result = this.get(ciphertext);
11
13
  if (result === undefined) {
12
- result = await decrypt();
13
- this.set(ciphertext, result);
14
+ result = await this.decryptOnce(ciphertext, decrypt);
14
15
  }
15
16
  return result;
16
17
  };
18
+ decryptOnce = (ciphertext, decrypt) => {
19
+ let promise = this.pending.get(ciphertext);
20
+ if (!promise) {
21
+ promise = decrypt()
22
+ .then(plaintext => {
23
+ this.set(ciphertext, plaintext);
24
+ return plaintext;
25
+ })
26
+ .finally(() => {
27
+ this.pending.delete(ciphertext);
28
+ });
29
+ this.pending.set(ciphertext, promise);
30
+ }
31
+ return promise;
32
+ };
17
33
  }
18
34
  //# sourceMappingURL=plaintext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plaintext.js","sourceRoot":"","sources":["../../../../src/plugins/plaintext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,WAAW,CAAA;AAEnC;;;;;GAKG;AACH,MAAM,OAAO,SAAU,SAAQ,SAAiB;IAC9C,MAAM,GAAG,KAAK,EAAE,UAAkB,EAAE,OAA8B,EAAmB,EAAE;QACrF,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAEjC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,GAAG,MAAM,OAAO,EAAE,CAAA;YAExB,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAC9B,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;CACF"}
1
+ {"version":3,"file":"plaintext.js","sourceRoot":"","sources":["../../../../src/plugins/plaintext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,WAAW,CAAA;AAEnC;;;;;;GAMG;AACH,MAAM,OAAO,SAAU,SAAQ,SAAiB;IACtC,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAA;IAEpD,MAAM,GAAG,KAAK,EAAE,UAAkB,EAAE,OAA8B,EAAmB,EAAE;QACrF,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAEjC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QACtD,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;IAEO,WAAW,GAAG,CAAC,UAAkB,EAAE,OAA8B,EAAE,EAAE;QAC3E,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAE1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,OAAO,EAAE;iBAChB,IAAI,CAAC,SAAS,CAAC,EAAE;gBAChB,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;gBAE/B,OAAO,SAAS,CAAA;YAClB,CAAC,CAAC;iBACD,OAAO,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YACjC,CAAC,CAAC,CAAA;YAEJ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QACvC,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC,CAAA;CACF"}
@@ -18,6 +18,9 @@ export * from "./kinds/BadgeAward.js";
18
18
  export * from "./kinds/BadgeDefinition.js";
19
19
  export * from "./kinds/BlockedRelayList.js";
20
20
  export * from "./kinds/BlossomServerList.js";
21
+ export * from "./kinds/Bolt12Offer.js";
22
+ export * from "./kinds/Bolt12Zap.js";
23
+ export * from "./kinds/Bolt12ZapIntent.js";
21
24
  export * from "./kinds/BookmarkList.js";
22
25
  export * from "./kinds/CalendarRsvp.js";
23
26
  export * from "./kinds/Classified.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../domain/src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../domain/src/index.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,9 @@ export * from "./kinds/BadgeAward.js";
18
18
  export * from "./kinds/BadgeDefinition.js";
19
19
  export * from "./kinds/BlockedRelayList.js";
20
20
  export * from "./kinds/BlossomServerList.js";
21
+ export * from "./kinds/Bolt12Offer.js";
22
+ export * from "./kinds/Bolt12Zap.js";
23
+ export * from "./kinds/Bolt12ZapIntent.js";
21
24
  export * from "./kinds/BookmarkList.js";
22
25
  export * from "./kinds/CalendarRsvp.js";
23
26
  export * from "./kinds/Classified.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../domain/src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../domain/src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { EventReader } from "../core/EventReader.js";
2
+ import { EventWriter } from "../core/EventWriter.js";
3
+ import { EventQuery } from "../core/EventQuery.js";
4
+ import { KindFactory } from "../core/Kind.js";
5
+ export declare class Bolt12OfferReader extends EventReader {
6
+ offers(): string[];
7
+ offersAreCanonical(): boolean;
8
+ }
9
+ export declare class Bolt12OfferWriter extends EventWriter<Bolt12OfferReader> {
10
+ addOffer(offer: string): this;
11
+ removeOffer(offer: string): this;
12
+ setOffers(offers: string[]): this;
13
+ validate(): void;
14
+ }
15
+ export declare class Bolt12OfferQuery extends EventQuery {
16
+ protected renderRoutes(): import("@welshman/util").RelaySelection[];
17
+ }
18
+ export declare const Bolt12Offer: KindFactory<Bolt12OfferReader, Bolt12OfferWriter, Bolt12OfferQuery>;
19
+ //# sourceMappingURL=Bolt12Offer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bolt12Offer.d.ts","sourceRoot":"","sources":["../../../../../domain/src/kinds/Bolt12Offer.ts"],"names":[],"mappings":"AAWA,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAA;AAQ3C,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,MAAM;IAKN,kBAAkB;CAKnB;AAED,qBAAa,iBAAkB,SAAQ,WAAW,CAAC,iBAAiB,CAAC;IACnE,QAAQ,CAAC,KAAK,EAAE,MAAM;IAMtB,WAAW,CAAC,KAAK,EAAE,MAAM;IAIzB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE;IAM1B,QAAQ;CAaT;AAED,qBAAa,gBAAiB,SAAQ,UAAU;IAE9C,SAAS,CAAC,YAAY;CAGvB;AAED,eAAO,MAAM,WAAW,qEAKtB,CAAA"}
@@ -0,0 +1,54 @@
1
+ import { uniq, spec } from "@welshman/lib";
2
+ import { BOLT12_OFFER, canonicalBolt12, indexers, isBolt12Offer, matchTags, tagSpec, tagValueMatcher, tagValues, } from "@welshman/util";
3
+ import { EventReader } from "../core/EventReader.js";
4
+ import { EventWriter } from "../core/EventWriter.js";
5
+ import { EventQuery } from "../core/EventQuery.js";
6
+ import { KindFactory } from "../core/Kind.js";
7
+ const offerSpec = tagSpec("offer", isBolt12Offer, canonicalBolt12);
8
+ const isCanonicalBolt12Offer = (offer = "") => isBolt12Offer(offer) && offer === canonicalBolt12(offer);
9
+ // NIP-B1 kind-10058 BOLT12 offer announcement.
10
+ export class Bolt12OfferReader extends EventReader {
11
+ offers() {
12
+ return uniq(tagValues(offerSpec, this.tags()));
13
+ }
14
+ // NIP-B1 asks every offer tag to be canonical, where `offers` drops the ones that are not.
15
+ offersAreCanonical() {
16
+ const tags = this.tags().filter(spec(["offer"]));
17
+ return tags.length > 0 && tags.every(tag => isCanonicalBolt12Offer(tag[1]));
18
+ }
19
+ }
20
+ export class Bolt12OfferWriter extends EventWriter {
21
+ addOffer(offer) {
22
+ const canonical = canonicalBolt12(offer);
23
+ return this.dropTags(tagValueMatcher(offerSpec, canonical)).addTags(["offer", canonical]);
24
+ }
25
+ removeOffer(offer) {
26
+ return this.dropTags(tagValueMatcher(offerSpec, canonicalBolt12(offer)));
27
+ }
28
+ setOffers(offers) {
29
+ return this.dropTags(spec(["offer"])).addTags(...offers.map(offer => ["offer", canonicalBolt12(offer)]));
30
+ }
31
+ validate() {
32
+ super.validate();
33
+ const tags = this.extraTags.filter(spec(["offer"]));
34
+ if (tags.length === 0) {
35
+ throw new Error("Bolt12Offer requires at least one offer");
36
+ }
37
+ if (tags.length > matchTags(offerSpec, this.extraTags).length) {
38
+ throw new Error("Bolt12Offer refuses an offer that is not a BOLT12 offer");
39
+ }
40
+ }
41
+ }
42
+ export class Bolt12OfferQuery extends EventQuery {
43
+ // A payer looks the announcement up by pubkey, the way it looks up a profile or a relay list.
44
+ renderRoutes() {
45
+ return [...this.authorRoutes(), indexers()];
46
+ }
47
+ }
48
+ export const Bolt12Offer = new KindFactory({
49
+ kind: BOLT12_OFFER,
50
+ reader: Bolt12OfferReader,
51
+ writer: Bolt12OfferWriter,
52
+ query: Bolt12OfferQuery,
53
+ });
54
+ //# sourceMappingURL=Bolt12Offer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bolt12Offer.js","sourceRoot":"","sources":["../../../../../domain/src/kinds/Bolt12Offer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import type { SignedEvent, TrustedEvent } from "@welshman/util";
2
+ import { EventReader } from "../core/EventReader.js";
3
+ import { EventWriter } from "../core/EventWriter.js";
4
+ import { EventQuery } from "../core/EventQuery.js";
5
+ import { KindFactory } from "../core/Kind.js";
6
+ /**
7
+ * What `Bolt12ZapReader.validate` returns: the three events, the amount in millisats, and
8
+ * what the payer proof has to bind to. The `target` is the zapped event's id or address,
9
+ * and undefined for a zap of the recipient themselves. Only `getBolt12ZapPaymentHash` reads
10
+ * the `proof`, so a claim on its own is not yet a paid zap.
11
+ */
12
+ export type Bolt12ZapClaim = {
13
+ event: TrustedEvent;
14
+ intent: TrustedEvent;
15
+ offer: TrustedEvent;
16
+ offers: string[];
17
+ target?: string;
18
+ amount: number;
19
+ proof: string;
20
+ payerNote: string;
21
+ };
22
+ /**
23
+ * The lightning half of NIP-B1 validation, which `Bolt12ZapReader.validate` leaves alone and
24
+ * `Bolt12ZapWriter.validate` runs before publishing:
25
+ * the payer proof settles, it pays one of the offers the recipient announced, and it carries
26
+ * the payer note and amount this claim says it does. Returns the proof's
27
+ * `invoice_payment_hash`, which is how two claims of one payment are told apart.
28
+ */
29
+ export declare const getBolt12ZapPaymentHash: (claim: Pick<Bolt12ZapClaim, "proof" | "payerNote" | "amount" | "offers">) => string | undefined;
30
+ /**
31
+ * Sums a target's zaps in millisats, counting each lightning payment once. Two claims
32
+ * sharing a target and a payment hash count as the lower of their amounts. A profile total
33
+ * is the claims whose `target` is undefined, since a `#p` query answers with zaps of that
34
+ * pubkey's events too.
35
+ */
36
+ export declare const sumBolt12Zaps: (claims: Bolt12ZapClaim[], paymentHash?: (claim: Bolt12ZapClaim) => string | undefined) => number;
37
+ export declare class Bolt12ZapReader extends EventReader {
38
+ recipient(): string | undefined;
39
+ payer(): string | undefined;
40
+ amount(): number | undefined;
41
+ proof(): string | undefined;
42
+ eventId(): string | undefined;
43
+ targetAddress(): string | undefined;
44
+ targetKind(): number | undefined;
45
+ target(): string | undefined;
46
+ targetsProfile(): boolean;
47
+ intent(): TrustedEvent | undefined;
48
+ offer(): TrustedEvent | undefined;
49
+ offers(): string[];
50
+ /**
51
+ * Runs NIP-B1 validation as far as nostr reaches: both embedded signatures, the structure
52
+ * of the zap and its intent, that the zap repeats what the payer signed, and that the
53
+ * recipient authored the announcement. Returns undefined when any of that fails.
54
+ * `getBolt12ZapPaymentHash` is the lightning half, and it reads the claim this returns.
55
+ */
56
+ validate(): Bolt12ZapClaim | undefined;
57
+ private isWellFormed;
58
+ private payerIsAuthor;
59
+ private intentIsWellFormed;
60
+ private matchesIntent;
61
+ private offerIsAuthorized;
62
+ }
63
+ export declare class Bolt12ZapWriter extends EventWriter<Bolt12ZapReader> {
64
+ setIntent(intent: SignedEvent): this;
65
+ setProof(proof: string): this;
66
+ setPayer(payer: string): this;
67
+ clearPayer(): this;
68
+ /**
69
+ * An anonymous zap goes to the recipient's inboxes alone. The default adds the user's own
70
+ * outbox relays, which would link the ephemeral key it is signed with back to them.
71
+ */
72
+ protected renderRoutes(): Promise<import("@welshman/util").RelaySelection[]>;
73
+ validate(): void;
74
+ }
75
+ export declare class Bolt12ZapQuery extends EventQuery {
76
+ forEvent(event: TrustedEvent): this;
77
+ forProfile(pubkey: string): this;
78
+ protected renderRoutes(): import("@welshman/util").RelaySelection[];
79
+ }
80
+ export declare const Bolt12Zap: KindFactory<Bolt12ZapReader, Bolt12ZapWriter, Bolt12ZapQuery>;
81
+ //# sourceMappingURL=Bolt12Zap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bolt12Zap.d.ts","sourceRoot":"","sources":["../../../../../domain/src/kinds/Bolt12Zap.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAC,WAAW,EAAE,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAA;AAQ3C;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,YAAY,CAAA;IACpB,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AA4BD;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAClC,OAAO,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC,uBAUzE,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,QAAQ,cAAc,EAAE,EACxB,cAAa,CAAC,KAAK,EAAE,cAAc,KAAK,MAAM,GAAG,SAAmC,WAerF,CAAA;AAGD,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,SAAS;IAKT,KAAK;IAKL,MAAM;IAIN,KAAK;IAIL,OAAO;IAIP,aAAa;IAIb,UAAU;IAKV,MAAM;IAKN,cAAc;IAKd,MAAM;IAKN,KAAK;IAKL,MAAM;IAMN;;;;;OAKG;IACH,QAAQ,IAAI,cAAc,GAAG,SAAS;IAsCtC,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,iBAAiB;CAG1B;AAED,qBAAa,eAAgB,SAAQ,WAAW,CAAC,eAAe,CAAC;IAE/D,SAAS,CAAC,MAAM,EAAE,WAAW;IAU7B,QAAQ,CAAC,KAAK,EAAE,MAAM;IAKtB,QAAQ,CAAC,KAAK,EAAE,MAAM;IAItB,UAAU;IAIV;;;OAGG;cACa,YAAY;IAQ5B,QAAQ;CAwCT;AAED,qBAAa,cAAe,SAAQ,UAAU;IAE5C,QAAQ,CAAC,KAAK,EAAE,YAAY;IAO5B,UAAU,CAAC,MAAM,EAAE,MAAM;IAIzB,SAAS,CAAC,YAAY;CAGvB;AAED,eAAO,MAAM,SAAS,+DAKpB,CAAA"}
@@ -0,0 +1,261 @@
1
+ import { parseJson, spec, sum } from "@welshman/lib";
2
+ import { BOLT12_OFFER, BOLT12_ZAP, BOLT12_ZAP_INTENT, addressTags, asSignedEvent, bolt12ProofPaysOffer, decodeBolt12PayerProof, getAddress, hexTags, inboxes, isBolt12PayerProof, isReplaceable, kindTags, makeBolt12PayerNote, isBolt12ZapId, matchTags, msatsTags, tagSpec, tagValue, tagValues, verifyEvent, } from "@welshman/util";
3
+ import { EventReader } from "../core/EventReader.js";
4
+ import { EventWriter } from "../core/EventWriter.js";
5
+ import { EventQuery } from "../core/EventQuery.js";
6
+ import { KindFactory } from "../core/Kind.js";
7
+ import { Bolt12OfferReader } from "./Bolt12Offer.js";
8
+ import { Bolt12ZapIntentReader } from "./Bolt12ZapIntent.js";
9
+ // The tags NIP-B1 requires the zap event to repeat from the intent it embeds.
10
+ const intentKeys = ["p", "amount", "offer_event", "e", "a", "k"];
11
+ const countTags = (key, tags) => tags.filter(spec([key])).length;
12
+ // The zap and its intent agree on presence and values, so every value for a key has to match.
13
+ const agreesOn = (key, a, b) => {
14
+ const values = (tags) => tagValues(tagSpec(key), tags).sort();
15
+ const mine = values(a);
16
+ const theirs = values(b);
17
+ return mine.length === theirs.length && mine.every((value, i) => value === theirs[i]);
18
+ };
19
+ // An embedded event arrives as JSON rather than from a relay, so nothing else verifies it.
20
+ const parseEmbedded = (json, kind) => {
21
+ const event = parseJson(json);
22
+ let result;
23
+ if (event?.kind === kind && verifyEvent(event)) {
24
+ result = event;
25
+ }
26
+ return result;
27
+ };
28
+ const readOffer = (context, offer) => new Bolt12OfferReader(BOLT12_OFFER, context, offer);
29
+ /**
30
+ * The lightning half of NIP-B1 validation, which `Bolt12ZapReader.validate` leaves alone and
31
+ * `Bolt12ZapWriter.validate` runs before publishing:
32
+ * the payer proof settles, it pays one of the offers the recipient announced, and it carries
33
+ * the payer note and amount this claim says it does. Returns the proof's
34
+ * `invoice_payment_hash`, which is how two claims of one payment are told apart.
35
+ */
36
+ export const getBolt12ZapPaymentHash = (claim) => {
37
+ const proof = decodeBolt12PayerProof(claim.proof);
38
+ return proof &&
39
+ proof.payerNote === claim.payerNote &&
40
+ proof.amount === claim.amount &&
41
+ claim.offers.some(offer => bolt12ProofPaysOffer(proof, offer))
42
+ ? proof.paymentHash
43
+ : undefined;
44
+ };
45
+ /**
46
+ * Sums a target's zaps in millisats, counting each lightning payment once. Two claims
47
+ * sharing a target and a payment hash count as the lower of their amounts. A profile total
48
+ * is the claims whose `target` is undefined, since a `#p` query answers with zaps of that
49
+ * pubkey's events too.
50
+ */
51
+ export const sumBolt12Zaps = (claims, paymentHash = getBolt12ZapPaymentHash) => {
52
+ const amounts = new Map();
53
+ for (const claim of claims) {
54
+ const hash = paymentHash(claim);
55
+ if (hash) {
56
+ const key = `${claim.target ?? ""}:${hash}`;
57
+ amounts.set(key, Math.min(amounts.get(key) ?? Infinity, claim.amount));
58
+ }
59
+ }
60
+ return sum(Array.from(amounts.values()));
61
+ };
62
+ // NIP-B1 kind-9736 BOLT12 zap, the payer's own proof of paying the recipient's offer.
63
+ export class Bolt12ZapReader extends EventReader {
64
+ recipient() {
65
+ return tagValue(hexTags("p"), this.tags());
66
+ }
67
+ // Present on an attributed zap, absent on an anonymous one.
68
+ payer() {
69
+ return tagValue(hexTags("P"), this.tags());
70
+ }
71
+ // Amount in millisats, or undefined when the tag is absent or not a whole number.
72
+ amount() {
73
+ return tagValue(msatsTags("amount"), this.tags());
74
+ }
75
+ proof() {
76
+ return tagValue(tagSpec("proof"), this.tags());
77
+ }
78
+ eventId() {
79
+ return tagValue(hexTags("e"), this.tags());
80
+ }
81
+ targetAddress() {
82
+ return tagValue(addressTags("a"), this.tags());
83
+ }
84
+ targetKind() {
85
+ return tagValue(kindTags("k"), this.tags());
86
+ }
87
+ // The event id or address the zap names, or nothing for a zap of the recipient themselves.
88
+ target() {
89
+ return tagValue(tagSpec(["e", "a"]), this.tags());
90
+ }
91
+ // A zap of the recipient rather than of anything they wrote.
92
+ targetsProfile() {
93
+ return countTags("e", this.tags()) === 0 && countTags("a", this.tags()) === 0;
94
+ }
95
+ // The intent the payer signed before paying. Verified here, since it arrives as JSON.
96
+ intent() {
97
+ return parseEmbedded(tagValue(tagSpec("description"), this.tags()), BOLT12_ZAP_INTENT);
98
+ }
99
+ // The recipient's announcement of the offer that was paid, verified.
100
+ offer() {
101
+ return parseEmbedded(tagValue(tagSpec("offer_event"), this.tags()), BOLT12_OFFER);
102
+ }
103
+ // The canonical raw offers the payer proof may have paid.
104
+ offers() {
105
+ const offer = this.offer();
106
+ return offer ? readOffer(this.context, offer).offers() : [];
107
+ }
108
+ /**
109
+ * Runs NIP-B1 validation as far as nostr reaches: both embedded signatures, the structure
110
+ * of the zap and its intent, that the zap repeats what the payer signed, and that the
111
+ * recipient authored the announcement. Returns undefined when any of that fails.
112
+ * `getBolt12ZapPaymentHash` is the lightning half, and it reads the claim this returns.
113
+ */
114
+ validate() {
115
+ const intent = this.intent();
116
+ const offer = this.offer();
117
+ const amount = this.amount();
118
+ const proof = this.proof();
119
+ let claim;
120
+ if (intent && offer && proof && amount !== undefined) {
121
+ const offerReader = readOffer(this.context, offer);
122
+ const offers = offerReader.offers();
123
+ const valid = amount > 0 &&
124
+ isBolt12PayerProof(proof) &&
125
+ offerReader.offersAreCanonical() &&
126
+ this.isWellFormed() &&
127
+ this.intentIsWellFormed(intent) &&
128
+ this.matchesIntent(intent) &&
129
+ this.offerIsAuthorized(offer, intent);
130
+ if (valid) {
131
+ claim = {
132
+ event: this.event,
133
+ intent,
134
+ offer,
135
+ offers,
136
+ target: this.target(),
137
+ amount,
138
+ proof,
139
+ payerNote: makeBolt12PayerNote(intent.id),
140
+ };
141
+ }
142
+ }
143
+ return claim;
144
+ }
145
+ // One description, one recipient, one announcement, at most one target, author as payer.
146
+ isWellFormed() {
147
+ const tags = this.tags();
148
+ return (countTags("description", tags) === 1 &&
149
+ countTags("p", tags) === 1 &&
150
+ countTags("offer_event", tags) === 1 &&
151
+ countTags("e", tags) + countTags("a", tags) <= 1 &&
152
+ this.payerIsAuthor());
153
+ }
154
+ // Reading `P` through `payer` would pass a malformed one off as an anonymous zap.
155
+ payerIsAuthor() {
156
+ return matchTags(tagSpec("P"), this.tags()).every(tag => tag[1] === this.event.pubkey);
157
+ }
158
+ intentIsWellFormed(intent) {
159
+ const reader = new Bolt12ZapIntentReader(BOLT12_ZAP_INTENT, this.context, intent);
160
+ const amount = reader.amount();
161
+ const zapId = reader.zapId();
162
+ return (intent.pubkey === this.event.pubkey &&
163
+ countTags("p", intent.tags) === 1 &&
164
+ countTags("offer_event", intent.tags) === 1 &&
165
+ countTags("e", intent.tags) + countTags("a", intent.tags) <= 1 &&
166
+ amount !== undefined &&
167
+ amount > 0 &&
168
+ zapId !== undefined &&
169
+ isBolt12ZapId(zapId));
170
+ }
171
+ matchesIntent(intent) {
172
+ const agrees = (key) => agreesOn(key, this.tags(), intent.tags);
173
+ return this.event.content === intent.content && intentKeys.every(agrees);
174
+ }
175
+ // The announcement is the recipient's own, and predates the intent that embedded it.
176
+ offerIsAuthorized(offer, intent) {
177
+ return offer.pubkey === this.recipient() && offer.created_at <= intent.created_at;
178
+ }
179
+ }
180
+ export class Bolt12ZapWriter extends EventWriter {
181
+ // Copies the tags NIP-B1 requires the zap and its intent to agree on.
182
+ setIntent(intent) {
183
+ const copied = matchTags(tagSpec(intentKeys), intent.tags);
184
+ return this.dropTags(spec(["description"]))
185
+ .dropTags(tag => intentKeys.includes(tag[0]))
186
+ .addTags(["description", JSON.stringify(asSignedEvent(intent))], ...copied)
187
+ .setContent(intent.content);
188
+ }
189
+ // Bech32 is case-insensitive, and lowercase is its canonical form.
190
+ setProof(proof) {
191
+ return this.dropTags(spec(["proof"])).addTags(["proof", proof.toLowerCase()]);
192
+ }
193
+ // An anonymous zap omits this and signs with an ephemeral key.
194
+ setPayer(payer) {
195
+ return this.dropTags(spec(["P"])).addTags(["P", payer]);
196
+ }
197
+ clearPayer() {
198
+ return this.dropTags(spec(["P"]));
199
+ }
200
+ /**
201
+ * An anonymous zap goes to the recipient's inboxes alone. The default adds the user's own
202
+ * outbox relays, which would link the ephemeral key it is signed with back to them.
203
+ */
204
+ async renderRoutes() {
205
+ const isAttributed = this.extraTags.some(spec(["P"]));
206
+ return isAttributed
207
+ ? super.renderRoutes()
208
+ : inboxes(tagValues(hexTags("p"), await this.renderTags()), 0.5);
209
+ }
210
+ validate() {
211
+ super.validate();
212
+ const intent = parseEmbedded(tagValue(tagSpec("description"), this.extraTags), BOLT12_ZAP_INTENT);
213
+ const offer = parseEmbedded(tagValue(tagSpec("offer_event"), this.extraTags), BOLT12_OFFER);
214
+ const amount = tagValue(msatsTags("amount"), this.extraTags);
215
+ const proof = tagValue(tagSpec("proof"), this.extraTags);
216
+ if (!intent) {
217
+ throw new Error("Bolt12Zap requires the zap intent it was paid for");
218
+ }
219
+ if (!this.extraTags.some(spec(["p"]))) {
220
+ throw new Error("Bolt12Zap requires a recipient");
221
+ }
222
+ if (!offer) {
223
+ throw new Error("Bolt12Zap requires the recipient's offer announcement");
224
+ }
225
+ if (amount === undefined || amount <= 0) {
226
+ throw new Error("Bolt12Zap requires a positive whole number of millisats");
227
+ }
228
+ const settles = proof &&
229
+ getBolt12ZapPaymentHash({
230
+ proof,
231
+ amount,
232
+ payerNote: makeBolt12PayerNote(intent.id),
233
+ offers: readOffer(this.context, offer).offers(),
234
+ });
235
+ if (!settles) {
236
+ throw new Error("Bolt12Zap requires a settled lnp payer proof");
237
+ }
238
+ }
239
+ }
240
+ export class Bolt12ZapQuery extends EventQuery {
241
+ // Zaps of a regular event are tagged e, of a replaceable one a.
242
+ forEvent(event) {
243
+ return isReplaceable(event)
244
+ ? this.setTag("a", [getAddress(event)])
245
+ : this.setTag("e", [event.id]);
246
+ }
247
+ // Also matches zaps of that pubkey's events, which `targetsProfile` tells apart.
248
+ forProfile(pubkey) {
249
+ return this.setTag("p", [pubkey]);
250
+ }
251
+ renderRoutes() {
252
+ return [...this.authorRoutes(), ...this.mentionRoutes()];
253
+ }
254
+ }
255
+ export const Bolt12Zap = new KindFactory({
256
+ kind: BOLT12_ZAP,
257
+ reader: Bolt12ZapReader,
258
+ writer: Bolt12ZapWriter,
259
+ query: Bolt12ZapQuery,
260
+ });
261
+ //# sourceMappingURL=Bolt12Zap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bolt12Zap.js","sourceRoot":"","sources":["../../../../../domain/src/kinds/Bolt12Zap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { SignedEvent, TrustedEvent } from "@welshman/util";
2
+ import { EventReader } from "../core/EventReader.js";
3
+ import { EventWriter } from "../core/EventWriter.js";
4
+ import { EventQuery } from "../core/EventQuery.js";
5
+ import { KindFactory } from "../core/Kind.js";
6
+ import type { KindContext } from "../core/Kind.js";
7
+ export declare class Bolt12ZapIntentReader extends EventReader {
8
+ recipient(): string | undefined;
9
+ amount(): number | undefined;
10
+ offerEvent(): string | undefined;
11
+ zapId(): string | undefined;
12
+ eventId(): string | undefined;
13
+ targetAddress(): string | undefined;
14
+ targetKind(): number | undefined;
15
+ payerNote(): string;
16
+ }
17
+ export declare class Bolt12ZapIntentWriter extends EventWriter<Bolt12ZapIntentReader> {
18
+ constructor(kind: number, context: KindContext, reader?: Bolt12ZapIntentReader);
19
+ private ensureZapId;
20
+ setRecipient(recipient: string): this;
21
+ setAmount(amount: number): this;
22
+ setZapId(zapId?: string): this;
23
+ setOfferEvent(offer: SignedEvent): this;
24
+ setEvent(event: TrustedEvent): this;
25
+ clearEvent(): this;
26
+ validate(): void;
27
+ }
28
+ export declare class Bolt12ZapIntentQuery extends EventQuery {
29
+ protected renderRoutes(): never[];
30
+ }
31
+ export declare const Bolt12ZapIntent: KindFactory<Bolt12ZapIntentReader, Bolt12ZapIntentWriter, Bolt12ZapIntentQuery>;
32
+ //# sourceMappingURL=Bolt12ZapIntent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bolt12ZapIntent.d.ts","sourceRoot":"","sources":["../../../../../domain/src/kinds/Bolt12ZapIntent.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAC,WAAW,EAAE,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAA;AAKhD,qBAAa,qBAAsB,SAAQ,WAAW;IACpD,SAAS;IAKT,MAAM;IAKN,UAAU;IAIV,KAAK;IAIL,OAAO;IAIP,aAAa;IAIb,UAAU;IAKV,SAAS;CAGV;AAED,qBAAa,qBAAsB,SAAQ,WAAW,CAAC,qBAAqB,CAAC;gBAC/D,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,qBAAqB;IAM9E,OAAO,CAAC,WAAW;IAMnB,YAAY,CAAC,SAAS,EAAE,MAAM;IAI9B,SAAS,CAAC,MAAM,EAAE,MAAM;IAIxB,QAAQ,CAAC,KAAK,SAAoB;IAKlC,aAAa,CAAC,KAAK,EAAE,WAAW;IAQhC,QAAQ,CAAC,KAAK,EAAE,YAAY;IAS5B,UAAU;IAIV,QAAQ;CAsBT;AAED,qBAAa,oBAAqB,SAAQ,UAAU;IAElD,SAAS,CAAC,YAAY;CAGvB;AAED,eAAO,MAAM,eAAe,iFAK1B,CAAA"}