Skip to content

Releases: supabase/supabase-kt

3.9.0-beta-1

3.9.0-beta-1 Pre-release
Pre-release

Choose a tag to compare

@jan-tennert jan-tennert released this 12 Oct 14:33
752d899

Changes

Misc

  • Update CONTRIBUTING.md with information on how to run tests by @cmelchior in #1392

Auth

  • fix(auth): [Security] Avoid writing session credentials to the platform log & mask sensitive values by @hieuwu in #1391

Realtime

  • fix(realtime): include join_ref on leave and access_token messages by @grdsdev in #1402
  • Add more articles and sample by @hieuwu in #1401
  • fix(realtime): prevent heartbeat tick from racing disconnect() by @alperen-kaplan in #1395

Storage

  • Change: feat(storage): add new storage exception and expose code parameter by @jan-tennert in #1376. All Storage methods no longer throw a generic exception, but a StorageRestException
  • fix(storage): keep the file size a Long when sizing an upload chunk by @AndroidPoet in #1404
  • fix(storage): fix reading resumable uploads back from the cache by @AndroidPoet in #1405
  • fix(storage): keep the error and message when an error body has no code by @AndroidPoet in #1407

Docs

New Contributors

Full Changelog: 3.8.0...3.9.0-beta-1

3.8.0

Choose a tag to compare

@jan-tennert jan-tennert released this 26 Aug 20:27
2336837

Changes

Core

Postgrest

  • feat(postgrest): add dryRun(), maybeSingle() modifiers, notIn filter by @jan-tennert in #1365

Auth

Realtime

val channel = supabase.realtime.channel("test") {
    broadcast { 
        replicationReady = true
    }
}
channel.systemFlow().collect { 
    println(it.status)
}
channel.postgresChangeFlow<PostgresAction>("public") {
    table = "myTable"
    filter { 
        lt("id", 20)
        eq("name", "Tom")
    }
}
// supported by all realtime postgres methods including:
supabase.from("myTable").selectAsFlow(...) {
    eq("id", 2)
    lt("age", 58)
}
  • fix(realtime): catch exceptions when resolving access token by @jan-tennert in #1386

Storage

  • feat(storage): add purge methods for buckets and single objects by @jan-tennert in #1375
supabase.storage.purgeBucketCache("myBucket")
supabase.storage["myBucket"].purgeCache("myFile.png")

New Contributors

3.7.0

Choose a tag to compare

@jan-tennert jan-tennert released this 20 Jul 18:09
835bfb0

Changes

Core

Auth

  • Add support for custom OAuth provider by @jan-tennert in #1236
  • feat(auth): expose public getter for AuthConfig.httpCallbackConfig on Desktop by @PierreVieira in #1322
  • fix(auth): don't throw an error when there is no stored session by @PierreVieira in #1320
  • Add API support for Passkeys by @jan-tennert in #1327 under supabase.auth.passkeys - Note, there is currently no sign-in method. We are still deciding how to move on with Native APIs. Compose Auth support may come as a temporary solution.
  • Add PKCE support for resend by @jan-tennert in #1337
  • fix(auth): clear session on any rest exception by @jan-tennert in #1359
  • fix(auth): return refreshed token from resolveAccessToken + tolerate non-object error bodies by @Merkost in #1352
  • add custom_claims_allowlist to custom providers admin api by @jan-tennert in #1349

Realtime

  • Add support for binary broadcasts, httpSend and VSN 2.0.0 by @jan-tennert in #1325

    Either use the ByteArray type in broadcastFlow:

    channel.broadcastFlow<ByteArray>("test").collect {
        println(it.decodeToString())
    }

    Or use broadcastFlow without a type to receive both types:

    channel.broadcastFlow("test").collect {
        when(it.payload) {
            is BroadcastPayload.Binary -> println(it.payload.data.decodeToString())
            is BroadcastPayload.Json -> println(it.payload.value)
        }
    }

    New method to broadcast messages (the old ones are using this in the implementation if not connected)':

    channel.httpSend("myEvent", BroadcastPayload.Binary(byteArrayOf(1,2,3)))
  • Implement deferred disconnect after removing last channel by @jan-tennert in #1276

  • docs(realtime): clarify that maxAttempts governs channel rejoin attempts by @PierreVieira in #1331

  • fix(realtime): log transient websocket reconnects at WARN instead of ERROR by @PierreVieira in #1329

Postgrest

Storage

Functions

New Contributors

3.7.0-beta-1

3.7.0-beta-1 Pre-release
Pre-release

Choose a tag to compare

@jan-tennert jan-tennert released this 23 Jun 20:14
fe99a6e

A small note

Sorry that the library has been moving slow lately, we currently have some internal stuff to figure out, once that is sorted there will be coming a lot of new features and quality of life changes to the library.

Changes

Core

Auth

  • Add support for custom OAuth provider by @jan-tennert in #1236
  • feat(auth): expose public getter for AuthConfig.httpCallbackConfig on Desktop by @PierreVieira in #1322
  • fix(auth): don't throw an error when there is no stored session by @PierreVieira in #1320
  • Add API support for Passkeys by @jan-tennert in #1327 under supabase.auth.passkeys - Note, there is currently no sign-in method. We are still deciding how to move on with Native APIs. Compose Auth support may come as a temporary solution.
  • Add PKCE support for resend by @jan-tennert in #1337

Realtime

  • Add support for binary broadcasts, httpSend and VSN 2.0.0 by @jan-tennert in #1325

    Either use the ByteArray type in broadcastFlow:

    channel.broadcastFlow<ByteArray>("test").collect {
        println(it.decodeToString())
    }

    Or use broadcastFlow without a type to receive both types:

    channel.broadcastFlow("test").collect {
        when(it.payload) {
            is BroadcastPayload.Binary -> println(it.payload.data.decodeToString())
            is BroadcastPayload.Json -> println(it.payload.value)
        }
    }

    New method to broadcast messages (the old ones are using this in the implementation if not connected)':

    channel.httpSend("myEvent", BroadcastPayload.Binary(byteArrayOf(1,2,3)))
  • Implement deferred disconnect after removing last channel by @jan-tennert in #1276

  • docs(realtime): clarify that maxAttempts governs channel rejoin attempts by @PierreVieira in #1331

  • fix(realtime): log transient websocket reconnects at WARN instead of ERROR by @PierreVieira in #1329

Postgrest

Storage

New Contributors

3.6.0

Choose a tag to compare

@jan-tennert jan-tennert released this 28 Apr 09:36
8d14313

Changes

Core

  • Fix JS test by @jan-tennert in #1255
  • Use inject-based logging approach for configurability and mocking by @jan-tennert in #1254 - You can now provide a custom SupabaseLoggingProcessor via SupabaseClientBuilder#defaultLoggingFactory, and also override per plugin. This processor is used to actually log the messages

Realtime

Storage

  • fix(storage): preserve full nested path in FileUploadResponse by @Sirelon in #1239
  • Fix flaky testUnauthenticatedUploadDenied in CI by @thagikura in #1240

Auth

  • fix(auth): Use configured httpPort instead of random port for OAuth callback server by @CristianMG in #1237
  • feat: Add support for OAuth 2.1 client admin API by @thagikura in #1222
  • Deprecate data property on IDToken.Config by @thagikura in #1249
  • fix(auth): don't emit spurious NotAuthenticated on Android lifecycle onStart by @alexeysfh in #1267

Postgrest

Storage

  • Add url options to download, publicUrl, createSignedUrl... by @jan-tennert in #1263 - Note that the transform builder for some methods has been moved e.g.:
supabase.storage.from("bucket").createSignedUrl(..) {
    transform { } 
}

New Contributors

3.5.0

Choose a tag to compare

@jan-tennert jan-tennert released this 05 Apr 16:33
0bca2b3

Changes

Core

Storage

  • [Fix] Use options parameter in createOrContinueUpload by @vojta-horanek in #1188
  • Add experimental support for vector, analytic buckets & storage, auth improvements by @jan-tennert in #1196
  • do not rewrite signed URL to render endpoint for empty transform object by @jan-tennert in #1212

Postgrest

Auth

Functions

Realtime

Compose Auth

Because I forgot to put it in the previous changelog:

  • The credentials when successfully signing in via native auth are now exposed, so you can access data like name, phone number, etc. This is currently only supported for Native Google Auth on Android and Native Apple Auth on iOS:
is NativeSignInResult.Success -> {
    val credential = result.data.google.credential
    credential.displayName 
    credential.phoneNumber
    // ...
}

New Contributors

3.4.1

Choose a tag to compare

@jan-tennert jan-tennert released this 28 Feb 17:53
d1ddf08

Changes

Core

Realtime

3.4.0

Choose a tag to compare

@jan-tennert jan-tennert released this 25 Feb 17:40
cb47ba3

Changes

Core

Auth

Functions

  • Fix invalid default rest exception in Functions#parseErrorResponse() by @jan-tennert in #1142

Storage

Realtime

3.3.0

Choose a tag to compare

@jan-tennert jan-tennert released this 05 Jan 09:17
fe13c28

Changes

Core

Auth

  • Refactor platform specific auth initialization by @jan-tennert in #1100
  • Add session failsafe and option to require a session for requests by @jan-tennert in #1071
    • When trying to make a request with an expired access token, the client will try to force-refresh the session
    • There is a new option for all plugins to require the user to be authenticated to make requests with that plugin (instead of falling back to the api key as the access token). Note that some methods ignore this option.
  • Add onError parameter to handleDeeplink methods by @jan-tennert in #1136
    This is meant to handle exceptions happening when verifying the PKCE code contained in the deeplink
  • Handle secure email changes in Auth#verify by @jan-tennert in #1130
    Auth#verifyEmailOtp() will now return an OtpVerifyResult, depending on if the response contains a session.
  • Expose Auth#defaultRedirectUrl() by @jan-tennert in #1134
  • Fix infinite recursion for expired sessions by @jan-tennert in #1133
  • Fix a bug causing the sessionStatus to be set earlier than loading from storage by @jan-tennert in #1128
  • Fix redirect_to url parameter for resetPasswordForEmail() and getOAuthUrl() values not being encoded by @jan-tennert in #1125

Realtime

Compose Auth

Postgrest

  • only escape filters inside logical expressions and in lists by @sproctor in #1090

Storage

New Contributors

3.3.0-rc-1

3.3.0-rc-1 Pre-release
Pre-release

Choose a tag to compare

@jan-tennert jan-tennert released this 20 Dec 14:29
d0c6440

Changes

Core

  • Update Kotlin to version 3.3.0
  • fix: Make OS version optional in headers by @rafsanjani in #1088
  • Implement Native Google OAuth iOS in sample by @hieuwu in #1093
  • Mask sensitive information in RestException by @jan-tennert in #1113

Auth

Compose Auth

Postgrest

  • only escape filters inside logical expressions and in lists by @sproctor in #1090

Storage

New Contributors