Releases: supabase-community/supabase-kt
3.0.3
3.0.2
Changes
Core
- Add support for Ktor
3.0.1
by @jan-tennert in #780
Auth
- Add IDToken support for the
Kakao
OAuthProvider
by @jan-tennert in #776 - Add missing
AuthErrorCode
s:SessionExpired
,RefreshTokenNotFound
,RefreshTokenAlreadyUsed
by @jan-tennert in #775
Compose Auth & Compose Auth UI
- Add support for Compose
1.7.0
by @jan-tennert in #759
Realtime
- Remove additional
toMap()
call forRealtime#subscriptions
to prevent rare exceptions by @jan-tennert in #779
Coil3 Integration
- Add support for Coil3 version
3.0.2
by @jan-tennert in #780
3.0.1
Changes
Core
- Add support for Kotlin
2.0.21
- Add support for Ktor
3.0.0
Auth
- Add HTTP Callback Server support for
mingwx64
(untested)
Coil3 Integration
- Add support for Coil3 version
3.0.0-rc01
3.0.0
Note
Documentation will update shortly.
Migration guide
Ktor 3
Starting with 3.0.0
, supabase-kt now uses Ktor 3. This brings WASM support, but projects using Ktor 2 will be incompatible.
Ktor 3.0.0-rc-1
is used in this release.
Changes
Rename gotrue-kt to auth-kt and rename the package name
- The
gotrue-kt
module is no longer being published starting with version3.0.0
. Use the newauth-kt
module. - Rename
auth-kt
package name fromio.github.jan.supabase.gotrue
toio.github.jan.supabase.auth
.
Support for WASM-JS
New wasm-js
target for supabase-kt, auth-kt, storage-kt, functions-kt, postgrest-kt, realtime-kt, compose-auth, compose-auth-ui, apollo-graphql and the new coil3-integration by @jan-tennert in #311
New plugin: coil3-integration
Support for Coil3 and all Compose Multiplatform targets under a new plugin by @jan-tennert in #428. Checkout the documentation.
The "old" coil 2 integration is still available and hasn't changed.
Auth
- Remove
Auth#modifyUser()
- Remove
MfaApi#loggedInUsingMfa
,MfaApi#loggedInUsingMfaFlow
,MfaApi#isMfaEnabled
,MfaApi#isMfaEnabledFlow
- Refactor SessionStatus by @jan-tennert in #725
- Move
SessionStatus
to its ownstatus
package - Rename
SessionStatus#LoadingFromStorage
toSessionStatus#Initializing
- Rename and refactor
SessionStatus#NetworkError
toSessionStatus#RefreshFailure(cause)
Note: The cause can be eitherRefreshFailureCause#NetworkError
orRefreshFailureCause#InternalServerError
. In both cases the refreshing will be retried and the session not cleared from storage. During that time, the session is obviously not usable.
- Move
Apollo GraphQL
- Migrate to Apollo GraphQL 4.0.0 by @jan-tennert in #692
Storage
Rework the uploading & downloading methods by @jan-tennert in #729
- Each uploading method (upload, update, uploadAsFlow ...) now has a
options
DSL. Currently, you can configure three things:
- Whether to upsert or not
- The content type (will still be inferred like in 2.X if null)
- Additional HTTP request configurations
Example:
supabase.storage.from("test").upload("test.txt", "Hello World!".encodeToByteArray()) {
contentType = ContentType.Text.Plain
upsert = true
}
- Each downloading method (downloadPublic, downloadAuthenticated, downloadPublicAsFlow, ...) now has a
options
DSL. Currently you can only configure the image transformation
Example:
supabase.storage.from("test").downloadAuthenticated("test.jpg") {
transform {
size(100, 100)
}
}
- Uploading options such as
upsert
orcontentType
for resumable uploads are now getting cached. If an upload is resumed, the options from the initial upload will be used.
Postgrest
- Move all optional function parameters for
PostgrestQueryBuilder#select()
,insert()
,upsert()
andPostgrest#rpc()
to the request DSL by @jan-tennert in #716
Example:
supabase.from("table").upsert(myValue) {
defaultToNull = false
ignoreDuplicates = false
}
- Move the non-parameter variant of
Postgrest#rpc()
to thePostgrest
interface. It was an extension function before by @jan-tennert in #726 - Add a non-generic parameter variant of
Postgrest#rpc()
to thePostgrest
interface. This function will be called from the existing generic variant by @jan-tennert in #726 - Add a
schema
property to thePostgrest#rpc
DSL by @jan-tennert in #716 - Fix
insert
andupsert
requests failing when providing an emptyJsonObject
by @jan-tennert in #742
Realtime
- Refactor internal event system for maintainability and readability by @jan-tennert #696
RealtimeChannel#presenceChangeFlow
is now a member function ofRealtimeChannel
. (It was an extension function before) by @jan-tennert in #697- Move the implementation for
RealtimeChannel#broadcastFlow
andRealtimeChannel#postgresChangeFlow
to a member function ofRealtimeChannel
. (Doesn't change anything in the public API) by @jan-tennert in #697 - Make the setter of
PostgresChangeFilter
private
3.0.0-rc-2
Changes
Storage
- Add missing option builders for resumable uploads and cache
upsert
andcontentType
options by @jan-tennert in #739
Postgrest
- Fix postgrest request failing when providing an empty
JsonObject
forinsert
orupsert
by @jan-tennert in #742
3.0.0-rc-1
Changes
Auth
- Refactor SessionStatus by @jan-tennert in #725
- Move
SessionStatus
to its ownstatus
package - Rename
SessionStatus#LoadingFromStorage
toSessionStatus#Initializing
- Rename and refactor
SessionStatus#NetworkError
toSessionStatus#RefreshFailure(cause)
Note: The cause can be eitherRefreshFailureCause#NetworkError
orRefreshFailureCause#InternalServerError
. In both cases the refreshing will be retried and the session not cleared from storage. During that time, the session is obviously not usable.
- Move
3.0.0-beta-1
Note
Because of the amount of breaking changes in the 2.7.0
beta, I decided to merge this version into the planned 3.0.0
version.
2.7.0
will no longer release.
This changelog is a combination of 2.7.0-beta-1
and new breaking changes.
Ktor 3
Starting with 2.7.0
, supabase-kt now uses Ktor 3. This brings WASM support, but projects using Ktor 2 will be incompatible.
Ktor 3.0.0-rc-1
is used in this release.
Changes
Rename gotrue-kt to auth-kt and rename the package name
- The
gotrue-kt
module is no longer being published starting with version3.0.0
. Use the newauth-kt
module. - Rename
auth-kt
package name fromio.github.jan.supabase.gotrue
toio.github.jan.supabase.auth
.
Support for WASM-JS
New wasm-js
target for supabase-kt, auth-kt, storage-kt, functions-kt, postgrest-kt, realtime-kt, compose-auth, compose-auth-ui, apollo-graphql and the new coil3-integration by @jan-tennert in #311
New plugin: coil3-integration
Support for Coil3 and all Compose Multiplatform targets under a new plugin by @jan-tennert in #428. Checkout the documentation.
The "old" coil 2 integration is still available and hasn't changed.
Auth
- Remove
Auth#modifyUser()
- Remove
MfaApi#loggedInUsingMfa
,MfaApi#loggedInUsingMfaFlow
,MfaApi#isMfaEnabled
,MfaApi#isMfaEnabledFlow
Apollo GraphQL
- Migrate to Apollo GraphQL 4.0.0 by @jan-tennert in #692
Storage
Rework the uploading & downloading methods by @jan-tennert in #729
- Each uploading method (upload, update, uploadAsFlow ...) now has a
options
DSL. Currently you can configure three things:
- Whether to upsert or not
- The content type (will still be inferred like in 2.X if null)
- Additional HTTP request configurations
Example:
supabase.storage.from("test").upload("test.txt", "Hello World!".encodeToByteArray()) {
contentType = ContentType.Text.Plain
upsert = true
}
- Each downloading method (downloadPublic, downloadAuthenticated, downloadPublicAsFlow, ...) now has a
options
DSL. Currently you can only configure the image transformation
Example:
supabase.storage.from("test").downloadAuthenticated("test.jpg") {
transform {
size(100, 100)
}
}
Postgrest
- Move all optional function parameters for
PostgrestQueryBuilder#select()
,insert()
,upsert()
andPostgrest#rpc()
to the request DSL by @jan-tennert in #716
Example:
supabase.from("table").upsert(myValue) {
defaultToNull = false
ignoreDuplicates = false
}
- Move the non-parameter variant of
Postgrest#rpc()
to thePostgrest
interface. It was an extension function before by @jan-tennert in #726 - Add a non-generic parameter variant of
Postgrest#rpc()
to thePostgrest
interface. This function will be called from the existing generic variant by @jan-tennert in #726 - Add a
schema
property to thePostgrest#rpc
DSL by @jan-tennert in #716
Realtime
- Refactor internal event system for maintainability and readability by @jan-tennert #696
RealtimeChannel#presenceChangeFlow
is now a member function ofRealtimeChannel
. (It was an extension function before) by @jan-tennert in #697- Move the implementation for
RealtimeChannel#broadcastFlow
andRealtimeChannel#postgresChangeFlow
to a member function ofRealtimeChannel
. (Doesn't change anything in the public API) by @jan-tennert in #697 - Make the setter of
PostgresChangeFilter
private
2.6.1
Changes
Postgrest
- Fix custom headers being ignored by
Postgrest#rpc
2.6.0-wasm0
Note
The Ktor EAP repository is no longer required as a new official beta of Ktor 3.0.0 has been released. You will also need to use this exact Ktor version for your engines.
Changes
- Migrate to Ktor 3.0.0-beta-2
- Merge
2.4.2
-2.6.0
changes into wasm
2.6.0
Note
The documentation has also been updated. Checkout the third-party auth overview page if you want to use Firebase Auth, AWS Cognito or Auth0 instead of Supabase Auth.
Changes
Core
- Update Kotlin to
2.0.10
Postgrest
- Expose
headers
andparams
inPostgrestRequestBuilder
by @jan-tennert in #689
You can now set custom headers & url parameters while making a postgrest request
Auth
- Add support for third-party auth by @jan-tennert in #688
You can now use third-party auth providers like Firebase Auth instead of Supabase Auth by specifying aAccessTokenProvider
in theSupabaseClientBuilder
:This will be used for theval supabase = createSupabaseClient(supabaseUrl, supabaseKey) { accessToken = { //fetch the third party token "my-token" } }
Authorization
header and other modules like Realtime and Storage integrations!
Note: TheAuth
plugin cannot be used in combination and will throw an exception if used when settingaccessToken
. - Changes to Multi-Factor-Authentication by @jan-tennert in #681
- Refactor the syntax for enrolling MFA factors and add support for the Phone factor type:
//Enrolling a phone factor val factor = client.auth.mfa.enroll(FactorType.Phone, friendlyName) { phone = "+123456789" } //Enrolling a TOTP factor val factor = client.auth.mfa.enroll(FactorType.TOTP, friendlyName) { issuer = "Issuer" }
- Add a
channel
parameter toMfaApi#createChallenge
to allow sending phone MFA messages to eitherSMS
orWHATSAPP
. - Deprecate
MfaApi#loggedInUsingMfa
andMfaApi#isMfaEnabled
& their flow variants in favor ofMfaApi#status
andMfaApi#statusFlow
:val (enabled, active) = client.auth.mfa.status //Flow variant client.auth.mfa.statusFlow.collect { (enabled, active) -> processChange(enabled, active) }
- Refactor the syntax for enrolling MFA factors and add support for the Phone factor type:
- Add
SlackOIDC
OAuthProvider
by @jan-tennert in #688
Realtime
- Remove client-side rate-limiting in #678 by @jan-tennert
- Fix broadcasting to a private channel via the HTTP API in #673 by @jan-tennert
- Fix callbacks not getting removed correctly in the
CallbackManager
in #673 by @jan-tennert - Change internal realtime implementation to be more robust and testable in #673 by @jan-tennert
- Add
Realtime.Config#websocketFactory
: This is highly internal and should be only modified if you know what you are doing
- Add
Storage
- The
StorageApi#authenticatedRequest
method is now suspending - All uploading methods will now return a
FileUploadResponse
instead of aString
, which includes the actual path and some other properties.