@@ -101,12 +101,12 @@ export class RequestManager {
101
101
return this . _makeAPIURL ( urlObject , this . _customAccessToken || accessToken ) ;
102
102
}
103
103
104
- normalizeTileURL ( tileURL : string , sourceURL ?: ? string , tileSize ?: ?number ) : string {
104
+ normalizeTileURL ( tileURL : string , tileSize ?: ?number ) : string {
105
105
if ( this . _isSkuTokenExpired ( ) ) {
106
106
this . _createSkuToken ( ) ;
107
107
}
108
108
109
- if ( ! sourceURL || ! isMapboxURL ( sourceURL ) ) return tileURL ;
109
+ if ( tileURL && ! isMapboxURL ( tileURL ) && ! isMapboxHTTPURL ( tileURL ) ) return tileURL ;
110
110
111
111
const urlObject = parseUrl ( tileURL ) ;
112
112
const imageExtensionRe = / ( \. ( p n g | j p g ) \d * ) (? = $ ) / ;
@@ -121,14 +121,15 @@ export class RequestManager {
121
121
urlObject . path = urlObject . path . replace ( tileURLAPIPrefixRe , '/' ) ;
122
122
urlObject . path = `/v4${ urlObject . path } ` ;
123
123
124
- if ( config . REQUIRE_ACCESS_TOKEN && ( config . ACCESS_TOKEN || this . _customAccessToken ) && this . _skuToken ) {
124
+ const accessToken = this . _customAccessToken || getAccessToken ( urlObject . params ) || config . ACCESS_TOKEN ;
125
+ if ( config . REQUIRE_ACCESS_TOKEN && accessToken && this . _skuToken ) {
125
126
urlObject . params . push ( `sku=${ this . _skuToken } ` ) ;
126
127
}
127
128
128
- return this . _makeAPIURL ( urlObject , this . _customAccessToken ) ;
129
+ return this . _makeAPIURL ( urlObject , accessToken ) ;
129
130
}
130
131
131
- canonicalizeTileURL ( url : string ) {
132
+ canonicalizeTileURL ( url : string , removeAccessToken : boolean ) {
132
133
const version = "/v4/" ;
133
134
// matches any file extension specified by a dot and one or more alphanumeric characters
134
135
const extensionRe = / \. [ \w ] + $ / ;
@@ -145,17 +146,23 @@ export class RequestManager {
145
146
result += urlObject . path . replace ( version , '' ) ;
146
147
147
148
// Append the query string, minus the access token parameter.
148
- const params = urlObject . params . filter ( p => ! p . match ( / ^ a c c e s s _ t o k e n = / ) ) ;
149
+ let params = urlObject . params ;
150
+ if ( removeAccessToken ) {
151
+ params = params . filter ( p => ! p . match ( / ^ a c c e s s _ t o k e n = / ) ) ;
152
+ }
149
153
if ( params . length ) result += `?${ params . join ( '&' ) } ` ;
150
154
return result ;
151
155
}
152
156
153
- canonicalizeTileset ( tileJSON : TileJSON , sourceURL : string ) {
154
- if ( ! isMapboxURL ( sourceURL ) ) return tileJSON . tiles || [ ] ;
157
+ canonicalizeTileset ( tileJSON : TileJSON , sourceURL ? : string ) {
158
+ const removeAccessToken = sourceURL ? isMapboxURL ( sourceURL ) : false ;
155
159
const canonical = [ ] ;
156
- for ( const url of tileJSON . tiles ) {
157
- const canonicalUrl = this . canonicalizeTileURL ( url ) ;
158
- canonical . push ( canonicalUrl ) ;
160
+ for ( const url of tileJSON . tiles || [ ] ) {
161
+ if ( isMapboxHTTPURL ( url ) ) {
162
+ canonical . push ( this . canonicalizeTileURL ( url , removeAccessToken ) ) ;
163
+ } else {
164
+ canonical . push ( url ) ;
165
+ }
159
166
}
160
167
return canonical ;
161
168
}
@@ -197,6 +204,16 @@ function hasCacheDefeatingSku(url: string) {
197
204
return url . indexOf ( 'sku=' ) > 0 && isMapboxHTTPURL ( url ) ;
198
205
}
199
206
207
+ function getAccessToken ( params : Array < string > ) : string | null {
208
+ for ( const param of params ) {
209
+ const match = param . match ( / ^ a c c e s s _ t o k e n = ( .* ) $ / ) ;
210
+ if ( match ) {
211
+ return match [ 1 ] ;
212
+ }
213
+ }
214
+ return null ;
215
+ }
216
+
200
217
const urlRe = / ^ ( \w + ) : \/ \/ ( [ ^ / ? ] * ) ( \/ [ ^ ? ] + ) ? \? ? ( .+ ) ? / ;
201
218
202
219
function parseUrl ( url : string ) : UrlObject {
0 commit comments