@@ -35,7 +35,11 @@ function canonicalize(url: URL): string {
3535 const sigParams = url . searchParams . get ( 'sig_params' ) ;
3636
3737 let params ;
38- if ( sigParams ) {
38+ if ( sigParams === '' ) {
39+ // Legacy behavior: empty sig_params means only include sig_params itself
40+ params = new URLSearchParams ( ) ;
41+ params . append ( 'sig_params' , '' ) ;
42+ } else if ( sigParams ) {
3943 const allowedParams = sigParams . split ( ',' ) ;
4044 params = new URLSearchParams ( ) ;
4145
@@ -47,24 +51,16 @@ function canonicalize(url: URL): string {
4751 }
4852
4953 params . append ( 'sig_params' , sigParams ) ;
54+ params . sort ( ) ;
5055 } else {
56+ // Backward compatibility: sign all params if there are no sig_params
57+ // clone the searchParams so we don't edit the original URL when deleting `sig`
5158 params = new URLSearchParams ( url . searchParams ) ;
5259 params . delete ( 'sig' ) ;
60+ params . sort ( ) ;
5361 }
5462
55- const paramsArray = Array . from ( params . entries ( ) ) ;
56- paramsArray . sort ( ( a , b ) => {
57- if ( a [ 0 ] < b [ 0 ] ) return - 1 ;
58- if ( a [ 0 ] > b [ 0 ] ) return 1 ;
59- return 0 ;
60- } ) ;
61-
62- const queryString = paramsArray
63- . map (
64- ( [ key , value ] ) =>
65- `${ encodeURIComponent ( key ) } =${ encodeURIComponent ( value ) } ` ,
66- )
67- . join ( '&' ) ;
63+ const queryString = params . toString ( ) ;
6864
6965 const result =
7066 url . origin + url . pathname + ( queryString ? `?${ queryString } ` : '' ) ;
0 commit comments