Skip to content

Commit 03feb88

Browse files
committed
Propagate session IDs through organization APIs
1 parent 355b8a0 commit 03feb88

18 files changed

Lines changed: 154 additions & 154 deletions

Sources/ClerkKit/Core/Account.swift

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,6 @@ struct Account {
3636
self.passkeyService = passkeyService
3737
}
3838

39-
private func offset(forPage page: Int, pageSize: Int) -> Int {
40-
max(page - 1, 0) * pageSize
41-
}
42-
43-
private func externalAuthenticationURL(_ redirectUrl: String?) throws -> URL {
44-
guard let redirectUrl,
45-
let url = URL(string: redirectUrl)
46-
else {
47-
throw ClerkClientError(message: "Redirect URL is missing or invalid. Unable to start external authentication flow.")
48-
}
49-
return url
50-
}
51-
5239
@discardableResult
5340
func reload() async throws -> User {
5441
try await userService.reload(sessionId: clerk.session?.id)
@@ -189,7 +176,7 @@ struct Account {
189176
status: String? = nil
190177
) async throws -> ClerkPaginatedResponse<UserOrganizationInvitation> {
191178
try await getOrganizationInvitations(
192-
offset: offset(forPage: page, pageSize: pageSize),
179+
offset: clerkPaginationOffset(forPage: page, pageSize: pageSize),
193180
pageSize: pageSize,
194181
status: status
195182
)
@@ -215,7 +202,7 @@ struct Account {
215202
pageSize: Int = 20
216203
) async throws -> ClerkPaginatedResponse<OrganizationMembership> {
217204
try await getOrganizationMemberships(
218-
offset: offset(forPage: page, pageSize: pageSize),
205+
offset: clerkPaginationOffset(forPage: page, pageSize: pageSize),
219206
pageSize: pageSize
220207
)
221208
}
@@ -239,7 +226,7 @@ struct Account {
239226
status: [String] = []
240227
) async throws -> ClerkPaginatedResponse<OrganizationSuggestion> {
241228
try await getOrganizationSuggestions(
242-
offset: offset(forPage: page, pageSize: pageSize),
229+
offset: clerkPaginationOffset(forPage: page, pageSize: pageSize),
243230
pageSize: pageSize,
244231
status: status
245232
)
@@ -374,7 +361,7 @@ struct Account {
374361
_ externalAccount: ExternalAccount,
375362
prefersEphemeralWebBrowserSession: Bool = false
376363
) async throws -> ExternalAccount {
377-
let url = try externalAuthenticationURL(externalAccount.verification?.externalVerificationRedirectUrl)
364+
let url = try clerkExternalAuthenticationURL(from: externalAccount.verification?.externalVerificationRedirectUrl)
378365
let authSession = WebAuthentication(
379366
url: url,
380367
prefersEphemeralWebBrowserSession: prefersEphemeralWebBrowserSession

Sources/ClerkKit/Core/Auth+FlowHelpers.swift

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,6 @@ import Foundation
99
// MARK: - Flow Helpers
1010

1111
extension Auth {
12-
func externalAuthenticationURL(_ redirectUrl: String?) throws -> URL {
13-
guard let redirectUrl,
14-
let url = URL(string: redirectUrl)
15-
else {
16-
throw ClerkClientError(message: "Redirect URL is missing or invalid. Unable to start external authentication flow.")
17-
}
18-
19-
return url
20-
}
21-
2212
@discardableResult
2313
func reload(_ signIn: SignIn, rotatingTokenNonce: String? = nil) async throws -> SignIn {
2414
try await signInService.get(signInId: signIn.id, params: .init(rotatingTokenNonce: rotatingTokenNonce))

Sources/ClerkKit/Core/Auth.swift

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -518,7 +518,7 @@ extension Auth {
518518
)
519519
)
520520

521-
let url = try externalAuthenticationURL(preparedSignIn.firstFactorVerification?.externalVerificationRedirectUrl)
521+
let url = try clerkExternalAuthenticationURL(from: preparedSignIn.firstFactorVerification?.externalVerificationRedirectUrl)
522522
let authSession = WebAuthentication(
523523
url: url,
524524
prefersEphemeralWebBrowserSession: prefersEphemeralWebBrowserSession
@@ -543,7 +543,7 @@ extension Auth {
543543
)
544544
)
545545

546-
let url = try externalAuthenticationURL(preparedSignIn.firstFactorVerification?.externalVerificationRedirectUrl)
546+
let url = try clerkExternalAuthenticationURL(from: preparedSignIn.firstFactorVerification?.externalVerificationRedirectUrl)
547547
let authSession = WebAuthentication(
548548
url: url,
549549
prefersEphemeralWebBrowserSession: prefersEphemeralWebBrowserSession
@@ -638,7 +638,7 @@ extension Auth {
638638
))
639639

640640
let verification = signUp.verifications.first(where: { $0.key == "external_account" })?.value
641-
let url = try externalAuthenticationURL(verification?.externalVerificationRedirectUrl)
641+
let url = try clerkExternalAuthenticationURL(from: verification?.externalVerificationRedirectUrl)
642642
let authSession = WebAuthentication(
643643
url: url,
644644
prefersEphemeralWebBrowserSession: prefersEphemeralWebBrowserSession
@@ -710,7 +710,7 @@ extension Auth {
710710
))
711711

712712
let verification = signUp.verifications.first(where: { $0.key == "external_account" })?.value
713-
let url = try externalAuthenticationURL(verification?.externalVerificationRedirectUrl)
713+
let url = try clerkExternalAuthenticationURL(from: verification?.externalVerificationRedirectUrl)
714714
let authSession = WebAuthentication(
715715
url: url,
716716
prefersEphemeralWebBrowserSession: prefersEphemeralWebBrowserSession
@@ -838,10 +838,7 @@ extension Auth {
838838
/// - Throws: An error if revoking the session fails.
839839
@discardableResult
840840
public func revokeSession(_ session: Session) async throws -> Session {
841-
try await sessionService.revoke(
842-
sessionId: session.id,
843-
actingSessionId: clerk.session?.id
844-
)
841+
try await revoke(session)
845842
}
846843

847844
@discardableResult
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import Foundation
2+
3+
func clerkPaginationOffset(forPage page: Int, pageSize: Int) -> Int {
4+
max(page - 1, 0) * pageSize
5+
}
6+
7+
func clerkExternalAuthenticationURL(from redirectUrl: String?) throws -> URL {
8+
guard let redirectUrl,
9+
let url = URL(string: redirectUrl)
10+
else {
11+
throw ClerkClientError(message: "Redirect URL is missing or invalid. Unable to start external authentication flow.")
12+
}
13+
14+
return url
15+
}

Sources/ClerkKit/Core/Organizations.swift

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ extension Organizations {
6464
) async throws -> ClerkPaginatedResponse<RoleResource> {
6565
try await organizationService.getOrganizationRoles(
6666
organizationId: organization.id,
67-
offset: offset(forPage: page, pageSize: pageSize),
67+
offset: clerkPaginationOffset(forPage: page, pageSize: pageSize),
6868
pageSize: pageSize,
6969
sessionId: clerk.session?.id
7070
)
@@ -85,7 +85,7 @@ extension Organizations {
8585
organizationId: organization.id,
8686
query: query,
8787
role: role,
88-
offset: offset(forPage: page, pageSize: pageSize),
88+
offset: clerkPaginationOffset(forPage: page, pageSize: pageSize),
8989
pageSize: pageSize,
9090
sessionId: clerk.session?.id
9191
)
@@ -169,7 +169,7 @@ extension Organizations {
169169
) async throws -> ClerkPaginatedResponse<OrganizationInvitation> {
170170
try await organizationService.getOrganizationInvitations(
171171
organizationId: organization.id,
172-
offset: offset(forPage: page, pageSize: pageSize),
172+
offset: clerkPaginationOffset(forPage: page, pageSize: pageSize),
173173
pageSize: pageSize,
174174
status: status,
175175
sessionId: clerk.session?.id
@@ -238,7 +238,7 @@ extension Organizations {
238238
) async throws -> ClerkPaginatedResponse<OrganizationDomain> {
239239
try await organizationService.getOrganizationDomains(
240240
organizationId: organization.id,
241-
offset: offset(forPage: page, pageSize: pageSize),
241+
offset: clerkPaginationOffset(forPage: page, pageSize: pageSize),
242242
pageSize: pageSize,
243243
enrollmentMode: enrollmentMode,
244244
sessionId: clerk.session?.id
@@ -300,7 +300,7 @@ extension Organizations {
300300
) async throws -> ClerkPaginatedResponse<OrganizationMembershipRequest> {
301301
try await organizationService.getOrganizationMembershipRequests(
302302
organizationId: organization.id,
303-
offset: offset(forPage: page, pageSize: pageSize),
303+
offset: clerkPaginationOffset(forPage: page, pageSize: pageSize),
304304
pageSize: pageSize,
305305
status: status,
306306
sessionId: clerk.session?.id
@@ -323,11 +323,3 @@ extension Organizations {
323323
)
324324
}
325325
}
326-
327-
// MARK: - Helpers
328-
329-
extension Organizations {
330-
func offset(forPage page: Int, pageSize: Int) -> Int {
331-
max(page - 1, 0) * pageSize
332-
}
333-
}

Sources/ClerkKit/Domains/User/User.swift

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ extension User {
343343
status: String? = nil
344344
) async throws -> ClerkPaginatedResponse<UserOrganizationInvitation> {
345345
try await getOrganizationInvitations(
346-
offset: offset(forPage: page, pageSize: pageSize),
346+
offset: clerkPaginationOffset(forPage: page, pageSize: pageSize),
347347
pageSize: pageSize,
348348
status: status
349349
)
@@ -379,7 +379,7 @@ extension User {
379379
pageSize: Int = 20
380380
) async throws -> ClerkPaginatedResponse<OrganizationMembership> {
381381
try await getOrganizationMemberships(
382-
offset: offset(forPage: page, pageSize: pageSize),
382+
offset: clerkPaginationOffset(forPage: page, pageSize: pageSize),
383383
pageSize: pageSize
384384
)
385385
}
@@ -413,7 +413,7 @@ extension User {
413413
status: [String] = []
414414
) async throws -> ClerkPaginatedResponse<OrganizationSuggestion> {
415415
try await getOrganizationSuggestions(
416-
offset: offset(forPage: page, pageSize: pageSize),
416+
offset: clerkPaginationOffset(forPage: page, pageSize: pageSize),
417417
pageSize: pageSize,
418418
status: status
419419
)
@@ -438,10 +438,6 @@ extension User {
438438
)
439439
}
440440

441-
private func offset(forPage page: Int, pageSize: Int) -> Int {
442-
max(page - 1, 0) * pageSize
443-
}
444-
445441
/// Retrieves the organization creation defaults for this user.
446442
///
447443
/// Returns pre-filled form values (name, slug, logo) based on the instance's default naming rules.

0 commit comments

Comments
 (0)