Skip to content

Exposing ConnectionDetailsProvider in ChatSession #46

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 27, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,14 @@ fun configure(config: GlobalConfig)

--------------------

#### `ChatSession.getConnectionDetailsProvider`
Returns a `ConnectionDetailsProvider` object that includes connection details.

```
fun getConnectionDetailsProvider(): ConnectionDetailsProvider
```
* Return type: [ConnectionDetailsProvider](#connectiondetailsprovider)

#### `ChatSession.connect`
Attempts to connect to a chat session with the given details.

Expand Down Expand Up @@ -479,6 +487,63 @@ data class ChatDetails(
* Participant token received via [StartChatContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartChatContact.html) response
* Type: `String`
---------------------

### ConnectionDetailsProvider

```
interface ConnectionDetailsProvider {
fun updateChatDetails(newDetails: ChatDetails)
fun getConnectionDetails(): ConnectionDetails?
fun updateConnectionDetails(newDetails: ConnectionDetails)
fun getChatDetails(): ChatDetails?
fun isChatSessionActive(): Boolean
fun setChatSessionState(isActive: Boolean)
}
```
* `updateChatDetails`
* Updates chat details
* newDetails
* Type: `ChatDetails`
* `getConnectionDetails`
* Gets connection details received via [CreateParticipantConnection](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-participant_CreateParticipantConnection.html) response
* Return type: [ConnectionDetails](#connectiondetails)
* `updateConnectionDetails`
* Updates connection details
* newDetails
* Type: [ConnectionDetails](#connectiondetails)
* `getChatDetails`
* Gets chat details
* Return type: `ChatDetails`
* `isChatSessionActive`
* Gets chat session active state
* Return type: Boolean
* `setChatSessionState`
* Sets chat session state
* isActive
* Type: Boolean

---------------------

### ConnectionDetails

```
data class ConnectionDetails(
val websocketUrl: String,
val connectionToken: String,
val expiry: String
)
```
* `websocketUrl`
* URL of the websocket received via [CreateParticipantConnection](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-participant_CreateParticipantConnection.html) response
* Type: `String`
* `connectionToken`
* Connection token received via [CreateParticipantConnection](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-participant_CreateParticipantConnection.html) response
* Type: `String`
* `expiry`
* Expiration of the token received via [CreateParticipantConnection](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-participant_CreateParticipantConnection.html) response
* Type: `String`
---------------------

### ContentType

`ContentType` describe the type of events and messages that come through the WebSocket.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import com.amazon.connect.chat.sdk.model.MessageReceiptType
import com.amazon.connect.chat.sdk.model.MessageStatus
import com.amazon.connect.chat.sdk.model.TranscriptItem
import com.amazon.connect.chat.sdk.model.TranscriptResponse
import com.amazon.connect.chat.sdk.provider.ConnectionDetailsProvider
import com.amazon.connect.chat.sdk.repository.ChatService
import com.amazonaws.services.connectparticipant.model.ScanDirection
import com.amazonaws.services.connectparticipant.model.SortKey
Expand All @@ -29,6 +30,13 @@ import javax.inject.Singleton

interface ChatSession {
fun configure(config: GlobalConfig)

/**
* Returns ConnectionDetailsProvider object
* @return ConnectionDetailsProvider object that includes connection details.
*/
fun getConnectionDetailsProvider(): ConnectionDetailsProvider

/**
* Connects to a chat session with the specified chat details.
* @param chatDetails The details of the chat.
Expand Down Expand Up @@ -200,6 +208,10 @@ class ChatSessionImpl @Inject constructor(private val chatService: ChatService)
chatService.configure(config)
}

override fun getConnectionDetailsProvider(): ConnectionDetailsProvider {
return chatService.getConnectionDetailsProvider()
}

override suspend fun connect(chatDetails: ChatDetails): Result<Boolean> {
// Establish subscriptions whenever a new chat session is initiated
setupEventSubscriptions()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ interface ChatService {

fun configure(config: GlobalConfig)

fun getConnectionDetailsProvider(): ConnectionDetailsProvider

/**
* Creates a chat session with the specified chat details.
* @param chatDetails The details of the chat.
Expand Down Expand Up @@ -188,6 +190,10 @@ class ChatServiceImpl @Inject constructor(
metricsManager.configure(config)
}

override fun getConnectionDetailsProvider(): ConnectionDetailsProvider {
return connectionDetailsProvider
}

init {
registerNotificationListeners()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import com.amazon.connect.chat.sdk.repository.ChatService
import com.amazonaws.regions.Regions
import com.amazonaws.services.connectparticipant.model.ScanDirection
import com.amazonaws.services.connectparticipant.model.SortKey
import junit.framework.TestCase.assertEquals
import junit.framework.TestCase.assertTrue
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest
Expand Down Expand Up @@ -50,6 +51,12 @@ class ChatSessionImplTest {
verify(chatService).configure(config)
}

@Test
fun test_getConnectionDetailsProvider(){
chatSession.getConnectionDetailsProvider()
verify(chatService).getConnectionDetailsProvider()
}

@Test
fun test_connect_success() = runTest {
val chatDetails = ChatDetails(participantToken = "participant-token")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,12 @@ class ChatServiceImplTest {
verify(awsClient).configure(config)
}

@Test
fun test_getConnectionDetailsProvider(){
val result = chatService.getConnectionDetailsProvider()
assertEquals(result, connectionDetailsProvider)
}

@Test
fun test_createParticipantConnection_success() = runTest {
val chatDetails = ChatDetails(participantToken = "token")
Expand Down
Loading