diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 2d3a5a680..3307c0525 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -23,7 +23,7 @@ body: options: - supabase_flutter - supabase - - gotrue + - supabase_auth - postgrest - realtime_client - storage_client @@ -58,10 +58,10 @@ body: Output of `flutter doctor -v`, plus the versions of the affected packages. On Linux/macOS: - `dart pub deps | grep -E "supabase|gotrue|postgrest|storage_client|realtime_client|functions_client"` + `dart pub deps | grep -E "supabase|postgrest|storage_client|realtime_client|functions_client"` On Windows: - `dart pub deps | findstr "supabase gotrue postgrest storage_client realtime_client functions_client"` + `dart pub deps | findstr "supabase postgrest storage_client realtime_client functions_client"` render: shell placeholder: Flutter, Dart and package versions validations: diff --git a/.github/workflows/label-issues.yml b/.github/workflows/label-issues.yml index fc80072a1..ff32e0499 100644 --- a/.github/workflows/label-issues.yml +++ b/.github/workflows/label-issues.yml @@ -21,6 +21,7 @@ jobs: label_mappings: | { "gotrue": "auth", + "supabase_auth": "auth", "auth": "auth", "storage": "storage", "storage_client": "storage", diff --git a/.github/workflows/release-pana.yml b/.github/workflows/release-pana.yml index 4739a3e6e..34a0ca2cc 100644 --- a/.github/workflows/release-pana.yml +++ b/.github/workflows/release-pana.yml @@ -26,11 +26,11 @@ jobs: matrix: package: - functions_client - - gotrue - postgrest - realtime_client - storage_client - supabase + - supabase_auth - supabase_common - supabase_flutter - supabase_typegen diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 807f5a094..4a4c05882 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -64,7 +64,7 @@ jobs: echo "Affected packages:" echo "$CHANGED" - DART_PACKAGES="functions_client gotrue postgrest realtime_client storage_client supabase supabase_common supabase_typegen yet_another_json_isolate" + DART_PACKAGES="functions_client postgrest realtime_client storage_client supabase supabase_auth supabase_common supabase_typegen yet_another_json_isolate" entries=() for package in $DART_PACKAGES; do @@ -72,11 +72,11 @@ jobs: continue fi case "$package" in - gotrue|postgrest|realtime_client|storage_client|supabase) backend=true ;; + postgrest|realtime_client|storage_client|supabase|supabase_auth) backend=true ;; *) backend=false ;; esac case "$package" in - gotrue|postgrest|realtime_client|storage_client|supabase) concurrency="1" ;; + postgrest|realtime_client|storage_client|supabase|supabase_auth) concurrency="1" ;; *) concurrency="0" ;; esac entries+=("{\"name\":\"$package\",\"backend\":$backend,\"concurrency\":\"$concurrency\"}") @@ -344,7 +344,7 @@ jobs: with: github-token: ${{ secrets.GITHUB_TOKEN }} parallel-finished: true - carryforward: 'functions_client,gotrue,postgrest,realtime_client,storage_client,supabase,supabase_common,supabase_typegen,yet_another_json_isolate,supabase_flutter' + carryforward: 'functions_client,postgrest,realtime_client,storage_client,supabase,supabase_auth,supabase_common,supabase_typegen,yet_another_json_isolate,supabase_flutter' fail-on-error: false test-result: diff --git a/AGENTS.md b/AGENTS.md index 4993a06dd..e9ef41dfd 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -12,7 +12,7 @@ The repository follows a layered dependency structure: - **supabase_flutter**: Flutter-specific wrapper with platform integrations (deep links, local storage, app lifecycle) - **supabase**: Core Dart client that orchestrates all service clients -- **gotrue**: Authentication client (sessions, JWT, OAuth) +- **supabase_auth**: Authentication client (sessions, JWT, OAuth) - **postgrest**: Database query client with ORM-style API - **realtime_client**: WebSocket client for real-time subscriptions - **storage_client**: File storage client with retry logic @@ -52,9 +52,9 @@ melos format ### Testing -Most packages have unit tests. The `postgrest`, `gotrue`, `realtime_client`, and `storage_client` packages run against a local Supabase stack started with the Supabase CLI. This requires Docker and the [Supabase CLI](https://supabase.com/docs/guides/local-development/cli/getting-started) installed. +Most packages have unit tests. The `postgrest`, `supabase_auth`, `realtime_client`, and `storage_client` packages run against a local Supabase stack started with the Supabase CLI. This requires Docker and the [Supabase CLI](https://supabase.com/docs/guides/local-development/cli/getting-started) installed. -**For packages requiring a backend (postgrest, gotrue, realtime_client, storage_client):** +**For packages requiring a backend (postgrest, supabase_auth, realtime_client, storage_client):** ```bash # 1. Start the local Supabase stack from the repository root @@ -129,7 +129,7 @@ melos version ### Authentication Flow -- **GoTrueClient** manages sessions, tokens, and JWT validation +- **AuthClient** manages sessions, tokens, and JWT validation - Emits auth state changes via `Stream` - **supabase_flutter** adds session persistence via `SharedPreferencesAsync` (mobile) or browser localStorage (web) - Deep link handling for OAuth callbacks (detects `?code=` for PKCE or `#access_token=` for implicit flow) @@ -155,7 +155,7 @@ Example: `supabase.from('users').select('id, name').eq('id', 1).limit(10)` ### Error Handling Each package has its own exception hierarchy: -- **gotrue**: `AuthException` (base), with specialized subclasses like `AuthApiException`, `AuthRetryableFetchException` +- **supabase_auth**: `AuthException` (base), with specialized subclasses like `AuthApiException`, `AuthRetryableFetchException` - **postgrest**: HTTP-based error responses - **realtime**: `RealtimeSubscribeException` with status tracking - **storage**: Retry logic with exponential backoff (up to 8 attempts) diff --git a/MIGRATION.md b/MIGRATION.md index 0672c558a..ebb517370 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -4,7 +4,7 @@ This document describes the breaking changes you need to be aware of when upgrad versions of the Supabase Flutter SDK, together with the steps required to migrate your code. All packages in this repository are released together for a major version, so a single section -covers `supabase_flutter`, `supabase`, `gotrue`, `postgrest`, `realtime_client`, `storage_client` +covers `supabase_flutter`, `supabase`, `supabase_auth`, `postgrest`, `realtime_client`, `storage_client` and `functions_client`. Every symbol mentioned here is re-exported from `supabase_flutter`, so the snippets apply whether you depend on the individual package or on the Flutter one. @@ -14,6 +14,68 @@ snippets apply whether you depend on the individual package or on the Flutter on > v3 has not been released yet. This section is updated as breaking changes land on `main`, so > treat it as the running list rather than the final one. +### The `gotrue` package is now `supabase_auth` + +The service this package talks to has been called Supabase Auth for years, and `gotrue` is a name +users no longer recognize. The package is published as `supabase_auth` from v3 onwards, and the +`gotrue` package is discontinued on pub.dev when v3 ships. + +If you depend on `supabase_flutter` or `supabase` you do not need to change your dependencies, +both pull in `supabase_auth` for you and re-export it. You do need to rename the types below. + +If you depend on the auth client directly, rename the dependency and the import: + +```yaml +# Before +dependencies: + gotrue: ^2.27.1 + +# After +dependencies: + supabase_auth: ^3.0.0 +``` + +```dart +// Before +import 'package:gotrue/gotrue.dart'; + +// After +import 'package:supabase_auth/supabase_auth.dart'; +``` + +The types that carried the old name in their own name are renamed to the `Auth` prefix the rest of +the package already uses: + +| Before | After | +| --- | --- | +| `GoTrueClient` | `AuthClient` | +| `GoTrueAdminApi` | `AuthAdminApi` | +| `GoTrueAdminCustomProvidersApi` | `AuthAdminCustomProvidersApi` | +| `GoTrueAdminMFAApi` | `AuthAdminMFAApi` | +| `GoTrueAdminOAuthApi` | `AuthAdminOAuthApi` | +| `GoTrueAdminPasskeyApi` | `AuthAdminPasskeyApi` | +| `GoTrueMFAApi` | `AuthMFAApi` | +| `GoTrueOAuthApi` | `AuthOAuthApi` | +| `GoTruePasskeyApi` | `AuthPasskeyApi` | +| `GotrueAsyncStorage` | `AuthAsyncStorage` | +| `SharedPreferencesGotrueAsyncStorage` | `SharedPreferencesAuthAsyncStorage` | + +```dart +// Before +final GoTrueClient auth = supabase.auth; + +// After +final AuthClient auth = supabase.auth; +``` + +Two extensions `supabase_flutter` adds to the auth client follow the same rename: +`GoTrueClientSignInProvider` becomes `AuthClientSignInProvider` and `GoTrueClientPasskey` becomes +`AuthClientPasskey`. You only name these if you were referring to the extension explicitly, for +example to hide it in an import. + +Nothing about the wire format changes. The `X-Client-Info` header still identifies this client as +`gotrue-dart`, and the `gotrue_meta_security` field in captcha payloads is unchanged. + ### `RealtimeClient.connectionState` is now typed `RealtimeClient` used to expose the socket state twice: a typed `connState` field and a stringly @@ -113,7 +175,7 @@ flushed once the join succeeds, so only channels that were never subscribed thro ### Plural enum names singularized A Dart enum type names one value rather than the set, so its name should be singular. Five enums -were ports of the `realtime-js` and `gotrue-js` names instead, and one more turned up in storage. +carried plural names instead, and one more turned up in storage. Three of them were never reachable from outside the package and are now marked `@internal`; the ones below are the renames you can actually hit. @@ -121,7 +183,7 @@ ones below are the renames you can actually hit. | --- | --- | --- | | `SocketStates` | `SocketState` | `realtime_client` | | `PostgresTypes` | `PostgresType` | `realtime_client` | -| `AuthenticatorAssuranceLevels` | `AuthenticatorAssuranceLevel` | `gotrue` | +| `AuthenticatorAssuranceLevels` | `AuthenticatorAssuranceLevel` | `supabase_auth` | | `LoadTableSnapshots` | `TableSnapshotScope` | `storage_client` | No enum values changed, so the only work is renaming the type where you name it explicitly. @@ -301,9 +363,9 @@ already inert: unused types, options the client ignored, or values the server ne | Removed | Replacement | Package | | --- | --- | --- | -| `AuthChangeEvent.userDeleted` | none, it was never emitted | `gotrue` | -| `OAuthProvider.snakeCase` | `OAuthProvider.name` | `gotrue` | -| `User.confirmedAt` | `User.emailConfirmedAt` | `gotrue` | +| `AuthChangeEvent.userDeleted` | none, it was never emitted | `supabase_auth` | +| `OAuthProvider.snakeCase` | `OAuthProvider.name` | `supabase_auth` | +| `User.confirmedAt` | `User.emailConfirmedAt` | `supabase_auth` | | `ReturningOption` | none, it was unused | `postgrest` | | `PostgrestClient.auth()` | `PostgrestClient.setAuth()` | `postgrest` | | `RealtimeClient.longpollerTimeout` | none, there is no longpoll transport | `realtime_client` | @@ -461,7 +523,7 @@ replaces them; they only existed to drive the comparison above. ### The session is persisted with `SharedPreferencesAsync` -`SharedPreferencesLocalStorage` and `SharedPreferencesGotrueAsyncStorage`, the storage +`SharedPreferencesLocalStorage` and `SharedPreferencesAuthAsyncStorage`, the storage implementations `Supabase.initialize` uses by default, wrote through the legacy [`SharedPreferences`](https://pub.dev/packages/shared_preferences#sharedpreferences-vs-sharedpreferencesasync-vs-sharedpreferenceswithcache) API. They now use `SharedPreferencesAsync`. On web the session still goes into diff --git a/README.md b/README.md index d6f13567d..29e55e27f 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ To install on a locally developed app: ## Testing -The tests for the packages `postgrest`, `gotrue`, `realtime_client` and `storage_client` run against a +The tests for the packages `postgrest`, `supabase_auth`, `realtime_client` and `storage_client` run against a local Supabase stack. To run these tests locally you need `docker` and the [Supabase CLI](https://supabase.com/docs/guides/local-development/cli/getting-started) installed. diff --git a/packages/gotrue/lib/src/version.dart b/packages/gotrue/lib/src/version.dart deleted file mode 100644 index 616497824..000000000 --- a/packages/gotrue/lib/src/version.dart +++ /dev/null @@ -1 +0,0 @@ -const version = '2.27.1'; diff --git a/packages/supabase/lib/src/supabase_client.dart b/packages/supabase/lib/src/supabase_client.dart index ab9c132cc..7f08de9ca 100644 --- a/packages/supabase/lib/src/supabase_client.dart +++ b/packages/supabase/lib/src/supabase_client.dart @@ -44,7 +44,7 @@ import 'trace_http_client.dart'; /// Pass an instance of `YAJsonIsolate` to [isolate] to use your own persisted /// isolate instance. A new instance will be created if [isolate] is omitted. /// -/// Pass an instance of `GotrueAsyncStorage` to the `pkceAsyncStorage` field of +/// Pass an instance of `AuthAsyncStorage` to the `pkceAsyncStorage` field of /// [authOptions] and set its `authFlowType` field to `AuthFlowType.pkce` in /// order to perform auth actions with pkce flow. /// {@endtemplate} @@ -62,9 +62,9 @@ class SupabaseClient { final Client? _httpClient; late final Client _authHttpClient; late final Client _functionsHttpClient; - late final Client _gotrueHttpClient; + late final Client _authApiHttpClient; - GoTrueClient? _authInstance; + AuthClient? _authInstance; /// Supabase Functions allows you to deploy and invoke edge functions. late final FunctionsClient functions; @@ -167,10 +167,10 @@ class SupabaseClient { supabaseUrl, ) : baseHttpClient; - _gotrueHttpClient = tracedHttpClient; + _authApiHttpClient = tracedHttpClient; _authInstance = _initSupabaseAuthClient( autoRefreshToken: authOptions.autoRefreshToken, - gotrueAsyncStorage: authOptions.pkceAsyncStorage, + authAsyncStorage: authOptions.pkceAsyncStorage, authFlowType: authOptions.authFlowType, ); _authHttpClient = AuthHttpClient( @@ -204,7 +204,7 @@ class SupabaseClient { } } - GoTrueClient get auth { + AuthClient get auth { if (accessToken == null) { return _authInstance!; } @@ -317,21 +317,21 @@ class SupabaseClient { _authInstance?.dispose(); } - GoTrueClient _initSupabaseAuthClient({ + AuthClient _initSupabaseAuthClient({ required bool autoRefreshToken, - required GotrueAsyncStorage? gotrueAsyncStorage, + required AuthAsyncStorage? authAsyncStorage, required AuthFlowType authFlowType, }) { final authHeaders = {...headers}; authHeaders['apikey'] = _supabaseKey; authHeaders['Authorization'] = 'Bearer $_supabaseKey'; - return GoTrueClient( + return AuthClient( url: _authUrl, headers: authHeaders, autoRefreshToken: autoRefreshToken, - httpClient: _gotrueHttpClient, - asyncStorage: gotrueAsyncStorage, + httpClient: _authApiHttpClient, + asyncStorage: authAsyncStorage, flowType: authFlowType, ); } diff --git a/packages/supabase/lib/src/supabase_client_options.dart b/packages/supabase/lib/src/supabase_client_options.dart index 5079ecbd3..35fa7f5e0 100644 --- a/packages/supabase/lib/src/supabase_client_options.dart +++ b/packages/supabase/lib/src/supabase_client_options.dart @@ -34,7 +34,7 @@ class PostgrestClientOptions { class AuthClientOptions { final bool autoRefreshToken; - final GotrueAsyncStorage? pkceAsyncStorage; + final AuthAsyncStorage? pkceAsyncStorage; final AuthFlowType authFlowType; const AuthClientOptions({ diff --git a/packages/supabase/lib/supabase.dart b/packages/supabase/lib/supabase.dart index fe2f3898d..ecaa9d377 100644 --- a/packages/supabase/lib/supabase.dart +++ b/packages/supabase/lib/supabase.dart @@ -4,7 +4,7 @@ library; export 'package:functions_client/functions_client.dart'; -export 'package:gotrue/gotrue.dart'; +export 'package:supabase_auth/supabase_auth.dart'; export 'package:postgrest/postgrest.dart'; export 'package:realtime_client/realtime_client.dart'; export 'package:storage_client/storage_client.dart'; diff --git a/packages/supabase/pubspec.yaml b/packages/supabase/pubspec.yaml index d1fc5fdb5..7fbae5b84 100644 --- a/packages/supabase/pubspec.yaml +++ b/packages/supabase/pubspec.yaml @@ -19,12 +19,12 @@ resolution: workspace dependencies: functions_client: 2.7.1 - gotrue: 2.27.1 http: ^1.6.0 meta: ^1.7.0 postgrest: 2.9.1 realtime_client: 2.13.0 storage_client: 2.8.0 + supabase_auth: 3.0.0-dev.1 supabase_common: 0.1.2 yet_another_json_isolate: 2.1.1 logging: ^1.3.0 diff --git a/packages/gotrue/CHANGELOG.md b/packages/supabase_auth/CHANGELOG.md similarity index 100% rename from packages/gotrue/CHANGELOG.md rename to packages/supabase_auth/CHANGELOG.md diff --git a/packages/gotrue/LICENSE b/packages/supabase_auth/LICENSE similarity index 100% rename from packages/gotrue/LICENSE rename to packages/supabase_auth/LICENSE diff --git a/packages/gotrue/README.md b/packages/supabase_auth/README.md similarity index 79% rename from packages/gotrue/README.md rename to packages/supabase_auth/README.md index 477400b12..0958b43b5 100644 --- a/packages/gotrue/README.md +++ b/packages/supabase_auth/README.md @@ -4,7 +4,7 @@ Supabase Logo -

gotrue

+

supabase_auth

Dart client library for Supabase Auth. @@ -19,11 +19,15 @@

-[![pub package](https://img.shields.io/pub/v/gotrue.svg)](https://pub.dev/packages/gotrue) +[![pub package](https://img.shields.io/pub/v/supabase_auth.svg)](https://pub.dev/packages/supabase_auth) [![pub test](https://github.com/supabase/supabase-flutter/workflows/Test/badge.svg)](https://github.com/supabase/supabase-flutter/actions?query=workflow%3ATest)
+> **Note** +> +> This package was published as `gotrue` up to and including v2. That package is discontinued in favour of `supabase_auth`. + ## Docs The docs can be found on the official Supabase website. diff --git a/packages/gotrue/analysis_options.yaml b/packages/supabase_auth/analysis_options.yaml similarity index 100% rename from packages/gotrue/analysis_options.yaml rename to packages/supabase_auth/analysis_options.yaml diff --git a/packages/gotrue/example/README.md b/packages/supabase_auth/example/README.md similarity index 100% rename from packages/gotrue/example/README.md rename to packages/supabase_auth/example/README.md diff --git a/packages/gotrue/example/main.dart b/packages/supabase_auth/example/main.dart similarity index 80% rename from packages/gotrue/example/main.dart rename to packages/supabase_auth/example/main.dart index aef001b14..2c2ec09d7 100644 --- a/packages/gotrue/example/main.dart +++ b/packages/supabase_auth/example/main.dart @@ -1,13 +1,13 @@ // ignore_for_file: avoid_print -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; /// Example to use with Supabase Auth https://supabase.com/ Future main() async { - const gotrueUrl = 'http://localhost:9999'; + const authUrl = 'http://localhost:9999'; const supabaseKey = ''; - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, headers: { 'Authorization': 'Bearer $supabaseKey', 'apikey': supabaseKey, diff --git a/packages/gotrue/lib/src/gotrue_admin_api.dart b/packages/supabase_auth/lib/src/auth_admin_api.dart similarity index 86% rename from packages/gotrue/lib/src/gotrue_admin_api.dart rename to packages/supabase_auth/lib/src/auth_admin_api.dart index 39766085d..2c3265af8 100644 --- a/packages/gotrue/lib/src/gotrue_admin_api.dart +++ b/packages/supabase_auth/lib/src/auth_admin_api.dart @@ -1,14 +1,14 @@ -import 'package:gotrue/gotrue.dart'; -import 'package:gotrue/src/fetch.dart'; -import 'package:gotrue/src/types/fetch_options.dart'; +import 'package:supabase_auth/supabase_auth.dart'; +import 'package:supabase_auth/src/fetch.dart'; +import 'package:supabase_auth/src/types/fetch_options.dart'; import 'package:http/http.dart'; import 'package:supabase_common/supabase_common.dart'; import 'package:meta/meta.dart'; -import 'gotrue_admin_custom_providers_api.dart'; -import 'gotrue_admin_mfa_api.dart'; -import 'gotrue_admin_oauth_api.dart'; +import 'auth_admin_custom_providers_api.dart'; +import 'auth_admin_mfa_api.dart'; +import 'auth_admin_oauth_api.dart'; final _linkHeaderPattern = RegExp(r'<([^>]+)>\s*;\s*rel="([^"]+)"'); @@ -35,48 +35,48 @@ Map _parsePaginationLinks(String? header) { return pages; } -class GoTrueAdminApi { +class AuthAdminApi { final String _url; final Map _headers; final Client? _httpClient; - late final GotrueFetch _fetch = GotrueFetch(_httpClient); - late final GoTrueAdminMFAApi mfa; + late final AuthFetch _fetch = AuthFetch(_httpClient); + late final AuthAdminMFAApi mfa; /// Contains all OAuth client administration methods. /// Only relevant when the OAuth 2.1 server is enabled in Supabase Auth. - late final GoTrueAdminOAuthApi oauth; + late final AuthAdminOAuthApi oauth; /// Contains all custom OIDC/OAuth provider administration methods. - late final GoTrueAdminCustomProvidersApi customProviders; + late final AuthAdminCustomProvidersApi customProviders; /// Contains all passkey administration methods. /// Only relevant when passkeys are enabled in Supabase Auth. @experimental - late final GoTrueAdminPasskeyApi passkey; + late final AuthAdminPasskeyApi passkey; - GoTrueAdminApi( + AuthAdminApi( this._url, { Map? headers, Client? httpClient, }) : _headers = headers ?? {}, _httpClient = httpClient { - mfa = GoTrueAdminMFAApi( + mfa = AuthAdminMFAApi( url: _url, headers: _headers, fetch: _fetch, ); - oauth = GoTrueAdminOAuthApi( + oauth = AuthAdminOAuthApi( url: _url, headers: _headers, fetch: _fetch, ); - customProviders = GoTrueAdminCustomProvidersApi( + customProviders = AuthAdminCustomProvidersApi( url: _url, headers: _headers, fetch: _fetch, ); - passkey = GoTrueAdminPasskeyApi( + passkey = AuthAdminPasskeyApi( url: _url, headers: _headers, fetch: _fetch, @@ -88,7 +88,7 @@ class GoTrueAdminApi { String jwt, { SignOutScope scope = SignOutScope.global, }) async { - final options = GotrueRequestOptions( + final options = AuthRequestOptions( headers: _headers, noResolveJson: true, jwt: jwt, @@ -109,7 +109,7 @@ class GoTrueAdminApi { /// /// Requires either an email or phone Future createUser(AdminUserAttributes attributes) async { - final options = GotrueRequestOptions( + final options = AuthRequestOptions( headers: _headers, body: attributes.toJson(), ); @@ -133,7 +133,7 @@ class GoTrueAdminApi { /// `secret` key on the client. Future deleteUser(String id, {bool shouldSoftDelete = false}) async { validateUuid(id); - final options = GotrueRequestOptions( + final options = AuthRequestOptions( headers: _headers, body: {'should_soft_delete': shouldSoftDelete}, ); @@ -159,7 +159,7 @@ class GoTrueAdminApi { /// } /// ``` Future listUsers({int? page, int? perPage}) async { - final options = GotrueRequestOptions( + final options = AuthRequestOptions( headers: _headers, query: { 'page': ?page?.toString(), @@ -194,7 +194,7 @@ class GoTrueAdminApi { 'email': email, 'data': ?data, }; - final fetchOptions = GotrueRequestOptions( + final fetchOptions = AuthRequestOptions( headers: _headers, body: body, redirectTo: redirectTo, @@ -246,7 +246,7 @@ class GoTrueAdminApi { 'new_email': ?newEmail, }; - final fetchOptions = GotrueRequestOptions(headers: _headers, body: body); + final fetchOptions = AuthRequestOptions(headers: _headers, body: body); final response = await _fetch.request( '$_url/admin/generate_link', @@ -259,7 +259,7 @@ class GoTrueAdminApi { /// Gets the user by their id. Future getUserById(String uid) async { validateUuid(uid); - final options = GotrueRequestOptions(headers: _headers); + final options = AuthRequestOptions(headers: _headers); final response = await _fetch.request( '$_url/admin/users/$uid', HttpMethod.get, @@ -275,7 +275,7 @@ class GoTrueAdminApi { }) async { validateUuid(uid); final body = attributes.toJson(); - final options = GotrueRequestOptions(headers: _headers, body: body); + final options = AuthRequestOptions(headers: _headers, body: body); final response = await _fetch.request( '$_url/admin/users/$uid', HttpMethod.put, diff --git a/packages/gotrue/lib/src/gotrue_admin_custom_providers_api.dart b/packages/supabase_auth/lib/src/auth_admin_custom_providers_api.dart similarity index 91% rename from packages/gotrue/lib/src/gotrue_admin_custom_providers_api.dart rename to packages/supabase_auth/lib/src/auth_admin_custom_providers_api.dart index 1abbe6ec4..8621c2db4 100644 --- a/packages/gotrue/lib/src/gotrue_admin_custom_providers_api.dart +++ b/packages/supabase_auth/lib/src/auth_admin_custom_providers_api.dart @@ -8,16 +8,16 @@ import 'types/fetch_options.dart'; /// /// These are the providers referenced with a `custom:` prefix, e.g. /// `custom:mycompany`, and are distinct from the OAuth 2.1 server clients -/// managed through [GoTrueAdminOAuthApi]. -class GoTrueAdminCustomProvidersApi { +/// managed through [AuthAdminOAuthApi]. +class AuthAdminCustomProvidersApi { final String _url; final Map _headers; - final GotrueFetch _fetch; + final AuthFetch _fetch; - const GoTrueAdminCustomProvidersApi({ + const AuthAdminCustomProvidersApi({ required String url, required Map headers, - required GotrueFetch fetch, + required AuthFetch fetch, }) : _url = url, _headers = headers, _fetch = fetch; @@ -32,7 +32,7 @@ class GoTrueAdminCustomProvidersApi { final data = await _fetch.request( '$_url/admin/custom-providers', HttpMethod.get, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, query: { 'type': ?type?.name, @@ -63,7 +63,7 @@ class GoTrueAdminCustomProvidersApi { final data = await _fetch.request( '$_url/admin/custom-providers', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, body: params.toJson(), ), @@ -80,7 +80,7 @@ class GoTrueAdminCustomProvidersApi { final data = await _fetch.request( '$_url/admin/custom-providers/$identifier', HttpMethod.get, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, ), ); @@ -104,7 +104,7 @@ class GoTrueAdminCustomProvidersApi { final data = await _fetch.request( '$_url/admin/custom-providers/$identifier', HttpMethod.put, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, body: params.toJson(), ), @@ -121,7 +121,7 @@ class GoTrueAdminCustomProvidersApi { await _fetch.request( '$_url/admin/custom-providers/$identifier', HttpMethod.delete, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, noResolveJson: true, ), diff --git a/packages/gotrue/lib/src/gotrue_admin_mfa_api.dart b/packages/supabase_auth/lib/src/auth_admin_mfa_api.dart similarity index 85% rename from packages/gotrue/lib/src/gotrue_admin_mfa_api.dart rename to packages/supabase_auth/lib/src/auth_admin_mfa_api.dart index a2efd7226..688118cdb 100644 --- a/packages/gotrue/lib/src/gotrue_admin_mfa_api.dart +++ b/packages/supabase_auth/lib/src/auth_admin_mfa_api.dart @@ -4,15 +4,15 @@ import 'fetch.dart'; import 'types/fetch_options.dart'; import 'types/mfa.dart'; -class GoTrueAdminMFAApi { +class AuthAdminMFAApi { final String _url; final Map _headers; - final GotrueFetch _fetch; + final AuthFetch _fetch; - const GoTrueAdminMFAApi({ + const AuthAdminMFAApi({ required String url, required Map headers, - required GotrueFetch fetch, + required AuthFetch fetch, }) : _url = url, _headers = headers, _fetch = fetch; @@ -25,7 +25,7 @@ class GoTrueAdminMFAApi { final data = await _fetch.request( '$_url/admin/users/$userId/factors', HttpMethod.get, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, ), ); @@ -45,7 +45,7 @@ class GoTrueAdminMFAApi { final data = await _fetch.request( '$_url/admin/users/$userId/factors/$factorId', HttpMethod.delete, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, ), ); diff --git a/packages/gotrue/lib/src/gotrue_admin_oauth_api.dart b/packages/supabase_auth/lib/src/auth_admin_oauth_api.dart similarity index 93% rename from packages/gotrue/lib/src/gotrue_admin_oauth_api.dart rename to packages/supabase_auth/lib/src/auth_admin_oauth_api.dart index 4ef11a057..744862a62 100644 --- a/packages/gotrue/lib/src/gotrue_admin_oauth_api.dart +++ b/packages/supabase_auth/lib/src/auth_admin_oauth_api.dart @@ -53,15 +53,15 @@ class OAuthClientListResponse { /// Contains all OAuth client administration methods. /// Only relevant when the OAuth 2.1 server is enabled in Supabase Auth. -class GoTrueAdminOAuthApi { +class AuthAdminOAuthApi { final String _url; final Map _headers; - final GotrueFetch _fetch; + final AuthFetch _fetch; - const GoTrueAdminOAuthApi({ + const AuthAdminOAuthApi({ required String url, required Map headers, - required GotrueFetch fetch, + required AuthFetch fetch, }) : _url = url, _headers = headers, _fetch = fetch; @@ -78,7 +78,7 @@ class GoTrueAdminOAuthApi { final data = await _fetch.request( '$_url/admin/oauth/clients', HttpMethod.get, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, query: { 'page': ?page?.toString(), @@ -101,7 +101,7 @@ class GoTrueAdminOAuthApi { final data = await _fetch.request( '$_url/admin/oauth/clients', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, body: params.toJson(), ), @@ -121,7 +121,7 @@ class GoTrueAdminOAuthApi { final data = await _fetch.request( '$_url/admin/oauth/clients/$clientId', HttpMethod.get, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, ), ); @@ -143,7 +143,7 @@ class GoTrueAdminOAuthApi { final data = await _fetch.request( '$_url/admin/oauth/clients/$clientId', HttpMethod.put, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, body: params.toJson(), ), @@ -163,7 +163,7 @@ class GoTrueAdminOAuthApi { final data = await _fetch.request( '$_url/admin/oauth/clients/$clientId', HttpMethod.delete, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, ), ); @@ -182,7 +182,7 @@ class GoTrueAdminOAuthApi { final data = await _fetch.request( '$_url/admin/oauth/clients/$clientId/regenerate_secret', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, ), ); diff --git a/packages/gotrue/lib/src/gotrue_admin_passkey_api.dart b/packages/supabase_auth/lib/src/auth_admin_passkey_api.dart similarity index 89% rename from packages/gotrue/lib/src/gotrue_admin_passkey_api.dart rename to packages/supabase_auth/lib/src/auth_admin_passkey_api.dart index 8fecab7e6..9b801af60 100644 --- a/packages/gotrue/lib/src/gotrue_admin_passkey_api.dart +++ b/packages/supabase_auth/lib/src/auth_admin_passkey_api.dart @@ -13,15 +13,15 @@ import 'types/passkey.dart'; /// These methods require a `secret` key and should only be called on a /// server. Never expose your `secret` key on the client. @experimental -class GoTrueAdminPasskeyApi { +class AuthAdminPasskeyApi { final String _url; final Map _headers; - final GotrueFetch _fetch; + final AuthFetch _fetch; - const GoTrueAdminPasskeyApi({ + const AuthAdminPasskeyApi({ required String url, required Map headers, - required GotrueFetch fetch, + required AuthFetch fetch, }) : _url = url, _headers = headers, _fetch = fetch; @@ -33,7 +33,7 @@ class GoTrueAdminPasskeyApi { final data = await _fetch.request( '$_url/admin/users/$userId/passkeys', HttpMethod.get, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, ), ); @@ -58,7 +58,7 @@ class GoTrueAdminPasskeyApi { await _fetch.request( '$_url/admin/users/$userId/passkeys/$passkeyId', HttpMethod.delete, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, ), ); diff --git a/packages/gotrue/lib/src/gotrue_client.dart b/packages/supabase_auth/lib/src/auth_client.dart similarity index 95% rename from packages/gotrue/lib/src/gotrue_client.dart rename to packages/supabase_auth/lib/src/auth_client.dart index 138480799..73e21fbe7 100644 --- a/packages/gotrue/lib/src/gotrue_client.dart +++ b/packages/supabase_auth/lib/src/auth_client.dart @@ -4,11 +4,11 @@ import 'dart:math'; import 'package:collection/collection.dart'; import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart'; -import 'package:gotrue/gotrue.dart'; -import 'package:gotrue/src/constants.dart'; -import 'package:gotrue/src/fetch.dart'; -import 'package:gotrue/src/helper.dart'; -import 'package:gotrue/src/types/fetch_options.dart'; +import 'package:supabase_auth/supabase_auth.dart'; +import 'package:supabase_auth/src/constants.dart'; +import 'package:supabase_auth/src/fetch.dart'; +import 'package:supabase_auth/src/helper.dart'; +import 'package:supabase_auth/src/types/fetch_options.dart'; import 'package:http/http.dart'; import 'package:logging/logging.dart'; import 'package:meta/meta.dart'; @@ -19,9 +19,9 @@ import 'broadcast_stub.dart' as web; import 'version.dart'; -part 'gotrue_oauth_api.dart'; -part 'gotrue_mfa_api.dart'; -part 'gotrue_passkey_api.dart'; +part 'auth_oauth_api.dart'; +part 'auth_mfa_api.dart'; +part 'auth_passkey_api.dart'; class _SessionState { Session? _session; @@ -34,10 +34,10 @@ class _SessionState { } } -/// {@template gotrue_client} -/// API client to interact with gotrue server. +/// {@template auth_client} +/// API client to interact with the Supabase Auth server. /// -/// [url] URL of gotrue instance +/// [url] URL of the Supabase Auth instance /// /// [autoRefreshToken] whether to refresh the token automatically or not. /// Defaults to true. @@ -49,22 +49,23 @@ class _SessionState { /// /// Set [flowType] to [AuthFlowType.implicit] to perform old implicit auth flow. /// {@endtemplate} -class GoTrueClient { - /// Namespace for the GoTrue API methods. These can be used for example to get - /// a user from a JWT in a server environment or reset a user's password. - late final GoTrueAdminApi admin; +class AuthClient { + /// Namespace for the Supabase Auth admin API methods. These can be used for + /// example to get a user from a JWT in a server environment or reset a + /// user's password. + late final AuthAdminApi admin; - /// Namespace for the GoTrue MFA API methods. - late final GoTrueMFAApi mfa; + /// Namespace for the Supabase Auth MFA API methods. + late final AuthMFAApi mfa; - /// Namespace for the GoTrue OAuth methods. - late final GoTrueOAuthApi oauth; + /// Namespace for the Supabase Auth OAuth methods. + late final AuthOAuthApi oauth; /// Namespace for the passkey (WebAuthn) API methods. /// - /// {@macro gotrue_passkey_api} + /// {@macro auth_passkey_api} @experimental - late final GoTruePasskeyApi passkey; + late final AuthPasskeyApi passkey; final _sessionState = _SessionState(); @@ -75,7 +76,7 @@ class GoTrueClient { final String _url; final Map _headers; final Client? _httpClient; - late final GotrueFetch _fetch = GotrueFetch(_httpClient); + late final AuthFetch _fetch = AuthFetch(_httpClient); late bool _autoRefreshToken; @@ -99,7 +100,7 @@ class GoTrueClient { ); /// Local storage to store pkce code verifiers. - final GotrueAsyncStorage? _asyncStorage; + final AuthAsyncStorage? _asyncStorage; /// Receive a notification every time an auth event happens. /// @@ -148,37 +149,37 @@ class GoTrueClient { StreamSubscription? _broadcastChannelSubscription; - /// {@macro gotrue_client} - GoTrueClient({ + /// {@macro auth_client} + AuthClient({ String? url, Map? headers, bool? autoRefreshToken, Client? httpClient, - GotrueAsyncStorage? asyncStorage, + AuthAsyncStorage? asyncStorage, AuthFlowType flowType = AuthFlowType.pkce, - }) : _url = url ?? Constants.defaultGotrueUrl, + }) : _url = url ?? Constants.defaultAuthUrl, _headers = {...Constants.defaultHeaders, ...?headers}, _httpClient = httpClient, _asyncStorage = asyncStorage, _flowType = flowType { _autoRefreshToken = autoRefreshToken ?? true; - final gotrueUrl = url ?? Constants.defaultGotrueUrl; + final authUrl = url ?? Constants.defaultAuthUrl; _log.config( - 'Initialize GoTrueClient v$version with url: $_url, autoRefreshToken: ' + 'Initialize AuthClient v$version with url: $_url, autoRefreshToken: ' '$_autoRefreshToken, flowType: ${_flowType.name}, tickDuration: ' '${Constants.autoRefreshTickDuration}, tickThreshold: ' '${Constants.autoRefreshTickThreshold}', ); _log.finest('Initialize with headers: $_headers'); - admin = GoTrueAdminApi( - gotrueUrl, + admin = AuthAdminApi( + authUrl, headers: _headers, httpClient: httpClient, ); - oauth = GoTrueOAuthApi(client: this, fetch: _fetch); - mfa = GoTrueMFAApi(client: this, fetch: _fetch); - passkey = GoTruePasskeyApi(client: this, fetch: _fetch); + oauth = AuthOAuthApi(client: this, fetch: _fetch); + mfa = AuthMFAApi(client: this, fetch: _fetch); + passkey = AuthPasskeyApi(client: this, fetch: _fetch); if (_autoRefreshToken) { startAutoRefresh(); } @@ -250,7 +251,7 @@ class GoTrueClient { final response = await _fetch.request( '$_url/signup', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, body: { 'data': data ?? {}, @@ -311,7 +312,7 @@ class GoTrueClient { response = await _fetch.request( '$_url/signup', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, redirectTo: emailRedirectTo, body: { @@ -332,7 +333,7 @@ class GoTrueClient { 'gotrue_meta_security': {'captcha_token': captchaToken}, 'channel': channel.name, }; - final fetchOptions = GotrueRequestOptions(headers: _headers, body: body); + final fetchOptions = AuthRequestOptions(headers: _headers, body: body); response = await _fetch.request( '$_url/signup', @@ -370,7 +371,7 @@ class GoTrueClient { response = await _fetch.request( '$_url/token', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, body: { 'email': email, @@ -384,7 +385,7 @@ class GoTrueClient { response = await _fetch.request( '$_url/token', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, body: { 'phone': phone, @@ -451,7 +452,7 @@ class GoTrueClient { final Map response = await _fetch.request( '$_url/token', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, body: {'auth_code': authCode, 'code_verifier': codeVerifier}, query: {'grant_type': 'pkce'}, @@ -522,7 +523,7 @@ class GoTrueClient { final response = await _fetch.request( '$_url/token', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, body: { 'provider': provider.name, @@ -570,7 +571,7 @@ class GoTrueClient { final response = await _fetch.request( '$_url/token', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, body: { 'chain': chain.name, @@ -633,7 +634,7 @@ class GoTrueClient { await _fetch.request( '$_url/otp', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, redirectTo: emailRedirectTo, body: { @@ -656,7 +657,7 @@ class GoTrueClient { 'gotrue_meta_security': {'captcha_token': captchaToken}, 'channel': channel.name, }; - final fetchOptions = GotrueRequestOptions(headers: _headers, body: body); + final fetchOptions = AuthRequestOptions(headers: _headers, body: body); await _fetch.request( '$_url/otp', @@ -726,7 +727,7 @@ class GoTrueClient { 'gotrue_meta_security': {'captcha_token': captchaToken}, 'token_hash': ?tokenHash, }; - final fetchOptions = GotrueRequestOptions(headers: _headers, body: body); + final fetchOptions = AuthRequestOptions(headers: _headers, body: body); final response = await _fetch.request( '$_url/verify', HttpMethod.post, @@ -783,7 +784,7 @@ class GoTrueClient { final res = await _fetch.request( '$_url/sso', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( body: { 'provider_id': ?providerId, 'domain': ?domain, @@ -828,7 +829,7 @@ class GoTrueClient { throw AuthSessionMissingException(); } - final options = GotrueRequestOptions( + final options = AuthRequestOptions( headers: headers, jwt: session.accessToken, ); @@ -885,7 +886,7 @@ class GoTrueClient { }, }; - final options = GotrueRequestOptions( + final options = AuthRequestOptions( headers: _headers, body: body, redirectTo: emailRedirectTo, @@ -908,7 +909,7 @@ class GoTrueClient { if (jwt == null && currentSession?.accessToken == null) { throw AuthSessionMissingException(); } - final options = GotrueRequestOptions( + final options = AuthRequestOptions( headers: _headers, jwt: jwt ?? currentSession?.accessToken, ); @@ -943,7 +944,7 @@ class GoTrueClient { 'code_challenge_method': codeChallenge != null ? 's256' : null, }, }; - final options = GotrueRequestOptions( + final options = AuthRequestOptions( headers: _headers, body: body, jwt: accessToken, @@ -1178,7 +1179,7 @@ class GoTrueClient { 'code_challenge_method': codeChallenge != null ? 's256' : null, }; - final fetchOptions = GotrueRequestOptions( + final fetchOptions = AuthRequestOptions( headers: _headers, body: body, redirectTo: redirectTo, @@ -1218,7 +1219,7 @@ class GoTrueClient { final response = await _fetch.request( '$_url/token', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, jwt: _currentSession?.accessToken, body: { @@ -1263,7 +1264,7 @@ class GoTrueClient { final res = await _fetch.request( urlResponse.url, HttpMethod.get, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _headers, jwt: _currentSession?.accessToken, ), @@ -1279,7 +1280,7 @@ class GoTrueClient { await _fetch.request( '$_url/user/identities/${identity.identityId}', HttpMethod.delete, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: headers, jwt: _currentSession?.accessToken, ), @@ -1446,7 +1447,7 @@ class GoTrueClient { () async { attempt++; _log.fine('Attempt $attempt to refresh token'); - final options = GotrueRequestOptions( + final options = AuthRequestOptions( headers: _headers, body: {'refresh_token': refreshToken}, query: {'grant_type': 'refresh_token'}, @@ -1759,7 +1760,7 @@ class GoTrueClient { final jwksResponse = await _fetch.request( '$_url/.well-known/jwks.json', HttpMethod.get, - options: GotrueRequestOptions(headers: _headers), + options: AuthRequestOptions(headers: _headers), ); final jwks = JWKSet.fromJson(jwksResponse as Map); diff --git a/packages/gotrue/lib/src/gotrue_mfa_api.dart b/packages/supabase_auth/lib/src/auth_mfa_api.dart similarity index 95% rename from packages/gotrue/lib/src/gotrue_mfa_api.dart rename to packages/supabase_auth/lib/src/auth_mfa_api.dart index e99da3b5b..dfcff579c 100644 --- a/packages/gotrue/lib/src/gotrue_mfa_api.dart +++ b/packages/supabase_auth/lib/src/auth_mfa_api.dart @@ -1,10 +1,10 @@ -part of 'gotrue_client.dart'; +part of 'auth_client.dart'; -class GoTrueMFAApi { - final GoTrueClient _client; - final GotrueFetch _fetch; +class AuthMFAApi { + final AuthClient _client; + final AuthFetch _fetch; - const GoTrueMFAApi({required GoTrueClient client, required GotrueFetch fetch}) + const AuthMFAApi({required AuthClient client, required AuthFetch fetch}) : _client = client, _fetch = fetch; @@ -18,7 +18,7 @@ class GoTrueMFAApi { final data = await _fetch.request( '${_client._url}/factors/$factorId', HttpMethod.delete, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _client._headers, jwt: session?.accessToken, ), @@ -81,7 +81,7 @@ class GoTrueMFAApi { final data = await _fetch.request( '${_client._url}/factors', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _client._headers, body: body, jwt: session?.accessToken, @@ -111,7 +111,7 @@ class GoTrueMFAApi { final data = await _fetch.request( '${_client._url}/factors/$factorId/verify', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _client._headers, body: { 'challenge_id': challengeId, @@ -152,7 +152,7 @@ class GoTrueMFAApi { final data = await _fetch.request( '${_client._url}/factors/$factorId/challenge', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _client._headers, body: channel == null ? null : {'channel': channel.name}, jwt: session?.accessToken, diff --git a/packages/gotrue/lib/src/gotrue_oauth_api.dart b/packages/supabase_auth/lib/src/auth_oauth_api.dart similarity index 95% rename from packages/gotrue/lib/src/gotrue_oauth_api.dart rename to packages/supabase_auth/lib/src/auth_oauth_api.dart index 6d151d5e3..0dbd10c9f 100644 --- a/packages/gotrue/lib/src/gotrue_oauth_api.dart +++ b/packages/supabase_auth/lib/src/auth_oauth_api.dart @@ -1,4 +1,4 @@ -part of 'gotrue_client.dart'; +part of 'auth_client.dart'; /// OAuth client object returned from the OAuth 2.1 server when the client is /// authorized. @@ -90,7 +90,7 @@ class OAuthGrant { } } -/// Result returned by [GoTrueOAuthApi.getAuthorizationDetails]. +/// Result returned by [AuthOAuthApi.getAuthorizationDetails]. /// /// The OAuth 2.1 server responds in one of two ways, depending on whether the /// signed-in user has already granted consent to the requesting client: @@ -204,7 +204,7 @@ class OAuthConsentResponse { } } -/// {@template gotrue_oauth_server_api} +/// {@template auth_oauth_server_api} /// API namespace for the OAuth 2.1 authorization server consent flow. /// /// Use these methods when your Supabase project is acting as an OAuth 2.1 @@ -240,13 +240,13 @@ class OAuthConsentResponse { /// These methods require a signed-in user and only work when the OAuth 2.1 /// server feature is enabled in your Supabase Auth configuration. /// {@endtemplate} -class GoTrueOAuthApi { - final GotrueFetch _fetch; - final GoTrueClient _client; +class AuthOAuthApi { + final AuthFetch _fetch; + final AuthClient _client; - const GoTrueOAuthApi({ - required GoTrueClient client, - required GotrueFetch fetch, + const AuthOAuthApi({ + required AuthClient client, + required AuthFetch fetch, }) : _client = client, _fetch = fetch; @@ -267,7 +267,7 @@ class GoTrueOAuthApi { final data = await _fetch.request( '${_client._url}/oauth/authorizations/$authorizationId', HttpMethod.get, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _client._headers, jwt: session?.accessToken, ), @@ -290,7 +290,7 @@ class GoTrueOAuthApi { final data = await _fetch.request( '${_client._url}/oauth/authorizations/$authorizationId/consent', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _client._headers, jwt: session?.accessToken, body: { @@ -316,7 +316,7 @@ class GoTrueOAuthApi { final data = await _fetch.request( '${_client._url}/oauth/authorizations/$authorizationId/consent', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _client._headers, jwt: session?.accessToken, body: { @@ -337,7 +337,7 @@ class GoTrueOAuthApi { final data = await _fetch.request( '${_client._url}/user/oauth/grants', HttpMethod.get, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _client._headers, jwt: session?.accessToken, ), @@ -356,7 +356,7 @@ class GoTrueOAuthApi { await _fetch.request( '${_client._url}/user/oauth/grants', HttpMethod.delete, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _client._headers, jwt: session?.accessToken, query: {'client_id': clientId}, diff --git a/packages/gotrue/lib/src/gotrue_passkey_api.dart b/packages/supabase_auth/lib/src/auth_passkey_api.dart similarity index 94% rename from packages/gotrue/lib/src/gotrue_passkey_api.dart rename to packages/supabase_auth/lib/src/auth_passkey_api.dart index 9dd7efe8e..9012183bf 100644 --- a/packages/gotrue/lib/src/gotrue_passkey_api.dart +++ b/packages/supabase_auth/lib/src/auth_passkey_api.dart @@ -1,6 +1,6 @@ -part of 'gotrue_client.dart'; +part of 'auth_client.dart'; -/// {@template gotrue_passkey_api} +/// {@template auth_passkey_api} /// API namespace for passkey (WebAuthn) authentication. /// /// Passkeys are a BETA feature and must be enabled for your project in the @@ -38,13 +38,13 @@ part of 'gotrue_client.dart'; /// ``` /// {@endtemplate} @experimental -class GoTruePasskeyApi { - final GoTrueClient _client; - final GotrueFetch _fetch; +class AuthPasskeyApi { + final AuthClient _client; + final AuthFetch _fetch; - const GoTruePasskeyApi({ - required GoTrueClient client, - required GotrueFetch fetch, + const AuthPasskeyApi({ + required AuthClient client, + required AuthFetch fetch, }) : _client = client, _fetch = fetch; @@ -70,7 +70,7 @@ class GoTruePasskeyApi { final data = await _fetch.request( '${_client._url}/passkeys/registration/options', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _client._headers, body: {}, jwt: session?.accessToken, @@ -124,7 +124,7 @@ class GoTruePasskeyApi { final data = await _fetch.request( '${_client._url}/passkeys/registration/verify', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _client._headers, body: { 'challenge_id': challengeId, @@ -149,7 +149,7 @@ class GoTruePasskeyApi { final data = await _fetch.request( '${_client._url}/passkeys/authentication/options', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _client._headers, body: { 'gotrue_meta_security': {'captcha_token': captchaToken}, @@ -177,7 +177,7 @@ class GoTruePasskeyApi { final data = await _fetch.request( '${_client._url}/passkeys/authentication/verify', HttpMethod.post, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _client._headers, body: { 'challenge_id': challengeId, @@ -203,7 +203,7 @@ class GoTruePasskeyApi { final data = await _fetch.request( '${_client._url}/passkeys', HttpMethod.get, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _client._headers, jwt: session?.accessToken, ), @@ -228,7 +228,7 @@ class GoTruePasskeyApi { final data = await _fetch.request( '${_client._url}/passkeys/$passkeyId', HttpMethod.patch, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _client._headers, body: {'friendly_name': friendlyName}, jwt: session?.accessToken, @@ -248,7 +248,7 @@ class GoTruePasskeyApi { await _fetch.request( '${_client._url}/passkeys/$passkeyId', HttpMethod.delete, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: _client._headers, jwt: session?.accessToken, ), diff --git a/packages/gotrue/lib/src/broadcast_stub.dart b/packages/supabase_auth/lib/src/broadcast_stub.dart similarity index 82% rename from packages/gotrue/lib/src/broadcast_stub.dart rename to packages/supabase_auth/lib/src/broadcast_stub.dart index c7e5cecae..ea8f1b5dc 100644 --- a/packages/gotrue/lib/src/broadcast_stub.dart +++ b/packages/supabase_auth/lib/src/broadcast_stub.dart @@ -1,5 +1,5 @@ // coverage:ignore-file -import 'package:gotrue/src/types/types.dart'; +import 'package:supabase_auth/src/types/types.dart'; import 'package:meta/meta.dart'; /// Stub implementation of [BroadcastChannel] for platforms that don't support diff --git a/packages/gotrue/lib/src/broadcast_web.dart b/packages/supabase_auth/lib/src/broadcast_web.dart similarity index 94% rename from packages/gotrue/lib/src/broadcast_web.dart rename to packages/supabase_auth/lib/src/broadcast_web.dart index 6e07c16f5..28f1b3318 100644 --- a/packages/gotrue/lib/src/broadcast_web.dart +++ b/packages/supabase_auth/lib/src/broadcast_web.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'dart:convert'; import 'dart:js_interop'; -import 'package:gotrue/src/types/types.dart'; +import 'package:supabase_auth/src/types/types.dart'; import 'package:logging/logging.dart'; import 'package:meta/meta.dart'; import 'package:web/web.dart' as web; diff --git a/packages/gotrue/lib/src/constants.dart b/packages/supabase_auth/lib/src/constants.dart similarity index 95% rename from packages/gotrue/lib/src/constants.dart rename to packages/supabase_auth/lib/src/constants.dart index a1b26c19d..66a0b8d21 100644 --- a/packages/gotrue/lib/src/constants.dart +++ b/packages/supabase_auth/lib/src/constants.dart @@ -1,10 +1,10 @@ -import 'package:gotrue/src/version.dart'; +import 'package:supabase_auth/src/version.dart'; import 'package:meta/meta.dart'; import 'package:supabase_common/supabase_common.dart'; @internal class Constants { - static const String defaultGotrueUrl = 'http://localhost:9999'; + static const String defaultAuthUrl = 'http://localhost:9999'; static final Map defaultHeaders = { 'X-Client-Info': buildClientInfoHeader('gotrue-dart', version), }; diff --git a/packages/gotrue/lib/src/fetch.dart b/packages/supabase_auth/lib/src/fetch.dart similarity index 93% rename from packages/gotrue/lib/src/fetch.dart rename to packages/supabase_auth/lib/src/fetch.dart index 6b099f398..635adaa5a 100644 --- a/packages/gotrue/lib/src/fetch.dart +++ b/packages/supabase_auth/lib/src/fetch.dart @@ -1,18 +1,18 @@ import 'dart:convert'; -import 'package:gotrue/src/constants.dart'; -import 'package:gotrue/src/types/auth_exception.dart'; -import 'package:gotrue/src/types/error_code.dart'; -import 'package:gotrue/src/types/fetch_options.dart'; +import 'package:supabase_auth/src/constants.dart'; +import 'package:supabase_auth/src/types/auth_exception.dart'; +import 'package:supabase_auth/src/types/error_code.dart'; +import 'package:supabase_auth/src/types/fetch_options.dart'; import 'package:http/http.dart'; import 'package:meta/meta.dart'; import 'package:supabase_common/supabase_common.dart'; @internal -class GotrueFetch { +class AuthFetch { final Client? httpClient; - const GotrueFetch([this.httpClient]); + const AuthFetch([this.httpClient]); String _getErrorMessage(dynamic error) { if (error is Map) { @@ -118,7 +118,7 @@ class GotrueFetch { Future request( String url, HttpMethod method, { - GotrueRequestOptions? options, + AuthRequestOptions? options, }) async { final result = await requestWithResponse(url, method, options: options); return result.body; @@ -132,7 +132,7 @@ class GotrueFetch { Future<({dynamic body, Response response})> requestWithResponse( String url, HttpMethod method, { - GotrueRequestOptions? options, + AuthRequestOptions? options, }) async { // Copy the maps before mutating them. Callers pass the client's shared // header/query maps by reference, so writing `Authorization`, the API @@ -165,7 +165,7 @@ class GotrueFetch { return (body: _resolveBody(response, options), response: response); } - dynamic _resolveBody(Response response, GotrueRequestOptions? options) { + dynamic _resolveBody(Response response, AuthRequestOptions? options) { if (options?.noResolveJson == true) { return response.body; } @@ -184,7 +184,7 @@ class GotrueFetch { Future _handleRequest({ required HttpMethod method, required Uri uri, - required GotrueRequestOptions? options, + required AuthRequestOptions? options, required Map headers, }) async { final bodyStr = json.encode(options?.body ?? {}); diff --git a/packages/gotrue/lib/src/helper.dart b/packages/supabase_auth/lib/src/helper.dart similarity index 95% rename from packages/gotrue/lib/src/helper.dart rename to packages/supabase_auth/lib/src/helper.dart index 6b9cf41e2..ce845913b 100644 --- a/packages/gotrue/lib/src/helper.dart +++ b/packages/supabase_auth/lib/src/helper.dart @@ -1,7 +1,7 @@ import 'dart:convert'; -import 'package:gotrue/src/types/auth_exception.dart'; -import 'package:gotrue/src/types/jwt.dart'; +import 'package:supabase_auth/src/types/auth_exception.dart'; +import 'package:supabase_auth/src/types/jwt.dart'; import 'package:meta/meta.dart'; import 'package:supabase_common/supabase_common.dart'; diff --git a/packages/gotrue/lib/src/types/gotrue_async_storage.dart b/packages/supabase_auth/lib/src/types/auth_async_storage.dart similarity index 87% rename from packages/gotrue/lib/src/types/gotrue_async_storage.dart rename to packages/supabase_auth/lib/src/types/auth_async_storage.dart index 29ce2b15d..d944c9a55 100644 --- a/packages/gotrue/lib/src/types/gotrue_async_storage.dart +++ b/packages/supabase_auth/lib/src/types/auth_async_storage.dart @@ -1,6 +1,6 @@ /// Interface to provide async storage to store pkce tokens. -abstract class GotrueAsyncStorage { - const GotrueAsyncStorage(); +abstract class AuthAsyncStorage { + const AuthAsyncStorage(); /// Retrieves an item asynchronously from the storage with the key. Future getItem({required String key}); diff --git a/packages/gotrue/lib/src/types/auth_exception.dart b/packages/supabase_auth/lib/src/types/auth_exception.dart similarity index 98% rename from packages/gotrue/lib/src/types/auth_exception.dart rename to packages/supabase_auth/lib/src/types/auth_exception.dart index 43775f288..29bbe9990 100644 --- a/packages/gotrue/lib/src/types/auth_exception.dart +++ b/packages/supabase_auth/lib/src/types/auth_exception.dart @@ -1,4 +1,4 @@ -import 'package:gotrue/src/types/error_code.dart'; +import 'package:supabase_auth/src/types/error_code.dart'; import 'package:http/http.dart' as http; import 'package:supabase_common/supabase_common.dart'; diff --git a/packages/gotrue/lib/src/types/auth_response.dart b/packages/supabase_auth/lib/src/types/auth_response.dart similarity index 96% rename from packages/gotrue/lib/src/types/auth_response.dart rename to packages/supabase_auth/lib/src/types/auth_response.dart index efe88cbfa..bc1c4b89a 100644 --- a/packages/gotrue/lib/src/types/auth_response.dart +++ b/packages/supabase_auth/lib/src/types/auth_response.dart @@ -1,4 +1,4 @@ -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; /// Response which might or might not contain session and/or user class AuthResponse { @@ -35,7 +35,7 @@ class UserResponse { UserResponse.fromJson(Map json) : user = User.fromJson(json); } -/// Response of [GoTrueAdminApi.listUsers], a page of users together with the +/// Response of [AuthAdminApi.listUsers], a page of users together with the /// pagination metadata the server reports for it. class ListUsersResponse { /// The users on the requested page. diff --git a/packages/gotrue/lib/src/types/auth_state.dart b/packages/supabase_auth/lib/src/types/auth_state.dart similarity index 81% rename from packages/gotrue/lib/src/types/auth_state.dart rename to packages/supabase_auth/lib/src/types/auth_state.dart index fda6a5081..62b2ddd31 100644 --- a/packages/gotrue/lib/src/types/auth_state.dart +++ b/packages/supabase_auth/lib/src/types/auth_state.dart @@ -1,6 +1,6 @@ -import 'package:gotrue/src/constants.dart'; -import 'package:gotrue/src/types/session.dart'; -import 'package:gotrue/src/types/sign_out_reason.dart'; +import 'package:supabase_auth/src/constants.dart'; +import 'package:supabase_auth/src/types/session.dart'; +import 'package:supabase_auth/src/types/sign_out_reason.dart'; class AuthState { final AuthChangeEvent event; @@ -9,7 +9,7 @@ class AuthState { /// Why the user was signed out, when [event] is /// [AuthChangeEvent.signedOut]. /// - /// Lets listeners tell an explicit [GoTrueClient.signOut] apart from an + /// Lets listeners tell an explicit [AuthClient.signOut] apart from an /// involuntary sign out, such as an invalid or expired refresh token, /// directly from the `signedOut` event rather than from the matching stream /// error. An `onError` handler is still needed to catch the other exceptions diff --git a/packages/gotrue/lib/src/types/custom_oauth_provider.dart b/packages/supabase_auth/lib/src/types/custom_oauth_provider.dart similarity index 100% rename from packages/gotrue/lib/src/types/custom_oauth_provider.dart rename to packages/supabase_auth/lib/src/types/custom_oauth_provider.dart diff --git a/packages/gotrue/lib/src/types/error_code.dart b/packages/supabase_auth/lib/src/types/error_code.dart similarity index 100% rename from packages/gotrue/lib/src/types/error_code.dart rename to packages/supabase_auth/lib/src/types/error_code.dart diff --git a/packages/gotrue/lib/src/types/fetch_options.dart b/packages/supabase_auth/lib/src/types/fetch_options.dart similarity index 86% rename from packages/gotrue/lib/src/types/fetch_options.dart rename to packages/supabase_auth/lib/src/types/fetch_options.dart index fb49c8e2c..a3990e49e 100644 --- a/packages/gotrue/lib/src/types/fetch_options.dart +++ b/packages/supabase_auth/lib/src/types/fetch_options.dart @@ -4,13 +4,13 @@ import 'package:meta/meta.dart'; export 'package:supabase_common/supabase_common.dart' show FetchOptions; @internal -class GotrueRequestOptions extends FetchOptions { +class AuthRequestOptions extends FetchOptions { final String? jwt; final String? redirectTo; final Map? body; final Map? query; - GotrueRequestOptions({ + AuthRequestOptions({ this.jwt, this.redirectTo, this.body, diff --git a/packages/gotrue/lib/src/types/jwt.dart b/packages/supabase_auth/lib/src/types/jwt.dart similarity index 100% rename from packages/gotrue/lib/src/types/jwt.dart rename to packages/supabase_auth/lib/src/types/jwt.dart diff --git a/packages/gotrue/lib/src/types/mfa.dart b/packages/supabase_auth/lib/src/types/mfa.dart similarity index 98% rename from packages/gotrue/lib/src/types/mfa.dart rename to packages/supabase_auth/lib/src/types/mfa.dart index 36579af5e..82e9d70cf 100644 --- a/packages/gotrue/lib/src/types/mfa.dart +++ b/packages/supabase_auth/lib/src/types/mfa.dart @@ -1,4 +1,4 @@ -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:supabase_common/supabase_common.dart'; class AuthMFAEnrollResponse { @@ -351,7 +351,7 @@ class AuthMFAGetAuthenticatorAssuranceLevelResponse { /// Next possible AAL level for the session. If the next level is higher than /// the current one, the user should go through MFA. /// - /// see [GoTrueMFAApi.challenge] + /// see [AuthMFAApi.challenge] final AuthenticatorAssuranceLevel? nextLevel; /// A list of all authentication methods attached to this session. @@ -394,7 +394,7 @@ enum AMRMethod { /// An entry designates what method was used by the user to verify their /// identity and at what time. /// -/// see [GoTrueMFAApi.getAuthenticatorAssuranceLevel]. +/// see [AuthMFAApi.getAuthenticatorAssuranceLevel]. /// class AMREntry { /// authentication method name diff --git a/packages/gotrue/lib/src/types/passkey.dart b/packages/supabase_auth/lib/src/types/passkey.dart similarity index 95% rename from packages/gotrue/lib/src/types/passkey.dart rename to packages/supabase_auth/lib/src/types/passkey.dart index 428ac96fc..5aaf4220a 100644 --- a/packages/gotrue/lib/src/types/passkey.dart +++ b/packages/supabase_auth/lib/src/types/passkey.dart @@ -11,7 +11,7 @@ class Passkey { /// /// Automatically generated by the server from the authenticator that /// created the credential (e.g. "iCloud Keychain"). Can be changed with - /// [GoTruePasskeyApi.update]. + /// [AuthPasskeyApi.update]. final String? friendlyName; /// Timestamp when the passkey was registered. @@ -68,7 +68,7 @@ class Passkey { /// Response containing the options needed to register a new passkey. @experimental class PasskeyRegistrationOptionsResponse { - /// ID of the challenge, pass it to [GoTruePasskeyApi.verifyRegistration] + /// ID of the challenge, pass it to [AuthPasskeyApi.verifyRegistration] /// together with the created credential. final String challengeId; @@ -103,7 +103,7 @@ class PasskeyRegistrationOptionsResponse { /// Response containing the options needed to sign in with a passkey. @experimental class PasskeyAuthenticationOptionsResponse { - /// ID of the challenge, pass it to [GoTruePasskeyApi.verifyAuthentication] + /// ID of the challenge, pass it to [AuthPasskeyApi.verifyAuthentication] /// together with the signed assertion. final String challengeId; diff --git a/packages/gotrue/lib/src/types/session.dart b/packages/supabase_auth/lib/src/types/session.dart similarity index 96% rename from packages/gotrue/lib/src/types/session.dart rename to packages/supabase_auth/lib/src/types/session.dart index 414776012..d08eeb384 100644 --- a/packages/gotrue/lib/src/types/session.dart +++ b/packages/supabase_auth/lib/src/types/session.dart @@ -1,6 +1,6 @@ -import 'package:gotrue/src/constants.dart'; -import 'package:gotrue/src/helper.dart'; -import 'package:gotrue/src/types/user.dart'; +import 'package:supabase_auth/src/constants.dart'; +import 'package:supabase_auth/src/helper.dart'; +import 'package:supabase_auth/src/types/user.dart'; import 'package:meta/meta.dart'; import 'package:supabase_common/supabase_common.dart'; diff --git a/packages/gotrue/lib/src/types/sign_out_reason.dart b/packages/supabase_auth/lib/src/types/sign_out_reason.dart similarity index 91% rename from packages/gotrue/lib/src/types/sign_out_reason.dart rename to packages/supabase_auth/lib/src/types/sign_out_reason.dart index 8703cc699..3e86315ed 100644 --- a/packages/gotrue/lib/src/types/sign_out_reason.dart +++ b/packages/supabase_auth/lib/src/types/sign_out_reason.dart @@ -4,7 +4,7 @@ /// explicit sign out from an involuntary one, such as an expired session, /// without inspecting error messages. enum SignOutReason { - /// The user explicitly signed out by calling [GoTrueClient.signOut]. + /// The user explicitly signed out by calling [AuthClient.signOut]. userInitiated, /// The session could no longer be refreshed because its refresh token was diff --git a/packages/gotrue/lib/src/types/types.dart b/packages/supabase_auth/lib/src/types/types.dart similarity index 99% rename from packages/gotrue/lib/src/types/types.dart rename to packages/supabase_auth/lib/src/types/types.dart index 9deb7b95b..a966c7165 100644 --- a/packages/gotrue/lib/src/types/types.dart +++ b/packages/supabase_auth/lib/src/types/types.dart @@ -20,7 +20,7 @@ enum AuthFlowType { implicit, pkce } /// OAuthProvider('custom:my-provider') /// ``` final class OAuthProvider { - /// The provider identifier sent to the GoTrue API. + /// The provider identifier sent to the Supabase Auth API. final String name; /// Creates an [OAuthProvider] with an arbitrary [name]. diff --git a/packages/gotrue/lib/src/types/user.dart b/packages/supabase_auth/lib/src/types/user.dart similarity index 99% rename from packages/gotrue/lib/src/types/user.dart rename to packages/supabase_auth/lib/src/types/user.dart index 6f6f2eaeb..d2e90edad 100644 --- a/packages/gotrue/lib/src/types/user.dart +++ b/packages/supabase_auth/lib/src/types/user.dart @@ -1,5 +1,5 @@ import 'package:collection/collection.dart'; -import 'package:gotrue/src/types/mfa.dart'; +import 'package:supabase_auth/src/types/mfa.dart'; import 'package:supabase_common/supabase_common.dart'; class User { diff --git a/packages/gotrue/lib/src/types/user_attributes.dart b/packages/supabase_auth/lib/src/types/user_attributes.dart similarity index 98% rename from packages/gotrue/lib/src/types/user_attributes.dart rename to packages/supabase_auth/lib/src/types/user_attributes.dart index 5f9d0f238..47e225444 100644 --- a/packages/gotrue/lib/src/types/user_attributes.dart +++ b/packages/supabase_auth/lib/src/types/user_attributes.dart @@ -86,7 +86,7 @@ class AdminUserAttributes extends UserAttributes { /// The `user_metadata` should be a JSON object that includes user-specific /// info, such as their first and last name. /// - /// Note: When using the GoTrueAdminApi and wanting to modify a user's + /// Note: When using the AuthAdminApi and wanting to modify a user's /// metadata, this attribute is used instead of UserAttributes data. final Map? userMetadata; diff --git a/packages/supabase_auth/lib/src/version.dart b/packages/supabase_auth/lib/src/version.dart new file mode 100644 index 000000000..7f2f1c7d4 --- /dev/null +++ b/packages/supabase_auth/lib/src/version.dart @@ -0,0 +1 @@ +const version = '3.0.0-dev.1'; diff --git a/packages/gotrue/lib/gotrue.dart b/packages/supabase_auth/lib/supabase_auth.dart similarity index 75% rename from packages/gotrue/lib/gotrue.dart rename to packages/supabase_auth/lib/supabase_auth.dart index 12c2c9afc..e7e25106b 100644 --- a/packages/gotrue/lib/gotrue.dart +++ b/packages/supabase_auth/lib/supabase_auth.dart @@ -1,21 +1,21 @@ -/// A dart client library for the GoTrue API (Supabase Auth). +/// A dart client library for Supabase Auth. library; export 'package:supabase_common/supabase_common.dart' show SupabaseApiException, SupabaseException; export 'src/constants.dart' hide Constants; -export 'src/gotrue_admin_api.dart'; -export 'src/gotrue_client.dart'; +export 'src/auth_admin_api.dart'; +export 'src/auth_client.dart'; export 'src/helper.dart' show decodeJwt, validateExp; export 'src/types/auth_exception.dart'; export 'src/types/auth_response.dart'; export 'src/types/auth_state.dart'; export 'src/types/custom_oauth_provider.dart'; export 'src/types/error_code.dart'; -export 'src/types/gotrue_async_storage.dart'; +export 'src/types/auth_async_storage.dart'; export 'src/types/jwt.dart'; -export 'src/gotrue_admin_passkey_api.dart'; +export 'src/auth_admin_passkey_api.dart'; export 'src/types/mfa.dart'; export 'src/types/passkey.dart'; export 'src/types/sign_out_reason.dart'; diff --git a/packages/gotrue/pubspec.yaml b/packages/supabase_auth/pubspec.yaml similarity index 85% rename from packages/gotrue/pubspec.yaml rename to packages/supabase_auth/pubspec.yaml index 48d2d532c..cf4e28586 100644 --- a/packages/gotrue/pubspec.yaml +++ b/packages/supabase_auth/pubspec.yaml @@ -1,8 +1,8 @@ -name: gotrue -description: A dart client library for the GoTrue API. -version: 2.27.1 +name: supabase_auth +description: A dart client library for Supabase Auth. +version: 3.0.0-dev.1 homepage: "https://supabase.com" -repository: "https://github.com/supabase/supabase-flutter/tree/main/packages/gotrue" +repository: "https://github.com/supabase/supabase-flutter/tree/main/packages/supabase_auth" issue_tracker: "https://github.com/supabase/supabase-flutter/issues" documentation: "https://supabase.com/docs/reference/dart/auth-signup" topics: diff --git a/packages/gotrue/test/admin_delete_user_test.dart b/packages/supabase_auth/test/admin_delete_user_test.dart similarity index 92% rename from packages/gotrue/test/admin_delete_user_test.dart rename to packages/supabase_auth/test/admin_delete_user_test.dart index 5dcecc651..0a4c01e80 100644 --- a/packages/gotrue/test/admin_delete_user_test.dart +++ b/packages/supabase_auth/test/admin_delete_user_test.dart @@ -1,6 +1,6 @@ import 'dart:convert'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:http/http.dart'; import 'package:test/test.dart'; @@ -18,11 +18,11 @@ void main() { const userId = 'ef507d02-ce6a-4b3a-a8a6-6f0e14740136'; late _CapturingHttpClient httpClient; - late GoTrueClient client; + late AuthClient client; setUp(() { httpClient = _CapturingHttpClient(); - client = GoTrueClient( + client = AuthClient( url: 'http://localhost:9999', httpClient: httpClient, ); diff --git a/packages/gotrue/test/admin_list_users_test.dart b/packages/supabase_auth/test/admin_list_users_test.dart similarity index 96% rename from packages/gotrue/test/admin_list_users_test.dart rename to packages/supabase_auth/test/admin_list_users_test.dart index 9883529be..410f9b628 100644 --- a/packages/gotrue/test/admin_list_users_test.dart +++ b/packages/supabase_auth/test/admin_list_users_test.dart @@ -1,6 +1,6 @@ import 'dart:convert'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:http/http.dart'; import 'package:test/test.dart'; @@ -49,7 +49,7 @@ class ListUsersMockClient extends BaseClient { } void main() { - GoTrueClient clientWith(ListUsersMockClient mockClient) => GoTrueClient( + AuthClient clientWith(ListUsersMockClient mockClient) => AuthClient( url: 'http://localhost:9999', httpClient: mockClient, ); diff --git a/packages/gotrue/test/admin_test.dart b/packages/supabase_auth/test/admin_test.dart similarity index 97% rename from packages/gotrue/test/admin_test.dart rename to packages/supabase_auth/test/admin_test.dart index 44febb805..1b0e4909a 100644 --- a/packages/gotrue/test/admin_test.dart +++ b/packages/supabase_auth/test/admin_test.dart @@ -1,7 +1,7 @@ import 'dart:math'; import 'package:dotenv/dotenv.dart'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:http/http.dart' as http; import 'package:test/test.dart'; @@ -11,9 +11,9 @@ void main() { final env = DotEnv(); env.load(); // Load env variables from .env file - final gotrueUrl = env['GOTRUE_URL'] ?? localStackAuthUrl; + final authUrl = getAuthUrl(env); - late GoTrueClient client; + late AuthClient client; setUp(() async { final response = await http.post( @@ -26,8 +26,8 @@ void main() { if (response.body.isNotEmpty) throw response.body; - client = GoTrueClient( - url: gotrueUrl, + client = AuthClient( + url: authUrl, headers: { 'Authorization': 'Bearer ${getServiceRoleToken(env)}', 'apikey': getServiceRoleToken(env), diff --git a/packages/gotrue/test/client_test.dart b/packages/supabase_auth/test/client_test.dart similarity index 95% rename from packages/gotrue/test/client_test.dart rename to packages/supabase_auth/test/client_test.dart index 0d72de277..3829dcd94 100644 --- a/packages/gotrue/test/client_test.dart +++ b/packages/supabase_auth/test/client_test.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:dotenv/dotenv.dart'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:http/http.dart' as http; import 'package:http/http.dart'; import 'package:test/test.dart'; @@ -14,15 +14,15 @@ void main() { env.load(); // Load env variables from .env file - final gotrueUrl = env['GOTRUE_URL'] ?? localStackAuthUrl; - final anonToken = env['GOTRUE_TOKEN'] ?? getAnonToken(env); + final authUrl = getAuthUrl(env); + final anonToken = getAnonToken(env); late String newEmail; late String newPhone; group('Client with default http client', () { - late GoTrueClient client; - late GoTrueClient adminClient; - late GoTrueClient clientWithAuthConfirmOff; + late AuthClient client; + late AuthClient adminClient; + late AuthClient clientWithAuthConfirmOff; setUp(() async { final response = await http.post( @@ -42,15 +42,15 @@ void main() { final asyncStorage = TestAsyncStorage(); - client = GoTrueClient( - url: gotrueUrl, + client = AuthClient( + url: authUrl, headers: {'Authorization': 'Bearer $anonToken', 'apikey': anonToken}, asyncStorage: asyncStorage, flowType: AuthFlowType.implicit, ); - adminClient = GoTrueClient( - url: gotrueUrl, + adminClient = AuthClient( + url: authUrl, headers: { 'Authorization': 'Bearer ${getServiceRoleToken(env)}', 'apikey': getServiceRoleToken(env), @@ -58,8 +58,8 @@ void main() { asyncStorage: asyncStorage, ); - clientWithAuthConfirmOff = GoTrueClient( - url: gotrueUrl, + clientWithAuthConfirmOff = AuthClient( + url: authUrl, httpClient: NoEmailConfirmationHttpClient(), headers: {'Authorization': 'Bearer $anonToken', 'apikey': anonToken}, asyncStorage: asyncStorage, @@ -284,8 +284,8 @@ void main() { final refreshToken = client.currentSession?.refreshToken ?? ''; expect(refreshToken, isNotEmpty); - final newClient = GoTrueClient( - url: gotrueUrl, + final newClient = AuthClient( + url: authUrl, headers: {'apikey': anonToken}, ); @@ -317,8 +317,8 @@ void main() { expect(refreshToken, isNotEmpty); expect(accessToken, isNotEmpty); - final newClient = GoTrueClient( - url: gotrueUrl, + final newClient = AuthClient( + url: authUrl, headers: {'apikey': anonToken}, ); @@ -360,8 +360,8 @@ void main() { 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyIiwiZXhwIjoxf' 'Q.AAAA'; - final newClient = GoTrueClient( - url: gotrueUrl, + final newClient = AuthClient( + url: authUrl, headers: {'apikey': anonToken}, ); @@ -411,8 +411,8 @@ void main() { final refreshToken = client.currentSession?.refreshToken ?? ''; expect(refreshToken, isNotEmpty); - final newClient = GoTrueClient( - url: gotrueUrl, + final newClient = AuthClient( + url: authUrl, headers: {'apikey': anonToken}, ); @@ -513,7 +513,8 @@ void main() { ); expect( response.url, - '$gotrueUrl/authorize?provider=google&redirect_to=https%3A%2F%2Fsupabase.com', + '$authUrl/authorize?provider=google' + '&redirect_to=https%3A%2F%2Fsupabase.com', ); expect(response.provider, OAuthProvider.google); }); @@ -557,8 +558,8 @@ void main() { test('token refresh calls are bundled', () async { final httpClient = RetryTestHttpClient(); - final bundledClient = GoTrueClient( - url: gotrueUrl, + final bundledClient = AuthClient( + url: authUrl, headers: {'Authorization': 'Bearer $anonToken', 'apikey': anonToken}, asyncStorage: TestAsyncStorage(), httpClient: httpClient, @@ -646,10 +647,10 @@ void main() { }); group('Client with custom http client', () { - late GoTrueClient client; + late AuthClient client; setUpAll(() { - client = GoTrueClient(url: gotrueUrl, httpClient: CustomHttpClient()); + client = AuthClient(url: authUrl, httpClient: CustomHttpClient()); }); test('signIn()', () async { @@ -677,12 +678,12 @@ void main() { }); group('Client that fails on the first 3 requests', () { - late GoTrueClient client; + late AuthClient client; late RetryTestHttpClient httpClient; setUpAll(() { httpClient = RetryTestHttpClient(); - client = GoTrueClient(url: gotrueUrl, httpClient: httpClient); + client = AuthClient(url: authUrl, httpClient: httpClient); }); test('Session recovery succeeds after retries', () async { @@ -716,11 +717,11 @@ void main() { }); group('PKCE enabled client', () { - late GoTrueClient client; + late AuthClient client; setUpAll(() { - client = GoTrueClient( - url: gotrueUrl, + client = AuthClient( + url: authUrl, flowType: AuthFlowType.pkce, asyncStorage: TestAsyncStorage(), ); @@ -765,8 +766,8 @@ void main() { test( 'getSessionFromUrl handles implicit tokens in the fragment', () async { - final pkceClient = GoTrueClient( - url: gotrueUrl, + final pkceClient = AuthClient( + url: authUrl, flowType: AuthFlowType.pkce, asyncStorage: TestAsyncStorage(), httpClient: MockedHttpClient({ @@ -823,8 +824,8 @@ void main() { Uri.parse('$localStackMailUrl/api/v1/messages'), ); - final pkceClient = GoTrueClient( - url: gotrueUrl, + final pkceClient = AuthClient( + url: authUrl, headers: { 'Authorization': 'Bearer $anonToken', 'apikey': anonToken, @@ -854,7 +855,7 @@ void main() { ); expect(updateResponse.user?.newEmail, updatedEmail); - final code = await _pkceCodeFromEmailChange(gotrueUrl, updatedEmail); + final code = await _pkceCodeFromEmailChange(authUrl, updatedEmail); final exchanged = await pkceClient.exchangeCodeForSession(code); expect(exchanged.session.user.email, updatedEmail); @@ -878,12 +879,12 @@ void main() { group('Recovering an already refreshed session', () { late SingleUseRefreshTokenHttpClient httpClient; - late GoTrueClient client; + late AuthClient client; setUp(() { httpClient = SingleUseRefreshTokenHttpClient(); - client = GoTrueClient( - url: gotrueUrl, + client = AuthClient( + url: authUrl, headers: {'Authorization': 'Bearer $anonToken', 'apikey': anonToken}, asyncStorage: TestAsyncStorage(), httpClient: httpClient, @@ -946,7 +947,7 @@ void main() { /// [toEmail] via the local Mailpit server, follows it, and returns the PKCE /// `code` from the redirect so it can be passed to [exchangeCodeForSession]. Future _pkceCodeFromEmailChange( - String gotrueUrl, + String authUrl, String toEmail, ) async { Map? message; @@ -979,7 +980,7 @@ Future _pkceCodeFromEmailChange( // The link is followed by the text of the mail, so it ends at the first // whitespace or wrapping bracket. final link = RegExp( - '${RegExp.escape(gotrueUrl)}' + '${RegExp.escape(authUrl)}' r'/verify\?[^\s)>]+', ).firstMatch(message!['Text'] as String)!.group(0)!; diff --git a/packages/gotrue/test/custom_http_client.dart b/packages/supabase_auth/test/custom_http_client.dart similarity index 100% rename from packages/gotrue/test/custom_http_client.dart rename to packages/supabase_auth/test/custom_http_client.dart diff --git a/packages/gotrue/test/custom_oauth_provider_test.dart b/packages/supabase_auth/test/custom_oauth_provider_test.dart similarity index 92% rename from packages/gotrue/test/custom_oauth_provider_test.dart rename to packages/supabase_auth/test/custom_oauth_provider_test.dart index 5e2844f2b..3b30905b8 100644 --- a/packages/gotrue/test/custom_oauth_provider_test.dart +++ b/packages/supabase_auth/test/custom_oauth_provider_test.dart @@ -7,7 +7,7 @@ import 'dart:io'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:test/test.dart'; import 'utils.dart'; @@ -22,9 +22,9 @@ void main() { test( 'getOAuthSignInUrl builds correct URL for a custom provider', () async { - const gotrueUrl = localStackAuthUrl; - final client = GoTrueClient( - url: gotrueUrl, + const authUrl = localStackAuthUrl; + final client = AuthClient( + url: authUrl, headers: {}, flowType: AuthFlowType.implicit, ); @@ -33,7 +33,7 @@ void main() { final response = await client.getOAuthSignInUrl(provider: provider); expect(response.provider, provider); - expect(response.url, startsWith('$gotrueUrl/authorize?')); + expect(response.url, startsWith('$authUrl/authorize?')); final uri = Uri.parse(response.url); expect(uri.queryParameters['provider'], 'custom:my-provider'); diff --git a/packages/gotrue/test/custom_providers_test.dart b/packages/supabase_auth/test/custom_providers_test.dart similarity index 98% rename from packages/gotrue/test/custom_providers_test.dart rename to packages/supabase_auth/test/custom_providers_test.dart index 173f2a13b..4657a5378 100644 --- a/packages/gotrue/test/custom_providers_test.dart +++ b/packages/supabase_auth/test/custom_providers_test.dart @@ -1,4 +1,4 @@ -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:test/test.dart'; void main() { diff --git a/packages/gotrue/test/fetch_test.dart b/packages/supabase_auth/test/fetch_test.dart similarity index 90% rename from packages/gotrue/test/fetch_test.dart rename to packages/supabase_auth/test/fetch_test.dart index a32cd13a8..dce8a07ed 100644 --- a/packages/gotrue/test/fetch_test.dart +++ b/packages/supabase_auth/test/fetch_test.dart @@ -1,9 +1,9 @@ import 'dart:convert'; -import 'package:gotrue/gotrue.dart'; -import 'package:gotrue/src/constants.dart'; -import 'package:gotrue/src/fetch.dart'; -import 'package:gotrue/src/types/fetch_options.dart'; +import 'package:supabase_auth/supabase_auth.dart'; +import 'package:supabase_auth/src/constants.dart'; +import 'package:supabase_auth/src/fetch.dart'; +import 'package:supabase_auth/src/types/fetch_options.dart'; import 'package:http/http.dart'; import 'package:supabase_common/supabase_common.dart'; import 'package:test/test.dart'; @@ -27,7 +27,7 @@ class RequestCapturingHttpClient extends BaseClient { const String _mockUrl = 'http://localhost'; void main() { - group('GotrueFetch', () { + group('AuthFetch', () { test('reads the error code without an API version header', () async { final client = MockedHttpClient( { @@ -85,11 +85,11 @@ void main() { }); }); - group('GotrueFetch API version header', () { + group('AuthFetch API version header', () { test('sends the supported API version', () async { final client = RequestCapturingHttpClient(); - await GotrueFetch(client).request(_mockUrl, HttpMethod.get); + await AuthFetch(client).request(_mockUrl, HttpMethod.get); expect( client.lastHeaders?[Constants.apiVersionHeaderName], @@ -100,10 +100,10 @@ void main() { test('overrides a caller supplied API version', () async { final client = RequestCapturingHttpClient(); - await GotrueFetch(client).request( + await AuthFetch(client).request( _mockUrl, HttpMethod.get, - options: GotrueRequestOptions( + options: AuthRequestOptions( headers: {Constants.apiVersionHeaderName: '2023-01-01'}, ), ); @@ -115,7 +115,7 @@ void main() { }); }); - group('GotrueFetch server errors', () { + group('AuthFetch server errors', () { test('preserves the server sent message on a JSON 5xx body', () async { final client = MockedHttpClient( { @@ -239,7 +239,7 @@ void main() { ); await expectLater( - GotrueFetch(client).request(_mockUrl, HttpMethod.get), + AuthFetch(client).request(_mockUrl, HttpMethod.get), throwsA(isA()), ); }); @@ -252,7 +252,7 @@ Future _expectRetryableFetch( required int statusCode, }) async { await expectLater( - GotrueFetch(client).request(_mockUrl, HttpMethod.get), + AuthFetch(client).request(_mockUrl, HttpMethod.get), throwsA( isA() .having((e) => e.message, 'message', message) @@ -263,7 +263,7 @@ Future _expectRetryableFetch( Future _expectUncodedApiException(Client client) async { await expectLater( - GotrueFetch(client).request(_mockUrl, HttpMethod.get), + AuthFetch(client).request(_mockUrl, HttpMethod.get), throwsA( isA() .having((e) => e.errorCode, 'errorCode', isNull) @@ -273,7 +273,7 @@ Future _expectUncodedApiException(Client client) async { } Future _testFetchRequest(Client client) async { - final GotrueFetch fetch = GotrueFetch(client); + final AuthFetch fetch = AuthFetch(client); await expectLater( fetch.request(_mockUrl, HttpMethod.get), throwsA( diff --git a/packages/gotrue/test/get_claims_test.dart b/packages/supabase_auth/test/get_claims_test.dart similarity index 97% rename from packages/gotrue/test/get_claims_test.dart rename to packages/supabase_auth/test/get_claims_test.dart index 79df2acfb..291a19e2d 100644 --- a/packages/gotrue/test/get_claims_test.dart +++ b/packages/supabase_auth/test/get_claims_test.dart @@ -1,8 +1,8 @@ import 'dart:convert'; import 'package:dotenv/dotenv.dart'; -import 'package:gotrue/gotrue.dart'; -import 'package:gotrue/src/helper.dart'; +import 'package:supabase_auth/supabase_auth.dart'; +import 'package:supabase_auth/src/helper.dart'; import 'package:http/http.dart' as http; import 'package:test/test.dart'; @@ -12,11 +12,11 @@ void main() { final env = DotEnv(); env.load(); - final gotrueUrl = env['GOTRUE_URL'] ?? localStackAuthUrl; - final anonToken = env['GOTRUE_TOKEN'] ?? getAnonToken(env); + final authUrl = getAuthUrl(env); + final anonToken = getAnonToken(env); group('getClaims', () { - late GoTrueClient client; + late AuthClient client; late String newEmail; setUp(() async { @@ -36,8 +36,8 @@ void main() { final asyncStorage = TestAsyncStorage(); - client = GoTrueClient( - url: gotrueUrl, + client = AuthClient( + url: authUrl, headers: { 'Authorization': 'Bearer $anonToken', 'apikey': anonToken, @@ -218,13 +218,13 @@ void main() { }); group('getClaims with asymmetric JWTs', () { - late GoTrueClient client; + late AuthClient client; setUp(() { final asyncStorage = TestAsyncStorage(); - client = GoTrueClient( - url: gotrueUrl, + client = AuthClient( + url: authUrl, headers: { 'Authorization': 'Bearer $anonToken', 'apikey': anonToken, diff --git a/packages/gotrue/test/get_session_test.dart b/packages/supabase_auth/test/get_session_test.dart similarity index 91% rename from packages/gotrue/test/get_session_test.dart rename to packages/supabase_auth/test/get_session_test.dart index b6ba7d6d5..c25097615 100644 --- a/packages/gotrue/test/get_session_test.dart +++ b/packages/supabase_auth/test/get_session_test.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'dart:convert'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:http/http.dart'; import 'package:test/test.dart'; @@ -28,13 +28,13 @@ class RetryableFailureHttpClient extends BaseClient { } void main() { - const gotrueUrl = 'http://localhost:9999'; + const authUrl = 'http://localhost:9999'; group('getSession', () { test('returns null when there is no session', () async { final httpClient = RefreshTokenTrackingHttpClient(); - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, asyncStorage: TestAsyncStorage(), httpClient: httpClient, autoRefreshToken: false, @@ -48,8 +48,8 @@ void main() { 'returns the current session without a request when not expired', () async { final httpClient = RefreshTokenTrackingHttpClient(); - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, asyncStorage: TestAsyncStorage(), httpClient: httpClient, autoRefreshToken: false, @@ -67,8 +67,8 @@ void main() { test('refreshes an expired session on demand', () async { final httpClient = RefreshTokenTrackingHttpClient(); - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, asyncStorage: TestAsyncStorage(), httpClient: httpClient, autoRefreshToken: false, @@ -87,8 +87,8 @@ void main() { final httpClient = RefreshTokenTrackingHttpClient( responseDelay: Duration(milliseconds: 50), ); - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, asyncStorage: TestAsyncStorage(), httpClient: httpClient, autoRefreshToken: false, @@ -111,8 +111,8 @@ void main() { }); test('throws when an expired session cannot be refreshed', () async { - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, asyncStorage: TestAsyncStorage(), httpClient: InvalidRefreshTokenHttpClient(), ); @@ -138,8 +138,8 @@ void main() { 'token has not actually expired', () async { final httpClient = RetryableFailureHttpClient(); - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, asyncStorage: TestAsyncStorage(), httpClient: httpClient, autoRefreshToken: false, diff --git a/packages/gotrue/test/header_isolation_test.dart b/packages/supabase_auth/test/header_isolation_test.dart similarity index 93% rename from packages/gotrue/test/header_isolation_test.dart rename to packages/supabase_auth/test/header_isolation_test.dart index bffdf7890..ce9f52908 100644 --- a/packages/gotrue/test/header_isolation_test.dart +++ b/packages/supabase_auth/test/header_isolation_test.dart @@ -1,6 +1,6 @@ import 'dart:convert'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:http/http.dart'; import 'package:test/test.dart'; @@ -36,13 +36,13 @@ class _RecordingHttpClient extends BaseClient { } void main() { - group('GoTrueClient header isolation', () { + group('AuthClient header isolation', () { late _RecordingHttpClient http; - late GoTrueClient client; + late AuthClient client; setUp(() { http = _RecordingHttpClient(); - client = GoTrueClient( + client = AuthClient( url: 'http://localhost', headers: {'apikey': 'anon-key'}, httpClient: http, diff --git a/packages/gotrue/test/jwk_test.dart b/packages/supabase_auth/test/jwk_test.dart similarity index 95% rename from packages/gotrue/test/jwk_test.dart rename to packages/supabase_auth/test/jwk_test.dart index d8360e13f..5773f72ec 100644 --- a/packages/gotrue/test/jwk_test.dart +++ b/packages/supabase_auth/test/jwk_test.dart @@ -1,5 +1,5 @@ import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart'; -import 'package:gotrue/src/types/jwt.dart'; +import 'package:supabase_auth/src/types/jwt.dart'; import 'package:test/test.dart'; void main() { diff --git a/packages/gotrue/test/mfa_challenge_mock_test.dart b/packages/supabase_auth/test/mfa_challenge_mock_test.dart similarity index 94% rename from packages/gotrue/test/mfa_challenge_mock_test.dart rename to packages/supabase_auth/test/mfa_challenge_mock_test.dart index ee340051d..5336b131b 100644 --- a/packages/gotrue/test/mfa_challenge_mock_test.dart +++ b/packages/supabase_auth/test/mfa_challenge_mock_test.dart @@ -1,6 +1,6 @@ import 'dart:convert'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:http/http.dart'; import 'package:test/test.dart'; @@ -38,12 +38,12 @@ class MfaChallengeMockClient extends BaseClient { } void main() { - late GoTrueClient client; + late AuthClient client; late MfaChallengeMockClient mockClient; setUp(() { mockClient = MfaChallengeMockClient(); - client = GoTrueClient( + client = AuthClient( url: 'https://example.com', httpClient: mockClient, asyncStorage: TestAsyncStorage(), diff --git a/packages/gotrue/test/mfa_enroll_test.dart b/packages/supabase_auth/test/mfa_enroll_test.dart similarity index 94% rename from packages/gotrue/test/mfa_enroll_test.dart rename to packages/supabase_auth/test/mfa_enroll_test.dart index 97a16008a..6f0ff375c 100644 --- a/packages/gotrue/test/mfa_enroll_test.dart +++ b/packages/supabase_auth/test/mfa_enroll_test.dart @@ -1,6 +1,6 @@ import 'dart:convert'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:http/http.dart'; import 'package:test/test.dart'; @@ -37,13 +37,13 @@ class _RecordingHttpClient extends BaseClient { } void main() { - group('GoTrueClient.mfa.enroll', () { + group('AuthClient.mfa.enroll', () { late _RecordingHttpClient http; - late GoTrueClient client; + late AuthClient client; setUp(() { http = _RecordingHttpClient(); - client = GoTrueClient( + client = AuthClient( url: 'http://localhost', headers: {'apikey': 'anon-key'}, httpClient: http, diff --git a/packages/gotrue/test/mocks/otp_mock_client.dart b/packages/supabase_auth/test/mocks/otp_mock_client.dart similarity index 100% rename from packages/gotrue/test/mocks/otp_mock_client.dart rename to packages/supabase_auth/test/mocks/otp_mock_client.dart diff --git a/packages/gotrue/test/mocks/passkey_mock_client.dart b/packages/supabase_auth/test/mocks/passkey_mock_client.dart similarity index 100% rename from packages/gotrue/test/mocks/passkey_mock_client.dart rename to packages/supabase_auth/test/mocks/passkey_mock_client.dart diff --git a/packages/gotrue/test/mocks/web3_mock_client.dart b/packages/supabase_auth/test/mocks/web3_mock_client.dart similarity index 100% rename from packages/gotrue/test/mocks/web3_mock_client.dart rename to packages/supabase_auth/test/mocks/web3_mock_client.dart diff --git a/packages/gotrue/test/otp_mock_test.dart b/packages/supabase_auth/test/otp_mock_test.dart similarity index 96% rename from packages/gotrue/test/otp_mock_test.dart rename to packages/supabase_auth/test/otp_mock_test.dart index 3e4361b60..9ca56657f 100644 --- a/packages/gotrue/test/otp_mock_test.dart +++ b/packages/supabase_auth/test/otp_mock_test.dart @@ -1,5 +1,5 @@ -import 'package:gotrue/gotrue.dart'; -import 'package:gotrue/src/constants.dart' show Constants; +import 'package:supabase_auth/supabase_auth.dart'; +import 'package:supabase_auth/src/constants.dart' show Constants; import 'package:test/test.dart'; import 'mocks/otp_mock_client.dart'; @@ -12,7 +12,7 @@ void main() { const testPassword = 'password123'; group('Basic OTP and Phone Authentication', () { - late GoTrueClient client; + late AuthClient client; late OtpMockClient mockClient; late TestAsyncStorage asyncStorage; @@ -25,7 +25,7 @@ void main() { asyncStorage = TestAsyncStorage(); - client = GoTrueClient( + client = AuthClient( url: 'https://example.com', httpClient: mockClient, asyncStorage: asyncStorage, @@ -372,7 +372,7 @@ void main() { }); test('resend() with email in implicit flow omits code challenge', () async { - final implicitClient = GoTrueClient( + final implicitClient = AuthClient( url: 'https://example.com', httpClient: mockClient, asyncStorage: asyncStorage, @@ -453,7 +453,7 @@ void main() { test( 'updateUser() with email in implicit flow omits code challenge', () async { - final implicitClient = GoTrueClient( + final implicitClient = AuthClient( url: 'https://example.com', httpClient: mockClient, asyncStorage: asyncStorage, @@ -507,7 +507,7 @@ void main() { group('OTP Edge Cases and Error Conditions', () { test('verifyOTP() with invalid OTP throws AuthException', () async { - final client = GoTrueClient( + final client = AuthClient( url: 'https://example.com', httpClient: ErrorMockClient(), asyncStorage: TestAsyncStorage(), @@ -532,7 +532,7 @@ void main() { test( 'signInWithPassword() with phone and wrong password throws AuthException', () async { - final client = GoTrueClient( + final client = AuthClient( url: 'https://example.com', httpClient: ConditionalErrorClient(), asyncStorage: TestAsyncStorage(), @@ -555,7 +555,7 @@ void main() { ); test('signUp() with existing phone number throws AuthException', () async { - final client = GoTrueClient( + final client = AuthClient( url: 'https://example.com', httpClient: ConditionalErrorClient(), asyncStorage: TestAsyncStorage(), @@ -579,7 +579,7 @@ void main() { test( 'signInWithOtp() with empty response completes successfully', () async { - final client = GoTrueClient( + final client = AuthClient( url: 'https://example.com', httpClient: EmptyResponseClient(), asyncStorage: TestAsyncStorage(), @@ -592,7 +592,7 @@ void main() { test( 'verifyOTP() with neither email nor phone throws assertion error', () async { - final client = GoTrueClient( + final client = AuthClient( url: 'https://example.com', httpClient: EmptyResponseClient(), asyncStorage: TestAsyncStorage(), @@ -609,7 +609,7 @@ void main() { ); test('verifyOTP() with expired token throws AuthException', () async { - final client = GoTrueClient( + final client = AuthClient( url: 'https://example.com', httpClient: ConditionalErrorClient(), asyncStorage: TestAsyncStorage(), @@ -632,7 +632,7 @@ void main() { }); test('resend() with both email and phone throws assertion error', () async { - final client = GoTrueClient( + final client = AuthClient( url: 'https://example.com', httpClient: EmptyResponseClient(), asyncStorage: TestAsyncStorage(), @@ -649,7 +649,7 @@ void main() { }); test('signUp() without email or phone throws exception', () async { - final client = GoTrueClient( + final client = AuthClient( url: 'https://example.com', httpClient: EmptyResponseClient(), asyncStorage: TestAsyncStorage(), @@ -664,7 +664,7 @@ void main() { test( 'signInWithPassword() without email or phone throws exception', () async { - final client = GoTrueClient( + final client = AuthClient( url: 'https://example.com', httpClient: EmptyResponseClient(), asyncStorage: TestAsyncStorage(), @@ -684,7 +684,7 @@ void main() { ); test('empty response on server error', () async { - final client = GoTrueClient( + final client = AuthClient( url: 'https://example.com', httpClient: CustomServerErrorClient(), asyncStorage: TestAsyncStorage(), @@ -705,7 +705,7 @@ void main() { test( 'response with null session returns the intermediate response', () async { - final client = GoTrueClient( + final client = AuthClient( url: 'https://example.com', httpClient: NullSessionClient(), asyncStorage: TestAsyncStorage(), @@ -728,7 +728,7 @@ void main() { }); group('Channel Types Tests', () { - late GoTrueClient client; + late AuthClient client; late ChannelMockClient mockClient; late TestAsyncStorage asyncStorage; @@ -736,7 +736,7 @@ void main() { mockClient = ChannelMockClient(); asyncStorage = TestAsyncStorage(); - client = GoTrueClient( + client = AuthClient( url: 'https://example.com', httpClient: mockClient, asyncStorage: asyncStorage, @@ -873,7 +873,7 @@ void main() { } /// The first auth event of [client] that isn't the initial session. -Future _nextEvent(GoTrueClient client) => client +Future _nextEvent(AuthClient client) => client .onAuthStateChange .firstWhere((state) => state.event != AuthChangeEvent.initialSession) .then((state) => state.event); diff --git a/packages/gotrue/test/passkey_test.dart b/packages/supabase_auth/test/passkey_test.dart similarity index 97% rename from packages/gotrue/test/passkey_test.dart rename to packages/supabase_auth/test/passkey_test.dart index d45bd0d7a..a2e8e0f72 100644 --- a/packages/gotrue/test/passkey_test.dart +++ b/packages/supabase_auth/test/passkey_test.dart @@ -1,4 +1,4 @@ -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:test/test.dart'; import 'mocks/otp_mock_client.dart'; @@ -8,11 +8,11 @@ import 'utils.dart'; void main() { group('Passkey API with mocked server', () { late PasskeyMockClient mockClient; - late GoTrueClient client; + late AuthClient client; setUp(() { mockClient = PasskeyMockClient(); - client = GoTrueClient( + client = AuthClient( url: 'http://localhost:9999', httpClient: mockClient, autoRefreshToken: false, @@ -223,7 +223,7 @@ void main() { }); test('list throws FormatException when response is not a list', () async { - final malformedClient = GoTrueClient( + final malformedClient = AuthClient( url: 'http://localhost:9999', httpClient: EmptyResponseClient(), autoRefreshToken: false, @@ -307,7 +307,7 @@ void main() { test( 'listPasskeys throws FormatException when response is not a list', () async { - final malformedClient = GoTrueClient( + final malformedClient = AuthClient( url: 'http://localhost:9999', httpClient: EmptyResponseClient(), autoRefreshToken: false, @@ -326,7 +326,7 @@ void main() { }); test('throws AuthApiException when passkeys are disabled', () async { - final disabledClient = GoTrueClient( + final disabledClient = AuthClient( url: 'http://localhost:9999', httpClient: PasskeyDisabledMockClient(), autoRefreshToken: false, diff --git a/packages/gotrue/test/provider_test.dart b/packages/supabase_auth/test/provider_test.dart similarity index 93% rename from packages/gotrue/test/provider_test.dart rename to packages/supabase_auth/test/provider_test.dart index e632f69b1..d1947454c 100644 --- a/packages/gotrue/test/provider_test.dart +++ b/packages/supabase_auth/test/provider_test.dart @@ -1,5 +1,5 @@ import 'package:dotenv/dotenv.dart'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:http/http.dart' as http; import 'package:test/test.dart'; @@ -10,15 +10,15 @@ void main() { env.load(); // Load env variables from .env file - final gotrueUrl = env['GOTRUE_URL'] ?? localStackAuthUrl; - final anonToken = env['GOTRUE_TOKEN'] ?? getAnonToken(env); + final authUrl = getAuthUrl(env); + final anonToken = getAnonToken(env); - late GoTrueClient client; + late AuthClient client; late Session session; setUp(() async { - client = GoTrueClient( - url: gotrueUrl, + client = AuthClient( + url: authUrl, headers: { 'Authorization': 'Bearer $anonToken', 'apikey': anonToken, @@ -33,7 +33,7 @@ void main() { ); final url = response.url; final provider = response.provider; - expect(url, startsWith('$gotrueUrl/authorize?provider=google')); + expect(url, startsWith('$authUrl/authorize?provider=google')); expect(provider, OAuthProvider.google); }); @@ -48,7 +48,7 @@ void main() { expect( url, startsWith( - '$gotrueUrl/authorize?provider=github&scopes=repo&redirect_to=redirectToURL', + '$authUrl/authorize?provider=github&scopes=repo&redirect_to=redirectToURL', ), ); expect(provider, OAuthProvider.github); @@ -61,7 +61,7 @@ void main() { expect( response.url, startsWith( - '$gotrueUrl/authorize?provider=custom%3Amy-oidc-provider', + '$authUrl/authorize?provider=custom%3Amy-oidc-provider', ), ); expect(response.provider, OAuthProvider('custom:my-oidc-provider')); diff --git a/packages/gotrue/test/refresh_token_race_test.dart b/packages/supabase_auth/test/refresh_token_race_test.dart similarity index 96% rename from packages/gotrue/test/refresh_token_race_test.dart rename to packages/supabase_auth/test/refresh_token_race_test.dart index a4068a180..b90ce47d6 100644 --- a/packages/gotrue/test/refresh_token_race_test.dart +++ b/packages/supabase_auth/test/refresh_token_race_test.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'dart:convert'; import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:http/http.dart'; import 'package:test/test.dart'; @@ -173,15 +173,15 @@ String createExpiredSessionForUser1() { } void main() { - const gotrueUrl = 'http://localhost:9999'; + const authUrl = 'http://localhost:9999'; group('Refresh token race condition fix tests', () { test( 'concurrent recoverSession calls are bundled (protected by completer)', () async { final httpClient = RefreshTokenTrackingHttpClient(); - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, asyncStorage: TestAsyncStorage(), httpClient: httpClient, ); @@ -216,8 +216,8 @@ void main() { 'session', () async { final httpClient = RefreshTokenTrackingHttpClient(); - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, asyncStorage: TestAsyncStorage(), httpClient: httpClient, ); @@ -261,8 +261,8 @@ void main() { holdFirstRequest: holdFirstRequest, ); - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, asyncStorage: TestAsyncStorage(), httpClient: httpClient, autoRefreshToken: true, @@ -303,8 +303,8 @@ void main() { responseDelay: Duration(milliseconds: 50), ); - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, asyncStorage: TestAsyncStorage(), httpClient: httpClient, autoRefreshToken: true, @@ -343,8 +343,8 @@ void main() { () async { final httpClient = RefreshTokenTrackingHttpClient(); - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, asyncStorage: TestAsyncStorage(), httpClient: httpClient, autoRefreshToken: true, @@ -389,8 +389,8 @@ void main() { 'FIXED: signedOut event is NOT emitted when session is still valid', () async { final httpClient = RefreshTokenTrackingHttpClient(); - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, asyncStorage: TestAsyncStorage(), httpClient: httpClient, ); @@ -445,8 +445,8 @@ void main() { responseDelay: Duration(milliseconds: 50), ); - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, asyncStorage: TestAsyncStorage(), httpClient: httpClient, autoRefreshToken: true, @@ -488,8 +488,8 @@ void main() { 'already valid', () async { final httpClient = RefreshTokenTrackingHttpClient(); - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, asyncStorage: TestAsyncStorage(), httpClient: httpClient, ); @@ -519,8 +519,8 @@ void main() { test('signedOut event carries the sign-out reason on an invalid refresh ' 'token', () async { - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, asyncStorage: TestAsyncStorage(), httpClient: InvalidRefreshTokenHttpClient(), ); @@ -562,8 +562,8 @@ void main() { test('signedOut event reports a userInitiated reason on an explicit ' 'signOut', () async { final httpClient = RefreshTokenTrackingHttpClient(); - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, asyncStorage: TestAsyncStorage(), httpClient: httpClient, ); @@ -601,8 +601,8 @@ void main() { // Force the refresh to fail by pre-consuming the persisted refresh // token. httpClient.markTokenAsUsed('-yeS4omysFs9tpUYBws9Rg'); - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, asyncStorage: TestAsyncStorage(), httpClient: httpClient, ); @@ -628,8 +628,8 @@ void main() { test( 'recoverSession emits a single error for an expired session', () async { - final client = GoTrueClient( - url: gotrueUrl, + final client = AuthClient( + url: authUrl, asyncStorage: TestAsyncStorage(), autoRefreshToken: false, httpClient: RefreshTokenTrackingHttpClient(), diff --git a/packages/gotrue/test/src/gotrue_admin_custom_providers_api_test.dart b/packages/supabase_auth/test/src/auth_admin_custom_providers_api_test.dart similarity index 97% rename from packages/gotrue/test/src/gotrue_admin_custom_providers_api_test.dart rename to packages/supabase_auth/test/src/auth_admin_custom_providers_api_test.dart index ad00d2f9f..2d7b71f49 100644 --- a/packages/gotrue/test/src/gotrue_admin_custom_providers_api_test.dart +++ b/packages/supabase_auth/test/src/auth_admin_custom_providers_api_test.dart @@ -1,5 +1,5 @@ import 'package:dotenv/dotenv.dart'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:http/http.dart' as http; import 'package:test/test.dart'; @@ -10,10 +10,10 @@ void main() { env.load(); // Load env variables from .env file - final gotrueUrl = env['GOTRUE_URL'] ?? localStackAuthUrl; + final authUrl = getAuthUrl(env); final serviceRoleToken = getServiceRoleToken(env); - late GoTrueClient client; + late AuthClient client; // The reset routine does not clear custom OAuth providers, so every test // uses a unique identifier and removes the provider it created. @@ -50,8 +50,8 @@ void main() { ); if (response.body.isNotEmpty) throw response.body; - client = GoTrueClient( - url: gotrueUrl, + client = AuthClient( + url: authUrl, headers: { 'Authorization': 'Bearer $serviceRoleToken', 'apikey': serviceRoleToken, diff --git a/packages/gotrue/test/src/gotrue_admin_mfa_api_test.dart b/packages/supabase_auth/test/src/auth_admin_mfa_api_test.dart similarity index 88% rename from packages/gotrue/test/src/gotrue_admin_mfa_api_test.dart rename to packages/supabase_auth/test/src/auth_admin_mfa_api_test.dart index 5dd2ba75f..14cb9bf0e 100644 --- a/packages/gotrue/test/src/gotrue_admin_mfa_api_test.dart +++ b/packages/supabase_auth/test/src/auth_admin_mfa_api_test.dart @@ -1,5 +1,5 @@ import 'package:dotenv/dotenv.dart'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:http/http.dart' as http; import 'package:test/test.dart'; @@ -10,10 +10,10 @@ void main() { env.load(); // Load env variables from .env file - final gotrueUrl = env['GOTRUE_URL'] ?? localStackAuthUrl; + final authUrl = getAuthUrl(env); final serviceRoleToken = getServiceRoleToken(env); - late GoTrueClient client; + late AuthClient client; setUp(() async { final response = await http.post( @@ -26,8 +26,8 @@ void main() { ); if (response.body.isNotEmpty) throw response.body; - client = GoTrueClient( - url: gotrueUrl, + client = AuthClient( + url: authUrl, headers: { 'Authorization': 'Bearer $serviceRoleToken', 'apikey': serviceRoleToken, diff --git a/packages/gotrue/test/src/gotrue_admin_oauth_api_test.dart b/packages/supabase_auth/test/src/auth_admin_oauth_api_test.dart similarity index 97% rename from packages/gotrue/test/src/gotrue_admin_oauth_api_test.dart rename to packages/supabase_auth/test/src/auth_admin_oauth_api_test.dart index 3029a12f8..cf7904e10 100644 --- a/packages/gotrue/test/src/gotrue_admin_oauth_api_test.dart +++ b/packages/supabase_auth/test/src/auth_admin_oauth_api_test.dart @@ -1,5 +1,5 @@ import 'package:dotenv/dotenv.dart'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:http/http.dart' as http; import 'package:test/test.dart'; @@ -10,10 +10,10 @@ void main() { env.load(); // Load env variables from .env file - final gotrueUrl = env['GOTRUE_URL'] ?? localStackAuthUrl; + final authUrl = getAuthUrl(env); final serviceRoleToken = getServiceRoleToken(env); - late GoTrueClient client; + late AuthClient client; setUp(() async { final response = await http.post( @@ -26,8 +26,8 @@ void main() { ); if (response.body.isNotEmpty) throw response.body; - client = GoTrueClient( - url: gotrueUrl, + client = AuthClient( + url: authUrl, headers: { 'Authorization': 'Bearer $serviceRoleToken', 'apikey': serviceRoleToken, diff --git a/packages/gotrue/test/src/gotrue_mfa_api_test.dart b/packages/supabase_auth/test/src/auth_mfa_api_test.dart similarity index 97% rename from packages/gotrue/test/src/gotrue_mfa_api_test.dart rename to packages/supabase_auth/test/src/auth_mfa_api_test.dart index 139121e50..1b658e978 100644 --- a/packages/gotrue/test/src/gotrue_mfa_api_test.dart +++ b/packages/supabase_auth/test/src/auth_mfa_api_test.dart @@ -3,7 +3,7 @@ import 'dart:convert'; import 'package:collection/collection.dart'; import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart'; import 'package:dotenv/dotenv.dart'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:http/http.dart' as http; import 'package:otp/otp.dart'; import 'package:test/test.dart'; @@ -36,11 +36,11 @@ void main() { env.load(); // Load env variables from .env file - final gotrueUrl = env['GOTRUE_URL'] ?? localStackAuthUrl; + final authUrl = getAuthUrl(env); - final anonToken = env['GOTRUE_TOKEN'] ?? getAnonToken(env); + final anonToken = getAnonToken(env); - late GoTrueClient client; + late AuthClient client; setUp(() async { final response = await http.post( Uri.parse( @@ -54,8 +54,8 @@ void main() { ); if (response.body.isNotEmpty) throw response.body; - client = GoTrueClient( - url: gotrueUrl, + client = AuthClient( + url: authUrl, headers: { 'Authorization': 'Bearer $anonToken', 'apikey': anonToken, @@ -267,7 +267,7 @@ void main() { 'aal': 'aal1', }); - final localClient = GoTrueClient( + final localClient = AuthClient( url: 'http://localhost', autoRefreshToken: false, flowType: AuthFlowType.implicit, diff --git a/packages/gotrue/test/src/gotrue_oauth_api_test.dart b/packages/supabase_auth/test/src/auth_oauth_api_test.dart similarity index 97% rename from packages/gotrue/test/src/gotrue_oauth_api_test.dart rename to packages/supabase_auth/test/src/auth_oauth_api_test.dart index 3c43bac65..dde4b5a11 100644 --- a/packages/gotrue/test/src/gotrue_oauth_api_test.dart +++ b/packages/supabase_auth/test/src/auth_oauth_api_test.dart @@ -1,15 +1,15 @@ import 'package:dotenv/dotenv.dart'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:http/http.dart' as http; import 'package:test/test.dart'; import '../utils.dart'; void main() { - late GotrueOauthApiFixture fixture; + late AuthOauthApiFixture fixture; setUp(() async { - fixture = GotrueOauthApiFixture(); + fixture = AuthOauthApiFixture(); }); group('OAuthAuthorizationDetailsResponse', () { @@ -350,16 +350,16 @@ void main() { }); } -class GotrueOauthApiFixture { - GotrueOauthApiFixture() { +class AuthOauthApiFixture { + AuthOauthApiFixture() { final env = DotEnv(); env.load(); // Load env variables from .env file - _gotrueUrl = env['GOTRUE_URL'] ?? localStackAuthUrl; + _authUrl = getAuthUrl(env); _serviceRoleToken = getServiceRoleToken(env); - _client = GoTrueClient( - url: _gotrueUrl, + _client = AuthClient( + url: _authUrl, headers: { 'Authorization': 'Bearer $_serviceRoleToken', 'apikey': _serviceRoleToken, @@ -368,8 +368,8 @@ class GotrueOauthApiFixture { ); } - late final GoTrueClient _client; - late final String _gotrueUrl; + late final AuthClient _client; + late final String _authUrl; late final String _serviceRoleToken; Future sutCreatesOAuthClient(CreateOAuthClientParams request) { @@ -425,7 +425,7 @@ class GotrueOauthApiFixture { if (response.body.isNotEmpty) throw response.body; } - Future build({bool reset = true}) async { + Future build({bool reset = true}) async { if (reset) { await _reset(); } diff --git a/packages/gotrue/test/src/broadcast_web_test.dart b/packages/supabase_auth/test/src/broadcast_web_test.dart similarity index 93% rename from packages/gotrue/test/src/broadcast_web_test.dart rename to packages/supabase_auth/test/src/broadcast_web_test.dart index fcbfe3d9a..699da0374 100644 --- a/packages/gotrue/test/src/broadcast_web_test.dart +++ b/packages/supabase_auth/test/src/broadcast_web_test.dart @@ -4,8 +4,8 @@ library; import 'dart:async'; -import 'package:gotrue/src/broadcast_web.dart'; -import 'package:gotrue/src/types/types.dart'; +import 'package:supabase_auth/src/broadcast_web.dart'; +import 'package:supabase_auth/src/types/types.dart'; import 'package:test/test.dart'; void main() { diff --git a/packages/gotrue/test/src/constants_test.dart b/packages/supabase_auth/test/src/constants_test.dart similarity index 98% rename from packages/gotrue/test/src/constants_test.dart rename to packages/supabase_auth/test/src/constants_test.dart index 862659f0f..fb12d5f2f 100644 --- a/packages/gotrue/test/src/constants_test.dart +++ b/packages/supabase_auth/test/src/constants_test.dart @@ -1,12 +1,12 @@ -import 'package:gotrue/src/constants.dart'; -import 'package:gotrue/src/version.dart'; +import 'package:supabase_auth/src/constants.dart'; +import 'package:supabase_auth/src/version.dart'; import 'package:supabase_common/supabase_common.dart'; import 'package:test/test.dart'; void main() { group('Constants', () { test('has correct default GoTrue URL', () { - expect(Constants.defaultGotrueUrl, equals('http://localhost:9999')); + expect(Constants.defaultAuthUrl, equals('http://localhost:9999')); }); test('has correct default headers', () { diff --git a/packages/gotrue/test/src/helper_test.dart b/packages/supabase_auth/test/src/helper_test.dart similarity index 99% rename from packages/gotrue/test/src/helper_test.dart rename to packages/supabase_auth/test/src/helper_test.dart index 6ce19a583..e8516182d 100644 --- a/packages/gotrue/test/src/helper_test.dart +++ b/packages/supabase_auth/test/src/helper_test.dart @@ -1,4 +1,4 @@ -import 'package:gotrue/src/helper.dart'; +import 'package:supabase_auth/src/helper.dart'; import 'package:test/test.dart'; void main() { diff --git a/packages/gotrue/test/src/set_session_test.dart b/packages/supabase_auth/test/src/set_session_test.dart similarity index 98% rename from packages/gotrue/test/src/set_session_test.dart rename to packages/supabase_auth/test/src/set_session_test.dart index 7457f8b28..0564257f3 100644 --- a/packages/gotrue/test/src/set_session_test.dart +++ b/packages/supabase_auth/test/src/set_session_test.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'dart:convert'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:http/http.dart'; import 'package:test/test.dart'; @@ -84,11 +84,11 @@ String _makeRawJwt(Map payload) { void main() { late _SetSessionMockClient mockClient; - late GoTrueClient client; + late AuthClient client; setUp(() { mockClient = _SetSessionMockClient(); - client = GoTrueClient( + client = AuthClient( url: 'https://example.supabase.co', httpClient: mockClient, asyncStorage: TestAsyncStorage(), diff --git a/packages/gotrue/test/src/token_refresh_race_test.dart b/packages/supabase_auth/test/src/token_refresh_race_test.dart similarity index 98% rename from packages/gotrue/test/src/token_refresh_race_test.dart rename to packages/supabase_auth/test/src/token_refresh_race_test.dart index f572aba4d..d71365c00 100644 --- a/packages/gotrue/test/src/token_refresh_race_test.dart +++ b/packages/supabase_auth/test/src/token_refresh_race_test.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'dart:convert'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:http/http.dart'; import 'package:test/test.dart'; @@ -132,10 +132,10 @@ class _DelayedTokenMockClient extends BaseClient { void main() { late _DelayedTokenMockClient mockClient; - late GoTrueClient client; + late AuthClient client; - GoTrueClient makeClient() { - return GoTrueClient( + AuthClient makeClient() { + return AuthClient( url: 'https://example.supabase.co', httpClient: mockClient, asyncStorage: TestAsyncStorage(), diff --git a/packages/gotrue/test/src/types/auth_exception_test.dart b/packages/supabase_auth/test/src/types/auth_exception_test.dart similarity index 98% rename from packages/gotrue/test/src/types/auth_exception_test.dart rename to packages/supabase_auth/test/src/types/auth_exception_test.dart index d3afc772b..6fa3ce92d 100644 --- a/packages/gotrue/test/src/types/auth_exception_test.dart +++ b/packages/supabase_auth/test/src/types/auth_exception_test.dart @@ -1,5 +1,5 @@ -import 'package:gotrue/src/types/auth_exception.dart'; -import 'package:gotrue/src/types/error_code.dart'; +import 'package:supabase_auth/src/types/auth_exception.dart'; +import 'package:supabase_auth/src/types/error_code.dart'; import 'package:http/http.dart' as http; import 'package:supabase_common/supabase_common.dart'; import 'package:test/test.dart'; diff --git a/packages/gotrue/test/src/types/mfa_test.dart b/packages/supabase_auth/test/src/types/mfa_test.dart similarity index 97% rename from packages/gotrue/test/src/types/mfa_test.dart rename to packages/supabase_auth/test/src/types/mfa_test.dart index f0f658701..13f1f8c23 100644 --- a/packages/gotrue/test/src/types/mfa_test.dart +++ b/packages/supabase_auth/test/src/types/mfa_test.dart @@ -1,4 +1,4 @@ -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:test/test.dart'; void main() { diff --git a/packages/gotrue/test/src/types/passkey_test.dart b/packages/supabase_auth/test/src/types/passkey_test.dart similarity index 98% rename from packages/gotrue/test/src/types/passkey_test.dart rename to packages/supabase_auth/test/src/types/passkey_test.dart index 45c353830..8b53aca0e 100644 --- a/packages/gotrue/test/src/types/passkey_test.dart +++ b/packages/supabase_auth/test/src/types/passkey_test.dart @@ -1,4 +1,4 @@ -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:test/test.dart'; void main() { diff --git a/packages/gotrue/test/src/types/session_test.dart b/packages/supabase_auth/test/src/types/session_test.dart similarity index 99% rename from packages/gotrue/test/src/types/session_test.dart rename to packages/supabase_auth/test/src/types/session_test.dart index f0fedd04d..e34ff3195 100644 --- a/packages/gotrue/test/src/types/session_test.dart +++ b/packages/supabase_auth/test/src/types/session_test.dart @@ -1,8 +1,8 @@ import 'dart:convert'; -import 'package:gotrue/src/constants.dart'; -import 'package:gotrue/src/types/session.dart'; -import 'package:gotrue/src/types/user.dart'; +import 'package:supabase_auth/src/constants.dart'; +import 'package:supabase_auth/src/types/session.dart'; +import 'package:supabase_auth/src/types/user.dart'; import 'package:test/test.dart'; void main() { diff --git a/packages/gotrue/test/src/types/user_attributes_test.dart b/packages/supabase_auth/test/src/types/user_attributes_test.dart similarity index 98% rename from packages/gotrue/test/src/types/user_attributes_test.dart rename to packages/supabase_auth/test/src/types/user_attributes_test.dart index 77932e30e..6223c2c50 100644 --- a/packages/gotrue/test/src/types/user_attributes_test.dart +++ b/packages/supabase_auth/test/src/types/user_attributes_test.dart @@ -1,4 +1,4 @@ -import 'package:gotrue/src/types/user_attributes.dart'; +import 'package:supabase_auth/src/types/user_attributes.dart'; import 'package:test/test.dart'; void main() { diff --git a/packages/gotrue/test/src/types/user_test.dart b/packages/supabase_auth/test/src/types/user_test.dart similarity index 99% rename from packages/gotrue/test/src/types/user_test.dart rename to packages/supabase_auth/test/src/types/user_test.dart index 7f213b2c6..2defb2c61 100644 --- a/packages/gotrue/test/src/types/user_test.dart +++ b/packages/supabase_auth/test/src/types/user_test.dart @@ -1,4 +1,4 @@ -import 'package:gotrue/src/types/user.dart'; +import 'package:supabase_auth/src/types/user.dart'; import 'package:test/test.dart'; void main() { diff --git a/packages/gotrue/test/utils.dart b/packages/supabase_auth/test/utils.dart similarity index 83% rename from packages/gotrue/test/utils.dart rename to packages/supabase_auth/test/utils.dart index 2775c393f..0854d4ff4 100644 --- a/packages/gotrue/test/utils.dart +++ b/packages/supabase_auth/test/utils.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:dotenv/dotenv.dart'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:supabase_common/testing.dart'; export 'package:supabase_common/testing.dart'; @@ -44,10 +44,19 @@ String getNewPhone() { /// Endpoint of the local Supabase CLI stack that resets the auth fixtures. const resetAuthDataUrl = '$localStackRestUrl/rpc/reset_and_init_auth_data'; +/// The `GOTRUE_`-prefixed keys are the names these overrides had before the +/// package was renamed, and are still honoured so existing `.env` files keep +/// working. +String getAuthUrl(DotEnv env) => + env['SUPABASE_AUTH_URL'] ?? env['GOTRUE_URL'] ?? localStackAuthUrl; + String getServiceRoleToken(DotEnv env) => - env['GOTRUE_SERVICE_ROLE_TOKEN'] ?? localStackServiceRoleKey; + env['SUPABASE_AUTH_SERVICE_ROLE_TOKEN'] ?? + env['GOTRUE_SERVICE_ROLE_TOKEN'] ?? + localStackServiceRoleKey; -String getAnonToken(DotEnv env) => env['GOTRUE_TOKEN'] ?? localStackAnonKey; +String getAnonToken(DotEnv env) => + env['SUPABASE_AUTH_TOKEN'] ?? env['GOTRUE_TOKEN'] ?? localStackAnonKey; /// User id embedded in the session produced by [getSessionData]. const sessionDataUserId = '4d2583da-8de4-49d3-9cd1-37a9a74f55bd'; @@ -81,7 +90,7 @@ const sessionDataUserId = '4d2583da-8de4-49d3-9cd1-37a9a74f55bd'; return (accessToken: accessToken, sessionString: sessionString); } -class TestAsyncStorage extends GotrueAsyncStorage { +class TestAsyncStorage extends AuthAsyncStorage { final Map _map = {}; @override Future getItem({required String key}) async { diff --git a/packages/gotrue/test/web3_auth_integration_test.dart b/packages/supabase_auth/test/web3_auth_integration_test.dart similarity index 92% rename from packages/gotrue/test/web3_auth_integration_test.dart rename to packages/supabase_auth/test/web3_auth_integration_test.dart index bc56122c5..37904dbd8 100644 --- a/packages/gotrue/test/web3_auth_integration_test.dart +++ b/packages/supabase_auth/test/web3_auth_integration_test.dart @@ -2,7 +2,7 @@ import 'dart:convert'; import 'package:cryptography/cryptography.dart'; import 'package:dotenv/dotenv.dart'; -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:test/test.dart'; import 'utils.dart'; @@ -33,15 +33,15 @@ String _base58Encode(List bytes) { void main() { final env = DotEnv()..load(); - final gotrueUrl = env['GOTRUE_URL'] ?? localStackAuthUrl; - final anonToken = env['GOTRUE_TOKEN'] ?? getAnonToken(env); + final authUrl = getAuthUrl(env); + final anonToken = getAnonToken(env); final ed25519 = Ed25519(); - late GoTrueClient client; + late AuthClient client; setUp(() { - client = GoTrueClient( - url: gotrueUrl, + client = AuthClient( + url: authUrl, headers: {'Authorization': 'Bearer $anonToken', 'apikey': anonToken}, asyncStorage: TestAsyncStorage(), ); diff --git a/packages/gotrue/test/web3_auth_test.dart b/packages/supabase_auth/test/web3_auth_test.dart similarity index 95% rename from packages/gotrue/test/web3_auth_test.dart rename to packages/supabase_auth/test/web3_auth_test.dart index bb67bed75..e67222297 100644 --- a/packages/gotrue/test/web3_auth_test.dart +++ b/packages/supabase_auth/test/web3_auth_test.dart @@ -1,4 +1,4 @@ -import 'package:gotrue/gotrue.dart'; +import 'package:supabase_auth/supabase_auth.dart'; import 'package:test/test.dart'; import 'mocks/web3_mock_client.dart'; @@ -7,11 +7,11 @@ import 'utils.dart'; void main() { group('signInWithWeb3', () { late Web3MockClient mockClient; - late GoTrueClient client; + late AuthClient client; setUp(() { mockClient = Web3MockClient(); - client = GoTrueClient( + client = AuthClient( url: 'http://localhost:9999', httpClient: mockClient, autoRefreshToken: false, @@ -85,7 +85,7 @@ void main() { }); test('throws AuthApiException for a bad signature', () async { - final errorClient = GoTrueClient( + final errorClient = AuthClient( url: 'http://localhost:9999', httpClient: Web3ErrorMockClient(), autoRefreshToken: false, @@ -110,7 +110,7 @@ void main() { }); test('throws AuthApiException for an expired nonce', () async { - final errorClient = GoTrueClient( + final errorClient = AuthClient( url: 'http://localhost:9999', httpClient: Web3ErrorMockClient( statusCode: 403, @@ -141,7 +141,7 @@ void main() { }); test('throws AuthRetryableFetchException on a network error', () async { - final networkErrorClient = GoTrueClient( + final networkErrorClient = AuthClient( url: 'http://localhost:9999', httpClient: Web3NetworkErrorMockClient(), autoRefreshToken: false, diff --git a/packages/supabase_common/README.md b/packages/supabase_common/README.md index 8cd13b32a..8a9735a3e 100644 --- a/packages/supabase_common/README.md +++ b/packages/supabase_common/README.md @@ -7,7 +7,7 @@ > do not depend on it directly. Shared internal utilities used across the Supabase Dart and Flutter client -packages (`gotrue`, `postgrest`, `realtime_client`, `storage_client`, +packages (`supabase_auth`, `postgrest`, `realtime_client`, `storage_client`, `functions_client`, `supabase`, `supabase_flutter`). This package holds code that would otherwise be duplicated across those diff --git a/packages/supabase_flutter/README.md b/packages/supabase_flutter/README.md index 8ede9e767..ca4078c30 100644 --- a/packages/supabase_flutter/README.md +++ b/packages/supabase_flutter/README.md @@ -590,7 +590,7 @@ supabaseLogger.onRecord.listen((record) { - `supabase_flutter`: `Logger('supabase.supabase_flutter')` - `supabase`: `Logger('supabase.supabase')` - `postgrest`: `Logger('supabase.postgrest')` -- `gotrue`: `Logger('supabase.auth')` +- `supabase_auth`: `Logger('supabase.auth')` - `realtime_client`: `Logger('supabase.realtime')` - `storage_client`: `Logger('supabase.storage')` - `functions_client`: `Logger('supabase.functions')` diff --git a/packages/supabase_flutter/lib/src/flutter_go_true_client_options.dart b/packages/supabase_flutter/lib/src/flutter_auth_client_options.dart similarity index 98% rename from packages/supabase_flutter/lib/src/flutter_go_true_client_options.dart rename to packages/supabase_flutter/lib/src/flutter_auth_client_options.dart index 13932ab6a..a6fbfbcb3 100644 --- a/packages/supabase_flutter/lib/src/flutter_go_true_client_options.dart +++ b/packages/supabase_flutter/lib/src/flutter_auth_client_options.dart @@ -41,7 +41,7 @@ class FlutterAuthClientOptions extends AuthClientOptions { AuthFlowType? authFlowType, bool? autoRefreshToken, LocalStorage? localStorage, - GotrueAsyncStorage? pkceAsyncStorage, + AuthAsyncStorage? pkceAsyncStorage, bool? detectSessionInUri, bool Function(Uri uri)? detectSessionInUriPredicate, bool? persistSession, diff --git a/packages/supabase_flutter/lib/src/local_storage.dart b/packages/supabase_flutter/lib/src/local_storage.dart index ab3c64810..e7a5a306e 100644 --- a/packages/supabase_flutter/lib/src/local_storage.dart +++ b/packages/supabase_flutter/lib/src/local_storage.dart @@ -175,8 +175,8 @@ class SharedPreferencesLocalStorage extends LocalStorage { } /// local storage to store pkce flow code verifier. -class SharedPreferencesGotrueAsyncStorage extends GotrueAsyncStorage { - SharedPreferencesGotrueAsyncStorage() { +class SharedPreferencesAuthAsyncStorage extends AuthAsyncStorage { + SharedPreferencesAuthAsyncStorage() { WidgetsFlutterBinding.ensureInitialized(); } diff --git a/packages/supabase_flutter/lib/src/supabase.dart b/packages/supabase_flutter/lib/src/supabase.dart index 57bee95fd..5176a8486 100644 --- a/packages/supabase_flutter/lib/src/supabase.dart +++ b/packages/supabase_flutter/lib/src/supabase.dart @@ -8,7 +8,7 @@ import 'package:logging/logging.dart'; import 'package:supabase/supabase.dart'; import 'package:supabase_common/supabase_common.dart'; import 'package:supabase_flutter/src/constants.dart'; -import 'package:supabase_flutter/src/flutter_go_true_client_options.dart'; +import 'package:supabase_flutter/src/flutter_auth_client_options.dart'; import 'package:supabase_flutter/src/local_storage.dart'; import 'package:supabase_flutter/src/supabase_auth.dart'; @@ -120,7 +120,7 @@ class Supabase { if (authOptions.pkceAsyncStorage == null) { authOptions = authOptions.copyWith( - pkceAsyncStorage: SharedPreferencesGotrueAsyncStorage(), + pkceAsyncStorage: SharedPreferencesAuthAsyncStorage(), ); } if (authOptions.localStorage == null) { diff --git a/packages/supabase_flutter/lib/src/supabase_auth.dart b/packages/supabase_flutter/lib/src/supabase_auth.dart index 6d9450dfc..7917d5e3b 100644 --- a/packages/supabase_flutter/lib/src/supabase_auth.dart +++ b/packages/supabase_flutter/lib/src/supabase_auth.dart @@ -19,7 +19,7 @@ import 'clear_auth_url_parameters_stub.dart' /// Integrates Supabase Auth with the Flutter application lifecycle. /// /// [SupabaseAuth] acts as the bridge between the Flutter widget tree and the -/// underlying [GoTrueClient]. It is an internal singleton managed by [Supabase] +/// underlying [AuthClient]. It is an internal singleton managed by [Supabase] /// and should not be instantiated directly by application code — use /// `Supabase.instance.client.auth` for auth operations. /// @@ -38,7 +38,7 @@ import 'clear_auth_url_parameters_stub.dart' /// session exists. /// /// **Key collaborators:** -/// - [GoTrueClient] (`Supabase.instance.client.auth`) — the underlying auth +/// - [AuthClient] (`Supabase.instance.client.auth`) — the underlying auth /// client that [SupabaseAuth] coordinates with. /// - [LocalStorage] — pluggable storage backend for session persistence. /// - `AppLinks` — provides the incoming deep link stream and the initial link @@ -102,7 +102,7 @@ class SupabaseAuth with WidgetsBindingObserver { unawaited(_onAuthStateChange(data.event, data.session)); }, onError: (error, stackTrace) { - // Errors are already logged by GoTrueClient.notifyException before + // Errors are already logged by AuthClient.notifyException before // being added to the stream. The empty handler prevents them from // being rethrown as unhandled zone errors. }, @@ -330,7 +330,7 @@ class SupabaseAuth with WidgetsBindingObserver { } } -extension GoTrueClientSignInProvider on GoTrueClient { +extension AuthClientSignInProvider on AuthClient { /// Signs the user in using a third party providers. /// /// ```dart @@ -343,7 +343,7 @@ extension GoTrueClientSignInProvider on GoTrueClient { /// /// The return value of this method is not the auth result, and whether the /// OAuth sign-in has succeeded or not should be observed by setting a - /// listener on [GoTrueClient.onAuthStateChange]. + /// listener on [AuthClient.onAuthStateChange]. /// /// To obtain the OAuth URL without launching a browser, use /// [getOAuthSignInUrl] instead. diff --git a/packages/supabase_flutter/lib/src/supabase_passkey.dart b/packages/supabase_flutter/lib/src/supabase_passkey.dart index acceb6c53..5e906fea1 100644 --- a/packages/supabase_flutter/lib/src/supabase_passkey.dart +++ b/packages/supabase_flutter/lib/src/supabase_passkey.dart @@ -1,4 +1,4 @@ -// This file intentionally builds on gotrue's experimental passkey API. +// This file intentionally builds on supabase_auth's experimental passkey API. // ignore_for_file: experimental_member_use import 'package:meta/meta.dart'; @@ -8,7 +8,7 @@ import 'package:supabase_flutter/src/passkey/passkey_options_mapper.dart'; /// Passkey (WebAuthn) convenience methods that perform the full ceremony, /// including the platform prompt (FaceID/TouchID/security key), on top of the -/// server side exposed by [GoTrueClient.passkey]. +/// server side exposed by [AuthClient.passkey]. /// /// Passkeys are a BETA feature and must be enabled for your project in the /// Supabase Dashboard under Authentication > Configuration > Passkeys. @@ -28,7 +28,7 @@ import 'package:supabase_flutter/src/passkey/passkey_options_mapper.dart'; /// plugin's `PasskeyAuthCancelledException`) when the platform ceremony fails, /// and throw [AuthException] when the Supabase server rejects the credential. @experimental -extension GoTrueClientPasskey on GoTrueClient { +extension AuthClientPasskey on AuthClient { /// Registers a new passkey for the signed in user. /// /// Starts the registration with the Supabase server, calls [authenticator] to @@ -36,7 +36,7 @@ extension GoTrueClientPasskey on GoTrueClient { /// /// [friendlyName] is the account label the authenticator shows for the /// passkey when the server does not provide one. See - /// [GoTruePasskeyApi.startRegistration]. + /// [AuthPasskeyApi.startRegistration]. /// /// Requires a signed in (non-anonymous) user. Returns the newly registered /// [Passkey]. diff --git a/packages/supabase_flutter/lib/supabase_flutter.dart b/packages/supabase_flutter/lib/supabase_flutter.dart index f85d84ea2..211a58768 100644 --- a/packages/supabase_flutter/lib/supabase_flutter.dart +++ b/packages/supabase_flutter/lib/supabase_flutter.dart @@ -6,7 +6,7 @@ export 'package:supabase_common/supabase_common.dart' show defaultPersistSessionKey; export 'package:url_launcher/url_launcher.dart' show LaunchMode; -export 'src/flutter_go_true_client_options.dart'; +export 'src/flutter_auth_client_options.dart'; export 'src/local_storage.dart'; export 'src/supabase.dart'; export 'src/supabase_auth.dart' hide SupabaseAuth; diff --git a/packages/supabase_flutter/test/local_storage_migration_test.dart b/packages/supabase_flutter/test/local_storage_migration_test.dart index bcb64ab56..d65b469a0 100644 --- a/packages/supabase_flutter/test/local_storage_migration_test.dart +++ b/packages/supabase_flutter/test/local_storage_migration_test.dart @@ -162,13 +162,13 @@ void main() { }); }); - group('SharedPreferencesGotrueAsyncStorage migration from v2', () { + group('SharedPreferencesAuthAsyncStorage migration from v2', () { const codeVerifierKey = 'supabase.auth.token-code-verifier'; const codeVerifier = 'raw-code-verifier'; test('moves a code verifier written by the legacy API over', () async { mockSharedPreferences(legacyValues: {codeVerifierKey: codeVerifier}); - final storage = SharedPreferencesGotrueAsyncStorage(); + final storage = SharedPreferencesAuthAsyncStorage(); expect(await storage.getItem(key: codeVerifierKey), codeVerifier); expect( @@ -181,7 +181,7 @@ void main() { test('does not resurrect a verifier that was used up', () async { mockSharedPreferences(legacyValues: {codeVerifierKey: codeVerifier}); - final storage = SharedPreferencesGotrueAsyncStorage(); + final storage = SharedPreferencesAuthAsyncStorage(); expect(await storage.getItem(key: codeVerifierKey), codeVerifier); await storage.removeItem(key: codeVerifierKey); @@ -192,7 +192,7 @@ void main() { test('returns null when the legacy store cannot be read', () async { mockSharedPreferences(); SharedPreferencesStorePlatform.instance = _ThrowingLegacyStore(); - final storage = SharedPreferencesGotrueAsyncStorage(); + final storage = SharedPreferencesAuthAsyncStorage(); expect(await storage.getItem(key: codeVerifierKey), isNull); }); diff --git a/packages/supabase_flutter/test/storage_test.dart b/packages/supabase_flutter/test/storage_test.dart index 4f0e759a3..b03649327 100644 --- a/packages/supabase_flutter/test/storage_test.dart +++ b/packages/supabase_flutter/test/storage_test.dart @@ -84,16 +84,16 @@ void main() { }); }); - // SharedPreferencesGotrueAsyncStorage Tests - group('SharedPreferencesGotrueAsyncStorage', () { - late SharedPreferencesGotrueAsyncStorage asyncStorage; + // SharedPreferencesAuthAsyncStorage Tests + group('SharedPreferencesAuthAsyncStorage', () { + late SharedPreferencesAuthAsyncStorage asyncStorage; const testKey = 'test_key'; const testValue = 'test_value'; setUp(() { // Set up fake shared preferences mockSharedPreferences(); - asyncStorage = SharedPreferencesGotrueAsyncStorage(); + asyncStorage = SharedPreferencesAuthAsyncStorage(); }); test('setItem stores value for key', () async { diff --git a/packages/supabase_flutter/test/widget_test_stubs.dart b/packages/supabase_flutter/test/widget_test_stubs.dart index 89e3af5ca..e8adcdd43 100644 --- a/packages/supabase_flutter/test/widget_test_stubs.dart +++ b/packages/supabase_flutter/test/widget_test_stubs.dart @@ -184,7 +184,7 @@ class GetUserHttpClient extends BaseClient { } } -class MockAsyncStorage extends GotrueAsyncStorage { +class MockAsyncStorage extends AuthAsyncStorage { final Map _map = {}; @override diff --git a/pubspec.yaml b/pubspec.yaml index 06d104f40..587abb511 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -7,7 +7,7 @@ environment: workspace: - packages/functions_client - - packages/gotrue + - packages/supabase_auth - packages/postgrest - packages/realtime_client - packages/storage_client diff --git a/sdk-compliance.yaml b/sdk-compliance.yaml index f1a8a57d0..6b06bba92 100644 --- a/sdk-compliance.yaml +++ b/sdk-compliance.yaml @@ -14,7 +14,7 @@ # implementation would add no real capability. A note # explains why. # -# Verified against the source in this repository (packages/gotrue, postgrest, +# Verified against the source in this repository (packages/supabase_auth, postgrest, # storage_client, realtime_client, functions_client, supabase, supabase_flutter). # Unlisted features default to not_implemented. @@ -25,22 +25,22 @@ features: auth.sign_in.sign_up: status: implemented symbols: - - GoTrueClient.signUp + - AuthClient.signUp auth.sign_in.sign_in_with_password: status: implemented symbols: - - GoTrueClient.signInWithPassword + - AuthClient.signInWithPassword auth.sign_in.sign_in_with_otp: status: implemented symbols: - - GoTrueClient.signInWithOtp + - AuthClient.signInWithOtp supporting_symbols: - OtpChannel auth.sign_in.sign_in_with_oauth: status: implemented symbols: - - GoTrueClient.getOAuthSignInUrl - - GoTrueClientSignInProvider.signInWithOAuth + - AuthClient.getOAuthSignInUrl + - AuthClientSignInProvider.signInWithOAuth - OAuthProvider - OAuthProvider.OAuthProvider supporting_symbols: @@ -78,39 +78,39 @@ features: auth.sign_in.sign_in_with_id_token: status: implemented symbols: - - GoTrueClient.signInWithIdToken + - AuthClient.signInWithIdToken supporting_symbols: - - GoTrueClientSignInProvider.generateRawNonce + - AuthClientSignInProvider.generateRawNonce auth.sign_in.sign_in_with_sso: status: implemented note: "Split across two methods: getSSOSignInUrl returns Future (the URL) rather than the structured {url} response used by JS, and supabase_flutter's signInWithSSO launches that URL in the browser and returns Future." symbols: - - GoTrueClient.getSSOSignInUrl - - GoTrueClientSignInProvider.signInWithSSO + - AuthClient.getSSOSignInUrl + - AuthClientSignInProvider.signInWithSSO auth.sign_in.sign_in_with_web3: status: implemented note: "Callers sign the SIWE/SIWS message with their own wallet library and pass the message and signature; the SDK does not auto-detect browser wallets or build the message, since window.ethereum/window.solana have no Flutter equivalent." symbols: - - GoTrueClient.signInWithWeb3 + - AuthClient.signInWithWeb3 - Web3Chain auth.sign_in.sign_in_anonymously: status: implemented symbols: - - GoTrueClient.signInAnonymously + - AuthClient.signInAnonymously auth.sign_in.verify_otp: status: implemented symbols: - - GoTrueClient.verifyOTP + - AuthClient.verifyOTP supporting_symbols: - OtpType auth.sign_in.exchange_code_for_session: status: implemented symbols: - - GoTrueClient.exchangeCodeForSession + - AuthClient.exchangeCodeForSession auth.sign_in.resend_confirmation: status: implemented symbols: - - GoTrueClient.resend + - AuthClient.resend supporting_symbols: - ResendResponse - ResendResponse.ResendResponse @@ -118,35 +118,35 @@ features: auth.sign_in.reauthenticate: status: implemented symbols: - - GoTrueClient.reauthenticate + - AuthClient.reauthenticate auth.sign_in.send_password_reset_email: status: implemented symbols: - - GoTrueClient.resetPasswordForEmail + - AuthClient.resetPasswordForEmail # auth — session & user auth.session.get_session: status: implemented symbols: - - GoTrueClient.currentSession - - GoTrueClient.getSession + - AuthClient.currentSession + - AuthClient.getSession auth.session.set_session: status: implemented symbols: - - GoTrueClient.setSession + - AuthClient.setSession auth.session.refresh_session: status: implemented symbols: - - GoTrueClient.refreshSession + - AuthClient.refreshSession auth.session.get_user: status: implemented symbols: - - GoTrueClient.currentUser - - GoTrueClient.getUser + - AuthClient.currentUser + - AuthClient.getUser auth.session.update_user: status: implemented symbols: - - GoTrueClient.updateUser + - AuthClient.updateUser - UserAttributes.currentPassword supporting_symbols: - UserAttributes @@ -162,7 +162,7 @@ features: auth.session.get_claims: status: implemented symbols: - - GoTrueClient.getClaims + - AuthClient.getClaims supporting_symbols: - DecodedJwt - DecodedJwt.DecodedJwt @@ -222,20 +222,20 @@ features: auth.session.sign_out: status: implemented symbols: - - GoTrueClient.signOut + - AuthClient.signOut supporting_symbols: - SignOutScope auth.session.auto_refresh: status: implemented symbols: - - GoTrueClient.startAutoRefresh - - GoTrueClient.stopAutoRefresh + - AuthClient.startAutoRefresh + - AuthClient.stopAutoRefresh supporting_symbols: - AuthClientOptions.autoRefreshToken auth.session.subscribe_auth_events: status: implemented symbols: - - GoTrueClient.onAuthStateChange + - AuthClient.onAuthStateChange supporting_symbols: - AuthChangeEvent - AuthChangeEvent.AuthChangeEvent @@ -257,23 +257,23 @@ features: status: implemented note: "Split into getLinkIdentityUrl (OAuth) and linkIdentityWithIdToken (ID token) rather than a single overloaded method." symbols: - - GoTrueClient.getLinkIdentityUrl - - GoTrueClient.linkIdentityWithIdToken - - GoTrueClientSignInProvider.linkIdentity + - AuthClient.getLinkIdentityUrl + - AuthClient.linkIdentityWithIdToken + - AuthClientSignInProvider.linkIdentity auth.identities.list_identities: status: implemented symbols: - - GoTrueClient.getUserIdentities + - AuthClient.getUserIdentities auth.identities.unlink_identity: status: implemented symbols: - - GoTrueClient.unlinkIdentity + - AuthClient.unlinkIdentity # auth — MFA auth.mfa.enroll: status: implemented symbols: - - GoTrueMFAApi.enroll + - AuthMFAApi.enroll supporting_symbols: - AuthMFAEnrollResponse - AuthMFAEnrollResponse.AuthMFAEnrollResponse @@ -295,7 +295,7 @@ features: auth.mfa.challenge: status: implemented symbols: - - GoTrueMFAApi.challenge + - AuthMFAApi.challenge supporting_symbols: - AuthMFAChallengeResponse - AuthMFAChallengeResponse.AuthMFAChallengeResponse @@ -305,7 +305,7 @@ features: auth.mfa.verify: status: implemented symbols: - - GoTrueMFAApi.verify + - AuthMFAApi.verify supporting_symbols: - AuthMFAVerifyResponse - AuthMFAVerifyResponse.AuthMFAVerifyResponse @@ -318,11 +318,11 @@ features: auth.mfa.challenge_and_verify: status: implemented symbols: - - GoTrueMFAApi.challengeAndVerify + - AuthMFAApi.challengeAndVerify auth.mfa.unenroll: status: implemented symbols: - - GoTrueMFAApi.unenroll + - AuthMFAApi.unenroll supporting_symbols: - AuthMFAUnenrollResponse - AuthMFAUnenrollResponse.AuthMFAUnenrollResponse @@ -331,7 +331,7 @@ features: auth.mfa.list_factors: status: implemented symbols: - - GoTrueMFAApi.listFactors + - AuthMFAApi.listFactors supporting_symbols: - AuthMFAListFactorsResponse - AuthMFAListFactorsResponse.AuthMFAListFactorsResponse @@ -343,7 +343,7 @@ features: status: implemented symbols: - AuthenticatorAssuranceLevel - - GoTrueMFAApi.getAuthenticatorAssuranceLevel + - AuthMFAApi.getAuthenticatorAssuranceLevel supporting_symbols: - AMREntry - AMREntry.AMREntry @@ -363,9 +363,9 @@ features: auth.passkey.register_passkey: status: implemented symbols: - - GoTrueClientPasskey.registerPasskey - - GoTruePasskeyApi.startRegistration - - GoTruePasskeyApi.verifyRegistration + - AuthClientPasskey.registerPasskey + - AuthPasskeyApi.startRegistration + - AuthPasskeyApi.verifyRegistration supporting_symbols: - PasskeyRegistrationOptionsResponse - PasskeyRegistrationOptionsResponse.PasskeyRegistrationOptionsResponse @@ -376,9 +376,9 @@ features: auth.passkey.sign_in_with_passkey: status: implemented symbols: - - GoTrueClientPasskey.signInWithPasskey - - GoTruePasskeyApi.startAuthentication - - GoTruePasskeyApi.verifyAuthentication + - AuthClientPasskey.signInWithPasskey + - AuthPasskeyApi.startAuthentication + - AuthPasskeyApi.verifyAuthentication supporting_symbols: - PasskeyAuthenticationOptionsResponse - PasskeyAuthenticationOptionsResponse.PasskeyAuthenticationOptionsResponse @@ -391,10 +391,10 @@ features: auth.oauth_server.get_authorization_details: status: implemented symbols: - - GoTrueClient.oauth - - GoTrueOAuthApi - - GoTrueOAuthApi.GoTrueOAuthApi - - GoTrueOAuthApi.getAuthorizationDetails + - AuthClient.oauth + - AuthOAuthApi + - AuthOAuthApi.AuthOAuthApi + - AuthOAuthApi.getAuthorizationDetails - OAuthAuthorizationResponse - OAuthAuthorizationResponse.OAuthAuthorizationResponse - OAuthAuthorizationResponse.fromJson @@ -423,7 +423,7 @@ features: auth.oauth_server.approve_authorization: status: implemented symbols: - - GoTrueOAuthApi.approveAuthorization + - AuthOAuthApi.approveAuthorization - OAuthConsentResponse - OAuthConsentResponse.OAuthConsentResponse - OAuthConsentResponse.fromJson @@ -431,11 +431,11 @@ features: auth.oauth_server.deny_authorization: status: implemented symbols: - - GoTrueOAuthApi.denyAuthorization + - AuthOAuthApi.denyAuthorization auth.oauth_server.list_grants: status: implemented symbols: - - GoTrueOAuthApi.listGrants + - AuthOAuthApi.listGrants - OAuthGrant - OAuthGrant.OAuthGrant - OAuthGrant.client @@ -447,29 +447,29 @@ features: auth.oauth_server.revoke_grant: status: implemented symbols: - - GoTrueOAuthApi.revokeGrant + - AuthOAuthApi.revokeGrant # auth — admin auth.admin.create_user: status: implemented symbols: - - GoTrueAdminApi.createUser + - AuthAdminApi.createUser auth.admin.get_user: status: implemented symbols: - - GoTrueAdminApi.getUserById + - AuthAdminApi.getUserById auth.admin.update_user: status: implemented symbols: - - GoTrueAdminApi.updateUserById + - AuthAdminApi.updateUserById auth.admin.delete_user: status: implemented symbols: - - GoTrueAdminApi.deleteUser + - AuthAdminApi.deleteUser auth.admin.list_users: status: implemented symbols: - - GoTrueAdminApi.listUsers + - AuthAdminApi.listUsers - ListUsersResponse - ListUsersResponse.ListUsersResponse - ListUsersResponse.audience @@ -480,11 +480,11 @@ features: auth.admin.invite_user: status: implemented symbols: - - GoTrueAdminApi.inviteUserByEmail + - AuthAdminApi.inviteUserByEmail auth.admin.generate_link: status: implemented symbols: - - GoTrueAdminApi.generateLink + - AuthAdminApi.generateLink supporting_symbols: - GenerateLinkProperties - GenerateLinkProperties.actionLink @@ -501,21 +501,21 @@ features: auth.admin.sign_out: status: implemented symbols: - - GoTrueAdminApi.signOut + - AuthAdminApi.signOut auth.admin.list_mfa_factors: status: implemented symbols: - - GoTrueAdminMFAApi.listFactors + - AuthAdminMFAApi.listFactors supporting_symbols: - AuthMFAAdminListFactorsResponse - AuthMFAAdminListFactorsResponse.AuthMFAAdminListFactorsResponse - AuthMFAAdminListFactorsResponse.factors - AuthMFAAdminListFactorsResponse.fromJson - - GoTrueAdminApi.mfa + - AuthAdminApi.mfa auth.admin.delete_mfa_factor: status: implemented symbols: - - GoTrueAdminMFAApi.deleteFactor + - AuthAdminMFAApi.deleteFactor supporting_symbols: - AuthMFAAdminDeleteFactorResponse - AuthMFAAdminDeleteFactorResponse.AuthMFAAdminDeleteFactorResponse @@ -524,10 +524,10 @@ features: auth.admin.create_provider: status: implemented symbols: - - GoTrueAdminApi.customProviders - - GoTrueAdminCustomProvidersApi - - GoTrueAdminCustomProvidersApi.GoTrueAdminCustomProvidersApi - - GoTrueAdminCustomProvidersApi.createProvider + - AuthAdminApi.customProviders + - AuthAdminCustomProvidersApi + - AuthAdminCustomProvidersApi.AuthAdminCustomProvidersApi + - AuthAdminCustomProvidersApi.createProvider - CustomProviderType - CustomProviderType.fromString - CreateCustomProviderParams @@ -595,11 +595,11 @@ features: auth.admin.get_provider: status: implemented symbols: - - GoTrueAdminCustomProvidersApi.getProvider + - AuthAdminCustomProvidersApi.getProvider auth.admin.update_provider: status: implemented symbols: - - GoTrueAdminCustomProvidersApi.updateProvider + - AuthAdminCustomProvidersApi.updateProvider - UpdateCustomProviderParams - UpdateCustomProviderParams.UpdateCustomProviderParams - UpdateCustomProviderParams.acceptableClientIds @@ -624,17 +624,17 @@ features: auth.admin.delete_provider: status: implemented symbols: - - GoTrueAdminCustomProvidersApi.deleteProvider + - AuthAdminCustomProvidersApi.deleteProvider auth.admin.list_providers: status: implemented symbols: - - GoTrueAdminCustomProvidersApi.listProviders + - AuthAdminCustomProvidersApi.listProviders # auth — admin OAuth clients auth.oauth_admin.create_client: status: implemented symbols: - - GoTrueAdminOAuthApi.createClient + - AuthAdminOAuthApi.createClient supporting_symbols: - CreateOAuthClientParams - CreateOAuthClientParams.CreateOAuthClientParams @@ -648,11 +648,11 @@ features: auth.oauth_admin.get_client: status: implemented symbols: - - GoTrueAdminOAuthApi.getClient + - AuthAdminOAuthApi.getClient auth.oauth_admin.update_client: status: implemented symbols: - - GoTrueAdminOAuthApi.updateClient + - AuthAdminOAuthApi.updateClient supporting_symbols: - UpdateOAuthClientParams - UpdateOAuthClientParams.UpdateOAuthClientParams @@ -666,29 +666,29 @@ features: auth.oauth_admin.delete_client: status: implemented symbols: - - GoTrueAdminOAuthApi.deleteClient + - AuthAdminOAuthApi.deleteClient auth.oauth_admin.list_clients: status: implemented symbols: - - GoTrueAdminOAuthApi.listClients + - AuthAdminOAuthApi.listClients supporting_symbols: - - GoTrueAdminApi.oauth + - AuthAdminApi.oauth auth.oauth_admin.regenerate_client_secret: status: implemented symbols: - - GoTrueAdminOAuthApi.regenerateClientSecret + - AuthAdminOAuthApi.regenerateClientSecret # auth — admin passkeys (experimental) auth.passkey_admin.list_passkeys: status: implemented symbols: - - GoTrueAdminPasskeyApi.listPasskeys + - AuthAdminPasskeyApi.listPasskeys supporting_symbols: - - GoTrueAdminApi.passkey + - AuthAdminApi.passkey auth.passkey_admin.delete_passkey: status: implemented symbols: - - GoTrueAdminPasskeyApi.deletePasskey + - AuthAdminPasskeyApi.deletePasskey # database — query database.query.from_table: @@ -1974,7 +1974,7 @@ features: symbols: - FlutterAuthClientOptions.detectSessionInUri - FlutterAuthClientOptions.detectSessionInUriPredicate - - GoTrueClient.getSessionFromUrl + - AuthClient.getSessionFromUrl supporting_symbols: - AuthSessionUrlResponse - AuthSessionUrlResponse.AuthSessionUrlResponse @@ -1983,7 +1983,7 @@ features: client.session_management.custom_storage: status: implemented symbols: - - GotrueAsyncStorage + - AuthAsyncStorage - LocalStorage supporting_symbols: - AuthClientOptions.pkceAsyncStorage @@ -1995,21 +1995,21 @@ features: - EmptyLocalStorage.persistSession - EmptyLocalStorage.removePersistedSession - FlutterAuthClientOptions.localStorage - - GotrueAsyncStorage.GotrueAsyncStorage - - GotrueAsyncStorage.getItem - - GotrueAsyncStorage.removeItem - - GotrueAsyncStorage.setItem + - AuthAsyncStorage.AuthAsyncStorage + - AuthAsyncStorage.getItem + - AuthAsyncStorage.removeItem + - AuthAsyncStorage.setItem - LocalStorage.LocalStorage - LocalStorage.accessToken - LocalStorage.hasAccessToken - LocalStorage.initialize - LocalStorage.persistSession - LocalStorage.removePersistedSession - - SharedPreferencesGotrueAsyncStorage - - SharedPreferencesGotrueAsyncStorage.SharedPreferencesGotrueAsyncStorage - - SharedPreferencesGotrueAsyncStorage.getItem - - SharedPreferencesGotrueAsyncStorage.removeItem - - SharedPreferencesGotrueAsyncStorage.setItem + - SharedPreferencesAuthAsyncStorage + - SharedPreferencesAuthAsyncStorage.SharedPreferencesAuthAsyncStorage + - SharedPreferencesAuthAsyncStorage.getItem + - SharedPreferencesAuthAsyncStorage.removeItem + - SharedPreferencesAuthAsyncStorage.setItem - SharedPreferencesLocalStorage - SharedPreferencesLocalStorage.SharedPreferencesLocalStorage - SharedPreferencesLocalStorage.accessToken @@ -2021,8 +2021,8 @@ features: status: implemented symbols: - FlutterAuthClientOptions.persistSession - - GoTrueClient.recoverSession - - GoTrueClient.setInitialSession + - AuthClient.recoverSession + - AuthClient.setInitialSession supporting_symbols: - SharedPreferencesLocalStorage.persistSessionKey - defaultPersistSessionKey @@ -2038,7 +2038,7 @@ features: supporting_symbols: - Constants.defaultHeaders - FunctionsClient.headers - - GoTrueClient.headers + - AuthClient.headers - PostgrestBuilder.setHeader - PostgrestClient.headers - PostgrestFilterBuilder.setHeader @@ -2182,29 +2182,29 @@ supporting_symbols: - FunctionsClient.dispose - FunctionsClientOptions - FunctionsClientOptions.FunctionsClientOptions - - GoTrueAdminApi - - GoTrueAdminApi.GoTrueAdminApi - - GoTrueAdminMFAApi - - GoTrueAdminMFAApi.GoTrueAdminMFAApi - - GoTrueAdminOAuthApi - - GoTrueAdminOAuthApi.GoTrueAdminOAuthApi - - GoTrueAdminPasskeyApi - - GoTrueAdminPasskeyApi.GoTrueAdminPasskeyApi - - GoTrueClient - - GoTrueClient.GoTrueClient - - GoTrueClient.admin - - GoTrueClient.dispose - - GoTrueClient.mfa - - GoTrueClient.passkey - - GoTrueClientPasskey - - GoTrueClientSignInProvider - - GoTrueMFAApi - - GoTrueMFAApi.GoTrueMFAApi - - GoTruePasskeyApi - - GoTruePasskeyApi.GoTruePasskeyApi - - GoTruePasskeyApi.delete - - GoTruePasskeyApi.list - - GoTruePasskeyApi.update + - AuthAdminApi + - AuthAdminApi.AuthAdminApi + - AuthAdminMFAApi + - AuthAdminMFAApi.AuthAdminMFAApi + - AuthAdminOAuthApi + - AuthAdminOAuthApi.AuthAdminOAuthApi + - AuthAdminPasskeyApi + - AuthAdminPasskeyApi.AuthAdminPasskeyApi + - AuthClient + - AuthClient.AuthClient + - AuthClient.admin + - AuthClient.dispose + - AuthClient.mfa + - AuthClient.passkey + - AuthClientPasskey + - AuthClientSignInProvider + - AuthMFAApi + - AuthMFAApi.AuthMFAApi + - AuthPasskeyApi + - AuthPasskeyApi.AuthPasskeyApi + - AuthPasskeyApi.delete + - AuthPasskeyApi.list + - AuthPasskeyApi.update - Headers - IcebergApiException - IcebergApiException.IcebergApiException