@unicitylabs/nostr-js-sdk 0.3.2 → 0.4.0-dev.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 +80 -12
- package/dist/browser/index.js +2218 -1880
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/index.min.js +6 -6
- package/dist/browser/index.min.js.map +1 -1
- package/dist/browser/index.umd.js +2227 -1879
- package/dist/browser/index.umd.js.map +1 -1
- package/dist/browser/index.umd.min.js +6 -6
- package/dist/browser/index.umd.min.js.map +1 -1
- package/dist/cjs/client/NostrClient.js +106 -19
- package/dist/cjs/client/NostrClient.js.map +1 -1
- package/dist/cjs/nametag/NametagBinding.js +131 -9
- package/dist/cjs/nametag/NametagBinding.js.map +1 -1
- package/dist/cjs/nametag/NametagUtils.js +163 -0
- package/dist/cjs/nametag/NametagUtils.js.map +1 -1
- package/dist/esm/client/NostrClient.js +106 -19
- package/dist/esm/client/NostrClient.js.map +1 -1
- package/dist/esm/nametag/NametagBinding.js +128 -9
- package/dist/esm/nametag/NametagBinding.js.map +1 -1
- package/dist/esm/nametag/NametagUtils.js +125 -1
- package/dist/esm/nametag/NametagUtils.js.map +1 -1
- package/dist/types/client/NostrClient.d.ts +50 -1
- package/dist/types/client/NostrClient.d.ts.map +1 -1
- package/dist/types/nametag/NametagBinding.d.ts +63 -1
- package/dist/types/nametag/NametagBinding.d.ts.map +1 -1
- package/dist/types/nametag/NametagUtils.d.ts +41 -0
- package/dist/types/nametag/NametagUtils.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NametagBinding.js","sourceRoot":"","sources":["../../../src/nametag/NametagBinding.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,UAAU,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAElD,
|
|
1
|
+
{"version":3,"file":"NametagBinding.js","sourceRoot":"","sources":["../../../src/nametag/NametagBinding.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,18 +3,54 @@
|
|
|
3
3
|
* Supports phone number normalization to E.164 format.
|
|
4
4
|
*/
|
|
5
5
|
import { sha256 } from '@noble/hashes/sha256';
|
|
6
|
+
import { hkdf } from '@noble/hashes/hkdf';
|
|
6
7
|
import { bytesToHex } from '@noble/hashes/utils';
|
|
7
8
|
import { parsePhoneNumber, isValidPhoneNumber } from 'libphonenumber-js';
|
|
9
|
+
/**
|
|
10
|
+
* Get the Web Crypto API (works in both Node.js and browser).
|
|
11
|
+
*/
|
|
12
|
+
async function getWebCrypto() {
|
|
13
|
+
if (typeof globalThis.crypto?.subtle !== 'undefined') {
|
|
14
|
+
return globalThis.crypto;
|
|
15
|
+
}
|
|
16
|
+
// Node.js environment - import webcrypto
|
|
17
|
+
const nodeCrypto = await import('crypto');
|
|
18
|
+
return nodeCrypto.webcrypto;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Base64 encode (works in both Node.js and browser).
|
|
22
|
+
*/
|
|
23
|
+
function toBase64(bytes) {
|
|
24
|
+
if (typeof Buffer !== 'undefined') {
|
|
25
|
+
return Buffer.from(bytes).toString('base64');
|
|
26
|
+
}
|
|
27
|
+
return btoa(String.fromCharCode(...Array.from(bytes)));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Base64 decode (works in both Node.js and browser).
|
|
31
|
+
*/
|
|
32
|
+
function fromBase64(base64) {
|
|
33
|
+
if (typeof Buffer !== 'undefined') {
|
|
34
|
+
return new Uint8Array(Buffer.from(base64, 'base64'));
|
|
35
|
+
}
|
|
36
|
+
return Uint8Array.from(atob(base64), c => c.charCodeAt(0));
|
|
37
|
+
}
|
|
8
38
|
/** Salt prefix for nametag hashing */
|
|
9
39
|
const NAMETAG_SALT = 'unicity:nametag:';
|
|
40
|
+
/** Minimum nametag length (after normalization) */
|
|
41
|
+
export const NAMETAG_MIN_LENGTH = 3;
|
|
42
|
+
/** Maximum nametag length (after normalization) */
|
|
43
|
+
export const NAMETAG_MAX_LENGTH = 20;
|
|
10
44
|
/** Default country code for phone number normalization */
|
|
11
45
|
const DEFAULT_COUNTRY = 'US';
|
|
46
|
+
/** Salt prefix for address hashing */
|
|
47
|
+
const ADDRESS_SALT = 'unicity:address:';
|
|
12
48
|
/**
|
|
13
49
|
* Compute SHA-256 hash of a string.
|
|
14
50
|
* @param input String to hash
|
|
15
51
|
* @returns Hex-encoded hash
|
|
16
52
|
*/
|
|
17
|
-
function sha256Hex(input) {
|
|
53
|
+
export function sha256Hex(input) {
|
|
18
54
|
const bytes = new TextEncoder().encode(input);
|
|
19
55
|
return bytesToHex(sha256(bytes));
|
|
20
56
|
}
|
|
@@ -146,4 +182,92 @@ export function isPhoneNumber(str, defaultCountry = DEFAULT_COUNTRY) {
|
|
|
146
182
|
return false;
|
|
147
183
|
}
|
|
148
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* Validate a nametag string. Strips leading @, normalizes, then checks format.
|
|
187
|
+
* Regular nametags: lowercase alphanumeric, underscore, hyphen, 3-20 chars.
|
|
188
|
+
* Phone numbers: validated via libphonenumber-js.
|
|
189
|
+
* @param nametag Nametag to validate
|
|
190
|
+
* @param defaultCountry Default country code for phone normalization
|
|
191
|
+
* @returns true if the nametag is valid
|
|
192
|
+
*/
|
|
193
|
+
export function isValidNametag(nametag, defaultCountry = DEFAULT_COUNTRY) {
|
|
194
|
+
const stripped = nametag.startsWith('@') ? nametag.slice(1) : nametag;
|
|
195
|
+
const normalized = normalizeNametag(stripped, defaultCountry);
|
|
196
|
+
if (isPhoneNumber(normalized)) {
|
|
197
|
+
return true;
|
|
198
|
+
}
|
|
199
|
+
const pattern = new RegExp(`^[a-z0-9_-]{${NAMETAG_MIN_LENGTH},${NAMETAG_MAX_LENGTH}}$`);
|
|
200
|
+
return pattern.test(normalized);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Hash an address for use as an indexed relay tag.
|
|
204
|
+
* Enables reverse lookup: address → binding event.
|
|
205
|
+
* @param address Address string (e.g., DIRECT://..., alpha1..., PROXY://...)
|
|
206
|
+
* @returns Hex-encoded SHA-256 hash
|
|
207
|
+
*/
|
|
208
|
+
export function hashAddressForTag(address) {
|
|
209
|
+
return sha256Hex(ADDRESS_SALT + address);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Derive an AES-256 encryption key from a private key using HKDF-SHA256.
|
|
213
|
+
* @param privateKeyHex Hex-encoded private key
|
|
214
|
+
* @returns 32-byte derived key
|
|
215
|
+
*/
|
|
216
|
+
function deriveNametagEncryptionKey(privateKeyHex) {
|
|
217
|
+
const privateKeyBytes = hexToBytes(privateKeyHex);
|
|
218
|
+
const saltInput = new TextEncoder().encode('sphere-nametag-salt');
|
|
219
|
+
const salt = sha256(saltInput);
|
|
220
|
+
const info = new TextEncoder().encode('nametag-encryption');
|
|
221
|
+
return hkdf(sha256, privateKeyBytes, salt, info, 32);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Convert hex string to Uint8Array.
|
|
225
|
+
*/
|
|
226
|
+
function hexToBytes(hex) {
|
|
227
|
+
const bytes = new Uint8Array(hex.length / 2);
|
|
228
|
+
for (let i = 0; i < hex.length; i += 2) {
|
|
229
|
+
bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);
|
|
230
|
+
}
|
|
231
|
+
return bytes;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Encrypt a nametag with AES-GCM using a key derived from the private key.
|
|
235
|
+
* Enables nametag recovery on wallet import.
|
|
236
|
+
* @param nametag Plain text nametag
|
|
237
|
+
* @param privateKeyHex Hex-encoded private key for key derivation
|
|
238
|
+
* @returns Base64-encoded encrypted data (IV + ciphertext + auth tag)
|
|
239
|
+
*/
|
|
240
|
+
export async function encryptNametag(nametag, privateKeyHex) {
|
|
241
|
+
const webCrypto = await getWebCrypto();
|
|
242
|
+
const key = deriveNametagEncryptionKey(privateKeyHex);
|
|
243
|
+
const iv = webCrypto.getRandomValues(new Uint8Array(12));
|
|
244
|
+
const data = new TextEncoder().encode(nametag);
|
|
245
|
+
const cryptoKey = await webCrypto.subtle.importKey('raw', new Uint8Array(key).buffer, { name: 'AES-GCM' }, false, ['encrypt']);
|
|
246
|
+
const encrypted = await webCrypto.subtle.encrypt({ name: 'AES-GCM', iv: new Uint8Array(iv).buffer }, cryptoKey, new Uint8Array(data).buffer);
|
|
247
|
+
const combined = new Uint8Array(iv.length + encrypted.byteLength);
|
|
248
|
+
combined.set(iv, 0);
|
|
249
|
+
combined.set(new Uint8Array(encrypted), iv.length);
|
|
250
|
+
return toBase64(combined);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Decrypt a nametag encrypted with encryptNametag().
|
|
254
|
+
* @param encryptedBase64 Base64-encoded encrypted data (IV + ciphertext + auth tag)
|
|
255
|
+
* @param privateKeyHex Hex-encoded private key for key derivation
|
|
256
|
+
* @returns Decrypted nametag, or null if decryption fails (wrong key)
|
|
257
|
+
*/
|
|
258
|
+
export async function decryptNametag(encryptedBase64, privateKeyHex) {
|
|
259
|
+
try {
|
|
260
|
+
const webCrypto = await getWebCrypto();
|
|
261
|
+
const key = deriveNametagEncryptionKey(privateKeyHex);
|
|
262
|
+
const combined = fromBase64(encryptedBase64);
|
|
263
|
+
const iv = combined.slice(0, 12);
|
|
264
|
+
const ciphertext = combined.slice(12);
|
|
265
|
+
const cryptoKey = await webCrypto.subtle.importKey('raw', new Uint8Array(key).buffer, { name: 'AES-GCM' }, false, ['decrypt']);
|
|
266
|
+
const decrypted = await webCrypto.subtle.decrypt({ name: 'AES-GCM', iv: new Uint8Array(iv).buffer }, cryptoKey, new Uint8Array(ciphertext).buffer);
|
|
267
|
+
return new TextDecoder().decode(decrypted);
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
return null;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
149
273
|
//# sourceMappingURL=NametagUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NametagUtils.js","sourceRoot":"","sources":["../../../src/nametag/NametagUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAe,MAAM,mBAAmB,CAAC;AAEtF,sCAAsC;AACtC,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAExC,0DAA0D;AAC1D,MAAM,eAAe,GAAG,IAAI,CAAC;AAE7B;;;;GAIG;AACH,
|
|
1
|
+
{"version":3,"file":"NametagUtils.js","sourceRoot":"","sources":["../../../src/nametag/NametagUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import { Event, UnsignedEventData } from '../protocol/Event.js';
|
|
|
7
7
|
import { Filter } from '../protocol/Filter.js';
|
|
8
8
|
import { NostrEventListener } from './NostrEventListener.js';
|
|
9
9
|
import type { PrivateMessage, PrivateMessageOptions } from '../messaging/types.js';
|
|
10
|
+
import type { IdentityBindingParams, BindingInfo } from '../nametag/NametagBinding.js';
|
|
10
11
|
/**
|
|
11
12
|
* Options for configuring NostrClient behavior.
|
|
12
13
|
*/
|
|
@@ -227,11 +228,21 @@ export declare class NostrClient {
|
|
|
227
228
|
sendPaymentRequestDecline(originalRequestSenderPubkey: string, originalEventId: string, requestId: string, reason?: string): Promise<string>;
|
|
228
229
|
/**
|
|
229
230
|
* Publish a nametag binding.
|
|
231
|
+
* Checks for existing claims by other pubkeys before publishing.
|
|
230
232
|
* @param nametagId Nametag identifier
|
|
231
233
|
* @param unicityAddress Unicity address
|
|
232
234
|
* @returns Promise that resolves with success status
|
|
235
|
+
* @throws Error if nametag is invalid or already claimed by another pubkey
|
|
233
236
|
*/
|
|
234
|
-
publishNametagBinding(nametagId: string, unicityAddress: string): Promise<boolean>;
|
|
237
|
+
publishNametagBinding(nametagId: string, unicityAddress: string, identity?: IdentityBindingParams): Promise<boolean>;
|
|
238
|
+
/**
|
|
239
|
+
* Publish a base identity binding (no nametag).
|
|
240
|
+
* Uses d-tag = SHA256('unicity:identity:' + nostrPubkey) so each wallet
|
|
241
|
+
* has exactly one identity binding. Subsequent calls replace the previous event.
|
|
242
|
+
* @param identity Identity parameters (publicKey, l1Address, directAddress)
|
|
243
|
+
* @returns true if published successfully
|
|
244
|
+
*/
|
|
245
|
+
publishIdentityBinding(identity: IdentityBindingParams): Promise<boolean>;
|
|
235
246
|
/**
|
|
236
247
|
* Subscribe to events matching a filter.
|
|
237
248
|
* @param filter Filter for matching events
|
|
@@ -252,12 +263,50 @@ export declare class NostrClient {
|
|
|
252
263
|
* @param subscriptionId Subscription ID to unsubscribe
|
|
253
264
|
*/
|
|
254
265
|
unsubscribe(subscriptionId: string): void;
|
|
266
|
+
/**
|
|
267
|
+
* Query binding events with first-seen-wins anti-hijacking resolution.
|
|
268
|
+
*
|
|
269
|
+
* Strategy: first-seen-wins across authors, latest-wins for same author.
|
|
270
|
+
* - Across authors: the pubkey that first published wins (earliest created_at)
|
|
271
|
+
* - Same author: the most recent event is used (latest created_at = most complete data)
|
|
272
|
+
* - Tie-breaking: deterministic by lexicographic pubkey comparison (lowest wins)
|
|
273
|
+
*
|
|
274
|
+
* Events with invalid signatures are silently skipped to prevent relay injection attacks.
|
|
275
|
+
*
|
|
276
|
+
* Known limitations:
|
|
277
|
+
* - Timestamps are self-reported (NIP-01). An attacker can set created_at to 0.
|
|
278
|
+
* Chain-anchored proof of registration time is the only reliable defense.
|
|
279
|
+
* - TOCTOU: between conflict check and publish, another user can claim the same nametag.
|
|
280
|
+
* This is inherent to Nostr's eventually-consistent relay model.
|
|
281
|
+
*
|
|
282
|
+
* @param filter Subscription filter
|
|
283
|
+
* @param extractResult Callback to extract the desired result from the winning event
|
|
284
|
+
* @returns Promise resolving to the extracted result, or null
|
|
285
|
+
*/
|
|
286
|
+
private queryWithFirstSeenWins;
|
|
255
287
|
/**
|
|
256
288
|
* Query for a public key by nametag.
|
|
289
|
+
* Uses first-seen-wins anti-hijacking resolution.
|
|
257
290
|
* @param nametagId Nametag identifier
|
|
258
291
|
* @returns Promise that resolves with the public key hex, or null if not found
|
|
259
292
|
*/
|
|
260
293
|
queryPubkeyByNametag(nametagId: string): Promise<string | null>;
|
|
294
|
+
/**
|
|
295
|
+
* Query for full binding info by nametag.
|
|
296
|
+
* Returns extended identity fields (chain pubkey, addresses, etc.) when available.
|
|
297
|
+
* Uses first-seen-wins across authors, latest-wins for same author.
|
|
298
|
+
* @param nametagId Nametag identifier
|
|
299
|
+
* @returns Promise that resolves with BindingInfo, or null if not found
|
|
300
|
+
*/
|
|
301
|
+
queryBindingByNametag(nametagId: string): Promise<BindingInfo | null>;
|
|
302
|
+
/**
|
|
303
|
+
* Query for binding info by address (reverse lookup).
|
|
304
|
+
* Supports DIRECT://, PROXY://, alpha1..., or chain pubkey lookups.
|
|
305
|
+
* Uses first-seen-wins across authors, latest-wins for same author.
|
|
306
|
+
* @param address Address string
|
|
307
|
+
* @returns Promise that resolves with BindingInfo, or null if not found
|
|
308
|
+
*/
|
|
309
|
+
queryBindingByAddress(address: string): Promise<BindingInfo | null>;
|
|
261
310
|
/**
|
|
262
311
|
* Create and publish a signed event.
|
|
263
312
|
* @param data Unsigned event data
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NostrClient.d.ts","sourceRoot":"","sources":["../../../src/client/NostrClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAS7D,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"NostrClient.d.ts","sourceRoot":"","sources":["../../../src/client/NostrClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,40 @@
|
|
|
5
5
|
import { NostrKeyManager } from '../NostrKeyManager.js';
|
|
6
6
|
import { Event } from '../protocol/Event.js';
|
|
7
7
|
import { Filter } from '../protocol/Filter.js';
|
|
8
|
+
/**
|
|
9
|
+
* Extended identity parameters for richer binding events.
|
|
10
|
+
* All fields are optional — when provided, they are included in the
|
|
11
|
+
* event content and indexed via 't' tags for reverse lookup.
|
|
12
|
+
*/
|
|
13
|
+
export interface IdentityBindingParams {
|
|
14
|
+
/** 33-byte compressed secp256k1 public key */
|
|
15
|
+
publicKey?: string;
|
|
16
|
+
/** L1 bech32 address (e.g., alpha1...) */
|
|
17
|
+
l1Address?: string;
|
|
18
|
+
/** Direct address identifier */
|
|
19
|
+
directAddress?: string;
|
|
20
|
+
/** Proxy address (derived from nametag) */
|
|
21
|
+
proxyAddress?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Parsed binding info returned by query methods.
|
|
25
|
+
*/
|
|
26
|
+
export interface BindingInfo {
|
|
27
|
+
/** Event author's 32-byte Nostr public key (hex) */
|
|
28
|
+
transportPubkey: string;
|
|
29
|
+
/** 33-byte compressed secp256k1 public key (from content) */
|
|
30
|
+
publicKey?: string;
|
|
31
|
+
/** L1 bech32 address (from content) */
|
|
32
|
+
l1Address?: string;
|
|
33
|
+
/** Direct address (from content) */
|
|
34
|
+
directAddress?: string;
|
|
35
|
+
/** Proxy address (from content) */
|
|
36
|
+
proxyAddress?: string;
|
|
37
|
+
/** Plaintext nametag (from content, if present) */
|
|
38
|
+
nametag?: string;
|
|
39
|
+
/** Event timestamp in milliseconds */
|
|
40
|
+
timestamp: number;
|
|
41
|
+
}
|
|
8
42
|
/**
|
|
9
43
|
* Create a nametag binding event.
|
|
10
44
|
*
|
|
@@ -21,9 +55,20 @@ import { Filter } from '../protocol/Filter.js';
|
|
|
21
55
|
* @param nametagId Nametag identifier (phone number or username)
|
|
22
56
|
* @param unicityAddress Unicity blockchain address
|
|
23
57
|
* @param defaultCountry Default country code for phone normalization
|
|
58
|
+
* @param identity Optional extended identity parameters
|
|
59
|
+
* @returns Signed event
|
|
60
|
+
*/
|
|
61
|
+
export declare function createBindingEvent(keyManager: NostrKeyManager, nametagId: string, unicityAddress: string, defaultCountry?: string, identity?: IdentityBindingParams): Promise<Event>;
|
|
62
|
+
/**
|
|
63
|
+
* Create a base identity binding event (no nametag).
|
|
64
|
+
* Uses d-tag = SHA256('unicity:identity:' + nostrPubkey) so each wallet
|
|
65
|
+
* has exactly one identity binding event.
|
|
66
|
+
*
|
|
67
|
+
* @param keyManager Key manager with signing keys
|
|
68
|
+
* @param identity Identity parameters (publicKey, l1Address, directAddress)
|
|
24
69
|
* @returns Signed event
|
|
25
70
|
*/
|
|
26
|
-
export declare function
|
|
71
|
+
export declare function createIdentityBindingEvent(keyManager: NostrKeyManager, identity: IdentityBindingParams): Event;
|
|
27
72
|
/**
|
|
28
73
|
* Create a filter to query pubkey by nametag.
|
|
29
74
|
* Query direction: nametag → pubkey
|
|
@@ -33,6 +78,14 @@ export declare function createBindingEvent(keyManager: NostrKeyManager, nametagI
|
|
|
33
78
|
* @returns Filter for nametag binding events
|
|
34
79
|
*/
|
|
35
80
|
export declare function createNametagToPubkeyFilter(nametagId: string, defaultCountry?: string): Filter;
|
|
81
|
+
/**
|
|
82
|
+
* Create a filter to query binding events by address hash.
|
|
83
|
+
* Query direction: address → binding event
|
|
84
|
+
*
|
|
85
|
+
* @param address Address string (DIRECT://..., alpha1..., PROXY://..., or chain pubkey)
|
|
86
|
+
* @returns Filter for nametag binding events
|
|
87
|
+
*/
|
|
88
|
+
export declare function createAddressToBindingFilter(address: string): Filter;
|
|
36
89
|
/**
|
|
37
90
|
* Create a filter to query nametags by pubkey.
|
|
38
91
|
* Query direction: pubkey → nametags
|
|
@@ -41,6 +94,15 @@ export declare function createNametagToPubkeyFilter(nametagId: string, defaultCo
|
|
|
41
94
|
* @returns Filter for nametag binding events
|
|
42
95
|
*/
|
|
43
96
|
export declare function createPubkeyToNametagFilter(nostrPubkey: string): Filter;
|
|
97
|
+
/**
|
|
98
|
+
* Parse binding info from an event.
|
|
99
|
+
* Extracts both basic and extended identity fields from event content when possible.
|
|
100
|
+
* On parse failure, returns minimal binding info.
|
|
101
|
+
*
|
|
102
|
+
* @param event Binding event
|
|
103
|
+
* @returns BindingInfo with parsed fields when possible, or minimal info if content cannot be parsed
|
|
104
|
+
*/
|
|
105
|
+
export declare function parseBindingInfo(event: Event): BindingInfo;
|
|
44
106
|
/**
|
|
45
107
|
* Parse the hashed nametag from a binding event.
|
|
46
108
|
* Tries tags first, then content JSON.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NametagBinding.d.ts","sourceRoot":"","sources":["../../../src/nametag/NametagBinding.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"NametagBinding.d.ts","sourceRoot":"","sources":["../../../src/nametag/NametagBinding.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAuB/C;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,eAAe,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,cAAc,GAAE,MAAwB,EACxC,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,OAAO,CAAC,KAAK,CAAC,CA6DhB;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,eAAe,EAC3B,QAAQ,EAAE,qBAAqB,GAC9B,KAAK,CA+BP;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,cAAc,GAAE,MAAwB,GACvC,MAAM,CAOR;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOpE;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAMvE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,CAuB1D;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAoB1E;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CActE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAuBzD"}
|
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
* NametagUtils - Privacy-preserving nametag normalization and hashing.
|
|
3
3
|
* Supports phone number normalization to E.164 format.
|
|
4
4
|
*/
|
|
5
|
+
/** Minimum nametag length (after normalization) */
|
|
6
|
+
export declare const NAMETAG_MIN_LENGTH = 3;
|
|
7
|
+
/** Maximum nametag length (after normalization) */
|
|
8
|
+
export declare const NAMETAG_MAX_LENGTH = 20;
|
|
9
|
+
/**
|
|
10
|
+
* Compute SHA-256 hash of a string.
|
|
11
|
+
* @param input String to hash
|
|
12
|
+
* @returns Hex-encoded hash
|
|
13
|
+
*/
|
|
14
|
+
export declare function sha256Hex(input: string): string;
|
|
5
15
|
/**
|
|
6
16
|
* Normalize a nametag for hashing.
|
|
7
17
|
* - If it looks like a phone number, normalize to E.164
|
|
@@ -41,4 +51,35 @@ export declare function formatForDisplay(nametag: string, defaultCountry?: strin
|
|
|
41
51
|
* @returns true if the string is a valid phone number
|
|
42
52
|
*/
|
|
43
53
|
export declare function isPhoneNumber(str: string, defaultCountry?: string): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Validate a nametag string. Strips leading @, normalizes, then checks format.
|
|
56
|
+
* Regular nametags: lowercase alphanumeric, underscore, hyphen, 3-20 chars.
|
|
57
|
+
* Phone numbers: validated via libphonenumber-js.
|
|
58
|
+
* @param nametag Nametag to validate
|
|
59
|
+
* @param defaultCountry Default country code for phone normalization
|
|
60
|
+
* @returns true if the nametag is valid
|
|
61
|
+
*/
|
|
62
|
+
export declare function isValidNametag(nametag: string, defaultCountry?: string): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Hash an address for use as an indexed relay tag.
|
|
65
|
+
* Enables reverse lookup: address → binding event.
|
|
66
|
+
* @param address Address string (e.g., DIRECT://..., alpha1..., PROXY://...)
|
|
67
|
+
* @returns Hex-encoded SHA-256 hash
|
|
68
|
+
*/
|
|
69
|
+
export declare function hashAddressForTag(address: string): string;
|
|
70
|
+
/**
|
|
71
|
+
* Encrypt a nametag with AES-GCM using a key derived from the private key.
|
|
72
|
+
* Enables nametag recovery on wallet import.
|
|
73
|
+
* @param nametag Plain text nametag
|
|
74
|
+
* @param privateKeyHex Hex-encoded private key for key derivation
|
|
75
|
+
* @returns Base64-encoded encrypted data (IV + ciphertext + auth tag)
|
|
76
|
+
*/
|
|
77
|
+
export declare function encryptNametag(nametag: string, privateKeyHex: string): Promise<string>;
|
|
78
|
+
/**
|
|
79
|
+
* Decrypt a nametag encrypted with encryptNametag().
|
|
80
|
+
* @param encryptedBase64 Base64-encoded encrypted data (IV + ciphertext + auth tag)
|
|
81
|
+
* @param privateKeyHex Hex-encoded private key for key derivation
|
|
82
|
+
* @returns Decrypted nametag, or null if decryption fails (wrong key)
|
|
83
|
+
*/
|
|
84
|
+
export declare function decryptNametag(encryptedBase64: string, privateKeyHex: string): Promise<string | null>;
|
|
44
85
|
//# sourceMappingURL=NametagUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NametagUtils.d.ts","sourceRoot":"","sources":["../../../src/nametag/NametagUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"NametagUtils.d.ts","sourceRoot":"","sources":["../../../src/nametag/NametagUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0CH,mDAAmD;AACnD,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,mDAAmD;AACnD,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAQrC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG/C;AAwDD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,cAAc,GAAE,MAAwB,GACvC,MAAM,CAkBR;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,cAAc,GAAE,MAAwB,GACvC,MAAM,CAGR;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,cAAc,GAAE,MAAwB,GACvC,OAAO,CAIT;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,cAAc,GAAE,MAAwB,GACvC,MAAM,CAiBR;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,cAAc,GAAE,MAAwB,GACvC,OAAO,CAOT;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,cAAc,GAAE,MAAwB,GACvC,OAAO,CAYT;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AA0BD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyB5F;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2B3G"}
|