@@ -67,10 +67,9 @@ impl LdkVssClient {
6767 ) -> Result < Self , VssError > {
6868 let secp = Secp256k1 :: new ( ) ;
6969
70- // LNURL-auth: from truncated 32-byte seed path (same server identity as app client)
71- let truncated_seed: [ u8 ; 32 ] = seed[ ..32 ] . try_into ( ) . unwrap ( ) ;
70+ // LNURL-auth: from full 64-byte seed (same server identity as ldk-node)
7271 let auth_master_xprv =
73- Xpriv :: new_master ( Network :: Bitcoin , & truncated_seed ) . map_err ( |e| {
72+ Xpriv :: new_master ( Network :: Bitcoin , & seed ) . map_err ( |e| {
7473 VssError :: ConnectionError {
7574 error_details : format ! ( "Failed to create auth master key: {}" , e) ,
7675 }
@@ -265,19 +264,7 @@ impl LdkVssClient {
265264 /// Lists all raw keys on the server without any deobfuscation.
266265 /// Diagnostic function to see exactly what keys exist on the server.
267266 pub async fn list_all_raw_keys ( & self ) -> Result < Vec < KeyVersion > , VssError > {
268- let request = ListKeyVersionsRequest {
269- store_id : self . store_id . clone ( ) ,
270- key_prefix : None ,
271- page_size : None ,
272- page_token : None ,
273- } ;
274- let results = self
275- . inner
276- . list_key_versions ( & request)
277- . await
278- . map_err ( |e| convert_error ( e, "ldk_list_all_raw_keys" ) ) ?
279- . key_versions ;
280-
267+ let results = self . list_all_key_versions_paginated ( None ) . await ?;
281268 Ok ( results
282269 . into_iter ( )
283270 . map ( |kv| KeyVersion {
@@ -293,25 +280,16 @@ impl LdkVssClient {
293280 let obfuscated_key = self . key_obfuscator . obfuscate ( & key) ;
294281 let primary = namespace. primary ( ) ;
295282 let secondary = namespace. secondary ( ) ;
283+ let prefix_str = format ! ( "{}#{}" , primary, secondary) ;
296284
297- match ( primary, secondary) {
298- ( "" , "" ) => {
299- // Default namespace: same for V0 and V1
300- format ! ( "default: {}" , obfuscated_key)
301- }
302- _ => {
303- let prefix_str = format ! ( "{}#{}" , primary, secondary) ;
304-
305- // V0: plaintext prefix + # + obfuscated key
306- let v0 = format ! ( "{}#{}" , prefix_str, obfuscated_key) ;
285+ // V0: plaintext prefix + # + obfuscated key
286+ let v0 = format ! ( "{}#{}" , prefix_str, obfuscated_key) ;
307287
308- // V1: obfuscated prefix + # + obfuscated key
309- let obfuscated_prefix = self . key_obfuscator . obfuscate ( & prefix_str) ;
310- let v1 = format ! ( "{}#{}" , obfuscated_prefix, obfuscated_key) ;
288+ // V1: obfuscated prefix + # + obfuscated key
289+ let obfuscated_prefix = self . key_obfuscator . obfuscate ( & prefix_str) ;
290+ let v1 = format ! ( "{}#{}" , obfuscated_prefix, obfuscated_key) ;
311291
312- format ! ( "v0: {}\n v1: {}" , v0, v1)
313- }
314- }
292+ format ! ( "v0: {}\n v1: {}" , v0, v1)
315293 }
316294
317295 // --- Internal helpers ---
@@ -320,16 +298,10 @@ impl LdkVssClient {
320298 fn build_key ( & self , key : & str , namespace : & LdkNamespace ) -> String {
321299 let primary = namespace. primary ( ) ;
322300 let secondary = namespace. secondary ( ) ;
323-
324- match ( primary, secondary) {
325- ( "" , "" ) => self . key_obfuscator . obfuscate ( key) ,
326- _ => {
327- let prefix = format ! ( "{}#{}" , primary, secondary) ;
328- let obfuscated_prefix = self . key_obfuscator . obfuscate ( & prefix) ;
329- let obfuscated_key = self . key_obfuscator . obfuscate ( key) ;
330- format ! ( "{}#{}" , obfuscated_prefix, obfuscated_key)
331- }
332- }
301+ let prefix = format ! ( "{}#{}" , primary, secondary) ;
302+ let obfuscated_prefix = self . key_obfuscator . obfuscate ( & prefix) ;
303+ let obfuscated_key = self . key_obfuscator . obfuscate ( key) ;
304+ format ! ( "{}#{}" , obfuscated_prefix, obfuscated_key)
333305 }
334306
335307 /// Builds the obfuscated namespace prefix for server-side filtering.
@@ -357,19 +329,7 @@ impl LdkVssClient {
357329 & self ,
358330 prefix : Option < String > ,
359331 ) -> Result < Vec < KeyVersion > , VssError > {
360- let request = ListKeyVersionsRequest {
361- store_id : self . store_id . clone ( ) ,
362- key_prefix : prefix,
363- page_size : None ,
364- page_token : None ,
365- } ;
366- let results = self
367- . inner
368- . list_key_versions ( & request)
369- . await
370- . map_err ( |e| convert_error ( e, "ldk_list_key_versions" ) ) ?
371- . key_versions ;
372-
332+ let results = self . list_all_key_versions_paginated ( prefix) . await ?;
373333 let mut result = Vec :: new ( ) ;
374334 for kv in results {
375335 if let Some ( original_key) = self . try_deobfuscate ( & kv. key ) {
@@ -381,4 +341,36 @@ impl LdkVssClient {
381341 }
382342 Ok ( result)
383343 }
344+
345+ /// Fetches all key versions across pages using pagination.
346+ async fn list_all_key_versions_paginated (
347+ & self ,
348+ prefix : Option < String > ,
349+ ) -> Result < Vec < ExternalKeyValue > , VssError > {
350+ let mut all_results = Vec :: new ( ) ;
351+ let mut page_token: Option < String > = None ;
352+
353+ loop {
354+ let request = ListKeyVersionsRequest {
355+ store_id : self . store_id . clone ( ) ,
356+ key_prefix : prefix. clone ( ) ,
357+ page_size : Some ( 100 ) ,
358+ page_token : page_token. clone ( ) ,
359+ } ;
360+ let response = self
361+ . inner
362+ . list_key_versions ( & request)
363+ . await
364+ . map_err ( |e| convert_error ( e, "ldk_list_paginated" ) ) ?;
365+
366+ all_results. extend ( response. key_versions ) ;
367+
368+ match response. next_page_token {
369+ Some ( ref token) if !token. is_empty ( ) => page_token = Some ( token. clone ( ) ) ,
370+ _ => break ,
371+ }
372+ }
373+
374+ Ok ( all_results)
375+ }
384376}
0 commit comments