From 57249de6b921dac5492cc23233d1ac2e4c0a9344 Mon Sep 17 00:00:00 2001 From: sam Date: Fri, 17 Jul 2026 13:14:17 -0700 Subject: [PATCH] docs(auth): document organization-scoped ticket sessions --- Sources/ClerkKit/Core/Auth.swift | 4 ++++ Tests/Domains/Auth/AuthTests.swift | 1 + .../ClerkClientSyncResponseMiddlewareTests.swift | 9 ++++++--- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Sources/ClerkKit/Core/Auth.swift b/Sources/ClerkKit/Core/Auth.swift index 7ca5bd0da..73ff901db 100644 --- a/Sources/ClerkKit/Core/Auth.swift +++ b/Sources/ClerkKit/Core/Auth.swift @@ -375,6 +375,10 @@ public struct Auth { /// Signs in with a ticket generated from the Backend API. /// + /// If the ticket is scoped to an organization, the resulting session activates that + /// organization. After sign-in succeeds, access the organization ID through + /// ``Clerk/session`` and ``Session/lastActiveOrganizationId``. + /// /// - Parameter ticket: The ticket string from the Backend API. /// - Returns: A `SignIn` object representing the sign-in attempt. /// - Throws: An error if the ticket sign-in fails. diff --git a/Tests/Domains/Auth/AuthTests.swift b/Tests/Domains/Auth/AuthTests.swift index 77577326a..ba5dd215f 100644 --- a/Tests/Domains/Auth/AuthTests.swift +++ b/Tests/Domains/Auth/AuthTests.swift @@ -343,6 +343,7 @@ struct AuthTests { _ = try await Clerk.shared.auth.signInWithTicket("mock_ticket_value") let params = try #require(signInParams.value) + #expect(params.strategy == .ticket) #expect(params.ticket == "mock_ticket_value") } diff --git a/Tests/Middleware/ClerkClientSyncResponseMiddlewareTests.swift b/Tests/Middleware/ClerkClientSyncResponseMiddlewareTests.swift index c64d81344..3c4001c27 100644 --- a/Tests/Middleware/ClerkClientSyncResponseMiddlewareTests.swift +++ b/Tests/Middleware/ClerkClientSyncResponseMiddlewareTests.swift @@ -67,7 +67,7 @@ struct ClerkClientSyncResponseMiddlewareTests { } @Test - func validateAppliesClientFromClientResponseEnvelope() async throws { + func validateAppliesOrganizationScopedTicketSessionFromClientResponseEnvelope() async throws { configureClerkForTesting() let clerk = Clerk() let middleware = ClerkClientSyncResponseMiddleware(runtimeScope: .current(clerkProvider: { clerk })) @@ -76,8 +76,11 @@ struct ClerkClientSyncResponseMiddlewareTests { var expectedClient = Client.mock expectedClient.lastActiveSessionId = session.id expectedClient.sessions = [session] - let data = try JSONEncoder.clerkEncoder.encode(ClientResponse(response: session, client: expectedClient)) - let url = try #require(URL(string: "https://example.com/v1/client/sessions/\(session.id)/touch")) + var signIn = SignIn.mock + signIn.status = .complete + signIn.createdSessionId = session.id + let data = try JSONEncoder.clerkEncoder.encode(ClientResponse(response: signIn, client: expectedClient)) + let url = try #require(URL(string: "https://example.com/v1/client/sign_ins")) let response = try #require(HTTPURLResponse( url: url, statusCode: 200,