@unicitylabs/nostr-js-sdk 0.0.1

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 (124) hide show
  1. package/README.md +290 -0
  2. package/dist/browser/index.js +8444 -0
  3. package/dist/browser/index.js.map +1 -0
  4. package/dist/browser/index.min.js +12 -0
  5. package/dist/browser/index.min.js.map +1 -0
  6. package/dist/browser/index.umd.js +8524 -0
  7. package/dist/browser/index.umd.js.map +1 -0
  8. package/dist/browser/index.umd.min.js +12 -0
  9. package/dist/browser/index.umd.min.js.map +1 -0
  10. package/dist/cjs/NostrKeyManager.js +265 -0
  11. package/dist/cjs/NostrKeyManager.js.map +1 -0
  12. package/dist/cjs/client/NostrClient.js +518 -0
  13. package/dist/cjs/client/NostrClient.js.map +1 -0
  14. package/dist/cjs/client/NostrEventListener.js +31 -0
  15. package/dist/cjs/client/NostrEventListener.js.map +1 -0
  16. package/dist/cjs/client/WebSocketAdapter.js +90 -0
  17. package/dist/cjs/client/WebSocketAdapter.js.map +1 -0
  18. package/dist/cjs/client/index.js +18 -0
  19. package/dist/cjs/client/index.js.map +1 -0
  20. package/dist/cjs/crypto/bech32.js +201 -0
  21. package/dist/cjs/crypto/bech32.js.map +1 -0
  22. package/dist/cjs/crypto/index.js +49 -0
  23. package/dist/cjs/crypto/index.js.map +1 -0
  24. package/dist/cjs/crypto/nip04.js +327 -0
  25. package/dist/cjs/crypto/nip04.js.map +1 -0
  26. package/dist/cjs/crypto/schnorr.js +101 -0
  27. package/dist/cjs/crypto/schnorr.js.map +1 -0
  28. package/dist/cjs/index.js +57 -0
  29. package/dist/cjs/index.js.map +1 -0
  30. package/dist/cjs/nametag/NametagBinding.js +196 -0
  31. package/dist/cjs/nametag/NametagBinding.js.map +1 -0
  32. package/dist/cjs/nametag/NametagUtils.js +156 -0
  33. package/dist/cjs/nametag/NametagUtils.js.map +1 -0
  34. package/dist/cjs/nametag/index.js +47 -0
  35. package/dist/cjs/nametag/index.js.map +1 -0
  36. package/dist/cjs/protocol/Event.js +209 -0
  37. package/dist/cjs/protocol/Event.js.map +1 -0
  38. package/dist/cjs/protocol/EventKinds.js +126 -0
  39. package/dist/cjs/protocol/EventKinds.js.map +1 -0
  40. package/dist/cjs/protocol/Filter.js +202 -0
  41. package/dist/cjs/protocol/Filter.js.map +1 -0
  42. package/dist/cjs/protocol/index.js +50 -0
  43. package/dist/cjs/protocol/index.js.map +1 -0
  44. package/dist/cjs/token/TokenTransferProtocol.js +196 -0
  45. package/dist/cjs/token/TokenTransferProtocol.js.map +1 -0
  46. package/dist/cjs/token/index.js +45 -0
  47. package/dist/cjs/token/index.js.map +1 -0
  48. package/dist/esm/NostrKeyManager.js +228 -0
  49. package/dist/esm/NostrKeyManager.js.map +1 -0
  50. package/dist/esm/client/NostrClient.js +481 -0
  51. package/dist/esm/client/NostrClient.js.map +1 -0
  52. package/dist/esm/client/NostrEventListener.js +27 -0
  53. package/dist/esm/client/NostrEventListener.js.map +1 -0
  54. package/dist/esm/client/WebSocketAdapter.js +52 -0
  55. package/dist/esm/client/WebSocketAdapter.js.map +1 -0
  56. package/dist/esm/client/index.js +7 -0
  57. package/dist/esm/client/index.js.map +1 -0
  58. package/dist/esm/crypto/bech32.js +193 -0
  59. package/dist/esm/crypto/bech32.js.map +1 -0
  60. package/dist/esm/crypto/index.js +10 -0
  61. package/dist/esm/crypto/index.js.map +1 -0
  62. package/dist/esm/crypto/nip04.js +286 -0
  63. package/dist/esm/crypto/nip04.js.map +1 -0
  64. package/dist/esm/crypto/schnorr.js +93 -0
  65. package/dist/esm/crypto/schnorr.js.map +1 -0
  66. package/dist/esm/index.js +32 -0
  67. package/dist/esm/index.js.map +1 -0
  68. package/dist/esm/nametag/NametagBinding.js +155 -0
  69. package/dist/esm/nametag/NametagBinding.js.map +1 -0
  70. package/dist/esm/nametag/NametagUtils.js +149 -0
  71. package/dist/esm/nametag/NametagUtils.js.map +1 -0
  72. package/dist/esm/nametag/index.js +8 -0
  73. package/dist/esm/nametag/index.js.map +1 -0
  74. package/dist/esm/protocol/Event.js +172 -0
  75. package/dist/esm/protocol/Event.js.map +1 -0
  76. package/dist/esm/protocol/EventKinds.js +119 -0
  77. package/dist/esm/protocol/EventKinds.js.map +1 -0
  78. package/dist/esm/protocol/Filter.js +197 -0
  79. package/dist/esm/protocol/Filter.js.map +1 -0
  80. package/dist/esm/protocol/index.js +8 -0
  81. package/dist/esm/protocol/index.js.map +1 -0
  82. package/dist/esm/token/TokenTransferProtocol.js +154 -0
  83. package/dist/esm/token/TokenTransferProtocol.js.map +1 -0
  84. package/dist/esm/token/index.js +6 -0
  85. package/dist/esm/token/index.js.map +1 -0
  86. package/dist/types/NostrKeyManager.d.ts +150 -0
  87. package/dist/types/NostrKeyManager.d.ts.map +1 -0
  88. package/dist/types/client/NostrClient.d.ts +154 -0
  89. package/dist/types/client/NostrClient.d.ts.map +1 -0
  90. package/dist/types/client/NostrEventListener.d.ts +40 -0
  91. package/dist/types/client/NostrEventListener.d.ts.map +1 -0
  92. package/dist/types/client/WebSocketAdapter.d.ts +55 -0
  93. package/dist/types/client/WebSocketAdapter.d.ts.map +1 -0
  94. package/dist/types/client/index.d.ts +9 -0
  95. package/dist/types/client/index.d.ts.map +1 -0
  96. package/dist/types/crypto/bech32.d.ts +51 -0
  97. package/dist/types/crypto/bech32.d.ts.map +1 -0
  98. package/dist/types/crypto/index.d.ts +10 -0
  99. package/dist/types/crypto/index.d.ts.map +1 -0
  100. package/dist/types/crypto/nip04.d.ts +56 -0
  101. package/dist/types/crypto/nip04.d.ts.map +1 -0
  102. package/dist/types/crypto/schnorr.d.ts +47 -0
  103. package/dist/types/crypto/schnorr.d.ts.map +1 -0
  104. package/dist/types/index.d.ts +31 -0
  105. package/dist/types/index.d.ts.map +1 -0
  106. package/dist/types/nametag/NametagBinding.d.ts +68 -0
  107. package/dist/types/nametag/NametagBinding.d.ts.map +1 -0
  108. package/dist/types/nametag/NametagUtils.d.ts +44 -0
  109. package/dist/types/nametag/NametagUtils.d.ts.map +1 -0
  110. package/dist/types/nametag/index.d.ts +8 -0
  111. package/dist/types/nametag/index.d.ts.map +1 -0
  112. package/dist/types/protocol/Event.d.ts +112 -0
  113. package/dist/types/protocol/Event.d.ts.map +1 -0
  114. package/dist/types/protocol/EventKinds.d.ts +62 -0
  115. package/dist/types/protocol/EventKinds.d.ts.map +1 -0
  116. package/dist/types/protocol/Filter.d.ts +146 -0
  117. package/dist/types/protocol/Filter.d.ts.map +1 -0
  118. package/dist/types/protocol/index.d.ts +10 -0
  119. package/dist/types/protocol/index.d.ts.map +1 -0
  120. package/dist/types/token/TokenTransferProtocol.d.ts +67 -0
  121. package/dist/types/token/TokenTransferProtocol.d.ts.map +1 -0
  122. package/dist/types/token/index.d.ts +6 -0
  123. package/dist/types/token/index.d.ts.map +1 -0
  124. package/package.json +89 -0
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Event - Represents a Nostr event (NIP-01).
3
+ * Provides serialization, signing, and verification functionality.
4
+ */
5
+ import { NostrKeyManager } from '../NostrKeyManager.js';
6
+ /**
7
+ * Type for event tags - arrays of strings where the first element is the tag name.
8
+ */
9
+ export type EventTag = string[];
10
+ /**
11
+ * Interface for unsigned event data (before signing).
12
+ */
13
+ export interface UnsignedEventData {
14
+ kind: number;
15
+ tags: EventTag[];
16
+ content: string;
17
+ created_at?: number;
18
+ }
19
+ /**
20
+ * Interface for signed event data (complete event).
21
+ */
22
+ export interface SignedEventData {
23
+ id: string;
24
+ pubkey: string;
25
+ created_at: number;
26
+ kind: number;
27
+ tags: EventTag[];
28
+ content: string;
29
+ sig: string;
30
+ }
31
+ /**
32
+ * Event class representing a Nostr event (NIP-01).
33
+ */
34
+ export declare class Event implements SignedEventData {
35
+ /** Event ID - SHA-256 hash of the serialized event data (hex) */
36
+ id: string;
37
+ /** Creator's x-only public key (hex) */
38
+ pubkey: string;
39
+ /** Unix timestamp in seconds */
40
+ created_at: number;
41
+ /** Event kind (type) */
42
+ kind: number;
43
+ /** Event tags */
44
+ tags: EventTag[];
45
+ /** Event content */
46
+ content: string;
47
+ /** Schnorr signature (hex) */
48
+ sig: string;
49
+ /**
50
+ * Create an Event instance.
51
+ * @param data Signed event data
52
+ */
53
+ constructor(data: SignedEventData);
54
+ /**
55
+ * Create and sign a new event.
56
+ * @param keyManager Key manager with signing key
57
+ * @param data Unsigned event data
58
+ * @returns Signed Event instance
59
+ */
60
+ static create(keyManager: NostrKeyManager, data: UnsignedEventData): Event;
61
+ /**
62
+ * Calculate the event ID from event data.
63
+ * ID = SHA-256(serialized event data)
64
+ * Serialized format: [0, pubkey, created_at, kind, tags, content]
65
+ */
66
+ static calculateId(pubkey: string, created_at: number, kind: number, tags: EventTag[], content: string): string;
67
+ /**
68
+ * Verify the event signature.
69
+ * @returns true if the signature is valid
70
+ */
71
+ verify(): boolean;
72
+ /**
73
+ * Parse an event from JSON data.
74
+ * @param json JSON object or string
75
+ * @returns Event instance
76
+ */
77
+ static fromJSON(json: unknown): Event;
78
+ /**
79
+ * Check if data has valid event structure.
80
+ */
81
+ static isValidEventData(data: unknown): boolean;
82
+ /**
83
+ * Convert the event to a plain object.
84
+ * @returns Plain object representation
85
+ */
86
+ toJSON(): SignedEventData;
87
+ /**
88
+ * Get the first value of a tag by name.
89
+ * @param tagName Tag name to find
90
+ * @returns First value of the tag, or undefined if not found
91
+ */
92
+ getTagValue(tagName: string): string | undefined;
93
+ /**
94
+ * Get all values of a tag by name.
95
+ * @param tagName Tag name to find
96
+ * @returns Array of tag values
97
+ */
98
+ getTagValues(tagName: string): string[];
99
+ /**
100
+ * Check if a tag exists.
101
+ * @param tagName Tag name to check
102
+ * @returns true if the tag exists
103
+ */
104
+ hasTag(tagName: string): boolean;
105
+ /**
106
+ * Get all values from a single tag entry (excluding the tag name).
107
+ * @param tagName Tag name to find
108
+ * @returns Array of values from the first matching tag, or empty array
109
+ */
110
+ getTagEntryValues(tagName: string): string[];
111
+ }
112
+ //# sourceMappingURL=Event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Event.d.ts","sourceRoot":"","sources":["../../../src/protocol/Event.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,qBAAa,KAAM,YAAW,eAAe;IAC3C,iEAAiE;IACjE,EAAE,EAAE,MAAM,CAAC;IAEX,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IAEf,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IAEnB,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IAEb,iBAAiB;IACjB,IAAI,EAAE,QAAQ,EAAE,CAAC;IAEjB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAEhB,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IAEZ;;;OAGG;gBACS,IAAI,EAAE,eAAe;IAUjC;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,EAAE,iBAAiB,GAAG,KAAK;IAsB1E;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAChB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,EAAE,EAChB,OAAO,EAAE,MAAM,GACd,MAAM;IAMT;;;OAGG;IACH,MAAM,IAAI,OAAO;IA0BjB;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK;IAUrC;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAkB/C;;;OAGG;IACH,MAAM,IAAI,eAAe;IAYzB;;;;OAIG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKhD;;;;OAIG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAIvC;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIhC;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;CAI7C"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * EventKinds - Standardized Nostr event kind definitions.
3
+ * Includes both standard NIP kinds and Unicity custom kinds.
4
+ */
5
+ /** NIP-01: User profile metadata */
6
+ export declare const PROFILE = 0;
7
+ /** NIP-01: Short text note */
8
+ export declare const TEXT_NOTE = 1;
9
+ /** NIP-01: Recommend relay to followers */
10
+ export declare const RECOMMEND_RELAY = 2;
11
+ /** NIP-02: Contact list (follows) */
12
+ export declare const CONTACTS = 3;
13
+ /** NIP-04: Encrypted direct messages */
14
+ export declare const ENCRYPTED_DM = 4;
15
+ /** NIP-09: Event deletion */
16
+ export declare const DELETION = 5;
17
+ /** NIP-25: Reactions (likes, etc.) */
18
+ export declare const REACTION = 7;
19
+ /** NIP-59: Gift wrap for private events */
20
+ export declare const GIFT_WRAP = 1059;
21
+ /** NIP-65: Relay list metadata */
22
+ export declare const RELAY_LIST = 10002;
23
+ /** NIP-78: Application-specific data (parameterized replaceable) */
24
+ export declare const APP_DATA = 30078;
25
+ /** Unicity: Agent profile information */
26
+ export declare const AGENT_PROFILE = 31111;
27
+ /** Unicity: Agent GPS location */
28
+ export declare const AGENT_LOCATION = 31112;
29
+ /** Unicity: Token transfer event */
30
+ export declare const TOKEN_TRANSFER = 31113;
31
+ /** Unicity: File metadata */
32
+ export declare const FILE_METADATA = 31114;
33
+ /**
34
+ * Check if an event kind is replaceable.
35
+ * Replaceable events (kinds 0, 3, or 10000-19999) are replaced when a new
36
+ * event with the same kind and pubkey is published.
37
+ * @param kind Event kind number
38
+ * @returns true if the event kind is replaceable
39
+ */
40
+ export declare function isReplaceable(kind: number): boolean;
41
+ /**
42
+ * Check if an event kind is ephemeral.
43
+ * Ephemeral events (kinds 20000-29999) are not stored by relays.
44
+ * @param kind Event kind number
45
+ * @returns true if the event kind is ephemeral
46
+ */
47
+ export declare function isEphemeral(kind: number): boolean;
48
+ /**
49
+ * Check if an event kind is parameterized replaceable.
50
+ * Parameterized replaceable events (kinds 30000-39999) are replaced when a
51
+ * new event with the same kind, pubkey, and "d" tag value is published.
52
+ * @param kind Event kind number
53
+ * @returns true if the event kind is parameterized replaceable
54
+ */
55
+ export declare function isParameterizedReplaceable(kind: number): boolean;
56
+ /**
57
+ * Get a human-readable name for an event kind.
58
+ * @param kind Event kind number
59
+ * @returns Human-readable name for the event kind
60
+ */
61
+ export declare function getName(kind: number): string;
62
+ //# sourceMappingURL=EventKinds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventKinds.d.ts","sourceRoot":"","sources":["../../../src/protocol/EventKinds.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,oCAAoC;AACpC,eAAO,MAAM,OAAO,IAAI,CAAC;AAEzB,8BAA8B;AAC9B,eAAO,MAAM,SAAS,IAAI,CAAC;AAE3B,2CAA2C;AAC3C,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC,qCAAqC;AACrC,eAAO,MAAM,QAAQ,IAAI,CAAC;AAE1B,wCAAwC;AACxC,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B,6BAA6B;AAC7B,eAAO,MAAM,QAAQ,IAAI,CAAC;AAE1B,sCAAsC;AACtC,eAAO,MAAM,QAAQ,IAAI,CAAC;AAE1B,2CAA2C;AAC3C,eAAO,MAAM,SAAS,OAAO,CAAC;AAE9B,kCAAkC;AAClC,eAAO,MAAM,UAAU,QAAQ,CAAC;AAEhC,oEAAoE;AACpE,eAAO,MAAM,QAAQ,QAAQ,CAAC;AAM9B,yCAAyC;AACzC,eAAO,MAAM,aAAa,QAAQ,CAAC;AAEnC,kCAAkC;AAClC,eAAO,MAAM,cAAc,QAAQ,CAAC;AAEpC,oCAAoC;AACpC,eAAO,MAAM,cAAc,QAAQ,CAAC;AAEpC,6BAA6B;AAC7B,eAAO,MAAM,aAAa,QAAQ,CAAC;AAMnC;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0C5C"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Filter - Nostr subscription filter (NIP-01).
3
+ * Provides a builder pattern for constructing filters.
4
+ */
5
+ /**
6
+ * Filter data structure for Nostr subscriptions.
7
+ */
8
+ export interface FilterData {
9
+ /** Event IDs to match */
10
+ ids?: string[];
11
+ /** Author public keys to match */
12
+ authors?: string[];
13
+ /** Event kinds to match */
14
+ kinds?: number[];
15
+ /** Events referenced by "e" tags */
16
+ '#e'?: string[];
17
+ /** Public keys referenced by "p" tags */
18
+ '#p'?: string[];
19
+ /** Topics/hashtags referenced by "t" tags */
20
+ '#t'?: string[];
21
+ /** Identifiers for parameterized replaceable events ("d" tags) */
22
+ '#d'?: string[];
23
+ /** Minimum timestamp (inclusive, Unix seconds) */
24
+ since?: number;
25
+ /** Maximum timestamp (inclusive, Unix seconds) */
26
+ until?: number;
27
+ /** Maximum number of events to return */
28
+ limit?: number;
29
+ }
30
+ /**
31
+ * Filter class for Nostr subscription queries.
32
+ * Use the builder pattern to construct filters.
33
+ */
34
+ export declare class Filter implements FilterData {
35
+ ids?: string[];
36
+ authors?: string[];
37
+ kinds?: number[];
38
+ '#e'?: string[];
39
+ '#p'?: string[];
40
+ '#t'?: string[];
41
+ '#d'?: string[];
42
+ since?: number;
43
+ until?: number;
44
+ limit?: number;
45
+ /**
46
+ * Create a Filter instance.
47
+ * @param data Optional filter data
48
+ */
49
+ constructor(data?: FilterData);
50
+ /**
51
+ * Create a new Filter builder.
52
+ * @returns Filter builder instance
53
+ */
54
+ static builder(): FilterBuilder;
55
+ /**
56
+ * Convert the filter to a plain object for JSON serialization.
57
+ * Only includes defined properties.
58
+ * @returns Plain object representation
59
+ */
60
+ toJSON(): FilterData;
61
+ /**
62
+ * Parse a filter from JSON data.
63
+ * @param json JSON object or string
64
+ * @returns Filter instance
65
+ */
66
+ static fromJSON(json: unknown): Filter;
67
+ }
68
+ /**
69
+ * Builder class for constructing Filter instances.
70
+ */
71
+ export declare class FilterBuilder {
72
+ private data;
73
+ /**
74
+ * Set event IDs to match.
75
+ * @param ids Event IDs (variadic or array)
76
+ * @returns This builder for chaining
77
+ */
78
+ ids(...ids: string[]): FilterBuilder;
79
+ ids(ids: string[]): FilterBuilder;
80
+ /**
81
+ * Set author public keys to match.
82
+ * @param authors Author public keys (variadic or array)
83
+ * @returns This builder for chaining
84
+ */
85
+ authors(...authors: string[]): FilterBuilder;
86
+ authors(authors: string[]): FilterBuilder;
87
+ /**
88
+ * Set event kinds to match.
89
+ * @param kinds Event kinds (variadic or array)
90
+ * @returns This builder for chaining
91
+ */
92
+ kinds(...kinds: number[]): FilterBuilder;
93
+ kinds(kinds: number[]): FilterBuilder;
94
+ /**
95
+ * Set "e" tags to match (event references).
96
+ * @param eTags Event IDs referenced by "e" tags (variadic or array)
97
+ * @returns This builder for chaining
98
+ */
99
+ eTags(...eTags: string[]): FilterBuilder;
100
+ eTags(eTags: string[]): FilterBuilder;
101
+ /**
102
+ * Set "p" tags to match (pubkey references).
103
+ * @param pTags Public keys referenced by "p" tags (variadic or array)
104
+ * @returns This builder for chaining
105
+ */
106
+ pTags(...pTags: string[]): FilterBuilder;
107
+ pTags(pTags: string[]): FilterBuilder;
108
+ /**
109
+ * Set "t" tags to match (topics/hashtags).
110
+ * @param tTags Topics referenced by "t" tags (variadic or array)
111
+ * @returns This builder for chaining
112
+ */
113
+ tTags(...tTags: string[]): FilterBuilder;
114
+ tTags(tTags: string[]): FilterBuilder;
115
+ /**
116
+ * Set "d" tags to match (parameterized replaceable identifiers).
117
+ * @param dTags Identifiers referenced by "d" tags (variadic or array)
118
+ * @returns This builder for chaining
119
+ */
120
+ dTags(...dTags: string[]): FilterBuilder;
121
+ dTags(dTags: string[]): FilterBuilder;
122
+ /**
123
+ * Set minimum timestamp (inclusive).
124
+ * @param since Unix timestamp in seconds
125
+ * @returns This builder for chaining
126
+ */
127
+ since(since: number): FilterBuilder;
128
+ /**
129
+ * Set maximum timestamp (inclusive).
130
+ * @param until Unix timestamp in seconds
131
+ * @returns This builder for chaining
132
+ */
133
+ until(until: number): FilterBuilder;
134
+ /**
135
+ * Set maximum number of events to return.
136
+ * @param limit Maximum number of events
137
+ * @returns This builder for chaining
138
+ */
139
+ limit(limit: number): FilterBuilder;
140
+ /**
141
+ * Build the Filter instance.
142
+ * @returns Filter instance
143
+ */
144
+ build(): Filter;
145
+ }
146
+ //# sourceMappingURL=Filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Filter.d.ts","sourceRoot":"","sources":["../../../src/protocol/Filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Protocol module - Nostr protocol types and classes
3
+ */
4
+ export { Event } from './Event.js';
5
+ export type { EventTag, UnsignedEventData, SignedEventData } from './Event.js';
6
+ export { Filter, FilterBuilder } from './Filter.js';
7
+ export type { FilterData } from './Filter.js';
8
+ export * as EventKinds from './EventKinds.js';
9
+ export * from './EventKinds.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/protocol/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * TokenTransferProtocol - Encapsulate Unicity token transfers over Nostr.
3
+ * Uses NIP-04 encryption with optional GZIP compression.
4
+ */
5
+ import { NostrKeyManager } from '../NostrKeyManager.js';
6
+ import { Event } from '../protocol/Event.js';
7
+ /**
8
+ * Create a token transfer event.
9
+ *
10
+ * Event structure:
11
+ * - Kind: 31113 (TOKEN_TRANSFER - Unicity custom)
12
+ * - Tags:
13
+ * - ["p", "<recipient_pubkey_hex>"] - Recipient
14
+ * - ["type", "token_transfer"] - Event type
15
+ * - ["amount", "<amount>"] - Optional amount
16
+ * - ["symbol", "<symbol>"] - Optional token symbol
17
+ * - Content: NIP-04 encrypted "token_transfer:{tokenJson}"
18
+ *
19
+ * @param keyManager Key manager with signing keys
20
+ * @param recipientPubkeyHex Recipient's public key (hex)
21
+ * @param tokenJson Token JSON string
22
+ * @param amount Optional amount for metadata
23
+ * @param symbol Optional token symbol for metadata
24
+ * @returns Signed event
25
+ */
26
+ export declare function createTokenTransferEvent(keyManager: NostrKeyManager, recipientPubkeyHex: string, tokenJson: string, amount?: number | bigint, symbol?: string): Promise<Event>;
27
+ /**
28
+ * Parse a token transfer event.
29
+ * Decrypts and decompresses the token data.
30
+ *
31
+ * @param event Token transfer event
32
+ * @param keyManager Key manager for decryption
33
+ * @returns Token JSON string
34
+ * @throws Error if the event is not a valid token transfer
35
+ */
36
+ export declare function parseTokenTransfer(event: Event, keyManager: NostrKeyManager): Promise<string>;
37
+ /**
38
+ * Get the amount from a token transfer event.
39
+ * @param event Token transfer event
40
+ * @returns Amount, or undefined if not specified
41
+ */
42
+ export declare function getAmount(event: Event): bigint | undefined;
43
+ /**
44
+ * Get the symbol from a token transfer event.
45
+ * @param event Token transfer event
46
+ * @returns Symbol, or undefined if not specified
47
+ */
48
+ export declare function getSymbol(event: Event): string | undefined;
49
+ /**
50
+ * Check if an event is a token transfer.
51
+ * @param event Event to check
52
+ * @returns true if the event is a token transfer
53
+ */
54
+ export declare function isTokenTransfer(event: Event): boolean;
55
+ /**
56
+ * Get the recipient public key from a token transfer event.
57
+ * @param event Token transfer event
58
+ * @returns Recipient public key (hex), or undefined if not found
59
+ */
60
+ export declare function getRecipient(event: Event): string | undefined;
61
+ /**
62
+ * Get the sender public key from a token transfer event.
63
+ * @param event Token transfer event
64
+ * @returns Sender public key (hex)
65
+ */
66
+ export declare function getSender(event: Event): string;
67
+ //# sourceMappingURL=TokenTransferProtocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenTransferProtocol.d.ts","sourceRoot":"","sources":["../../../src/token/TokenTransferProtocol.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAM7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,eAAe,EAC3B,kBAAkB,EAAE,MAAM,EAC1B,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EACxB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,KAAK,CAAC,CA0BhB;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,eAAe,GAC1B,OAAO,CAAC,MAAM,CAAC,CA8CjB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAU1D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAKrD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAE9C"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Token module - Unicity token transfers over Nostr
3
+ */
4
+ export * as TokenTransferProtocol from './TokenTransferProtocol.js';
5
+ export * from './TokenTransferProtocol.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/token/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,qBAAqB,MAAM,4BAA4B,CAAC;AACpE,cAAc,4BAA4B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,89 @@
1
+ {
2
+ "name": "@unicitylabs/nostr-js-sdk",
3
+ "version": "0.0.1",
4
+ "description": "Unicity Nostr SDK - Token transfers and nametag bindings over Nostr protocol",
5
+ "license": "MIT",
6
+ "author": "Unicity Labs",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/unicitylabs/unicity-nostr-js-sdk"
10
+ },
11
+ "keywords": [
12
+ "nostr",
13
+ "unicity",
14
+ "token",
15
+ "blockchain",
16
+ "cryptocurrency",
17
+ "websocket",
18
+ "schnorr",
19
+ "bip340"
20
+ ],
21
+ "type": "module",
22
+ "main": "./dist/cjs/index.js",
23
+ "module": "./dist/esm/index.js",
24
+ "browser": "./dist/browser/index.js",
25
+ "types": "./dist/types/index.d.ts",
26
+ "exports": {
27
+ ".": {
28
+ "import": {
29
+ "types": "./dist/types/index.d.ts",
30
+ "default": "./dist/esm/index.js"
31
+ },
32
+ "require": {
33
+ "types": "./dist/types/index.d.ts",
34
+ "default": "./dist/cjs/index.js"
35
+ },
36
+ "browser": {
37
+ "types": "./dist/types/index.d.ts",
38
+ "default": "./dist/browser/index.js"
39
+ }
40
+ }
41
+ },
42
+ "files": [
43
+ "dist",
44
+ "README.md",
45
+ "LICENSE"
46
+ ],
47
+ "scripts": {
48
+ "build": "npm run build:esm && npm run build:cjs && npm run build:browser && npm run build:types",
49
+ "build:esm": "tsc -p tsconfig.esm.json",
50
+ "build:cjs": "tsc -p tsconfig.cjs.json",
51
+ "build:browser": "rollup -c rollup.config.js",
52
+ "build:types": "tsc -p tsconfig.types.json",
53
+ "build:check": "tsc --noEmit",
54
+ "clean": "rm -rf dist",
55
+ "test": "vitest run",
56
+ "test:watch": "vitest",
57
+ "test:unit": "vitest run --testPathPattern=unit",
58
+ "test:integration": "vitest run --testPathPattern=integration",
59
+ "test:coverage": "vitest run --coverage",
60
+ "lint": "eslint src --ext .ts",
61
+ "lint:fix": "eslint src --ext .ts --fix",
62
+ "prepublishOnly": "npm run clean && npm run build && npm test"
63
+ },
64
+ "dependencies": {
65
+ "@noble/curves": "^1.6.0",
66
+ "@noble/hashes": "^1.5.0",
67
+ "@scure/base": "^1.1.9",
68
+ "libphonenumber-js": "^1.11.14"
69
+ },
70
+ "devDependencies": {
71
+ "@rollup/plugin-commonjs": "^28.0.1",
72
+ "@rollup/plugin-node-resolve": "^15.3.0",
73
+ "@rollup/plugin-terser": "^0.4.4",
74
+ "@rollup/plugin-typescript": "^12.1.1",
75
+ "@types/node": "^22.9.0",
76
+ "@types/ws": "^8.18.1",
77
+ "@typescript-eslint/eslint-plugin": "^8.14.0",
78
+ "@typescript-eslint/parser": "^8.14.0",
79
+ "eslint": "^9.14.0",
80
+ "rollup": "^4.27.2",
81
+ "tslib": "^2.8.1",
82
+ "typescript": "^5.6.3",
83
+ "vitest": "^2.1.5",
84
+ "ws": "^8.18.0"
85
+ },
86
+ "engines": {
87
+ "node": ">=18.0.0"
88
+ }
89
+ }