@@ -4,6 +4,7 @@ use crate::wasm::try_into_js_value::TryIntoJsValue;
44use miniscript:: bitcoin:: secp256k1:: { Secp256k1 , Signing } ;
55use miniscript:: bitcoin:: ScriptBuf ;
66use miniscript:: descriptor:: KeyMap ;
7+ use miniscript:: miniscript:: analyzable:: ExtParams ;
78use miniscript:: { DefiniteDescriptorKey , Descriptor , DescriptorPublicKey } ;
89use std:: fmt;
910use std:: str:: FromStr ;
@@ -112,12 +113,16 @@ impl WrapDescriptor {
112113 secp : & Secp256k1 < C > ,
113114 descriptor : & str ,
114115 ) -> Result < WrapDescriptor , WasmUtxoError > {
115- let ( desc, keys) = Descriptor :: parse_descriptor ( secp, descriptor) ?;
116+ let ( desc, keys) =
117+ Descriptor :: parse_descriptor_ext ( secp, descriptor, & ExtParams :: sane ( ) . drop ( ) ) ?;
116118 Ok ( WrapDescriptor ( WrapDescriptorEnum :: Derivable ( desc, keys) ) )
117119 }
118120
119121 fn from_string_definite ( descriptor : & str ) -> Result < WrapDescriptor , WasmUtxoError > {
120- let desc = Descriptor :: < DefiniteDescriptorKey > :: from_str ( descriptor) ?;
122+ let desc = Descriptor :: < DefiniteDescriptorKey > :: from_str_ext (
123+ descriptor,
124+ & ExtParams :: sane ( ) . drop ( ) ,
125+ ) ?;
121126 Ok ( WrapDescriptor ( WrapDescriptorEnum :: Definite ( desc) ) )
122127 }
123128
@@ -150,31 +155,24 @@ impl WrapDescriptor {
150155 "derivable" => WrapDescriptor :: from_string_derivable ( & Secp256k1 :: new ( ) , descriptor) ,
151156 "definite" => WrapDescriptor :: from_string_definite ( descriptor) ,
152157 "string" => {
153- let desc = Descriptor :: < String > :: from_str ( descriptor) ?;
158+ let desc =
159+ Descriptor :: < String > :: from_str_ext ( descriptor, & ExtParams :: sane ( ) . drop ( ) ) ?;
154160 Ok ( WrapDescriptor ( WrapDescriptorEnum :: String ( desc) ) )
155161 }
156162 _ => Err ( WasmUtxoError :: new ( "Invalid descriptor type" ) ) ,
157163 }
158164 }
159165
160- fn from_string_definite_ext (
161- descriptor : & str ,
162- ext_params : & miniscript:: miniscript:: analyzable:: ExtParams ,
163- ) -> Result < WrapDescriptor , WasmUtxoError > {
164- let desc = Descriptor :: < DefiniteDescriptorKey > :: from_str_ext ( descriptor, ext_params) ?;
165- Ok ( WrapDescriptor ( WrapDescriptorEnum :: Definite ( desc) ) )
166- }
167-
168166 /// Parse a descriptor string with custom ExtParams for taproot leaf validation.
169167 ///
170168 /// This allows control over which miniscript analysis checks are applied to
171- /// taproot leaves. All options default to false (sane behavior) .
169+ /// taproot leaves. The `drop` flag is always enabled; other flags default to false.
172170 ///
173171 /// # Arguments
174172 /// * `descriptor` - A string containing the descriptor to parse
175173 /// * `pk_type` - The type of public key ("definite" only for now)
176174 /// * `ext_params_config` - JavaScript object with optional boolean flags:
177- /// - `drop`: Allow drop operations (r: wrapper)
175+ /// - `drop`: Allow drop operations (r: wrapper) — always enabled
178176 /// - `topUnsafe`: Allow scripts without signatures on all paths
179177 /// - `resourceLimitations`: Allow scripts exceeding resource limits
180178 /// - `timelockMixing`: Allow CSV + CLTV mixing
@@ -184,14 +182,8 @@ impl WrapDescriptor {
184182 ///
185183 /// # Example
186184 /// ```javascript
187- /// // Allow r:older() only (for sBTC)
188- /// Descriptor.fromStringExt(desc, "definite", { drop: true })
189- ///
190- /// // Allow multiple extensions
191- /// Descriptor.fromStringExt(desc, "definite", { drop: true, malleability: true })
192- ///
193- /// // All sane (default)
194- /// Descriptor.fromStringExt(desc, "definite", {})
185+ /// // r:older() is always allowed; add extra flags as needed
186+ /// Descriptor.fromStringExt(desc, "definite", { malleability: true })
195187 /// ```
196188 #[ wasm_bindgen( js_name = fromStringExt, skip_typescript) ]
197189 pub fn from_string_ext (
@@ -203,10 +195,7 @@ impl WrapDescriptor {
203195 Ok ( get_field :: < Option < bool > > ( & ext_params_config, key) ?. unwrap_or ( false ) )
204196 } ;
205197
206- let mut params = miniscript:: miniscript:: analyzable:: ExtParams :: sane ( ) ;
207- if flag ( "drop" ) ? {
208- params = params. drop ( ) ;
209- }
198+ let mut params = ExtParams :: sane ( ) . drop ( ) ;
210199 if flag ( "topUnsafe" ) ? {
211200 params = params. top_unsafe ( ) ;
212201 }
@@ -227,7 +216,10 @@ impl WrapDescriptor {
227216 }
228217
229218 match pk_type {
230- "definite" => WrapDescriptor :: from_string_definite_ext ( descriptor, & params) ,
219+ "definite" => {
220+ let desc = Descriptor :: < DefiniteDescriptorKey > :: from_str_ext ( descriptor, & params) ?;
221+ Ok ( WrapDescriptor ( WrapDescriptorEnum :: Definite ( desc) ) )
222+ }
231223 _ => Err ( WasmUtxoError :: new (
232224 "fromStringExt only supports 'definite' pk_type" ,
233225 ) ) ,
0 commit comments