Skip to content

Commit af6b6b2

Browse files
committed
add option for required scopes, for verification
1 parent f83ed16 commit af6b6b2

File tree

3 files changed

+158
-104
lines changed

3 files changed

+158
-104
lines changed

src/commonMain/kotlin/com.adamratzman.spotify/Builder.kt

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,8 @@ fun spotifyImplicitGrantApi(
127127
options.defaultLimit,
128128
options.allowBulkRequests,
129129
options.requestTimeoutMillis,
130-
options.json
130+
options.json,
131+
options.requiredScopes
131132
)
132133

133134
// App Api builders
@@ -834,7 +835,8 @@ class SpotifyClientApiBuilder(
834835
options.json,
835836
options.refreshTokenProducer,
836837
false,
837-
options.onTokenRefresh
838+
options.onTokenRefresh,
839+
options.requiredScopes
838840
)
839841
} catch (e: CancellationException) {
840842
throw e
@@ -877,7 +879,8 @@ class SpotifyClientApiBuilder(
877879
options.json,
878880
options.refreshTokenProducer,
879881
true,
880-
options.onTokenRefresh
882+
options.onTokenRefresh,
883+
options.requiredScopes
881884
)
882885
} catch (e: CancellationException) {
883886
throw e
@@ -901,7 +904,8 @@ class SpotifyClientApiBuilder(
901904
options.json,
902905
options.refreshTokenProducer,
903906
authorization.pkceCodeVerifier != null,
904-
options.onTokenRefresh
907+
options.onTokenRefresh,
908+
options.requiredScopes
905909
)
906910
authorization.tokenString != null -> SpotifyClientApi(
907911
clientId,
@@ -926,7 +930,8 @@ class SpotifyClientApiBuilder(
926930
options.json,
927931
options.refreshTokenProducer,
928932
false,
929-
options.onTokenRefresh
933+
options.onTokenRefresh,
934+
options.requiredScopes
930935
)
931936
else -> throw IllegalArgumentException(
932937
"At least one of: authorizationCode, tokenString, or token must be provided " +
@@ -972,7 +977,8 @@ class SpotifyAppApiBuilder(
972977
options.requestTimeoutMillis,
973978
options.json,
974979
options.refreshTokenProducer,
975-
options.onTokenRefresh
980+
options.onTokenRefresh,
981+
options.requiredScopes
976982
)
977983
authorization.tokenString != null -> {
978984
SpotifyAppApi(
@@ -993,7 +999,8 @@ class SpotifyAppApiBuilder(
993999
options.requestTimeoutMillis,
9941000
options.json,
9951001
options.refreshTokenProducer,
996-
options.onTokenRefresh
1002+
options.onTokenRefresh,
1003+
options.requiredScopes
9971004
)
9981005
}
9991006
authorization.refreshTokenString != null -> {
@@ -1012,7 +1019,8 @@ class SpotifyAppApiBuilder(
10121019
options.requestTimeoutMillis,
10131020
options.json,
10141021
options.refreshTokenProducer,
1015-
options.onTokenRefresh
1022+
options.onTokenRefresh,
1023+
options.requiredScopes
10161024
)
10171025
}
10181026
else -> try {
@@ -1033,7 +1041,8 @@ class SpotifyAppApiBuilder(
10331041
options.requestTimeoutMillis,
10341042
options.json,
10351043
options.refreshTokenProducer,
1036-
options.onTokenRefresh
1044+
options.onTokenRefresh,
1045+
options.requiredScopes
10371046
)
10381047
} catch (e: CancellationException) {
10391048
throw e
@@ -1119,6 +1128,7 @@ data class SpotifyUserAuthorization(
11191128
* @property requestTimeoutMillis The maximum time, in milliseconds, before terminating an http request
11201129
* @property refreshTokenProducer Provide if you want to use your own logic when refreshing a Spotify token
11211130
* @property onTokenRefresh Provide if you want to act on token refresh event
1131+
* @property requiredScopes Scopes that your application requires to function (only applicable to [SpotifyClientApi] and [SpotifyImplicitGrantApi]).
11221132
*
11231133
*/
11241134
class SpotifyApiOptionsBuilder(
@@ -1134,7 +1144,8 @@ class SpotifyApiOptionsBuilder(
11341144
var requestTimeoutMillis: Long? = null,
11351145
var json: Json = nonstrictJson,
11361146
var refreshTokenProducer: (suspend (GenericSpotifyApi) -> Token)? = null,
1137-
var onTokenRefresh: (suspend (GenericSpotifyApi) -> Unit)? = null
1147+
var onTokenRefresh: (suspend (GenericSpotifyApi) -> Unit)? = null,
1148+
var requiredScopes: List<SpotifyScope>? = null
11381149
) {
11391150
fun build() =
11401151
if (enableAllOptions)
@@ -1150,7 +1161,8 @@ class SpotifyApiOptionsBuilder(
11501161
requestTimeoutMillis = requestTimeoutMillis,
11511162
json = json,
11521163
refreshTokenProducer = refreshTokenProducer,
1153-
onTokenRefresh = onTokenRefresh
1164+
onTokenRefresh = onTokenRefresh,
1165+
requiredScopes = requiredScopes
11541166
)
11551167
else
11561168
SpotifyApiOptions(
@@ -1165,7 +1177,8 @@ class SpotifyApiOptionsBuilder(
11651177
requestTimeoutMillis,
11661178
json,
11671179
refreshTokenProducer,
1168-
onTokenRefresh
1180+
onTokenRefresh,
1181+
requiredScopes
11691182
)
11701183
}
11711184

@@ -1184,6 +1197,7 @@ class SpotifyApiOptionsBuilder(
11841197
* @property requestTimeoutMillis The maximum time, in milliseconds, before terminating an http request. Default: 100000ms
11851198
* @property refreshTokenProducer Provide if you want to use your own logic when refreshing a Spotify token.
11861199
* @property onTokenRefresh Provide if you want to act on token refresh event
1200+
* @property requiredScopes Scopes that your application requires to function (only applicable to [SpotifyClientApi] and [SpotifyImplicitGrantApi]).
11871201
*
11881202
*/
11891203

@@ -1199,7 +1213,8 @@ data class SpotifyApiOptions(
11991213
var requestTimeoutMillis: Long?,
12001214
var json: Json,
12011215
var refreshTokenProducer: (suspend (SpotifyApi<*, *>) -> Token)?,
1202-
var onTokenRefresh: (suspend (SpotifyApi<*, *>) -> Unit)?
1216+
var onTokenRefresh: (suspend (SpotifyApi<*, *>) -> Unit)?,
1217+
var requiredScopes: List<SpotifyScope>?
12031218
)
12041219

12051220
@Deprecated("Name has been replaced by `options`", ReplaceWith("SpotifyApiOptions"))

0 commit comments

Comments
 (0)