@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.
- package/README.md +290 -0
- package/dist/browser/index.js +8444 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/index.min.js +12 -0
- package/dist/browser/index.min.js.map +1 -0
- package/dist/browser/index.umd.js +8524 -0
- package/dist/browser/index.umd.js.map +1 -0
- package/dist/browser/index.umd.min.js +12 -0
- package/dist/browser/index.umd.min.js.map +1 -0
- package/dist/cjs/NostrKeyManager.js +265 -0
- package/dist/cjs/NostrKeyManager.js.map +1 -0
- package/dist/cjs/client/NostrClient.js +518 -0
- package/dist/cjs/client/NostrClient.js.map +1 -0
- package/dist/cjs/client/NostrEventListener.js +31 -0
- package/dist/cjs/client/NostrEventListener.js.map +1 -0
- package/dist/cjs/client/WebSocketAdapter.js +90 -0
- package/dist/cjs/client/WebSocketAdapter.js.map +1 -0
- package/dist/cjs/client/index.js +18 -0
- package/dist/cjs/client/index.js.map +1 -0
- package/dist/cjs/crypto/bech32.js +201 -0
- package/dist/cjs/crypto/bech32.js.map +1 -0
- package/dist/cjs/crypto/index.js +49 -0
- package/dist/cjs/crypto/index.js.map +1 -0
- package/dist/cjs/crypto/nip04.js +327 -0
- package/dist/cjs/crypto/nip04.js.map +1 -0
- package/dist/cjs/crypto/schnorr.js +101 -0
- package/dist/cjs/crypto/schnorr.js.map +1 -0
- package/dist/cjs/index.js +57 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/nametag/NametagBinding.js +196 -0
- package/dist/cjs/nametag/NametagBinding.js.map +1 -0
- package/dist/cjs/nametag/NametagUtils.js +156 -0
- package/dist/cjs/nametag/NametagUtils.js.map +1 -0
- package/dist/cjs/nametag/index.js +47 -0
- package/dist/cjs/nametag/index.js.map +1 -0
- package/dist/cjs/protocol/Event.js +209 -0
- package/dist/cjs/protocol/Event.js.map +1 -0
- package/dist/cjs/protocol/EventKinds.js +126 -0
- package/dist/cjs/protocol/EventKinds.js.map +1 -0
- package/dist/cjs/protocol/Filter.js +202 -0
- package/dist/cjs/protocol/Filter.js.map +1 -0
- package/dist/cjs/protocol/index.js +50 -0
- package/dist/cjs/protocol/index.js.map +1 -0
- package/dist/cjs/token/TokenTransferProtocol.js +196 -0
- package/dist/cjs/token/TokenTransferProtocol.js.map +1 -0
- package/dist/cjs/token/index.js +45 -0
- package/dist/cjs/token/index.js.map +1 -0
- package/dist/esm/NostrKeyManager.js +228 -0
- package/dist/esm/NostrKeyManager.js.map +1 -0
- package/dist/esm/client/NostrClient.js +481 -0
- package/dist/esm/client/NostrClient.js.map +1 -0
- package/dist/esm/client/NostrEventListener.js +27 -0
- package/dist/esm/client/NostrEventListener.js.map +1 -0
- package/dist/esm/client/WebSocketAdapter.js +52 -0
- package/dist/esm/client/WebSocketAdapter.js.map +1 -0
- package/dist/esm/client/index.js +7 -0
- package/dist/esm/client/index.js.map +1 -0
- package/dist/esm/crypto/bech32.js +193 -0
- package/dist/esm/crypto/bech32.js.map +1 -0
- package/dist/esm/crypto/index.js +10 -0
- package/dist/esm/crypto/index.js.map +1 -0
- package/dist/esm/crypto/nip04.js +286 -0
- package/dist/esm/crypto/nip04.js.map +1 -0
- package/dist/esm/crypto/schnorr.js +93 -0
- package/dist/esm/crypto/schnorr.js.map +1 -0
- package/dist/esm/index.js +32 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/nametag/NametagBinding.js +155 -0
- package/dist/esm/nametag/NametagBinding.js.map +1 -0
- package/dist/esm/nametag/NametagUtils.js +149 -0
- package/dist/esm/nametag/NametagUtils.js.map +1 -0
- package/dist/esm/nametag/index.js +8 -0
- package/dist/esm/nametag/index.js.map +1 -0
- package/dist/esm/protocol/Event.js +172 -0
- package/dist/esm/protocol/Event.js.map +1 -0
- package/dist/esm/protocol/EventKinds.js +119 -0
- package/dist/esm/protocol/EventKinds.js.map +1 -0
- package/dist/esm/protocol/Filter.js +197 -0
- package/dist/esm/protocol/Filter.js.map +1 -0
- package/dist/esm/protocol/index.js +8 -0
- package/dist/esm/protocol/index.js.map +1 -0
- package/dist/esm/token/TokenTransferProtocol.js +154 -0
- package/dist/esm/token/TokenTransferProtocol.js.map +1 -0
- package/dist/esm/token/index.js +6 -0
- package/dist/esm/token/index.js.map +1 -0
- package/dist/types/NostrKeyManager.d.ts +150 -0
- package/dist/types/NostrKeyManager.d.ts.map +1 -0
- package/dist/types/client/NostrClient.d.ts +154 -0
- package/dist/types/client/NostrClient.d.ts.map +1 -0
- package/dist/types/client/NostrEventListener.d.ts +40 -0
- package/dist/types/client/NostrEventListener.d.ts.map +1 -0
- package/dist/types/client/WebSocketAdapter.d.ts +55 -0
- package/dist/types/client/WebSocketAdapter.d.ts.map +1 -0
- package/dist/types/client/index.d.ts +9 -0
- package/dist/types/client/index.d.ts.map +1 -0
- package/dist/types/crypto/bech32.d.ts +51 -0
- package/dist/types/crypto/bech32.d.ts.map +1 -0
- package/dist/types/crypto/index.d.ts +10 -0
- package/dist/types/crypto/index.d.ts.map +1 -0
- package/dist/types/crypto/nip04.d.ts +56 -0
- package/dist/types/crypto/nip04.d.ts.map +1 -0
- package/dist/types/crypto/schnorr.d.ts +47 -0
- package/dist/types/crypto/schnorr.d.ts.map +1 -0
- package/dist/types/index.d.ts +31 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/nametag/NametagBinding.d.ts +68 -0
- package/dist/types/nametag/NametagBinding.d.ts.map +1 -0
- package/dist/types/nametag/NametagUtils.d.ts +44 -0
- package/dist/types/nametag/NametagUtils.d.ts.map +1 -0
- package/dist/types/nametag/index.d.ts +8 -0
- package/dist/types/nametag/index.d.ts.map +1 -0
- package/dist/types/protocol/Event.d.ts +112 -0
- package/dist/types/protocol/Event.d.ts.map +1 -0
- package/dist/types/protocol/EventKinds.d.ts +62 -0
- package/dist/types/protocol/EventKinds.d.ts.map +1 -0
- package/dist/types/protocol/Filter.d.ts +146 -0
- package/dist/types/protocol/Filter.d.ts.map +1 -0
- package/dist/types/protocol/index.d.ts +10 -0
- package/dist/types/protocol/index.d.ts.map +1 -0
- package/dist/types/token/TokenTransferProtocol.d.ts +67 -0
- package/dist/types/token/TokenTransferProtocol.d.ts.map +1 -0
- package/dist/types/token/index.d.ts +6 -0
- package/dist/types/token/index.d.ts.map +1 -0
- 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":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,yBAAyB;IACzB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IAEf,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,qBAAa,MAAO,YAAW,UAAU;IACvC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;gBACS,IAAI,CAAC,EAAE,UAAU;IAe7B;;;OAGG;IACH,MAAM,CAAC,OAAO,IAAI,aAAa;IAI/B;;;;OAIG;IACH,MAAM,IAAI,UAAU;IAiBpB;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;CAIvC;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAkB;IAE9B;;;;OAIG;IACH,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,GAAG,aAAa;IACpC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,aAAa;IAUjC;;;;OAIG;IACH,OAAO,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,aAAa;IAC5C,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,aAAa;IAUzC;;;;OAIG;IACH,KAAK,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa;IACxC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa;IAUrC;;;;OAIG;IACH,KAAK,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa;IACxC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa;IAUrC;;;;OAIG;IACH,KAAK,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa;IACxC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa;IAUrC;;;;OAIG;IACH,KAAK,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa;IACxC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa;IAUrC;;;;OAIG;IACH,KAAK,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa;IACxC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa;IAUrC;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa;IAKnC;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa;IAKnC;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa;IAKnC;;;OAGG;IACH,KAAK,IAAI,MAAM;CAGhB"}
|
|
@@ -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 @@
|
|
|
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
|
+
}
|