@@ -7,6 +7,8 @@ import { handleSocialPost, handleSocialReply, handleSocialReact, handleSocialDel
77import { handleDmSend , handleDmRead } from './social/dm.js'
88import { handleNotifications , handleFeed } from './social/notifications.js'
99import { handleNipPublish , handleNipRead } from './social/nips.js'
10+ import { handleBlossomUpload , handleBlossomList , handleBlossomDelete } from './social/blossom.js'
11+ import { handleGroupInfo , handleGroupChat , handleGroupSend , handleGroupMembers } from './social/groups.js'
1012import { handleIdentityList , handleIdentityProve , handleIdentityCreate } from './identity/handlers.js'
1113import { handleBackupShamir , handleRestoreShamir } from './identity/shamir.js'
1214import { handleIdentityBackup , handleIdentityRestore , handleIdentityMigrate } from './identity/migration.js'
@@ -16,7 +18,7 @@ import { handleTrustRingProve, handleTrustRingVerify } from './trust/ring.js'
1618import { handleTrustSpokenChallenge , handleTrustSpokenVerify } from './trust/spoken.js'
1719import { handleDuressConfigure , handleDuressActivate } from './safety/handlers.js'
1820import { handleZapSend , handleZapBalance , handleZapMakeInvoice , handleZapLookupInvoice , handleZapListTransactions , handleZapReceipts , handleZapDecode } from './zap/handlers.js'
19- import { handleDecode , handleEncodeNpub , handleEncodeNote , handleEncodeNprofile , handleEncodeNevent , handleVerify , handleEncrypt , handleDecrypt , handleCount , handleFetch } from './util/handlers.js'
21+ import { handleDecode , handleEncodeNpub , handleEncodeNote , handleEncodeNprofile , handleEncodeNevent , handleVerify , handleEncrypt , handleDecrypt , handleCount , handleFetch , handleKeyPublic , handleEncodeNsec , handleFilter , handleNipList , handleNipShow } from './util/handlers.js'
2022
2123const args = process . argv . slice ( 2 )
2224const command = args [ 0 ]
@@ -63,6 +65,13 @@ Social:
6365 notifications [--limit N] Fetch mentions, replies, reactions, zaps
6466 nip-publish <id> <title> <file> Publish a community NIP (kind 30817)
6567 nip-read [--author X] [--kind N] Fetch community NIPs
68+ blossom-upload <server> <file> Upload file to blossom media server
69+ blossom-list <server> <pubkey> List blobs on blossom server
70+ blossom-delete <server> <sha256> Delete blob from blossom server
71+ group-info <group-id> Fetch NIP-29 group metadata
72+ group-chat <group-id> [--limit N] Fetch group chat messages
73+ group-send <group-id> "message" Send message to group
74+ group-members <group-id> List group members
6675
6776Trust:
6877 attest <type> <identifier> [subject] Create kind 31000 attestation
@@ -101,6 +110,11 @@ Utility:
101110 encode-note <hex> Encode hex event ID as note
102111 encode-nprofile <hex> [relay,...] Encode pubkey + relays as nprofile
103112 encode-nevent <hex> [relay,...] Encode event ID + relays as nevent
113+ encode-nsec <hex> Encode hex private key as nsec
114+ key-public <nsec-or-hex> Derive pubkey from secret key
115+ filter <event-json> <filter-json> Test if event matches filter
116+ nips List all official NIPs
117+ nip <number> Show a specific NIP
104118 verify <event-json> Verify event hash and signature
105119 encrypt <pubkey-hex> "plaintext" NIP-44 encrypt for a recipient
106120 decrypt <pubkey-hex> <ciphertext> NIP-44 decrypt from a sender
@@ -507,6 +521,59 @@ async function run(cmdArgs: string[]): Promise<void> {
507521 out ( handleDuressActivate ( ctx , { personaName : cmdArgs [ 1 ] } ) )
508522 break
509523
524+ // === Blossom ===
525+
526+ case 'blossom-upload' :
527+ out ( await handleBlossomUpload ( ctx , {
528+ server : req ( 1 , 'blossom-upload <server> <file>' ) ,
529+ filePath : req ( 2 , 'blossom-upload <server> <file>' ) ,
530+ } ) )
531+ break
532+
533+ case 'blossom-list' : {
534+ out ( await handleBlossomList ( {
535+ server : req ( 1 , 'blossom-list <server> <pubkey>' ) ,
536+ pubkeyHex : req ( 2 , 'blossom-list <server> <pubkey>' ) ,
537+ } ) )
538+ break
539+ }
540+
541+ case 'blossom - delete ':
542+ out ( await handleBlossomDelete ( ctx , {
543+ server : req ( 1 , 'blossom-delete <server> <sha256>' ) ,
544+ sha256 : req ( 2 , 'blossom-delete <server> <sha256>' ) ,
545+ } ) )
546+ break
547+
548+ // === Groups (NIP-29) ===
549+
550+ case 'group-info' :
551+ out ( await handleGroupInfo ( pool , ctx . activeNpub , {
552+ relay : '' ,
553+ groupId : req ( 1 , 'group-info <group-id>' ) ,
554+ } ) )
555+ break
556+
557+ case 'group-chat' :
558+ out ( await handleGroupChat ( pool , ctx . activeNpub , {
559+ groupId : req ( 1 , 'group-chat <group-id>' ) ,
560+ limit : parseInt ( flag ( 'limit' , '20' ) ! , 10 ) ,
561+ } ) )
562+ break
563+
564+ case 'group-send' :
565+ out ( await handleGroupSend ( ctx , pool , {
566+ groupId : req ( 1 , 'group-send <group-id> "message"' ) ,
567+ content : req ( 2 , 'group-send <group-id> "message"' ) ,
568+ } ) )
569+ break
570+
571+ case 'group-members' :
572+ out ( await handleGroupMembers ( pool , ctx . activeNpub , {
573+ groupId : req ( 1 , 'group-members <group-id>' ) ,
574+ } ) )
575+ break
576+
510577 // === Utility ===
511578
512579 case 'decode' :
@@ -533,6 +600,32 @@ async function run(cmdArgs: string[]): Promise<void> {
533600 break
534601 }
535602
603+ case 'encode-nsec' :
604+ console . log ( handleEncodeNsec ( req ( 1 , 'encode-nsec <hex>' ) ) )
605+ break
606+
607+ case 'key-public' :
608+ out ( handleKeyPublic ( req ( 1 , 'key-public <nsec-or-hex>' ) ) )
609+ break
610+
611+ case 'filter' :
612+ out ( handleFilter (
613+ JSON . parse ( req ( 1 , 'filter <event-json> <filter-json>' ) ) ,
614+ JSON . parse ( req ( 2 , 'filter <event-json> <filter-json>' ) ) ,
615+ ) )
616+ break
617+
618+ case 'nips' :
619+ out ( await handleNipList ( ) )
620+ break
621+
622+ case 'nip' : {
623+ const num = parseInt ( req ( 1 , 'nip <number>' ) , 10 )
624+ const nip = await handleNipShow ( num )
625+ console . log ( nip . content )
626+ break
627+ }
628+
536629 case 'verify' :
537630 out ( handleVerify ( JSON . parse ( req ( 1 , 'verify <event-json>' ) ) ) )
538631 break
@@ -581,8 +674,10 @@ const ALL_COMMANDS = [
581674 'relay-list' , 'relay-set' , 'relay-add' , 'relay-info' ,
582675 'zap-send' , 'zap-balance' , 'zap-invoice' , 'zap-lookup' , 'zap-transactions' , 'zap-receipts' , 'zap-decode' ,
583676 'safety-configure' , 'safety-activate' ,
584- 'decode' , 'encode-npub' , 'encode-note' , 'encode-nprofile' , 'encode-nevent' ,
585- 'verify' , 'encrypt' , 'decrypt' , 'count' , 'fetch' ,
677+ 'blossom-upload' , 'blossom-list' , 'blossom-delete' ,
678+ 'group-info' , 'group-chat' , 'group-send' , 'group-members' ,
679+ 'decode' , 'encode-npub' , 'encode-note' , 'encode-nprofile' , 'encode-nevent' , 'encode-nsec' ,
680+ 'key-public' , 'filter' , 'nips' , 'nip' , 'verify' , 'encrypt' , 'decrypt' , 'count' , 'fetch' ,
586681 'help' , 'exit' ,
587682]
588683
0 commit comments