@unicitylabs/sphere-sdk 0.1.3 → 0.1.4

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.
@@ -21,11 +21,12 @@ interface BaseProvider extends ProviderMetadata {
21
21
  getStatus(): ProviderStatus;
22
22
  }
23
23
  interface Identity {
24
- readonly publicKey: string;
24
+ /** 33-byte compressed secp256k1 public key (for L3 chain) */
25
+ readonly chainPubkey: string;
25
26
  /** L1 address (alpha1...) */
26
- readonly address: string;
27
- /** L3 predicate address (DIRECT://...) */
28
- readonly predicateAddress?: string;
27
+ readonly l1Address: string;
28
+ /** L3 DIRECT address (DIRECT://...) */
29
+ readonly directAddress?: string;
29
30
  readonly ipnsName?: string;
30
31
  readonly nametag?: string;
31
32
  }
@@ -288,9 +289,10 @@ interface TransportProvider extends BaseProvider {
288
289
  setIdentity(identity: FullIdentity): void;
289
290
  /**
290
291
  * Send encrypted direct message
292
+ * @param recipientTransportPubkey - Transport-specific pubkey for messaging
291
293
  * @returns Event ID
292
294
  */
293
- sendMessage(recipientPubkey: string, content: string): Promise<string>;
295
+ sendMessage(recipientTransportPubkey: string, content: string): Promise<string>;
294
296
  /**
295
297
  * Subscribe to incoming direct messages
296
298
  * @returns Unsubscribe function
@@ -298,9 +300,10 @@ interface TransportProvider extends BaseProvider {
298
300
  onMessage(handler: MessageHandler): () => void;
299
301
  /**
300
302
  * Send token transfer payload
303
+ * @param recipientTransportPubkey - Transport-specific pubkey for messaging
301
304
  * @returns Event ID
302
305
  */
303
- sendTokenTransfer(recipientPubkey: string, payload: TokenTransferPayload): Promise<string>;
306
+ sendTokenTransfer(recipientTransportPubkey: string, payload: TokenTransferPayload): Promise<string>;
304
307
  /**
305
308
  * Subscribe to incoming token transfers
306
309
  * @returns Unsubscribe function
@@ -310,11 +313,25 @@ interface TransportProvider extends BaseProvider {
310
313
  * Resolve nametag to public key
311
314
  */
312
315
  resolveNametag?(nametag: string): Promise<string | null>;
316
+ /**
317
+ * Resolve nametag to full address information
318
+ * Returns transportPubkey, chainPubkey, l1Address, directAddress, proxyAddress
319
+ */
320
+ resolveNametagInfo?(nametag: string): Promise<NametagInfo | null>;
321
+ /**
322
+ * Recover nametag for current identity by decrypting stored encrypted nametag
323
+ * Used after wallet import to recover associated nametag
324
+ * @returns Decrypted nametag or null if none found
325
+ */
326
+ recoverNametag?(): Promise<string | null>;
313
327
  /**
314
328
  * Register a nametag for this identity
329
+ * @param nametag - Nametag to register
330
+ * @param chainPubkey - 33-byte compressed secp256k1 public key (for L1/L3)
331
+ * @param directAddress - L3 DIRECT address (DIRECT://...)
315
332
  * @returns true if successful, false if already taken
316
333
  */
317
- registerNametag?(nametag: string, publicKey: string): Promise<boolean>;
334
+ registerNametag?(nametag: string, chainPubkey: string, directAddress: string): Promise<boolean>;
318
335
  /**
319
336
  * Publish nametag binding
320
337
  */
@@ -329,9 +346,10 @@ interface TransportProvider extends BaseProvider {
329
346
  publishBroadcast?(content: string, tags?: string[]): Promise<string>;
330
347
  /**
331
348
  * Send payment request to a recipient
349
+ * @param recipientTransportPubkey - Transport-specific pubkey for messaging
332
350
  * @returns Event ID
333
351
  */
334
- sendPaymentRequest?(recipientPubkey: string, request: PaymentRequestPayload): Promise<string>;
352
+ sendPaymentRequest?(recipientTransportPubkey: string, request: PaymentRequestPayload): Promise<string>;
335
353
  /**
336
354
  * Subscribe to incoming payment requests
337
355
  * @returns Unsubscribe function
@@ -339,9 +357,10 @@ interface TransportProvider extends BaseProvider {
339
357
  onPaymentRequest?(handler: PaymentRequestHandler): () => void;
340
358
  /**
341
359
  * Send response to a payment request
360
+ * @param recipientTransportPubkey - Transport-specific pubkey for messaging
342
361
  * @returns Event ID
343
362
  */
344
- sendPaymentRequestResponse?(recipientPubkey: string, response: PaymentRequestResponsePayload): Promise<string>;
363
+ sendPaymentRequestResponse?(recipientTransportPubkey: string, response: PaymentRequestResponsePayload): Promise<string>;
345
364
  /**
346
365
  * Subscribe to incoming payment request responses
347
366
  * @returns Unsubscribe function
@@ -376,7 +395,10 @@ interface TransportProvider extends BaseProvider {
376
395
  }
377
396
  interface IncomingMessage {
378
397
  id: string;
379
- senderPubkey: string;
398
+ /** Transport-specific pubkey of sender */
399
+ senderTransportPubkey: string;
400
+ /** Sender's nametag (if known from NIP-17 unwrap) */
401
+ senderNametag?: string;
380
402
  content: string;
381
403
  timestamp: number;
382
404
  encrypted: boolean;
@@ -391,13 +413,15 @@ interface TokenTransferPayload {
391
413
  memo?: string;
392
414
  /** Sender info */
393
415
  sender?: {
394
- pubkey: string;
416
+ /** Transport-specific pubkey */
417
+ transportPubkey: string;
395
418
  nametag?: string;
396
419
  };
397
420
  }
398
421
  interface IncomingTokenTransfer {
399
422
  id: string;
400
- senderPubkey: string;
423
+ /** Transport-specific pubkey of sender */
424
+ senderTransportPubkey: string;
401
425
  payload: TokenTransferPayload;
402
426
  timestamp: number;
403
427
  }
@@ -417,8 +441,8 @@ interface PaymentRequestPayload {
417
441
  interface IncomingPaymentRequest {
418
442
  /** Event ID */
419
443
  id: string;
420
- /** Sender's public key */
421
- senderPubkey: string;
444
+ /** Transport-specific pubkey of sender */
445
+ senderTransportPubkey: string;
422
446
  /** Parsed request data */
423
447
  request: {
424
448
  requestId: string;
@@ -446,8 +470,8 @@ interface PaymentRequestResponsePayload {
446
470
  interface IncomingPaymentRequestResponse {
447
471
  /** Event ID */
448
472
  id: string;
449
- /** Responder's public key */
450
- responderPubkey: string;
473
+ /** Transport-specific pubkey of responder */
474
+ responderTransportPubkey: string;
451
475
  /** Parsed response data */
452
476
  response: {
453
477
  requestId: string;
@@ -461,7 +485,8 @@ interface IncomingPaymentRequestResponse {
461
485
  type PaymentRequestResponseHandler = (response: IncomingPaymentRequestResponse) => void;
462
486
  interface IncomingBroadcast {
463
487
  id: string;
464
- authorPubkey: string;
488
+ /** Transport-specific pubkey of author */
489
+ authorTransportPubkey: string;
465
490
  content: string;
466
491
  tags: string[];
467
492
  timestamp: number;
@@ -475,6 +500,26 @@ interface TransportEvent {
475
500
  error?: string;
476
501
  }
477
502
  type TransportEventCallback = (event: TransportEvent) => void;
503
+ /**
504
+ * Full nametag address information
505
+ * Used for resolving nametag to all address formats
506
+ */
507
+ interface NametagInfo {
508
+ /** Nametag name (without @) */
509
+ nametag: string;
510
+ /** Transport-specific pubkey (for messaging/encryption) */
511
+ transportPubkey: string;
512
+ /** 33-byte compressed secp256k1 public key (for L3 chain) */
513
+ chainPubkey: string;
514
+ /** L1 address (alpha1...) */
515
+ l1Address: string;
516
+ /** L3 DIRECT address (DIRECT://...) */
517
+ directAddress: string;
518
+ /** L3 PROXY address derived from nametag hash (PROXY:...) */
519
+ proxyAddress: string;
520
+ /** Event timestamp */
521
+ timestamp: number;
522
+ }
478
523
 
479
524
  /**
480
525
  * WebSocket Abstraction
@@ -515,6 +560,7 @@ type UUIDGenerator = () => string;
515
560
  * - Real secp256k1 event signing
516
561
  * - NIP-04 encryption/decryption
517
562
  * - Event ID calculation
563
+ * - NostrClient for reliable connection management (ping, reconnect, NIP-42)
518
564
  *
519
565
  * WebSocket is injected via factory for cross-platform support
520
566
  */
@@ -546,15 +592,14 @@ declare class NostrTransportProvider implements TransportProvider {
546
592
  private identity;
547
593
  private keyManager;
548
594
  private status;
549
- private connections;
550
- private reconnectAttempts;
595
+ private nostrClient;
596
+ private mainSubscriptionId;
551
597
  private messageHandlers;
552
598
  private transferHandlers;
553
599
  private paymentRequestHandlers;
554
600
  private paymentRequestResponseHandlers;
555
601
  private broadcastHandlers;
556
602
  private eventCallbacks;
557
- private subscriptions;
558
603
  constructor(config: NostrTransportProviderConfig);
559
604
  connect(): Promise<void>;
560
605
  disconnect(): Promise<void>;
@@ -576,6 +621,8 @@ declare class NostrTransportProvider implements TransportProvider {
576
621
  /**
577
622
  * Remove a relay dynamically
578
623
  * Will disconnect from the relay if connected
624
+ * NOTE: NostrClient doesn't support removing individual relays at runtime.
625
+ * We remove from config so it won't be used on next connect().
579
626
  */
580
627
  removeRelay(relayUrl: string): Promise<boolean>;
581
628
  /**
@@ -601,16 +648,22 @@ declare class NostrTransportProvider implements TransportProvider {
601
648
  sendPaymentRequestResponse(recipientPubkey: string, payload: PaymentRequestResponsePayload): Promise<string>;
602
649
  onPaymentRequestResponse(handler: PaymentRequestResponseHandler): () => void;
603
650
  resolveNametag(nametag: string): Promise<string | null>;
651
+ resolveNametagInfo(nametag: string): Promise<NametagInfo | null>;
652
+ /**
653
+ * Recover nametag for the current identity by searching for encrypted nametag events
654
+ * Used after wallet import to recover associated nametag
655
+ * @returns Decrypted nametag or null if none found
656
+ */
657
+ recoverNametag(): Promise<string | null>;
604
658
  publishNametag(nametag: string, address: string): Promise<void>;
605
- registerNametag(nametag: string, _publicKey: string): Promise<boolean>;
659
+ registerNametag(nametag: string, _publicKey: string, directAddress?: string): Promise<boolean>;
660
+ private broadcastSubscriptions;
606
661
  subscribeToBroadcast(tags: string[], handler: BroadcastHandler): () => void;
607
662
  publishBroadcast(content: string, tags?: string[]): Promise<string>;
608
663
  onEvent(callback: TransportEventCallback): () => void;
609
- private connectToRelay;
610
- private scheduleReconnect;
611
- private handleRelayMessage;
612
664
  private handleEvent;
613
665
  private handleDirectMessage;
666
+ private handleGiftWrap;
614
667
  private handleTokenTransfer;
615
668
  private handlePaymentRequest;
616
669
  private handlePaymentRequestResponse;
@@ -619,8 +672,8 @@ declare class NostrTransportProvider implements TransportProvider {
619
672
  private createEncryptedEvent;
620
673
  private publishEvent;
621
674
  private queryEvents;
622
- private queryEventsFromRelay;
623
- private unsubscribeFromRelay;
675
+ private walletSubscriptionId;
676
+ private chatSubscriptionId;
624
677
  private subscribeToEvents;
625
678
  private subscribeToTags;
626
679
  private decryptContent;
@@ -787,7 +840,7 @@ type OracleEventCallback = (event: OracleEvent) => void;
787
840
  * Browser: fetch from URL
788
841
  * Node.js: read from file
789
842
  */
790
- interface TrustBaseLoader {
843
+ interface TrustBaseLoader$1 {
791
844
  /**
792
845
  * Load trust base JSON data
793
846
  * @returns Trust base data or null if not available
@@ -825,7 +878,7 @@ interface UnicityAggregatorProviderConfig {
825
878
  /** Enable debug logging */
826
879
  debug?: boolean;
827
880
  /** Trust base loader (platform-specific) */
828
- trustBaseLoader?: TrustBaseLoader;
881
+ trustBaseLoader?: TrustBaseLoader$1;
829
882
  }
830
883
  /**
831
884
  * Unicity Aggregator Provider
@@ -888,32 +941,6 @@ declare const UnicityOracleProvider: typeof UnicityAggregatorProvider;
888
941
  /** @deprecated Use UnicityAggregatorProviderConfig instead */
889
942
  type UnicityOracleProviderConfig = UnicityAggregatorProviderConfig;
890
943
 
891
- /**
892
- * Node.js Oracle Exports
893
- * Re-exports shared oracle with Node.js-specific TrustBaseLoader
894
- */
895
-
896
- /**
897
- * Node.js TrustBase loader using fs
898
- */
899
- declare class NodeTrustBaseLoader implements TrustBaseLoader {
900
- private filePath;
901
- constructor(filePath?: string);
902
- load(): Promise<unknown | null>;
903
- }
904
- /**
905
- * Create Node.js TrustBase loader
906
- */
907
- declare function createNodeTrustBaseLoader(filePath?: string): TrustBaseLoader;
908
- /**
909
- * Create UnicityAggregatorProvider with Node.js TrustBase loader
910
- */
911
- declare function createUnicityAggregatorProvider(config: Omit<UnicityAggregatorProviderConfig, 'trustBaseLoader'> & {
912
- trustBasePath?: string;
913
- }): UnicityAggregatorProvider;
914
- /** @deprecated Use createUnicityAggregatorProvider instead */
915
- declare const createUnicityOracleProvider: typeof createUnicityAggregatorProvider;
916
-
917
944
  /** Network configurations */
918
945
  declare const NETWORKS: {
919
946
  readonly mainnet: {
@@ -940,6 +967,55 @@ declare const NETWORKS: {
940
967
  };
941
968
  type NetworkType = keyof typeof NETWORKS;
942
969
 
970
+ /**
971
+ * Shared TrustBase Loader Logic
972
+ * Common embedded trustbase data and base loader
973
+ */
974
+
975
+ interface TrustBaseLoader {
976
+ load(): Promise<unknown | null>;
977
+ }
978
+ /**
979
+ * Base TrustBase loader with embedded fallback
980
+ */
981
+ declare abstract class BaseTrustBaseLoader implements TrustBaseLoader {
982
+ protected network: NetworkType;
983
+ constructor(network?: NetworkType);
984
+ /**
985
+ * Try to load from external source (file, URL, etc.)
986
+ * Override in subclass
987
+ */
988
+ protected abstract loadFromExternal(): Promise<unknown | null>;
989
+ load(): Promise<unknown | null>;
990
+ }
991
+
992
+ /**
993
+ * Node.js Oracle Exports
994
+ * Re-exports shared oracle with Node.js-specific TrustBaseLoader
995
+ */
996
+
997
+ /**
998
+ * Node.js TrustBase loader - loads from file or uses embedded data
999
+ */
1000
+ declare class NodeTrustBaseLoader extends BaseTrustBaseLoader {
1001
+ private filePath?;
1002
+ constructor(filePathOrNetwork?: string | NetworkType);
1003
+ protected loadFromExternal(): Promise<unknown | null>;
1004
+ }
1005
+ /**
1006
+ * Create Node.js TrustBase loader
1007
+ */
1008
+ declare function createNodeTrustBaseLoader(filePathOrNetwork?: string | NetworkType): TrustBaseLoader$1;
1009
+ /**
1010
+ * Create UnicityAggregatorProvider with Node.js TrustBase loader
1011
+ */
1012
+ declare function createUnicityAggregatorProvider(config: Omit<UnicityAggregatorProviderConfig, 'trustBaseLoader'> & {
1013
+ trustBasePath?: string;
1014
+ network?: NetworkType;
1015
+ }): UnicityAggregatorProvider;
1016
+ /** @deprecated Use createUnicityAggregatorProvider instead */
1017
+ declare const createUnicityOracleProvider: typeof createUnicityAggregatorProvider;
1018
+
943
1019
  /**
944
1020
  * Shared Configuration Interfaces
945
1021
  * Base types extended by platform-specific implementations
@@ -1088,4 +1164,4 @@ interface NodeProviders {
1088
1164
  */
1089
1165
  declare function createNodeProviders(config?: NodeProvidersConfig): NodeProviders;
1090
1166
 
1091
- export { type BaseOracleConfig, type BaseProviders, type BaseTransportConfig, FileStorageProvider, type FileStorageProviderConfig, type FileTokenStorageConfig, FileTokenStorageProvider, type IWebSocket, type L1Config, type NodeL1Config, type NodeOracleConfig, type NodeProviders, type NodeProvidersConfig, type NodeTransportConfig, NodeTrustBaseLoader, NostrTransportProvider, type NostrTransportProviderConfig, type TrustBaseLoader, UnicityAggregatorProvider, type UnicityAggregatorProviderConfig, UnicityOracleProvider, type UnicityOracleProviderConfig, type WebSocketFactory, createFileStorageProvider, createFileTokenStorageProvider, createNodeProviders, createNodeTrustBaseLoader, createNodeWebSocketFactory, createNostrTransportProvider, createUnicityAggregatorProvider, createUnicityOracleProvider };
1167
+ export { type BaseOracleConfig, type BaseProviders, type BaseTransportConfig, FileStorageProvider, type FileStorageProviderConfig, type FileTokenStorageConfig, FileTokenStorageProvider, type IWebSocket, type L1Config, type NodeL1Config, type NodeOracleConfig, type NodeProviders, type NodeProvidersConfig, type NodeTransportConfig, NodeTrustBaseLoader, NostrTransportProvider, type NostrTransportProviderConfig, type TrustBaseLoader$1 as TrustBaseLoader, UnicityAggregatorProvider, type UnicityAggregatorProviderConfig, UnicityOracleProvider, type UnicityOracleProviderConfig, type WebSocketFactory, createFileStorageProvider, createFileTokenStorageProvider, createNodeProviders, createNodeTrustBaseLoader, createNodeWebSocketFactory, createNostrTransportProvider, createUnicityAggregatorProvider, createUnicityOracleProvider };