nostr-core 0.4.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.
Files changed (138) hide show
  1. package/dist/index.d.ts +93 -3
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +99 -3
  4. package/dist/index.js.map +1 -1
  5. package/dist/lnurl.d.ts +161 -0
  6. package/dist/lnurl.d.ts.map +1 -0
  7. package/dist/lnurl.js +343 -0
  8. package/dist/lnurl.js.map +1 -0
  9. package/dist/nip02.d.ts +27 -0
  10. package/dist/nip02.d.ts.map +1 -0
  11. package/dist/nip02.js +55 -0
  12. package/dist/nip02.js.map +1 -0
  13. package/dist/nip05.d.ts +24 -0
  14. package/dist/nip05.d.ts.map +1 -0
  15. package/dist/nip05.js +57 -0
  16. package/dist/nip05.js.map +1 -0
  17. package/dist/nip06.d.ts +26 -0
  18. package/dist/nip06.d.ts.map +1 -0
  19. package/dist/nip06.js +49 -0
  20. package/dist/nip06.js.map +1 -0
  21. package/dist/nip09.d.ts +34 -0
  22. package/dist/nip09.d.ts.map +1 -0
  23. package/dist/nip09.js +66 -0
  24. package/dist/nip09.js.map +1 -0
  25. package/dist/nip10.d.ts +40 -0
  26. package/dist/nip10.d.ts.map +1 -0
  27. package/dist/nip10.js +69 -0
  28. package/dist/nip10.js.map +1 -0
  29. package/dist/nip11.d.ts +41 -0
  30. package/dist/nip11.d.ts.map +1 -0
  31. package/dist/nip11.js +38 -0
  32. package/dist/nip11.js.map +1 -0
  33. package/dist/nip13.d.ts +26 -0
  34. package/dist/nip13.d.ts.map +1 -0
  35. package/dist/nip13.js +75 -0
  36. package/dist/nip13.js.map +1 -0
  37. package/dist/nip18.d.ts +28 -0
  38. package/dist/nip18.d.ts.map +1 -0
  39. package/dist/nip18.js +66 -0
  40. package/dist/nip18.js.map +1 -0
  41. package/dist/nip21.d.ts +14 -0
  42. package/dist/nip21.d.ts.map +1 -0
  43. package/dist/nip21.js +24 -0
  44. package/dist/nip21.js.map +1 -0
  45. package/dist/nip22.d.ts +26 -0
  46. package/dist/nip22.d.ts.map +1 -0
  47. package/dist/nip22.js +109 -0
  48. package/dist/nip22.js.map +1 -0
  49. package/dist/nip23.d.ts +24 -0
  50. package/dist/nip23.d.ts.map +1 -0
  51. package/dist/nip23.js +70 -0
  52. package/dist/nip23.js.map +1 -0
  53. package/dist/nip24.d.ts +31 -0
  54. package/dist/nip24.d.ts.map +1 -0
  55. package/dist/nip24.js +75 -0
  56. package/dist/nip24.js.map +1 -0
  57. package/dist/nip25.d.ts +32 -0
  58. package/dist/nip25.d.ts.map +1 -0
  59. package/dist/nip25.js +54 -0
  60. package/dist/nip25.js.map +1 -0
  61. package/dist/nip27.d.ts +16 -0
  62. package/dist/nip27.d.ts.map +1 -0
  63. package/dist/nip27.js +44 -0
  64. package/dist/nip27.js.map +1 -0
  65. package/dist/nip28.d.ts +52 -0
  66. package/dist/nip28.d.ts.map +1 -0
  67. package/dist/nip28.js +118 -0
  68. package/dist/nip28.js.map +1 -0
  69. package/dist/nip29.d.ts +60 -0
  70. package/dist/nip29.d.ts.map +1 -0
  71. package/dist/nip29.js +122 -0
  72. package/dist/nip29.js.map +1 -0
  73. package/dist/nip30.d.ts +18 -0
  74. package/dist/nip30.d.ts.map +1 -0
  75. package/dist/nip30.js +24 -0
  76. package/dist/nip30.js.map +1 -0
  77. package/dist/nip31.d.ts +11 -0
  78. package/dist/nip31.d.ts.map +1 -0
  79. package/dist/nip31.js +15 -0
  80. package/dist/nip31.js.map +1 -0
  81. package/dist/nip36.d.ts +14 -0
  82. package/dist/nip36.d.ts.map +1 -0
  83. package/dist/nip36.js +24 -0
  84. package/dist/nip36.js.map +1 -0
  85. package/dist/nip40.d.ts +14 -0
  86. package/dist/nip40.d.ts.map +1 -0
  87. package/dist/nip40.js +26 -0
  88. package/dist/nip40.js.map +1 -0
  89. package/dist/nip42.d.ts +20 -0
  90. package/dist/nip42.d.ts.map +1 -0
  91. package/dist/nip42.js +38 -0
  92. package/dist/nip42.js.map +1 -0
  93. package/dist/nip48.d.ts +23 -0
  94. package/dist/nip48.d.ts.map +1 -0
  95. package/dist/nip48.js +30 -0
  96. package/dist/nip48.js.map +1 -0
  97. package/dist/nip50.d.ts +23 -0
  98. package/dist/nip50.d.ts.map +1 -0
  99. package/dist/nip50.js +47 -0
  100. package/dist/nip50.js.map +1 -0
  101. package/dist/nip51.d.ts +57 -0
  102. package/dist/nip51.d.ts.map +1 -0
  103. package/dist/nip51.js +118 -0
  104. package/dist/nip51.js.map +1 -0
  105. package/dist/nip52.d.ts +112 -0
  106. package/dist/nip52.d.ts.map +1 -0
  107. package/dist/nip52.js +405 -0
  108. package/dist/nip52.js.map +1 -0
  109. package/dist/nip56.d.ts +28 -0
  110. package/dist/nip56.d.ts.map +1 -0
  111. package/dist/nip56.js +60 -0
  112. package/dist/nip56.js.map +1 -0
  113. package/dist/nip57.d.ts +48 -0
  114. package/dist/nip57.d.ts.map +1 -0
  115. package/dist/nip57.js +140 -0
  116. package/dist/nip57.js.map +1 -0
  117. package/dist/nip58.d.ts +133 -0
  118. package/dist/nip58.d.ts.map +1 -0
  119. package/dist/nip58.js +275 -0
  120. package/dist/nip58.js.map +1 -0
  121. package/dist/nip59.js +1 -1
  122. package/dist/nip65.d.ts +28 -0
  123. package/dist/nip65.d.ts.map +1 -0
  124. package/dist/nip65.js +83 -0
  125. package/dist/nip65.js.map +1 -0
  126. package/dist/nip75.d.ts +43 -0
  127. package/dist/nip75.d.ts.map +1 -0
  128. package/dist/nip75.js +144 -0
  129. package/dist/nip75.js.map +1 -0
  130. package/dist/nip98.d.ts +24 -0
  131. package/dist/nip98.d.ts.map +1 -0
  132. package/dist/nip98.js +68 -0
  133. package/dist/nip98.js.map +1 -0
  134. package/dist/relay.d.ts +2 -0
  135. package/dist/relay.d.ts.map +1 -1
  136. package/dist/relay.js +20 -0
  137. package/dist/relay.js.map +1 -1
  138. package/package.json +35 -4
@@ -0,0 +1,23 @@
1
+ import type { Filter } from './filter.js';
2
+ export type SearchFilter = Filter & {
3
+ search?: string;
4
+ };
5
+ /**
6
+ * Build a search filter for use with relays that support NIP-50.
7
+ * Adds the `search` field to a standard Nostr filter.
8
+ */
9
+ export declare function buildSearchFilter(query: string, filter?: Filter): SearchFilter;
10
+ /**
11
+ * Parse search modifiers from a search query string.
12
+ * Extracts key:value pairs and returns them with the remaining plain text.
13
+ * Modifiers: include:spam, domain:example.com, language:en, sentiment:positive, etc.
14
+ */
15
+ export declare function parseSearchQuery(query: string): {
16
+ text: string;
17
+ modifiers: Record<string, string>;
18
+ };
19
+ /**
20
+ * Build a search query string from text and modifiers.
21
+ */
22
+ export declare function buildSearchQuery(text: string, modifiers?: Record<string, string>): string;
23
+ //# sourceMappingURL=nip50.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip50.d.ts","sourceRoot":"","sources":["../src/nip50.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAK9E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG;IAC/C,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC,CAmBA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAQzF"}
package/dist/nip50.js ADDED
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Build a search filter for use with relays that support NIP-50.
3
+ * Adds the `search` field to a standard Nostr filter.
4
+ */
5
+ export function buildSearchFilter(query, filter) {
6
+ return {
7
+ ...filter,
8
+ search: query,
9
+ };
10
+ }
11
+ /**
12
+ * Parse search modifiers from a search query string.
13
+ * Extracts key:value pairs and returns them with the remaining plain text.
14
+ * Modifiers: include:spam, domain:example.com, language:en, sentiment:positive, etc.
15
+ */
16
+ export function parseSearchQuery(query) {
17
+ const modifiers = {};
18
+ const parts = [];
19
+ for (const token of query.split(/\s+/)) {
20
+ const colonIdx = token.indexOf(':');
21
+ if (colonIdx > 0 && colonIdx < token.length - 1) {
22
+ const key = token.slice(0, colonIdx);
23
+ const value = token.slice(colonIdx + 1);
24
+ modifiers[key] = value;
25
+ }
26
+ else {
27
+ parts.push(token);
28
+ }
29
+ }
30
+ return {
31
+ text: parts.join(' '),
32
+ modifiers,
33
+ };
34
+ }
35
+ /**
36
+ * Build a search query string from text and modifiers.
37
+ */
38
+ export function buildSearchQuery(text, modifiers) {
39
+ const parts = [text];
40
+ if (modifiers) {
41
+ for (const [key, value] of Object.entries(modifiers)) {
42
+ parts.push(`${key}:${value}`);
43
+ }
44
+ }
45
+ return parts.filter(Boolean).join(' ');
46
+ }
47
+ //# sourceMappingURL=nip50.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip50.js","sourceRoot":"","sources":["../src/nip50.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,MAAe;IAC9D,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,KAAK;KACd,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAI5C,MAAM,SAAS,GAA2B,EAAE,CAAA;IAC5C,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;YACpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAA;YACvC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACxB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QACrB,SAAS;KACV,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,SAAkC;IAC/E,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAA;IACpB,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACxC,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { type NostrEvent, type EventTemplate } from './event.js';
2
+ export type ListItem = {
3
+ tag: string;
4
+ value: string;
5
+ extra?: string[];
6
+ };
7
+ export type ParsedList = {
8
+ kind: number;
9
+ identifier?: string;
10
+ publicItems: ListItem[];
11
+ privateItems: ListItem[];
12
+ };
13
+ /**
14
+ * Create a list event template (unsigned).
15
+ * If privateItems and secretKey are provided, they are NIP-44 self-encrypted into the content.
16
+ */
17
+ export declare function createListEventTemplate(opts: {
18
+ kind: number;
19
+ identifier?: string;
20
+ publicItems: ListItem[];
21
+ privateItems?: ListItem[];
22
+ secretKey?: Uint8Array;
23
+ }): EventTemplate;
24
+ /**
25
+ * Create and sign a list event.
26
+ */
27
+ export declare function createListEvent(opts: {
28
+ kind: number;
29
+ identifier?: string;
30
+ publicItems: ListItem[];
31
+ privateItems?: ListItem[];
32
+ }, secretKey: Uint8Array): NostrEvent;
33
+ /**
34
+ * Parse a list event. If secretKey is provided, decrypt private items.
35
+ */
36
+ export declare function parseList(event: NostrEvent, secretKey?: Uint8Array): ParsedList;
37
+ /**
38
+ * Get event IDs from a parsed list.
39
+ */
40
+ export declare function getEventIds(list: ParsedList): string[];
41
+ /**
42
+ * Get pubkeys from a parsed list.
43
+ */
44
+ export declare function getPubkeys(list: ParsedList): string[];
45
+ /**
46
+ * Get hashtags from a parsed list.
47
+ */
48
+ export declare function getHashtags(list: ParsedList): string[];
49
+ /**
50
+ * Get relay URLs from a parsed list.
51
+ */
52
+ export declare function getRelayUrls(list: ParsedList): string[];
53
+ /**
54
+ * Get parameterized replaceable event addresses from a parsed list.
55
+ */
56
+ export declare function getAddresses(list: ParsedList): string[];
57
+ //# sourceMappingURL=nip51.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip51.d.ts","sourceRoot":"","sources":["../src/nip51.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AAI/E,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,QAAQ,EAAE,CAAA;IACvB,YAAY,EAAE,QAAQ,EAAE,CAAA;CACzB,CAAA;AAoBD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,QAAQ,EAAE,CAAA;IACvB,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAA;IACzB,SAAS,CAAC,EAAE,UAAU,CAAA;CACvB,GAAG,aAAa,CAqBhB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE;IACJ,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,QAAQ,EAAE,CAAA;IACvB,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAA;CAC1B,EACD,SAAS,EAAE,UAAU,GACpB,UAAU,CAKZ;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,UAAU,GAAG,UAAU,CA0B/E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAItD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAIrD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAItD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAIvD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAIvD"}
package/dist/nip51.js ADDED
@@ -0,0 +1,118 @@
1
+ import { finalizeEvent } from './event.js';
2
+ import { getConversationKey, encrypt, decrypt } from './nip44.js';
3
+ import { getPublicKey } from './crypto.js';
4
+ function tagsToItems(tags) {
5
+ return tags
6
+ .filter(t => t.length >= 2)
7
+ .map(t => ({
8
+ tag: t[0],
9
+ value: t[1],
10
+ extra: t.length > 2 ? t.slice(2) : undefined,
11
+ }));
12
+ }
13
+ function itemsToTags(items) {
14
+ return items.map(item => {
15
+ const tag = [item.tag, item.value];
16
+ if (item.extra)
17
+ tag.push(...item.extra);
18
+ return tag;
19
+ });
20
+ }
21
+ /**
22
+ * Create a list event template (unsigned).
23
+ * If privateItems and secretKey are provided, they are NIP-44 self-encrypted into the content.
24
+ */
25
+ export function createListEventTemplate(opts) {
26
+ const tags = itemsToTags(opts.publicItems);
27
+ if (opts.identifier !== undefined) {
28
+ tags.unshift(['d', opts.identifier]);
29
+ }
30
+ let content = '';
31
+ if (opts.privateItems && opts.privateItems.length > 0 && opts.secretKey) {
32
+ const pubkey = getPublicKey(opts.secretKey);
33
+ const conversationKey = getConversationKey(opts.secretKey, pubkey);
34
+ const privateTags = itemsToTags(opts.privateItems);
35
+ content = encrypt(JSON.stringify(privateTags), conversationKey);
36
+ }
37
+ return {
38
+ kind: opts.kind,
39
+ tags,
40
+ content,
41
+ created_at: Math.floor(Date.now() / 1000),
42
+ };
43
+ }
44
+ /**
45
+ * Create and sign a list event.
46
+ */
47
+ export function createListEvent(opts, secretKey) {
48
+ return finalizeEvent(createListEventTemplate({ ...opts, secretKey }), secretKey);
49
+ }
50
+ /**
51
+ * Parse a list event. If secretKey is provided, decrypt private items.
52
+ */
53
+ export function parseList(event, secretKey) {
54
+ const result = {
55
+ kind: event.kind,
56
+ publicItems: [],
57
+ privateItems: [],
58
+ };
59
+ const publicTags = event.tags.filter(t => t[0] !== 'd');
60
+ const dTag = event.tags.find(t => t[0] === 'd');
61
+ if (dTag)
62
+ result.identifier = dTag[1];
63
+ result.publicItems = tagsToItems(publicTags);
64
+ if (event.content && secretKey) {
65
+ try {
66
+ const pubkey = getPublicKey(secretKey);
67
+ const conversationKey = getConversationKey(secretKey, pubkey);
68
+ const decrypted = decrypt(event.content, conversationKey);
69
+ const privateTags = JSON.parse(decrypted);
70
+ result.privateItems = tagsToItems(privateTags);
71
+ }
72
+ catch {
73
+ // Decryption failed - leave privateItems empty
74
+ }
75
+ }
76
+ return result;
77
+ }
78
+ /**
79
+ * Get event IDs from a parsed list.
80
+ */
81
+ export function getEventIds(list) {
82
+ return [...list.publicItems, ...list.privateItems]
83
+ .filter(i => i.tag === 'e')
84
+ .map(i => i.value);
85
+ }
86
+ /**
87
+ * Get pubkeys from a parsed list.
88
+ */
89
+ export function getPubkeys(list) {
90
+ return [...list.publicItems, ...list.privateItems]
91
+ .filter(i => i.tag === 'p')
92
+ .map(i => i.value);
93
+ }
94
+ /**
95
+ * Get hashtags from a parsed list.
96
+ */
97
+ export function getHashtags(list) {
98
+ return [...list.publicItems, ...list.privateItems]
99
+ .filter(i => i.tag === 't')
100
+ .map(i => i.value);
101
+ }
102
+ /**
103
+ * Get relay URLs from a parsed list.
104
+ */
105
+ export function getRelayUrls(list) {
106
+ return [...list.publicItems, ...list.privateItems]
107
+ .filter(i => i.tag === 'relay')
108
+ .map(i => i.value);
109
+ }
110
+ /**
111
+ * Get parameterized replaceable event addresses from a parsed list.
112
+ */
113
+ export function getAddresses(list) {
114
+ return [...list.publicItems, ...list.privateItems]
115
+ .filter(i => i.tag === 'a')
116
+ .map(i => i.value);
117
+ }
118
+ //# sourceMappingURL=nip51.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip51.js","sourceRoot":"","sources":["../src/nip51.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ import { type NostrEvent, type EventTemplate } from './event.js';
2
+ export type CalendarEventParticipant = {
3
+ pubkey: string;
4
+ relay?: string;
5
+ role?: string;
6
+ };
7
+ export type DateBasedCalendarEvent = {
8
+ identifier: string;
9
+ title: string;
10
+ start: string;
11
+ end?: string;
12
+ content?: string;
13
+ summary?: string;
14
+ image?: string;
15
+ locations?: string[];
16
+ geohash?: string;
17
+ participants?: CalendarEventParticipant[];
18
+ hashtags?: string[];
19
+ references?: string[];
20
+ calendarAddresses?: string[];
21
+ };
22
+ /**
23
+ * Create a kind 31922 date-based calendar event template.
24
+ */
25
+ export declare function createDateBasedCalendarEventTemplate(event: DateBasedCalendarEvent): EventTemplate;
26
+ /**
27
+ * Create and sign a kind 31922 date-based calendar event.
28
+ */
29
+ export declare function createDateBasedCalendarEvent(event: DateBasedCalendarEvent, secretKey: Uint8Array): NostrEvent;
30
+ /**
31
+ * Parse a kind 31922 date-based calendar event.
32
+ */
33
+ export declare function parseDateBasedCalendarEvent(event: NostrEvent): DateBasedCalendarEvent;
34
+ export type TimeBasedCalendarEvent = {
35
+ identifier: string;
36
+ title: string;
37
+ start: number;
38
+ end?: number;
39
+ startTzid?: string;
40
+ endTzid?: string;
41
+ content?: string;
42
+ summary?: string;
43
+ image?: string;
44
+ locations?: string[];
45
+ geohash?: string;
46
+ participants?: CalendarEventParticipant[];
47
+ hashtags?: string[];
48
+ references?: string[];
49
+ calendarAddresses?: string[];
50
+ };
51
+ /**
52
+ * Create a kind 31923 time-based calendar event template.
53
+ */
54
+ export declare function createTimeBasedCalendarEventTemplate(event: TimeBasedCalendarEvent): EventTemplate;
55
+ /**
56
+ * Create and sign a kind 31923 time-based calendar event.
57
+ */
58
+ export declare function createTimeBasedCalendarEvent(event: TimeBasedCalendarEvent, secretKey: Uint8Array): NostrEvent;
59
+ /**
60
+ * Parse a kind 31923 time-based calendar event.
61
+ */
62
+ export declare function parseTimeBasedCalendarEvent(event: NostrEvent): TimeBasedCalendarEvent;
63
+ export type Calendar = {
64
+ identifier: string;
65
+ title: string;
66
+ content?: string;
67
+ eventAddresses?: string[];
68
+ };
69
+ /**
70
+ * Create a kind 31924 calendar event template.
71
+ */
72
+ export declare function createCalendarTemplate(calendar: Calendar): EventTemplate;
73
+ /**
74
+ * Create and sign a kind 31924 calendar event.
75
+ */
76
+ export declare function createCalendarEvent(calendar: Calendar, secretKey: Uint8Array): NostrEvent;
77
+ /**
78
+ * Parse a kind 31924 calendar event.
79
+ */
80
+ export declare function parseCalendar(event: NostrEvent): Calendar;
81
+ export type RSVPStatus = 'accepted' | 'declined' | 'tentative';
82
+ export type FreeBusy = 'free' | 'busy';
83
+ export type CalendarEventRSVP = {
84
+ identifier: string;
85
+ calendarEventAddress: string;
86
+ status: RSVPStatus;
87
+ eventId?: string;
88
+ freebusy?: FreeBusy;
89
+ calendarEventAuthor?: string;
90
+ content?: string;
91
+ };
92
+ /**
93
+ * Create a kind 31925 calendar event RSVP template.
94
+ */
95
+ export declare function createCalendarEventRSVPTemplate(rsvp: CalendarEventRSVP): EventTemplate;
96
+ /**
97
+ * Create and sign a kind 31925 calendar event RSVP.
98
+ */
99
+ export declare function createCalendarEventRSVP(rsvp: CalendarEventRSVP, secretKey: Uint8Array): NostrEvent;
100
+ /**
101
+ * Parse a kind 31925 calendar event RSVP.
102
+ */
103
+ export declare function parseCalendarEventRSVP(event: NostrEvent): CalendarEventRSVP;
104
+ /**
105
+ * Build a calendar event address string for use in `a` tags.
106
+ */
107
+ export declare function buildCalendarEventAddress(kind: 31922 | 31923, pubkey: string, identifier: string): string;
108
+ /**
109
+ * Check if an event is a calendar-related event.
110
+ */
111
+ export declare function isCalendarEvent(event: NostrEvent): boolean;
112
+ //# sourceMappingURL=nip52.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip52.d.ts","sourceRoot":"","sources":["../src/nip52.ts"],"names":[],"mappings":"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"}