@welshman/store 0.8.16 → 0.9.0-pre2

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 (110) hide show
  1. package/dist/lib/src/Tools.d.ts +13 -0
  2. package/dist/lib/src/Tools.d.ts.map +1 -1
  3. package/dist/lib/src/Tools.js +30 -1
  4. package/dist/lib/src/Tools.js.map +1 -1
  5. package/dist/net/src/adapter.d.ts +2 -2
  6. package/dist/net/src/adapter.d.ts.map +1 -1
  7. package/dist/net/src/adapter.js +8 -4
  8. package/dist/net/src/adapter.js.map +1 -1
  9. package/dist/net/src/auth.d.ts +1 -1
  10. package/dist/net/src/auth.d.ts.map +1 -1
  11. package/dist/net/src/auth.js +3 -3
  12. package/dist/net/src/auth.js.map +1 -1
  13. package/dist/net/src/context.d.ts +4 -7
  14. package/dist/net/src/context.d.ts.map +1 -1
  15. package/dist/net/src/context.js +1 -9
  16. package/dist/net/src/context.js.map +1 -1
  17. package/dist/net/src/message.d.ts +1 -1
  18. package/dist/net/src/message.d.ts.map +1 -1
  19. package/dist/net/src/message.js +1 -1
  20. package/dist/net/src/message.js.map +1 -1
  21. package/dist/net/src/pool.d.ts +1 -8
  22. package/dist/net/src/pool.d.ts.map +1 -1
  23. package/dist/net/src/pool.js +2 -18
  24. package/dist/net/src/pool.js.map +1 -1
  25. package/dist/net/src/repository.d.ts +4 -2
  26. package/dist/net/src/repository.d.ts.map +1 -1
  27. package/dist/net/src/repository.js +55 -21
  28. package/dist/net/src/repository.js.map +1 -1
  29. package/dist/net/src/request.d.ts +2 -3
  30. package/dist/net/src/request.d.ts.map +1 -1
  31. package/dist/net/src/request.js +4 -7
  32. package/dist/net/src/request.js.map +1 -1
  33. package/dist/net/src/wrapManager.d.ts +1 -0
  34. package/dist/net/src/wrapManager.d.ts.map +1 -1
  35. package/dist/net/src/wrapManager.js +5 -1
  36. package/dist/net/src/wrapManager.js.map +1 -1
  37. package/dist/store/src/repository.d.ts +17 -0
  38. package/dist/store/src/repository.d.ts.map +1 -1
  39. package/dist/store/src/repository.js +144 -0
  40. package/dist/store/src/repository.js.map +1 -1
  41. package/dist/util/src/Events.d.ts +0 -12
  42. package/dist/util/src/Events.d.ts.map +1 -1
  43. package/dist/util/src/Events.js +3 -25
  44. package/dist/util/src/Events.js.map +1 -1
  45. package/dist/util/src/Handles.d.ts +15 -0
  46. package/dist/util/src/Handles.d.ts.map +1 -0
  47. package/dist/util/src/Handles.js +25 -0
  48. package/dist/util/src/Handles.js.map +1 -0
  49. package/dist/util/src/Kinds.d.ts +6 -1
  50. package/dist/util/src/Kinds.d.ts.map +1 -1
  51. package/dist/util/src/Kinds.js +8 -2
  52. package/dist/util/src/Kinds.js.map +1 -1
  53. package/dist/util/src/Lightning.d.ts +6 -0
  54. package/dist/util/src/Lightning.d.ts.map +1 -0
  55. package/dist/util/src/Lightning.js +59 -0
  56. package/dist/util/src/Lightning.js.map +1 -0
  57. package/dist/util/src/Nip86.d.ts +75 -25
  58. package/dist/util/src/Nip86.d.ts.map +1 -1
  59. package/dist/util/src/Nip86.js +169 -24
  60. package/dist/util/src/Nip86.js.map +1 -1
  61. package/dist/util/src/Pow.js +2 -2
  62. package/dist/util/src/Pow.js.map +1 -1
  63. package/dist/util/src/Pubkey.d.ts.map +1 -1
  64. package/dist/util/src/Pubkey.js +2 -1
  65. package/dist/util/src/Pubkey.js.map +1 -1
  66. package/dist/util/src/Relay.d.ts +0 -29
  67. package/dist/util/src/Relay.d.ts.map +1 -1
  68. package/dist/util/src/Relay.js +0 -10
  69. package/dist/util/src/Relay.js.map +1 -1
  70. package/dist/util/src/RelaySelection.d.ts +101 -0
  71. package/dist/util/src/RelaySelection.d.ts.map +1 -0
  72. package/dist/util/src/RelaySelection.js +98 -0
  73. package/dist/util/src/RelaySelection.js.map +1 -0
  74. package/dist/util/src/Tags.d.ts +16 -35
  75. package/dist/util/src/Tags.d.ts.map +1 -1
  76. package/dist/util/src/Tags.js +23 -74
  77. package/dist/util/src/Tags.js.map +1 -1
  78. package/dist/util/src/Topics.d.ts +2 -0
  79. package/dist/util/src/Topics.d.ts.map +1 -0
  80. package/dist/util/src/Topics.js +2 -0
  81. package/dist/util/src/Topics.js.map +1 -0
  82. package/dist/util/src/index.d.ts +3 -6
  83. package/dist/util/src/index.d.ts.map +1 -1
  84. package/dist/util/src/index.js +3 -6
  85. package/dist/util/src/index.js.map +1 -1
  86. package/package.json +7 -7
  87. package/dist/util/src/Encryptable.d.ts +0 -34
  88. package/dist/util/src/Encryptable.d.ts.map +0 -1
  89. package/dist/util/src/Encryptable.js +0 -52
  90. package/dist/util/src/Encryptable.js.map +0 -1
  91. package/dist/util/src/Handler.d.ts +0 -17
  92. package/dist/util/src/Handler.d.ts.map +0 -1
  93. package/dist/util/src/Handler.js +0 -33
  94. package/dist/util/src/Handler.js.map +0 -1
  95. package/dist/util/src/List.d.ts +0 -42
  96. package/dist/util/src/List.d.ts.map +0 -1
  97. package/dist/util/src/List.js +0 -86
  98. package/dist/util/src/List.js.map +0 -1
  99. package/dist/util/src/Profile.d.ts +0 -26
  100. package/dist/util/src/Profile.d.ts.map +0 -1
  101. package/dist/util/src/Profile.js +0 -50
  102. package/dist/util/src/Profile.js.map +0 -1
  103. package/dist/util/src/Room.d.ts +0 -63
  104. package/dist/util/src/Room.d.ts.map +0 -1
  105. package/dist/util/src/Room.js +0 -94
  106. package/dist/util/src/Room.js.map +0 -1
  107. package/dist/util/src/Zaps.d.ts +0 -55
  108. package/dist/util/src/Zaps.d.ts.map +0 -1
  109. package/dist/util/src/Zaps.js +0 -135
  110. package/dist/util/src/Zaps.js.map +0 -1
@@ -1,42 +0,0 @@
1
- import { RelayMode } from "./Relay.js";
2
- import { Encryptable, DecryptedEvent } from "./Encryptable.js";
3
- export type ListParams = {
4
- kind: number;
5
- };
6
- export type List = ListParams & {
7
- publicTags: string[][];
8
- privateTags: string[][];
9
- event?: DecryptedEvent;
10
- };
11
- export type PublishedList = Omit<List, "event"> & {
12
- event: DecryptedEvent;
13
- };
14
- export declare const makeList: (list: ListParams & Partial<List>) => List;
15
- export declare const readList: (event: DecryptedEvent) => PublishedList;
16
- export declare const getListTags: (list: List | undefined) => string[][];
17
- export declare const removeFromListByPredicate: (list: List, pred: (t: string[]) => boolean) => Encryptable<{
18
- kind: number;
19
- content: string;
20
- tags: string[][];
21
- }>;
22
- export declare const removeFromList: (list: List, value: string) => Encryptable<{
23
- kind: number;
24
- content: string;
25
- tags: string[][];
26
- }>;
27
- export declare const addToListPublicly: (list: List, ...tags: string[][]) => Encryptable<{
28
- kind: number;
29
- content: string;
30
- tags: string[][];
31
- }>;
32
- export declare const addToListPrivately: (list: List, ...tags: string[][]) => Encryptable<import("./Events.js").EventTemplate>;
33
- export declare const updateList: (list: List, { publicTags, privateTags }: {
34
- publicTags?: string[][];
35
- privateTags?: string[][];
36
- }) => Encryptable<{
37
- kind: number;
38
- content: string;
39
- tags: string[][];
40
- }>;
41
- export declare const getRelaysFromList: (list?: List, mode?: RelayMode) => string[];
42
- //# sourceMappingURL=List.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../../../util/src/List.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,SAAS,EAAoB,MAAM,YAAY,CAAA;AACnE,OAAO,EAAC,WAAW,EAAE,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAG5D,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,IAAI,GAAG,UAAU,GAAG;IAC9B,UAAU,EAAE,MAAM,EAAE,EAAE,CAAA;IACtB,WAAW,EAAE,MAAM,EAAE,EAAE,CAAA;IACvB,KAAK,CAAC,EAAE,cAAc,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG;IAChD,KAAK,EAAE,cAAc,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,KAAG,IAI1D,CAAA;AAaF,eAAO,MAAM,QAAQ,GAAI,OAAO,cAAc,KAAG,aAMhD,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,MAAM,IAAI,GAAG,SAAS,eAGjD,CAAA;AAED,eAAO,MAAM,yBAAyB,GAAI,MAAM,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO;;;;EAcnF,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,MAAM,IAAI,EAAE,OAAO,MAAM;;;;EACN,CAAA;AAElD,eAAO,MAAM,iBAAiB,GAAI,MAAM,IAAI,EAAE,GAAG,MAAM,MAAM,EAAE,EAAE;;;;EAQhE,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,MAAM,IAAI,EAAE,GAAG,MAAM,MAAM,EAAE,EAAE,qDASjE,CAAA;AAED,eAAO,MAAM,UAAU,GACrB,MAAM,IAAI,EACV,6BAA2B;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAA;CAAC;;;;EAe/E,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,OAAO,IAAI,EAAE,OAAO,SAAS,KAAG,MAAM,EAQvE,CAAA"}
@@ -1,86 +0,0 @@
1
- import { parseJson, uniq, nthEq } from "@welshman/lib";
2
- import { Address } from "./Address.js";
3
- import { uniqTags, getRelayTags } from "./Tags.js";
4
- import { isRelayUrl, normalizeRelayUrl } from "./Relay.js";
5
- import { Encryptable } from "./Encryptable.js";
6
- export const makeList = (list) => ({
7
- publicTags: [],
8
- privateTags: [],
9
- ...list,
10
- });
11
- const isValidTag = (tag) => {
12
- if (tag[0] === "p")
13
- return tag[1]?.length === 64;
14
- if (tag[0] === "e")
15
- return tag[1]?.length === 64;
16
- if (tag[0] === "a")
17
- return Address.isAddress(tag[1] || "");
18
- if (tag[0] === "t")
19
- return tag[1]?.length > 0;
20
- if (tag[0] === "r")
21
- return isRelayUrl(tag[1]);
22
- if (tag[0] === "relay")
23
- return isRelayUrl(tag[1]);
24
- return true;
25
- };
26
- export const readList = (event) => {
27
- const getTags = (tags) => (Array.isArray(tags) ? tags.filter(isValidTag) : []);
28
- const privateTags = getTags(parseJson(event.plaintext?.content) || []);
29
- const publicTags = getTags(event.tags);
30
- return { event, kind: event.kind, publicTags, privateTags };
31
- };
32
- export const getListTags = (list) => [
33
- ...(list?.publicTags || []),
34
- ...(list?.privateTags || []),
35
- ];
36
- export const removeFromListByPredicate = (list, pred) => {
37
- const plaintext = {};
38
- const template = {
39
- kind: list.kind,
40
- content: list.event?.content || "",
41
- tags: list.publicTags.filter(t => !pred(t)),
42
- };
43
- // Avoid redundant encrypt calls if possible
44
- if (list.privateTags.some(t => pred(t))) {
45
- plaintext.content = JSON.stringify(list.privateTags.filter(t => !pred(t)));
46
- }
47
- return new Encryptable(template, plaintext);
48
- };
49
- export const removeFromList = (list, value) => removeFromListByPredicate(list, nthEq(1, value));
50
- export const addToListPublicly = (list, ...tags) => {
51
- const template = {
52
- kind: list.kind,
53
- content: list.event?.content || "",
54
- tags: uniqTags([...list.publicTags, ...tags]),
55
- };
56
- return new Encryptable(template, {});
57
- };
58
- export const addToListPrivately = (list, ...tags) => {
59
- const template = {
60
- kind: list.kind,
61
- tags: list.publicTags,
62
- };
63
- return new Encryptable(template, {
64
- content: JSON.stringify(uniqTags([...list.privateTags, ...tags])),
65
- });
66
- };
67
- export const updateList = (list, { publicTags, privateTags }) => {
68
- const template = {
69
- kind: list.kind,
70
- content: list.event?.content || "",
71
- tags: publicTags || list.publicTags,
72
- };
73
- const updates = {};
74
- if (privateTags) {
75
- updates.content = JSON.stringify(privateTags);
76
- }
77
- return new Encryptable(template, updates);
78
- };
79
- export const getRelaysFromList = (list, mode) => {
80
- let tags = getRelayTags(getListTags(list));
81
- if (mode) {
82
- tags = tags.filter((t) => !t[2] || t[2] === mode);
83
- }
84
- return uniq(tags.map(t => normalizeRelayUrl(t[1])));
85
- };
86
- //# sourceMappingURL=List.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"List.js","sourceRoot":"","sources":["../../../../util/src/List.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import { TrustedEvent, EventTemplate } from "./Events.js";
2
- export type Profile = {
3
- name?: string;
4
- nip05?: string;
5
- lud06?: string;
6
- lud16?: string;
7
- lnurl?: string;
8
- about?: string;
9
- banner?: string;
10
- picture?: string;
11
- website?: string;
12
- display_name?: string;
13
- event?: TrustedEvent;
14
- };
15
- export type PublishedProfile = Omit<Profile, "event"> & {
16
- event: TrustedEvent;
17
- };
18
- export declare const isPublishedProfile: (profile: Profile) => profile is PublishedProfile;
19
- export declare const makeProfile: (profile?: Partial<Profile>) => Profile;
20
- export declare const readProfile: (event: TrustedEvent) => PublishedProfile;
21
- export declare const createProfile: ({ event, ...profile }: Profile) => EventTemplate;
22
- export declare const editProfile: ({ event, ...profile }: PublishedProfile) => EventTemplate;
23
- export declare const displayPubkey: (pubkey: string) => string;
24
- export declare const displayProfile: (profile?: Profile, fallback?: string) => string;
25
- export declare const profileHasName: (profile?: Profile) => boolean;
26
- //# sourceMappingURL=Profile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Profile.d.ts","sourceRoot":"","sources":["../../../../util/src/Profile.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,YAAY,EAAE,aAAa,EAAC,MAAM,aAAa,CAAA;AAIvD,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,YAAY,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG;IACtD,KAAK,EAAE,YAAY,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,SAAS,OAAO,KAAG,OAAO,IAAI,gBACzC,CAAA;AAExB,eAAO,MAAM,WAAW,GAAI,UAAS,OAAO,CAAC,OAAO,CAAM,KAAG,OAkB5D,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,OAAO,YAAY,KAAG,gBAGhD,CAAA;AAEF,eAAO,MAAM,aAAa,GAAI,uBAAqB,OAAO,KAAG,aAI3D,CAAA;AAEF,eAAO,MAAM,WAAW,GAAI,uBAAqB,gBAAgB,KAAG,aAIlE,CAAA;AAEF,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,WAI3C,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,UAAU,OAAO,EAAE,iBAAa,WAQ9D,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,UAAU,OAAO,YAAoD,CAAA"}
@@ -1,50 +0,0 @@
1
- import { npubEncode } from "nostr-tools/nip19";
2
- import { ellipsize, parseJson } from "@welshman/lib";
3
- import { getLnUrl } from "./Zaps.js";
4
- import { PROFILE } from "./Kinds.js";
5
- export const isPublishedProfile = (profile) => Boolean(profile.event);
6
- export const makeProfile = (profile = {}) => {
7
- if (typeof profile.lud06 === "string") {
8
- const lnurl = getLnUrl(profile.lud06);
9
- if (lnurl) {
10
- profile = { ...profile, lnurl };
11
- }
12
- }
13
- if (typeof profile.lud16 === "string") {
14
- const lnurl = getLnUrl(profile.lud16);
15
- if (lnurl) {
16
- profile = { ...profile, lnurl };
17
- }
18
- }
19
- return profile;
20
- };
21
- export const readProfile = (event) => ({
22
- ...makeProfile(parseJson(event.content) || {}),
23
- event,
24
- });
25
- export const createProfile = ({ event, ...profile }) => ({
26
- kind: PROFILE,
27
- content: JSON.stringify(profile),
28
- tags: [],
29
- });
30
- export const editProfile = ({ event, ...profile }) => ({
31
- kind: PROFILE,
32
- content: JSON.stringify(profile),
33
- tags: event.tags,
34
- });
35
- export const displayPubkey = (pubkey) => {
36
- const d = npubEncode(pubkey);
37
- return d.slice(0, 8) + "…" + d.slice(-5);
38
- };
39
- export const displayProfile = (profile, fallback = "") => {
40
- const { display_name, name, event } = profile || {};
41
- if (name)
42
- return ellipsize(name, 60).trim();
43
- if (display_name)
44
- return ellipsize(display_name, 60).trim();
45
- if (event)
46
- return displayPubkey(event.pubkey).trim();
47
- return fallback.trim();
48
- };
49
- export const profileHasName = (profile) => Boolean(profile?.name || profile?.display_name);
50
- //# sourceMappingURL=Profile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Profile.js","sourceRoot":"","sources":["../../../../util/src/Profile.ts"],"names":[],"mappings":"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"}
@@ -1,63 +0,0 @@
1
- import { TrustedEvent } from "./Events.js";
2
- export type RoomMeta = {
3
- h: string;
4
- name?: string;
5
- about?: string;
6
- picture?: string;
7
- pictureMeta?: string[];
8
- isClosed?: boolean;
9
- isHidden?: boolean;
10
- isPrivate?: boolean;
11
- isRestricted?: boolean;
12
- livekit?: boolean;
13
- event?: TrustedEvent;
14
- };
15
- export type PublishedRoomMeta = Omit<RoomMeta, "event"> & {
16
- event: TrustedEvent;
17
- };
18
- export declare const generateH: () => string;
19
- export declare const makeRoomMeta: (room?: Partial<RoomMeta>) => RoomMeta;
20
- export declare const readRoomMeta: (event: TrustedEvent) => PublishedRoomMeta;
21
- export declare const makeRoomCreateEvent: (room: RoomMeta) => {
22
- kind: number;
23
- content: string;
24
- tags: string[][];
25
- created_at: number;
26
- };
27
- export declare const makeRoomDeleteEvent: (room: RoomMeta) => {
28
- kind: number;
29
- content: string;
30
- tags: string[][];
31
- created_at: number;
32
- };
33
- export declare const makeRoomEditEvent: (room: RoomMeta) => {
34
- kind: number;
35
- content: string;
36
- tags: string[][];
37
- created_at: number;
38
- };
39
- export declare const makeRoomJoinEvent: (room: RoomMeta) => {
40
- kind: number;
41
- content: string;
42
- tags: string[][];
43
- created_at: number;
44
- };
45
- export declare const makeRoomLeaveEvent: (room: RoomMeta) => {
46
- kind: number;
47
- content: string;
48
- tags: string[][];
49
- created_at: number;
50
- };
51
- export declare const makeRoomAddMemberEvent: (room: RoomMeta, pubkey: string) => {
52
- kind: number;
53
- content: string;
54
- tags: string[][];
55
- created_at: number;
56
- };
57
- export declare const makeRoomRemoveMemberEvent: (room: RoomMeta, pubkey: string) => {
58
- kind: number;
59
- content: string;
60
- tags: string[][];
61
- created_at: number;
62
- };
63
- //# sourceMappingURL=Room.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Room.d.ts","sourceRoot":"","sources":["../../../../util/src/Room.ts"],"names":[],"mappings":"AAWA,OAAO,EAAY,YAAY,EAAgB,MAAM,aAAa,CAAA;AAGlE,MAAM,MAAM,QAAQ,GAAG;IACrB,CAAC,EAAE,MAAM,CAAA;IACT,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,YAAY,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG;IACxD,KAAK,EAAE,YAAY,CAAA;CACpB,CAAA;AASD,eAAO,MAAM,SAAS,cAcrB,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,OAAM,OAAO,CAAC,QAAQ,CAAM,KAAG,QAK3D,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,OAAO,YAAY,KAAG,iBAwBlD,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,MAAM,QAAQ;;;;;CACD,CAAA;AAEjD,eAAO,MAAM,mBAAmB,GAAI,MAAM,QAAQ;;;;;CACD,CAAA;AAEjD,eAAO,MAAM,iBAAiB,GAAI,MAAM,QAAQ;;;;;CAgC/C,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,MAAM,QAAQ;;;;;CAAkD,CAAA;AAElG,eAAO,MAAM,kBAAkB,GAAI,MAAM,QAAQ;;;;;CAAmD,CAAA;AAEpG,eAAO,MAAM,sBAAsB,GAAI,MAAM,QAAQ,EAAE,QAAQ,MAAM;;;;;CAMjE,CAAA;AAEJ,eAAO,MAAM,yBAAyB,GAAI,MAAM,QAAQ,EAAE,QAAQ,MAAM;;;;;CAMpE,CAAA"}
@@ -1,94 +0,0 @@
1
- import { spec } from "@welshman/lib";
2
- import { ROOM_META, ROOM_DELETE, ROOM_CREATE, ROOM_EDIT_META, ROOM_JOIN, ROOM_LEAVE, ROOM_ADD_MEMBER, ROOM_REMOVE_MEMBER, } from "./Kinds.js";
3
- import { makeEvent, getIdentifier } from "./Events.js";
4
- import { getTag, getTagValue } from "./Tags.js";
5
- const vowels = "a,e,i,o,u,ay,ey,oy,ou,ia,ea,ough,oo,ee,argh".split(",");
6
- const consonants = "p,b,t,d,k,g,ch,sh,th,f,v,s,z,l,r,m,n,pl,bl,cl,gl,pr,br,tr,dr,kr,gr,fl,sl,fr,thr,str,sk,sp,st".split(",");
7
- export const generateH = () => {
8
- const n = (6 + Math.random() * 2) | 0;
9
- const s = [consonants, vowels];
10
- if (Math.random() < 0.5) {
11
- s.reverse();
12
- }
13
- return (Array.from({ length: n }, (_, i) => s[i % 2].splice((Math.random() * s[i % 2].length) | 0, 1)).join("") +
14
- (1 + Math.floor(Math.random() * 9)));
15
- };
16
- export const makeRoomMeta = (room = {}) => {
17
- return {
18
- h: room.h ?? generateH(),
19
- ...room,
20
- };
21
- };
22
- export const readRoomMeta = (event) => {
23
- if (event.kind !== ROOM_META) {
24
- throw new Error("Invalid group meta event");
25
- }
26
- const h = getIdentifier(event);
27
- if (!h) {
28
- throw new Error("Group meta event had no d tag");
29
- }
30
- return {
31
- h,
32
- event,
33
- name: getTagValue("name", event.tags),
34
- about: getTagValue("about", event.tags),
35
- picture: getTagValue("picture", event.tags),
36
- pictureMeta: getTag("picture", event.tags)?.slice(2),
37
- isClosed: event.tags.some(spec(["closed"])),
38
- isHidden: event.tags.some(spec(["hidden"])),
39
- isPrivate: event.tags.some(spec(["private"])),
40
- isRestricted: event.tags.some(spec(["restricted"])),
41
- livekit: event.tags.some(spec(["livekit"])),
42
- };
43
- };
44
- export const makeRoomCreateEvent = (room) => makeEvent(ROOM_CREATE, { tags: [["h", room.h]] });
45
- export const makeRoomDeleteEvent = (room) => makeEvent(ROOM_DELETE, { tags: [["h", room.h]] });
46
- export const makeRoomEditEvent = (room) => {
47
- const tags = [["h", room.h]];
48
- if (room.name)
49
- tags.push(["name", room.name]);
50
- if (room.about)
51
- tags.push(["about", room.about]);
52
- if (room.picture) {
53
- const tag = ["picture", room.picture];
54
- if (room.pictureMeta) {
55
- tag.push(...room.pictureMeta);
56
- }
57
- tags.push(tag);
58
- }
59
- if (room.isClosed)
60
- tags.push(["closed"]);
61
- if (room.isHidden)
62
- tags.push(["hidden"]);
63
- if (room.isPrivate)
64
- tags.push(["private"]);
65
- if (room.isRestricted)
66
- tags.push(["restricted"]);
67
- if (room.livekit)
68
- tags.push(["livekit"]);
69
- if (room.event) {
70
- for (const t of room.event.tags) {
71
- if (tags.some(spec(t.slice(0, 1))))
72
- continue;
73
- if (["closed", "hidden", "private", "restricted", "livekit"].includes(t[0]))
74
- continue;
75
- tags.push(t);
76
- }
77
- }
78
- return makeEvent(ROOM_EDIT_META, { tags });
79
- };
80
- export const makeRoomJoinEvent = (room) => makeEvent(ROOM_JOIN, { tags: [["h", room.h]] });
81
- export const makeRoomLeaveEvent = (room) => makeEvent(ROOM_LEAVE, { tags: [["h", room.h]] });
82
- export const makeRoomAddMemberEvent = (room, pubkey) => makeEvent(ROOM_ADD_MEMBER, {
83
- tags: [
84
- ["h", room.h],
85
- ["p", pubkey],
86
- ],
87
- });
88
- export const makeRoomRemoveMemberEvent = (room, pubkey) => makeEvent(ROOM_REMOVE_MEMBER, {
89
- tags: [
90
- ["h", room.h],
91
- ["p", pubkey],
92
- ],
93
- });
94
- //# sourceMappingURL=Room.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Room.js","sourceRoot":"","sources":["../../../../util/src/Room.ts"],"names":[],"mappings":"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"}
@@ -1,55 +0,0 @@
1
- import type { Filter } from "./Filters.js";
2
- import type { TrustedEvent, SignedEvent } from "./Events.js";
3
- export declare const toMsats: (sats: number) => number;
4
- export declare const fromMsats: (msats: number) => number;
5
- export declare const hrpToMillisat: (hrpString: string) => bigint;
6
- export declare const getInvoiceAmount: (bolt11: string) => number;
7
- export declare const getLnUrl: (address: string) => string | undefined;
8
- export type Zapper = {
9
- lnurl: string;
10
- pubkey?: string;
11
- callback?: string;
12
- minSendable?: number;
13
- maxSendable?: number;
14
- nostrPubkey?: string;
15
- allowsNostr?: boolean;
16
- };
17
- export type Zap = {
18
- request: TrustedEvent;
19
- response: TrustedEvent;
20
- invoiceAmount: number;
21
- };
22
- export declare const zapFromEvent: (response: TrustedEvent, zapper: Zapper | undefined) => Zap | undefined;
23
- export type ZapRequestParams = {
24
- msats: number;
25
- zapper: Zapper;
26
- pubkey: string;
27
- relays: string[];
28
- content?: string;
29
- eventId?: string;
30
- anonymous?: boolean;
31
- };
32
- export declare const makeZapRequest: ({ msats, zapper, pubkey, relays, content, eventId, anonymous, }: ZapRequestParams) => {
33
- kind: number;
34
- content: string;
35
- tags: string[][];
36
- created_at: number;
37
- };
38
- export type RequestInvoiceParams = {
39
- zapper: Zapper;
40
- event: SignedEvent;
41
- };
42
- export declare const requestZap: ({ zapper, event }: RequestInvoiceParams) => Promise<{
43
- invoice: any;
44
- error?: undefined;
45
- } | {
46
- error: any;
47
- invoice?: undefined;
48
- }>;
49
- export type ZapResponseFilterParams = {
50
- zapper: Zapper;
51
- pubkey: string;
52
- eventId?: string;
53
- };
54
- export declare const getZapResponseFilter: ({ zapper, pubkey, eventId }: ZapResponseFilterParams) => Filter;
55
- //# sourceMappingURL=Zaps.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Zaps.d.ts","sourceRoot":"","sources":["../../../../util/src/Zaps.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AACxC,OAAO,KAAK,EAAC,YAAY,EAAE,WAAW,EAAC,MAAM,aAAa,CAAA;AAc1D,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,WAAgB,CAAA;AAEpD,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,WAA6B,CAAA;AAEpE,eAAO,MAAM,aAAa,GAAI,WAAW,MAAM,WA2B9C,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,WAI9C,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,SAAS,MAAM,uBAqBvC,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,GAAG,GAAG;IAChB,OAAO,EAAE,YAAY,CAAA;IACrB,QAAQ,EAAE,YAAY,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,UAAU,YAAY,EAAE,QAAQ,MAAM,GAAG,SAAS,oBA0C9E,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,iEAQ5B,gBAAgB;;;;;CAiBlB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,WAAW,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,UAAU,GAAU,mBAAiB,oBAAoB;;;;;;EAOrE,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,6BAA2B,uBAAuB,WAiBtF,CAAA"}
@@ -1,135 +0,0 @@
1
- import { now, tryCatch, fetchJson, hexToBech32, fromPairs } from "@welshman/lib";
2
- import { ZAP_RESPONSE, ZAP_REQUEST } from "./Kinds.js";
3
- import { getTagValue } from "./Tags.js";
4
- import { makeEvent } from "./Events.js";
5
- const DIVISORS = {
6
- m: BigInt(1e3),
7
- u: BigInt(1e6),
8
- n: BigInt(1e9),
9
- p: BigInt(1e12),
10
- };
11
- const MAX_MILLISATS = BigInt("2100000000000000000");
12
- const MILLISATS_PER_BTC = BigInt(1e11);
13
- export const toMsats = (sats) => sats * 1000;
14
- export const fromMsats = (msats) => Math.floor(msats / 1000);
15
- export const hrpToMillisat = (hrpString) => {
16
- let divisor, value;
17
- if (hrpString.slice(-1).match(/^[munp]$/)) {
18
- divisor = hrpString.slice(-1);
19
- value = hrpString.slice(0, -1);
20
- }
21
- else if (hrpString.slice(-1).match(/^[^munp0-9]$/)) {
22
- throw new Error("Not a valid multiplier for the amount");
23
- }
24
- else {
25
- value = hrpString;
26
- }
27
- if (!value.match(/^\d+$/))
28
- throw new Error("Not a valid human readable amount");
29
- const valueBN = BigInt(value);
30
- const millisatoshisBN = divisor
31
- ? (valueBN * MILLISATS_PER_BTC) / DIVISORS[divisor]
32
- : valueBN * MILLISATS_PER_BTC;
33
- if ((divisor === "p" && !(valueBN % BigInt(10) === BigInt(0))) ||
34
- millisatoshisBN > MAX_MILLISATS) {
35
- throw new Error("Amount is outside of valid range");
36
- }
37
- return millisatoshisBN;
38
- };
39
- export const getInvoiceAmount = (bolt11) => {
40
- const hrp = bolt11.match(/lnbc(\d+\w)/);
41
- const bn = hrpToMillisat(hrp[1]);
42
- return Number(bn);
43
- };
44
- export const getLnUrl = (address) => {
45
- address = address.toLowerCase();
46
- // If it's already a lud06 we're good
47
- if (address.startsWith("lnurl1")) {
48
- return address;
49
- }
50
- // If it's a regular url, encode it
51
- if (address.includes("://")) {
52
- return hexToBech32("lnurl", address);
53
- }
54
- // Try to parse it as a lud16 address
55
- if (address.includes("@")) {
56
- const [name, domain] = address.split("@");
57
- if (domain && name) {
58
- return hexToBech32("lnurl", `https://${domain}/.well-known/lnurlp/${name}`);
59
- }
60
- }
61
- };
62
- export const zapFromEvent = (response, zapper) => {
63
- const responseMeta = fromPairs(response.tags);
64
- let zap;
65
- try {
66
- zap = {
67
- response,
68
- invoiceAmount: getInvoiceAmount(responseMeta.bolt11),
69
- request: JSON.parse(responseMeta.description),
70
- };
71
- }
72
- catch (e) {
73
- return undefined;
74
- }
75
- // Don't count zaps that the user requested for himself
76
- if (zap.request.pubkey === zapper?.pubkey) {
77
- return undefined;
78
- }
79
- const { amount, lnurl } = fromPairs(zap.request.tags);
80
- // Verify that the zapper actually sent the requested amount (if it was supplied)
81
- if (amount && parseInt(amount) !== zap.invoiceAmount) {
82
- return undefined;
83
- }
84
- // If the recipient and the zapper are the same person, it's legit
85
- if (responseMeta.p === response.pubkey) {
86
- return zap;
87
- }
88
- // If the sending client provided an lnurl tag, verify that too
89
- if (lnurl && lnurl !== zapper?.lnurl) {
90
- return undefined;
91
- }
92
- // Verify that the request actually came from the recipient's zapper
93
- if (zap.response.pubkey !== zapper?.nostrPubkey) {
94
- return undefined;
95
- }
96
- return zap;
97
- };
98
- export const makeZapRequest = ({ msats, zapper, pubkey, relays, content = "", eventId, anonymous, }) => {
99
- const tags = [
100
- ["relays", ...relays],
101
- ["amount", String(msats)],
102
- ["lnurl", zapper.lnurl],
103
- ["p", pubkey],
104
- ];
105
- if (eventId) {
106
- tags.push(["e", eventId]);
107
- }
108
- if (anonymous) {
109
- tags.push(["anon"]);
110
- }
111
- return makeEvent(ZAP_REQUEST, { content, tags });
112
- };
113
- export const requestZap = async ({ zapper, event }) => {
114
- const zapString = encodeURI(JSON.stringify(event));
115
- const msats = parseInt(getTagValue("amount", event.tags));
116
- const qs = `?amount=${msats}&nostr=${zapString}&lnurl=${zapper.lnurl}`;
117
- const res = await tryCatch(() => fetchJson(zapper.callback + qs));
118
- return res?.pr ? { invoice: res.pr } : { error: res.reason || "Failed to request invoice" };
119
- };
120
- export const getZapResponseFilter = ({ zapper, pubkey, eventId }) => {
121
- if (!zapper.nostrPubkey) {
122
- throw new Error("Zapper did not have a nostr pubkey");
123
- }
124
- const filter = {
125
- kinds: [ZAP_RESPONSE],
126
- authors: [zapper.nostrPubkey],
127
- since: now() - 30,
128
- "#p": [pubkey],
129
- };
130
- if (eventId) {
131
- filter["#e"] = [eventId];
132
- }
133
- return filter;
134
- };
135
- //# sourceMappingURL=Zaps.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Zaps.js","sourceRoot":"","sources":["../../../../util/src/Zaps.ts"],"names":[],"mappings":"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"}