Skip to content

Commit 1329339

Browse files
authored
Fix dependencies versions and fix build errors (#53)
1 parent 9b4880a commit 1329339

File tree

2 files changed

+49
-67
lines changed

2 files changed

+49
-67
lines changed

Package.swift

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// swift-tools-version:5.5
1+
// swift-tools-version:5.7
22
// The swift-tools-version declares the minimum version of Swift required to build this package.
33

44
import PackageDescription
@@ -19,14 +19,11 @@ let package = Package(
1919
),
2020
],
2121
dependencies: [
22-
.package(url: "https://github.com/supabase-community/gotrue-swift", from: "0.0.7"),
22+
.package(url: "https://github.com/supabase-community/gotrue-swift", from: "0.1.0"),
2323
.package(url: "https://github.com/supabase-community/storage-swift.git", branch: "main"),
2424
.package(url: "https://github.com/supabase-community/realtime-swift.git", from: "0.0.1"),
25-
.package(
26-
url: "https://github.com/supabase-community/postgrest-swift",
27-
branch: "master"
28-
),
29-
.package(url: "https://github.com/supabase-community/functions-swift", branch: "main"),
25+
.package(url: "https://github.com/supabase-community/postgrest-swift", from: "1.0.0"),
26+
.package(url: "https://github.com/supabase-community/functions-swift", from: "0.2.0"),
3027
],
3128
targets: [
3229
.target(
@@ -37,6 +34,14 @@ let package = Package(
3734
.product(name: "Realtime", package: "realtime-swift"),
3835
.product(name: "PostgREST", package: "postgrest-swift"),
3936
.product(name: "Functions", package: "functions-swift"),
37+
],
38+
swiftSettings: [
39+
.unsafeFlags(
40+
[
41+
"-warn-concurrency",
42+
"-enable-actor-data-race-checks",
43+
]
44+
)
4045
]
4146
),
4247
]

Sources/Supabase/SupabaseClient.swift

Lines changed: 37 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import Foundation
22
import Functions
3+
import Get
34
import GoTrue
45
import PostgREST
56
import Realtime
@@ -10,46 +11,44 @@ public class SupabaseClient {
1011
private let supabaseURL: URL
1112
private let supabaseKey: String
1213
private let schema: String
13-
private let restURL: URL
14-
private let realtimeURL: URL
15-
private let authURL: URL
16-
private let storageURL: URL
17-
private let functionsURL: URL
1814

1915
/// Supabase Auth allows you to create and manage user sessions for access to data that is secured
2016
/// by access policies.
2117
public let auth: GoTrueClient
2218

2319
/// Supabase Storage allows you to manage user-generated content, such as photos or videos.
2420
public var storage: SupabaseStorageClient {
25-
var headers: [String: String] = defaultHeaders
26-
headers["Authorization"] = "Bearer \(auth.session?.accessToken ?? supabaseKey)"
27-
return SupabaseStorageClient(url: storageURL.absoluteString, headers: headers, http: self)
21+
SupabaseStorageClient(
22+
url: supabaseURL.appendingPathComponent("/storage/v1").absoluteString,
23+
headers: defaultHeaders,
24+
http: self
25+
)
2826
}
2927

3028
/// Database client for Supabase.
3129
public var database: PostgrestClient {
32-
var headers: [String: String] = defaultHeaders
33-
headers["Authorization"] = "Bearer \(auth.session?.accessToken ?? supabaseKey)"
34-
return PostgrestClient(
35-
url: restURL.absoluteString,
36-
headers: headers,
30+
PostgrestClient(
31+
url: supabaseURL.appendingPathComponent("/rest/v1"),
32+
headers: defaultHeaders,
3733
schema: schema,
38-
http: self
34+
apiClientDelegate: self
3935
)
4036
}
4137

4238
/// Realtime client for Supabase
43-
public var realtime: RealtimeClient
39+
public var realtime: RealtimeClient {
40+
RealtimeClient(
41+
endPoint: supabaseURL.appendingPathComponent("/realtime/v1").absoluteString,
42+
params: defaultHeaders
43+
)
44+
}
4445

4546
/// Supabase Functions allows you to deploy and invoke edge functions.
4647
public var functions: FunctionsClient {
47-
var headers: [String: String] = defaultHeaders
48-
headers["Authorization"] = "Bearer \(auth.session?.accessToken ?? supabaseKey)"
49-
return FunctionsClient(
50-
url: functionsURL,
51-
headers: headers,
52-
http: self
48+
FunctionsClient(
49+
url: supabaseURL.appendingPathComponent("/functions/v1"),
50+
headers: defaultHeaders,
51+
apiClientDelegate: self
5352
)
5453
}
5554

@@ -60,8 +59,6 @@ public class SupabaseClient {
6059
/// - supabaseURL: Unique Supabase project url
6160
/// - supabaseKey: Supabase anonymous API Key
6261
/// - schema: Database schema name, defaults to `public`
63-
/// - autoRefreshToken: Toggles whether `Supabase.auth` automatically refreshes auth tokens.
64-
/// Defaults to `true`
6562
public init(
6663
supabaseURL: URL,
6764
supabaseKey: String,
@@ -72,83 +69,63 @@ public class SupabaseClient {
7269
self.supabaseKey = supabaseKey
7370
self.schema = schema
7471
self.httpClient = httpClient
75-
restURL = supabaseURL.appendingPathComponent("/rest/v1")
76-
realtimeURL = supabaseURL.appendingPathComponent("/realtime/v1")
77-
authURL = supabaseURL.appendingPathComponent("/auth/v1")
78-
storageURL = supabaseURL.appendingPathComponent("/storage/v1")
79-
functionsURL = supabaseURL.appendingPathComponent("/functions/v1")
8072

8173
defaultHeaders = [
8274
"X-Client-Info": "supabase-swift/\(version)",
8375
"apikey": supabaseKey,
8476
]
8577

8678
auth = GoTrueClient(
87-
url: authURL,
79+
url: supabaseURL.appendingPathComponent("/auth/v1"),
8880
headers: defaultHeaders
8981
)
90-
realtime = RealtimeClient(endPoint: realtimeURL.absoluteString, params: defaultHeaders)
9182
}
9283

9384
public struct HTTPClient {
9485
let storage: StorageHTTPClient
95-
let postgrest: PostgrestHTTPClient
96-
let functions: FunctionsHTTPClient
9786

9887
public init(
99-
storage: StorageHTTPClient? = nil,
100-
postgrest: PostgrestHTTPClient? = nil,
101-
functions: FunctionsHTTPClient? = nil
88+
storage: StorageHTTPClient? = nil
10289
) {
10390
self.storage = storage ?? DefaultStorageHTTPClient()
104-
self.postgrest = postgrest ?? DefaultPostgrestHTTPClient()
105-
self.functions = functions ?? DefaultFunctionsHTTPClient()
10691
}
10792
}
10893

10994
private let httpClient: HTTPClient
11095
}
11196

112-
extension SupabaseClient {
113-
func adapt(request: URLRequest) async throws -> URLRequest {
114-
try? await auth.refreshCurrentSessionIfNeeded()
97+
extension SupabaseClient: APIClientDelegate {
98+
public func client(_: APIClient, willSendRequest request: inout URLRequest) async throws {
99+
if let session = try? await auth.session {
100+
request.setValue(
101+
"\(session.tokenType) \(session.accessToken)",
102+
forHTTPHeaderField: "Authorization"
103+
)
104+
}
105+
}
106+
}
115107

108+
extension SupabaseClient {
109+
func adapt(request: URLRequest) async -> URLRequest {
116110
var request = request
117-
if let accessToken = auth.session?.accessToken {
111+
if let accessToken = try? await auth.session.accessToken {
118112
request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
119113
}
120114
return request
121115
}
122116
}
123117

124-
extension SupabaseClient: PostgrestHTTPClient {
125-
public func execute(_ request: URLRequest) async throws -> (Data, HTTPURLResponse) {
126-
let request = try await adapt(request: request)
127-
return try await httpClient.postgrest.execute(request)
128-
}
129-
}
130-
131118
extension SupabaseClient: StorageHTTPClient {
132119
public func fetch(_ request: URLRequest) async throws -> (Data, HTTPURLResponse) {
133-
let request = try await adapt(request: request)
120+
let request = await adapt(request: request)
134121
return try await httpClient.storage.fetch(request)
135122
}
136123

137124
public func upload(
138125
_ request: URLRequest,
139126
from data: Data
140127
) async throws -> (Data, HTTPURLResponse) {
141-
let request = try await adapt(request: request)
128+
let request = await adapt(request: request)
142129
return try await httpClient.storage.upload(request, from: data)
143130
}
144131
}
145-
146-
extension SupabaseClient: FunctionsHTTPClient {
147-
public func execute(
148-
_ request: URLRequest,
149-
client: FunctionsClient
150-
) async throws -> (Data, HTTPURLResponse) {
151-
let request = try await adapt(request: request)
152-
return try await httpClient.functions.execute(request, client: client)
153-
}
154-
}

0 commit comments

Comments
 (0)