├── .github
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── documentation-request.md
└── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── .gitmodules
├── CODEOWNERS
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── NOTICE
├── README.md
├── analytics
└── meeting-event-dashboard
│ ├── README.md
│ └── meeting-events-blog-template.yaml
├── apps
├── amplify-demo
│ ├── .gitignore
│ ├── README.md
│ ├── lambda
│ │ └── index.js
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ │ ├── architecture_diagram.jpg
│ │ └── index.html
│ ├── schema.graphql
│ ├── src
│ │ ├── components
│ │ │ ├── Meeting.tsx
│ │ │ └── MeetingForm.tsx
│ │ ├── index.tsx
│ │ └── utils
│ │ │ └── api.ts
│ └── tsconfig.json
├── android-webview-sample
│ ├── .gitignore
│ ├── README.md
│ ├── app
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── amazonaws
│ │ │ │ └── android_webview_sample
│ │ │ │ └── AndroidWebView_UITest.kt
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ └── com
│ │ │ │ └── amazonaws
│ │ │ │ └── android_webview_sample
│ │ │ │ ├── AppConfig.kt
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── MainFragment.kt
│ │ │ │ └── WebviewFragment.kt
│ │ │ └── res
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── content_main.xml
│ │ │ ├── fragment_main.xml
│ │ │ └── fragment_webview.xml
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ ├── values
│ │ │ ├── colors.xml
│ │ │ ├── strings.xml
│ │ │ └── themes.xml
│ │ │ └── xml
│ │ │ └── backup_descriptor.xml
│ ├── build.gradle
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ └── settings.gradle
├── chat-android
│ ├── .gitignore
│ ├── README.md
│ ├── app
│ │ ├── build.gradle
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── ic_launcher-playstore.png
│ │ │ ├── java
│ │ │ └── com
│ │ │ │ └── amazonaws
│ │ │ │ └── services
│ │ │ │ └── chime
│ │ │ │ └── sdkdemo
│ │ │ │ ├── AmazonChimeSDKMessagingDemoApp.kt
│ │ │ │ ├── DefaultFirebaseMessagingService.kt
│ │ │ │ ├── ServiceLocator.kt
│ │ │ │ ├── ViewModelFactory.kt
│ │ │ │ ├── common
│ │ │ │ ├── AppConstants.kt
│ │ │ │ ├── coroutine
│ │ │ │ │ └── CoroutineContextProvider.kt
│ │ │ │ └── extensions
│ │ │ │ │ ├── AndroidExtension.kt
│ │ │ │ │ └── JavaExtension.kt
│ │ │ │ ├── data
│ │ │ │ ├── Channel.kt
│ │ │ │ ├── ChannelMessage.kt
│ │ │ │ ├── Result.kt
│ │ │ │ ├── User.kt
│ │ │ │ ├── UserEndpoint.kt
│ │ │ │ └── source
│ │ │ │ │ ├── DefaultMessageRepository.kt
│ │ │ │ │ ├── DefaultUserRepository.kt
│ │ │ │ │ ├── MessageRepository.kt
│ │ │ │ │ ├── UserRepository.kt
│ │ │ │ │ └── service
│ │ │ │ │ ├── AmazonChimeSDKService.kt
│ │ │ │ │ ├── AuthService.kt
│ │ │ │ │ ├── DefaultAmazonChimeSDKService.kt
│ │ │ │ │ └── DefaultAuthService.kt
│ │ │ │ └── ui
│ │ │ │ ├── base
│ │ │ │ ├── BaseActivity.kt
│ │ │ │ └── ViewState.kt
│ │ │ │ ├── channel
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AppInstanceSettingsViewModel.kt
│ │ │ │ │ └── ChannelViewModel.kt
│ │ │ │ └── view
│ │ │ │ │ ├── activity
│ │ │ │ │ ├── AppInstanceSettingsActivity.kt
│ │ │ │ │ └── ChannelActivity.kt
│ │ │ │ │ └── adapter
│ │ │ │ │ └── ChannelAdapter.kt
│ │ │ │ ├── messaging
│ │ │ │ ├── presentation
│ │ │ │ │ ├── MessagingViewModel.kt
│ │ │ │ │ └── NotificationSettingsViewModel.kt
│ │ │ │ └── view
│ │ │ │ │ ├── activity
│ │ │ │ │ ├── MessagingActivity.kt
│ │ │ │ │ └── NotificationSettingsActivity.kt
│ │ │ │ │ └── adapter
│ │ │ │ │ └── MessageAdapter.kt
│ │ │ │ └── signin
│ │ │ │ ├── presentation
│ │ │ │ └── SignInViewModel.kt
│ │ │ │ └── view
│ │ │ │ └── SignInActivity.kt
│ │ │ └── res
│ │ │ ├── drawable-v24
│ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── drawable
│ │ │ ├── bubble_my_message.xml
│ │ │ ├── bubble_their_message.xml
│ │ │ ├── button_send_message.xml
│ │ │ └── ic_up.xml
│ │ │ ├── layout
│ │ │ ├── activity_app_instance_settings.xml
│ │ │ ├── activity_channels.xml
│ │ │ ├── activity_messaging.xml
│ │ │ ├── activity_notification_settings.xml
│ │ │ ├── activity_signin.xml
│ │ │ ├── channel_item.xml
│ │ │ └── message_item.xml
│ │ │ ├── menu
│ │ │ ├── app_instance_settings.xml
│ │ │ └── channel_settings.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── raw
│ │ │ └── amplifyconfiguration.json
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ ├── build.gradle
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── media
│ │ └── awsChimeSDKMessagingDemo.png
│ ├── messaging-websocket
│ │ ├── build.gradle
│ │ ├── src
│ │ │ └── main
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── amazonaws
│ │ │ │ └── services
│ │ │ │ └── chime
│ │ │ │ └── sdk
│ │ │ │ └── messaging
│ │ │ │ ├── Message.kt
│ │ │ │ ├── internal
│ │ │ │ ├── DefaultWebSocketAdapter.kt
│ │ │ │ ├── WebSocketAdapter.kt
│ │ │ │ └── WebSocketAdapterObserver.kt
│ │ │ │ ├── session
│ │ │ │ ├── ChimeUserCredentials.kt
│ │ │ │ ├── DefaultMessagingSession.kt
│ │ │ │ ├── MessagingSession.kt
│ │ │ │ ├── MessagingSessionConfiguration.kt
│ │ │ │ ├── MessagingSessionObserver.kt
│ │ │ │ └── MessagingSessionStatus.kt
│ │ │ │ └── utils
│ │ │ │ ├── DefaultSigV4.kt
│ │ │ │ ├── ObserverUtils.kt
│ │ │ │ ├── SigV4.kt
│ │ │ │ └── logger
│ │ │ │ ├── ConsoleLogger.kt
│ │ │ │ ├── LogLevel.kt
│ │ │ │ └── Logger.kt
│ │ └── version.properties
│ ├── pre-commit
│ └── settings.gradle
├── chat-ios
│ ├── .gitignore
│ ├── AmazonChimeSDKMessagingDemo.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ └── swiftpm
│ │ │ │ └── Package.resolved
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── AmazonChimeSDKMessagingDemo.xcscheme
│ ├── AmazonChimeSDKMessagingDemo.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── AmazonChimeSDKMessagingDemo
│ │ ├── AmazonChimeSDKMessagingDemo.entitlements
│ │ ├── AppConfiguration.swift
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AccentColor.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ ├── SceneDelegate.swift
│ │ ├── amplifyconfiguration.json
│ │ ├── controllers
│ │ │ ├── ChannelTableViewController.swift
│ │ │ ├── ChatViewController.swift
│ │ │ ├── NotificationSettingsViewController.swift
│ │ │ ├── SettingsViewController.swift
│ │ │ └── SignInViewController.swift
│ │ ├── entity
│ │ │ ├── ChatMessage.swift
│ │ │ ├── ChatMessageTableViewCell.swift
│ │ │ ├── CredentialExchangeResponse.swift
│ │ │ ├── Message.swift
│ │ │ ├── NotificationLevel.swift
│ │ │ ├── Payload.swift
│ │ │ └── User.swift
│ │ ├── messaging-websocket
│ │ │ ├── internal
│ │ │ │ ├── DefaultWebSocketAdapter.swift
│ │ │ │ ├── WebSocketAdapter.swift
│ │ │ │ └── WebSocketAdapterObserver.swift
│ │ │ ├── session
│ │ │ │ ├── ChimeUserCredentials.swift
│ │ │ │ ├── DefaultMessagingSession.swift
│ │ │ │ ├── MessagingSession.swift
│ │ │ │ ├── MessagingSessionConfiguration.swift
│ │ │ │ ├── MessagingSessionObserver.swift
│ │ │ │ └── MessagingSessionStatus.swift
│ │ │ └── utils
│ │ │ │ ├── ConcurrentMutableSet.swift
│ │ │ │ ├── DefaultSigV4.swift
│ │ │ │ ├── ObserverUtils.swift
│ │ │ │ └── SigV4.swift
│ │ ├── models
│ │ │ ├── ChatModel.swift
│ │ │ ├── NotificationSettingsModel.swift
│ │ │ └── SettingsModel.swift
│ │ ├── service
│ │ │ ├── AWSChimeSDKIdentityService.swift
│ │ │ ├── AWSChimeSDKMessagingService.swift
│ │ │ ├── AttachmentService.swift
│ │ │ └── AuthService.swift
│ │ └── utils
│ │ │ ├── Constants.swift
│ │ │ ├── Extensions.swift
│ │ │ ├── HttpUtils.swift
│ │ │ └── Utils.swift
│ ├── Podfile
│ ├── README.md
│ └── media
│ │ └── awsChimeSDKMessagingDemo.png
├── chat
│ ├── .babelrc
│ ├── .eslintrc
│ ├── README.md
│ ├── app
│ │ └── chat.html
│ ├── package-lock.json
│ ├── package.json
│ ├── src
│ │ ├── Chat.css
│ │ ├── Chat.jsx
│ │ ├── Config.js
│ │ ├── api
│ │ │ └── ChimeAPI.js
│ │ ├── backend
│ │ │ └── serverless
│ │ │ │ ├── appconfig.json
│ │ │ │ ├── channelFlowBlogTemplate.yaml
│ │ │ │ ├── samconfig.toml
│ │ │ │ └── template.yaml
│ │ ├── components
│ │ │ ├── ActivityBar
│ │ │ │ └── index.tsx
│ │ │ ├── Authenticated.js
│ │ │ ├── Card
│ │ │ │ ├── Styled.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── ChannelModals
│ │ │ │ ├── AddMemberModal.jsx
│ │ │ │ ├── BanModal.jsx
│ │ │ │ ├── ChannelModals.css
│ │ │ │ ├── DeleteChannelModal.jsx
│ │ │ │ ├── EditChannelModal.jsx
│ │ │ │ ├── JoinMeetingModal.css
│ │ │ │ ├── JoinMeetingModal.jsx
│ │ │ │ ├── JoinSubChannelModel.jsx
│ │ │ │ ├── LeaveChannelModal.jsx
│ │ │ │ ├── ListSubChannelModel.jsx
│ │ │ │ ├── ManageChannelFlowModal.jsx
│ │ │ │ ├── ManageMembersModal.jsx
│ │ │ │ ├── NewChannelModal.css
│ │ │ │ ├── NewChannelModal.jsx
│ │ │ │ ├── SetCustomStatusModal.css
│ │ │ │ ├── SetCustomStatusModal.jsx
│ │ │ │ ├── ViewChannelDetailsModal.jsx
│ │ │ │ ├── ViewMembersModal.jsx
│ │ │ │ └── index.jsx
│ │ │ ├── ContactPicker
│ │ │ │ └── index.js
│ │ │ └── DeviceSelection
│ │ │ │ ├── CameraDevices
│ │ │ │ └── index.tsx
│ │ │ │ ├── MicrophoneDevices
│ │ │ │ ├── MicrophoneActivityPreview.tsx
│ │ │ │ ├── MicrophoneActivityPreviewBar.tsx
│ │ │ │ └── index.tsx
│ │ │ │ ├── SpeakerDevices
│ │ │ │ └── index.tsx
│ │ │ │ ├── Styled.tsx
│ │ │ │ └── index.tsx
│ │ ├── constants
│ │ │ ├── index.ts
│ │ │ └── routes.jsx
│ │ ├── containers
│ │ │ ├── EndMeetingControl
│ │ │ │ ├── Styled.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── MeetingChat.tsx
│ │ │ ├── MeetingControls
│ │ │ │ ├── Styled.ts
│ │ │ │ └── index.tsx
│ │ │ ├── MeetingDetails
│ │ │ │ ├── Styled.ts
│ │ │ │ └── index.tsx
│ │ │ ├── MeetingJoinDetails.tsx
│ │ │ ├── MeetingMetrics
│ │ │ │ ├── Styled.ts
│ │ │ │ └── index.tsx
│ │ │ ├── MeetingRoster.tsx
│ │ │ ├── Navigation
│ │ │ │ ├── NavigationControl.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── NoMeetingRedirect.tsx
│ │ │ ├── Notifications
│ │ │ │ └── index.jsx
│ │ │ ├── Presence
│ │ │ │ ├── ChannelPresence.css
│ │ │ │ └── ChannelPresence.jsx
│ │ │ ├── TypingIndicator
│ │ │ │ ├── index.css
│ │ │ │ └── index.tsx
│ │ │ ├── channels
│ │ │ │ ├── ChannelsWrapper.css
│ │ │ │ ├── ChannelsWrapper.jsx
│ │ │ │ └── ModalManager.jsx
│ │ │ ├── input
│ │ │ │ ├── Input.css
│ │ │ │ └── Input.jsx
│ │ │ ├── loginWithCognito
│ │ │ │ ├── LoginWithCognito.css
│ │ │ │ └── LoginWithCognito.jsx
│ │ │ ├── loginWithCredentialExchangeService
│ │ │ │ ├── LoginWithCredentialExchangeService.css
│ │ │ │ └── LoginWithCredentialExchangeService.jsx
│ │ │ └── messages
│ │ │ │ ├── AttachmentProcessor.jsx
│ │ │ │ ├── Messages.css
│ │ │ │ └── Messages.jsx
│ │ ├── hooks
│ │ │ └── useMeetingEndRedirect.tsx
│ │ ├── index.js
│ │ ├── providers
│ │ │ ├── AppStateProvider.jsx
│ │ │ ├── AuthProvider.jsx
│ │ │ ├── ChatMessagesProvider
│ │ │ │ └── index.jsx
│ │ │ ├── IdentityProvider.jsx
│ │ │ ├── NavigationProvider.tsx
│ │ │ └── UserPermissionProvider.jsx
│ │ ├── services
│ │ │ ├── AttachmentService.js
│ │ │ ├── IdentityService.js
│ │ │ ├── MessagingService.js
│ │ │ └── servicesConfig.js
│ │ ├── utilities
│ │ │ ├── TestSound.tsx
│ │ │ ├── arnParser.js
│ │ │ ├── formatBytes.js
│ │ │ ├── insertDateHeaders.jsx
│ │ │ ├── mergeArrays.js
│ │ │ ├── presence.js
│ │ │ └── styles.css
│ │ └── views
│ │ │ ├── Channels
│ │ │ ├── index.jsx
│ │ │ └── style.css
│ │ │ ├── DeviceSetup
│ │ │ ├── Styled.ts
│ │ │ └── index.tsx
│ │ │ ├── Meeting
│ │ │ ├── Styled.ts
│ │ │ └── index.tsx
│ │ │ └── Signin
│ │ │ ├── index.jsx
│ │ │ └── style.css
│ ├── tsconfig.json
│ └── webpack.config.js
├── iOS-WKWebView-sample
│ ├── .gitignore
│ ├── README.md
│ ├── WkWebView Demo.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── WkWebView Demo.xcscheme
│ ├── WkWebView Demo
│ │ ├── AppConfiguration.swift
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AccentColor.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── HomeViewController.swift
│ │ ├── Info.plist
│ │ ├── SceneDelegate.swift
│ │ └── WkWebViewController.swift
│ └── WkWebView DemoUITests
│ │ ├── Info.plist
│ │ └── WkWebView_DemoUITests.swift
├── meeting
│ ├── .eslintrc.json
│ ├── .gitignore
│ ├── CONTRIBUTING.md
│ ├── README.MD
│ ├── app
│ │ └── meeting.html
│ ├── package-lock.json
│ ├── package.json
│ ├── scripts
│ │ └── setup-chime-react-submodule.js
│ ├── server.js
│ ├── serverless
│ │ ├── .gitignore
│ │ ├── deploy.js
│ │ ├── src
│ │ │ ├── handlers.js
│ │ │ ├── index.js
│ │ │ ├── package-lock.json
│ │ │ └── package.json
│ │ └── template.yaml
│ ├── src
│ │ ├── app.tsx
│ │ ├── components
│ │ │ ├── ActivityBar
│ │ │ │ └── index.tsx
│ │ │ ├── Card
│ │ │ │ ├── Styled.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── DeviceSelection
│ │ │ │ ├── CameraDevices
│ │ │ │ │ ├── BackgroundReplacementDropdown.tsx
│ │ │ │ │ ├── VideoTransformDropdown.tsx
│ │ │ │ │ └── index.tsx
│ │ │ │ ├── MicrophoneDevices
│ │ │ │ │ ├── MicrophoneActivityPreview.tsx
│ │ │ │ │ ├── MicrophoneActivityPreviewBar.tsx
│ │ │ │ │ └── index.tsx
│ │ │ │ ├── SpeakerDevices
│ │ │ │ │ └── index.tsx
│ │ │ │ ├── Styled.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── MediaStatsList
│ │ │ │ ├── MetricItem.tsx
│ │ │ │ ├── Styled.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── MeetingControls
│ │ │ │ └── VideoInputTransformControl.tsx
│ │ │ ├── RemoteVideo.tsx
│ │ │ ├── RosterAttendeeWrapper.tsx
│ │ │ ├── SIPMeetingForm
│ │ │ │ └── index.tsx
│ │ │ ├── VideoTileGrid
│ │ │ │ ├── Styled.tsx
│ │ │ │ └── VideoTileGrid.tsx
│ │ │ └── icons
│ │ │ │ ├── FeaturedLayout.tsx
│ │ │ │ ├── GalleryLayout.tsx
│ │ │ │ └── Spinner
│ │ │ │ ├── Styled.tsx
│ │ │ │ └── index.tsx
│ │ ├── constants
│ │ │ ├── index.ts
│ │ │ └── routes.ts
│ │ ├── containers
│ │ │ ├── Chat
│ │ │ │ ├── ChatInput.tsx
│ │ │ │ ├── Messages.tsx
│ │ │ │ ├── Styled.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── DevicePermissionControl
│ │ │ │ ├── DevicePermissionControl.tsx
│ │ │ │ └── Styled.tsx
│ │ │ ├── DevicePermissionPrompt.tsx
│ │ │ ├── DynamicMeetingControls
│ │ │ │ ├── Styled.ts
│ │ │ │ └── index.tsx
│ │ │ ├── EndMeetingControl
│ │ │ │ ├── Styled.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── LocalMediaStreamMetrics
│ │ │ │ └── index.tsx
│ │ │ ├── MeetingControls
│ │ │ │ ├── Styled.ts
│ │ │ │ └── index.tsx
│ │ │ ├── MeetingDetails
│ │ │ │ ├── Styled.ts
│ │ │ │ └── index.tsx
│ │ │ ├── MeetingEventObserver
│ │ │ │ └── index.tsx
│ │ │ ├── MeetingForm
│ │ │ │ ├── RegionSelection.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── MeetingFormSelector
│ │ │ │ ├── Styled.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── MeetingJoinDetails.tsx
│ │ │ ├── MeetingProviderWrapper
│ │ │ │ └── index.tsx
│ │ │ ├── MeetingRoster.tsx
│ │ │ ├── MeetingStatusNotifier
│ │ │ │ └── index.tsx
│ │ │ ├── Navigation
│ │ │ │ ├── NavigationControl.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── NoMeetingRedirect.tsx
│ │ │ ├── Notifications.tsx
│ │ │ ├── SIPMeeting
│ │ │ │ └── index.tsx
│ │ │ ├── SIPURI
│ │ │ │ ├── Styled.tsx
│ │ │ │ └── index.tsx
│ │ │ └── VideoStreamMetrics
│ │ │ │ └── index.tsx
│ │ ├── hooks
│ │ │ ├── useMeetingEndRedirect.tsx
│ │ │ └── useToggle.tsx
│ │ ├── index.tsx
│ │ ├── meetingConfig.ts
│ │ ├── providers
│ │ │ ├── AppStateProvider.tsx
│ │ │ ├── DataMessagesProvider
│ │ │ │ ├── index.tsx
│ │ │ │ └── state.tsx
│ │ │ ├── ErrorProvider.tsx
│ │ │ ├── NavigationProvider.tsx
│ │ │ ├── SIPMeetingProvider
│ │ │ │ ├── SIPMeetingManager.ts
│ │ │ │ └── index.tsx
│ │ │ └── VideoTileGridProvider
│ │ │ │ ├── Utils.ts
│ │ │ │ ├── index.tsx
│ │ │ │ └── state.tsx
│ │ ├── style.css
│ │ ├── theme
│ │ │ └── demoTheme.ts
│ │ ├── types
│ │ │ └── index.ts
│ │ ├── utils
│ │ │ ├── TestSound.tsx
│ │ │ ├── VersionLabel.tsx
│ │ │ ├── api.ts
│ │ │ ├── background-replacement-image.ts
│ │ │ ├── background-replacement.ts
│ │ │ ├── select-options-format.ts
│ │ │ └── use-memo-compare.ts
│ │ └── views
│ │ │ ├── DeviceSetup
│ │ │ ├── Styled.ts
│ │ │ └── index.tsx
│ │ │ ├── Home
│ │ │ ├── Styled.ts
│ │ │ └── index.tsx
│ │ │ ├── Meeting
│ │ │ ├── Styled.ts
│ │ │ └── index.tsx
│ │ │ └── index.tsx
│ ├── tsconfig.json
│ ├── webpack.config.dev.js
│ └── webpack.config.js
├── moderated-chat-and-sentiment-analysis
│ ├── .babelrc
│ ├── .eslintrc
│ ├── .prettierrc
│ ├── README.md
│ ├── app
│ │ └── chat.html
│ ├── backend
│ │ ├── appconfig.json
│ │ ├── samconfig.toml
│ │ └── template.yaml
│ ├── images
│ │ ├── basic-authentication.png
│ │ ├── join-screen.png
│ │ ├── moderator.png
│ │ ├── reaction.png
│ │ ├── redacted.png
│ │ ├── redaction-of-PII.png
│ │ └── remove-from-chat.png
│ ├── package-lock.json
│ ├── package.json
│ ├── src
│ │ ├── Chat.css
│ │ ├── Chat.jsx
│ │ ├── Config.js
│ │ ├── api
│ │ │ └── ChimeAPI.js
│ │ ├── components
│ │ │ ├── Authenticated
│ │ │ │ └── index.jsx
│ │ │ ├── Input
│ │ │ │ ├── index.jsx
│ │ │ │ └── style.css
│ │ │ ├── Messages
│ │ │ │ ├── index.jsx
│ │ │ │ └── style.css
│ │ │ ├── Notifications
│ │ │ │ └── index.jsx
│ │ │ ├── SentimentAnalysis
│ │ │ │ ├── index.jsx
│ │ │ │ └── style.css
│ │ │ └── SentimentReaction
│ │ │ │ ├── index.jsx
│ │ │ │ └── style.css
│ │ ├── constants
│ │ │ └── routes.jsx
│ │ ├── index.js
│ │ ├── providers
│ │ │ ├── AuthProvider.jsx
│ │ │ └── ChatMessagesProvider.jsx
│ │ ├── services
│ │ │ └── MessagingService.js
│ │ ├── utilities
│ │ │ ├── getReactionEmoji.jsx
│ │ │ ├── insertDateHeaders.jsx
│ │ │ └── styles.css
│ │ └── views
│ │ │ ├── Channel
│ │ │ ├── index.jsx
│ │ │ └── style.css
│ │ │ └── JoinChannel
│ │ │ ├── index.jsx
│ │ │ └── style.css
│ └── webpack.config.js
├── real-time-collaboration
│ ├── .gitignore
│ ├── README.md
│ ├── backend
│ │ ├── appconfig.json
│ │ ├── samconfig.toml
│ │ └── template.yaml
│ ├── examples
│ │ └── text-editor
│ │ │ ├── .eslintignore
│ │ │ ├── .eslintrc.js
│ │ │ ├── README.md
│ │ │ ├── package-lock.json
│ │ │ ├── package.json
│ │ │ ├── src
│ │ │ ├── Config.js
│ │ │ ├── index.css
│ │ │ ├── index.html
│ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── webpack.config.js
│ ├── lerna.json
│ ├── package-lock.json
│ ├── package.json
│ ├── packages
│ │ ├── build-tools
│ │ │ ├── package-lock.json
│ │ │ ├── package.json
│ │ │ └── tsconfig.json
│ │ ├── eslint-config
│ │ │ ├── eslint.js
│ │ │ └── package.json
│ │ └── y-chime-messaging
│ │ │ ├── .eslintignore
│ │ │ ├── .eslintrc.js
│ │ │ ├── README.md
│ │ │ ├── package-lock.json
│ │ │ ├── package.json
│ │ │ ├── src
│ │ │ ├── channel.ts
│ │ │ ├── index.ts
│ │ │ ├── messagingProvider.ts
│ │ │ └── utils.ts
│ │ │ ├── tsconfig.esnext.json
│ │ │ └── tsconfig.json
│ ├── server
│ │ ├── AppInstanceLambda
│ │ │ ├── cfn-response.js
│ │ │ └── index.js
│ │ ├── CreateChannel
│ │ │ └── index.js
│ │ └── CreateUser
│ │ │ └── index.js
│ └── tsfmt.json
├── telehealth-widget
│ ├── .gitignore
│ ├── HOW-THE-DEMO-WORKS.md
│ ├── README.md
│ ├── backend
│ │ ├── .gitignore
│ │ ├── .npmignore
│ │ ├── bin
│ │ │ └── cdk.ts
│ │ ├── cdk.json
│ │ ├── lambda
│ │ │ ├── package-lock.json
│ │ │ ├── package.json
│ │ │ ├── src
│ │ │ │ ├── create-app-instance.ts
│ │ │ │ ├── create-appointment.ts
│ │ │ │ ├── create-attendee.ts
│ │ │ │ ├── create-meeting.ts
│ │ │ │ ├── create-pstn.ts
│ │ │ │ ├── create-user-for-cognito.ts
│ │ │ │ ├── delete-app-instance.ts
│ │ │ │ ├── delete-appointment.ts
│ │ │ │ ├── delete-sfn-executions.ts
│ │ │ │ ├── delete-sip-resources.ts
│ │ │ │ ├── handle-telephony-events.ts
│ │ │ │ ├── make-outbound-call.ts
│ │ │ │ ├── process-presence.ts
│ │ │ │ ├── send-sms-message.ts
│ │ │ │ └── utils
│ │ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ ├── lib
│ │ │ ├── appointment.ts
│ │ │ ├── cdk-stack.ts
│ │ │ ├── cognito.ts
│ │ │ ├── distribution.ts
│ │ │ ├── meeting.ts
│ │ │ ├── messaging.ts
│ │ │ ├── notification.ts
│ │ │ ├── presence.ts
│ │ │ └── pstn.ts
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ └── tsconfig.json
│ ├── frontend
│ │ ├── .gitignore
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── public
│ │ │ ├── favicon.ico
│ │ │ ├── index.html
│ │ │ ├── manifest.json
│ │ │ └── robots.txt
│ │ ├── scripts
│ │ │ ├── deploy.ts
│ │ │ ├── template.js
│ │ │ └── tsconfig.json
│ │ ├── src
│ │ │ ├── components
│ │ │ │ ├── AppointmentList.css
│ │ │ │ ├── AppointmentList.tsx
│ │ │ │ ├── AppointmentView.css
│ │ │ │ ├── AppointmentView.tsx
│ │ │ │ ├── Chat.css
│ │ │ │ ├── Chat.tsx
│ │ │ │ ├── ChatInput.css
│ │ │ │ ├── ChatInput.tsx
│ │ │ │ ├── ChatMessage.css
│ │ │ │ ├── ChatMessage.tsx
│ │ │ │ ├── CreateAppointment.css
│ │ │ │ ├── CreateAppointment.tsx
│ │ │ │ ├── MeetingDoctorView.css
│ │ │ │ ├── MeetingDoctorView.tsx
│ │ │ │ ├── MeetingPatientView.css
│ │ │ │ ├── MeetingPatientView.tsx
│ │ │ │ ├── MeetingWidget.css
│ │ │ │ ├── MeetingWidget.tsx
│ │ │ │ ├── RemoteAttendeeVideo.css
│ │ │ │ ├── RemoteAttendeeVideo.tsx
│ │ │ │ ├── SignInSignUp.css
│ │ │ │ ├── SignInSignUp.tsx
│ │ │ │ ├── Spinner.css
│ │ │ │ ├── Spinner.tsx
│ │ │ │ ├── VideoPlaceholder.css
│ │ │ │ ├── VideoPlaceholder.tsx
│ │ │ │ ├── Widget.css
│ │ │ │ ├── Widget.tsx
│ │ │ │ ├── Window.css
│ │ │ │ └── Window.tsx
│ │ │ ├── constants
│ │ │ │ └── index.ts
│ │ │ ├── hooks
│ │ │ │ ├── useInterval.tsx
│ │ │ │ ├── useMeetingFunctions.tsx
│ │ │ │ └── useMountedRef.ts
│ │ │ ├── index.css
│ │ │ ├── index.tsx
│ │ │ ├── localization
│ │ │ │ ├── en.json
│ │ │ │ └── index.ts
│ │ │ ├── providers
│ │ │ │ ├── AppStateProvider.tsx
│ │ │ │ ├── AuthProvider.tsx
│ │ │ │ ├── AwsClientProvider.tsx
│ │ │ │ ├── MessagingProvider.tsx
│ │ │ │ └── RouteProvider.tsx
│ │ │ ├── react-app-env.d.ts
│ │ │ ├── reportWebVitals.ts
│ │ │ ├── types
│ │ │ │ ├── index.ts
│ │ │ │ └── lambda.ts
│ │ │ └── utils
│ │ │ │ ├── Config.ts
│ │ │ │ └── configureAmplify.ts
│ │ └── tsconfig.json
│ ├── github-assets
│ │ ├── appointment.png
│ │ ├── audio-video-meeting.png
│ │ ├── audip-video-meeting-patient.png
│ │ ├── auth.png
│ │ ├── chat.png
│ │ ├── phone-call-doctor.png
│ │ ├── phone-call-patient.png
│ │ ├── sms-notification.png
│ │ ├── solution-blog-post-architecture.png
│ │ └── widget-architecture.png
│ └── package.json
└── televisit-demo
│ ├── README.md
│ ├── backend
│ ├── README.md
│ ├── createattendee
│ │ ├── index.js
│ │ └── package.json
│ ├── createmeeting
│ │ ├── index.js
│ │ └── package.json
│ ├── dependencies
│ │ └── package.json
│ ├── endmeeting
│ │ ├── index.js
│ │ └── package.json
│ ├── messagemoderator
│ │ ├── ChimeMessagingAPI.js
│ │ ├── index.js
│ │ └── package.json
│ ├── samconfig.toml
│ ├── signinhook
│ │ ├── index.js
│ │ └── package.json
│ ├── startrecording
│ │ ├── index.js
│ │ └── package.json
│ ├── starttranscript
│ │ ├── index.js
│ │ └── package.json
│ ├── stoprecording
│ │ ├── index.js
│ │ └── package.json
│ ├── template.yaml
│ └── usercreds
│ │ ├── index.js
│ │ └── package.json
│ ├── deploy.sh
│ ├── frontend
│ ├── .babelrc
│ ├── README.md
│ ├── app
│ │ └── chat.html
│ ├── check-version.js
│ ├── eslintrc.json
│ ├── package.json
│ ├── samconfig.toml
│ ├── src
│ │ ├── Chat.css
│ │ ├── Chat.jsx
│ │ ├── Config.js
│ │ ├── api
│ │ │ └── ChimeAPI.js
│ │ ├── components
│ │ │ ├── ActivityBar
│ │ │ │ └── index.tsx
│ │ │ ├── Authenticated.js
│ │ │ ├── Card
│ │ │ │ ├── Styled.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── ChannelModals
│ │ │ │ ├── AddMemberModal.jsx
│ │ │ │ ├── AddModeratorsChannelModal.jsx
│ │ │ │ ├── BanModal.jsx
│ │ │ │ ├── ChannelModals.css
│ │ │ │ ├── DeleteChannelModal.jsx
│ │ │ │ ├── EditChannelModal.jsx
│ │ │ │ ├── JoinMeetingModal.jsx
│ │ │ │ ├── LeaveChannelModal.jsx
│ │ │ │ ├── ManageMembersModal.jsx
│ │ │ │ ├── NewChannelModal.css
│ │ │ │ ├── NewChannelModal.jsx
│ │ │ │ ├── RecordMeetingModal.jsx
│ │ │ │ ├── ViewChannelDetailsModal.jsx
│ │ │ │ ├── ViewMembersModal.jsx
│ │ │ │ └── index.jsx
│ │ │ ├── ContactPicker
│ │ │ │ └── index.js
│ │ │ └── DeviceSelection
│ │ │ │ ├── CameraDevices
│ │ │ │ └── index.tsx
│ │ │ │ ├── MicrophoneDevices
│ │ │ │ ├── MicrophoneActivityPreview.tsx
│ │ │ │ ├── MicrophoneActivityPreviewBar.tsx
│ │ │ │ └── index.tsx
│ │ │ │ ├── SpeakerDevices
│ │ │ │ └── index.tsx
│ │ │ │ ├── Styled.tsx
│ │ │ │ └── index.tsx
│ │ ├── constants
│ │ │ ├── index.ts
│ │ │ └── routes.jsx
│ │ ├── containers
│ │ │ ├── EndMeetingControl
│ │ │ │ ├── Styled.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── MeetingChat.jsx
│ │ │ ├── MeetingControls
│ │ │ │ ├── Styled.ts
│ │ │ │ └── index.tsx
│ │ │ ├── MeetingDetails
│ │ │ │ ├── Styled.ts
│ │ │ │ └── index.tsx
│ │ │ ├── MeetingJoinDetails.tsx
│ │ │ ├── MeetingMetrics
│ │ │ │ ├── Styled.ts
│ │ │ │ └── index.tsx
│ │ │ ├── MeetingRoster.tsx
│ │ │ ├── Navigation
│ │ │ │ ├── NavigationControl.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── NoMeetingRedirect.tsx
│ │ │ ├── Notifications
│ │ │ │ └── index.jsx
│ │ │ ├── channels
│ │ │ │ ├── ChannelsWrapper.css
│ │ │ │ ├── ChannelsWrapper.jsx
│ │ │ │ └── ModalManager.jsx
│ │ │ ├── input
│ │ │ │ ├── Input.css
│ │ │ │ └── Input.jsx
│ │ │ ├── login
│ │ │ │ ├── Login.jsx
│ │ │ │ └── login.css
│ │ │ ├── messages
│ │ │ │ ├── AttachmentProcessor.jsx
│ │ │ │ ├── Messages.css
│ │ │ │ └── Messages.jsx
│ │ │ └── transcriptions
│ │ │ │ ├── AnalysisPane.js
│ │ │ │ ├── AnalysisPane.module.css
│ │ │ │ ├── DeleteIcon.js
│ │ │ │ ├── InProgressTranscriptLine.js
│ │ │ │ ├── InProgressTranscriptLine.module.css
│ │ │ │ ├── LiveTranscription.jsx
│ │ │ │ ├── SOAPReviewPane.js
│ │ │ │ ├── SOAPReviewPane.module.css
│ │ │ │ ├── TranscriptAnalysisPane.js
│ │ │ │ ├── TranscriptLine.js
│ │ │ │ ├── TranscriptLine.module.css
│ │ │ │ ├── TranscriptPane.js
│ │ │ │ ├── TranscriptPane.module.css
│ │ │ │ ├── conceptUtils.js
│ │ │ │ ├── detectEntities.ts
│ │ │ │ ├── displayNames.js
│ │ │ │ ├── inferICD10CM.ts
│ │ │ │ ├── inferRxNorm.ts
│ │ │ │ ├── soapSummary.js
│ │ │ │ ├── transcriptHighlights.js
│ │ │ │ ├── transcriptHighlights.module.css
│ │ │ │ ├── useComprehension.js
│ │ │ │ └── useTranslation.js
│ │ ├── hooks
│ │ │ └── useMeetingEndRedirect.tsx
│ │ ├── index.js
│ │ ├── providers
│ │ │ ├── AppStateProvider.jsx
│ │ │ ├── AuthProvider.jsx
│ │ │ ├── ChatMessagesProvider
│ │ │ │ └── index.jsx
│ │ │ ├── IdentityProvider.jsx
│ │ │ ├── NavigationProvider.tsx
│ │ │ └── UserPermissionProvider.jsx
│ │ ├── services
│ │ │ ├── AttachmentService.js
│ │ │ ├── IdentityService.js
│ │ │ ├── MessagingService.js
│ │ │ └── servicesConfig.js
│ │ ├── utilities
│ │ │ ├── TestSound.tsx
│ │ │ ├── arnParser.js
│ │ │ ├── formatBytes.js
│ │ │ ├── insertDateHeaders.jsx
│ │ │ ├── mergeArrays.js
│ │ │ └── styles.css
│ │ └── views
│ │ │ ├── Channels
│ │ │ ├── index.jsx
│ │ │ └── style.css
│ │ │ ├── DeviceSetup
│ │ │ ├── Styled.ts
│ │ │ └── index.tsx
│ │ │ ├── Meeting
│ │ │ ├── Styled.ts
│ │ │ └── index.tsx
│ │ │ └── Signin
│ │ │ └── index.jsx
│ ├── template.yaml
│ ├── tsconfig.json
│ └── webpack.config.js
│ └── images
│ ├── backendoutputs.png
│ ├── chatbot.png
│ ├── chime-sdk-telemedicine.jpg
│ ├── confirmuser.png
│ ├── meeting.png
│ └── newregistration.png
├── lambda
└── call-insights-parsing
│ ├── README.md
│ └── docker
│ ├── Dockerfile
│ ├── app.py
│ └── requirements.txt
├── package-lock.json
└── utils
├── pstn-audio-lambdas
└── amazon-chime-pstn-audio-lambda-node
│ ├── .gitignore
│ ├── LICENSE
│ ├── README.md
│ ├── app.js
│ └── template.yaml
└── singlejs
├── .gitignore
├── README.md
├── package-lock.json
├── package.json
├── rollup.config.js
└── src
└── index.js
/.github/ISSUE_TEMPLATE/documentation-request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Documentation Request
3 | about: Need help setting up one of the demos? Spot an error in our documentation? Let us know how our documentation
4 | can be improved.
5 | title: ''
6 | labels: Documentation
7 | assignees: ''
8 |
9 | ---
10 |
11 | ### What demo do you have issue with?
12 |
13 | *For example: I'm trying to setup the meeting demo app.*
14 |
15 | ### How can the documentation be improved to help your use case?
16 |
17 | *For example: Include a section on how to configure a demo CloudFormation resources.*
18 |
19 | ### What documentation have you looked at so far?
20 |
21 | *For example: README.md, etc.*
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | **Issue #:**
2 |
3 | **Description of changes:**
4 |
5 | **Testing**
6 |
7 | 1. How did you test these changes?
8 | 2. Can these changes be tested using one of the demo application? If yes, which demo application can be used to test it?
9 | 3. If applicable, have you run `npm run build` successfully locally to fix all warnings and errors?
10 |
11 | By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .DS_Store
3 | dist
4 | build
5 | .idea
6 | apps/chat/src/Config.js
7 | apps/chat/src/backend/serverless/appconfig.json
8 | apps/chat/src/backend/serverless/.aws-sam
9 | apps/real-time-collaboration/backend/.aws-sam
10 | apps/moderated-chat-and-sentiment-analysis/backend/.aws-sam/
11 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "amazon-chime-sdk-component-library-react"]
2 | path = amazon-chime-sdk-component-library-react
3 | url = https://github.com/aws/amazon-chime-sdk-component-library-react.git
4 |
--------------------------------------------------------------------------------
/CODEOWNERS:
--------------------------------------------------------------------------------
1 | # These owners will be the default owners for everything in
2 | # amazon-chime-sdk repo.
3 | # Check below link for more information:
4 | # https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
5 | * @aws-samples/amazon-chime-sdk-js-dev
6 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | ## Code of Conduct
2 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct).
3 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact
4 | opensource-codeofconduct@amazon.com with any additional questions or comments.
5 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy of
4 | this software and associated documentation files (the "Software"), to deal in
5 | the Software without restriction, including without limitation the rights to
6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
7 | the Software, and to permit persons to whom the Software is furnished to do so.
8 |
9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
10 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
11 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
12 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
13 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15 |
16 |
--------------------------------------------------------------------------------
/NOTICE:
--------------------------------------------------------------------------------
1 | amazon-chime-sdk
2 | Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
--------------------------------------------------------------------------------
/analytics/meeting-event-dashboard/README.md:
--------------------------------------------------------------------------------
1 | # Amazon Chime SDK Meeting Event Dashboard
2 |
3 | This package contains the AWS CloudFormation template for the [Monitoring and troubleshooting with Amazon Chime SDK meeting events](https://aws.amazon.com/blogs/business-productivity/monitoring-and-troubleshooting-with-amazon-chime-sdk-meeting-events/) blog post on the AWS Business Productivity Blog.
4 | Follow the instructions in the blog post to create your Amazon CloudWatch dashboard.
--------------------------------------------------------------------------------
/apps/amplify-demo/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /.pnp
5 | .pnp.js
6 |
7 | # testing
8 | /coverage
9 |
10 | # misc
11 | .vscode
12 | .graphqlconfig.yml
13 | .DS_Store
14 | .env.local
15 | .env.development.local
16 | .env.test.local
17 | .env.production.local
18 |
19 | npm-debug.log*
20 | yarn-debug.log*
21 | yarn-error.log*
22 |
23 | # amplify
24 | src/react-app-env.d.ts
25 | src/graphql
26 | src/API.ts
27 | amplify/
28 |
29 | #amplify-do-not-edit-begin
30 | amplify/\#current-cloud-backend
31 | amplify/.config/local-*
32 | amplify/logs
33 | amplify/mock-data
34 | amplify/backend/amplify-meta.json
35 | amplify/backend/.temp
36 | build/
37 | dist/
38 | node_modules/
39 | aws-exports.js
40 | awsconfiguration.json
41 | amplifyconfiguration.json
42 | amplifyconfiguration.dart
43 | amplify-build-config.json
44 | amplify-gradle-config.json
45 | amplifytools.xcconfig
46 | .secret-*
47 | **.sample
48 | #amplify-do-not-edit-end
49 |
--------------------------------------------------------------------------------
/apps/amplify-demo/public/architecture_diagram.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/amplify-demo/public/architecture_diagram.jpg
--------------------------------------------------------------------------------
/apps/amplify-demo/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Amazon Chime SDK Amplify Demo
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/apps/amplify-demo/src/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import ReactDOM from 'react-dom';
5 | import { ThemeProvider } from 'styled-components';
6 | import { MeetingProvider, lightTheme } from 'amazon-chime-sdk-component-library-react';
7 | import Meeting from './components/Meeting';
8 | import MeetingForm from './components/MeetingForm';
9 |
10 | import { Amplify } from 'aws-amplify';
11 | import awsconfig from './aws-exports';
12 | Amplify.configure(awsconfig);
13 |
14 | window.addEventListener('load', () => {
15 | ReactDOM.render(
16 |
17 |
18 |
19 |
20 |
21 | ,
22 | document.getElementById('root')
23 | );
24 | });
25 |
--------------------------------------------------------------------------------
/apps/amplify-demo/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es2018",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "allowSyntheticDefaultImports": true,
13 | "strict": true,
14 | "forceConsistentCasingInFileNames": true,
15 | "noFallthroughCasesInSwitch": true,
16 | "module": "esnext",
17 | "moduleResolution": "node",
18 | "resolveJsonModule": true,
19 | "isolatedModules": true,
20 | "noEmit": true,
21 | "jsx": "react-jsx"
22 | },
23 | "include": [
24 | "src"
25 | ]
26 | }
27 |
--------------------------------------------------------------------------------
/apps/android-webview-sample/.gitignore:
--------------------------------------------------------------------------------
1 | /.gradle/
2 | /.idea/
3 | /app/build/
4 | /local.properties
5 | .DS_Store
--------------------------------------------------------------------------------
/apps/android-webview-sample/app/src/main/java/com/amazonaws/android_webview_sample/AppConfig.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * AppConfig.kt
3 | * Android WebView Sample Demo
4 | *
5 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | * SPDX-License-Identifier: MIT-0
7 | */
8 | package com.amazonaws.android_webview_sample
9 |
10 | object AppConfig {
11 | // PUT YOUR MEETING URL HERE
12 | var url = "PLACEHOLDER"
13 | }
--------------------------------------------------------------------------------
/apps/android-webview-sample/app/src/main/res/layout/fragment_webview.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
16 |
17 |
18 |
22 |
--------------------------------------------------------------------------------
/apps/android-webview-sample/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 | #FF6200EE
12 | #FF3700B3
13 | #FF03DAC5
14 | #FF018786
15 | #FF000000
16 | #FFFFFFFF
17 |
--------------------------------------------------------------------------------
/apps/android-webview-sample/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 | Android WebView Sample
11 |
12 | Main Fragment
13 | Webview Fragment
14 | Go to Webview
15 |
--------------------------------------------------------------------------------
/apps/android-webview-sample/app/src/main/res/xml/backup_descriptor.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/apps/android-webview-sample/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/android-webview-sample/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/apps/android-webview-sample/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #
2 | # gradle-wrapper.properties
3 | # Android WebView Sample Demo
4 | #
5 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | # SPDX-License-Identifier: MIT-0
7 | #
8 |
9 | #Thu Jul 15 14:40:02 PDT 2021
10 | distributionBase=GRADLE_USER_HOME
11 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
12 | distributionPath=wrapper/dists
13 | zipStorePath=wrapper/dists
14 | zipStoreBase=GRADLE_USER_HOME
15 |
--------------------------------------------------------------------------------
/apps/android-webview-sample/settings.gradle:
--------------------------------------------------------------------------------
1 | /*
2 | * settings.gradle
3 | * Android WebView Sample Demo
4 | *
5 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | * SPDX-License-Identifier: MIT-0
7 | */
8 |
9 | rootProject.name = "Android-WKWevView-sample"
10 | include ':app'
11 |
--------------------------------------------------------------------------------
/apps/chat-android/.gitignore:
--------------------------------------------------------------------------------
1 | .gradle/
2 | .idea/
3 | local.properties
4 | build/
5 | .DS_Store
6 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/java/com/amazonaws/services/chime/sdkdemo/common/AppConstants.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdkdemo.common
7 |
8 | const val EMPTY_STRING = ""
9 |
10 | // Keys for navigation
11 | const val SESSION_ID = "SessionId"
12 | const val USER_DETAILS = "UserDetails"
13 | const val USER_CREDENTIALS = "UserCredentials"
14 | const val CHANNEL_ARN = "ChannelArn"
15 | const val USERNAME_KEY = "USERNAME"
16 | const val PASSWORD_KEY = "PASSWORD"
17 | const val DEVICE_TOKEN_KEY = "DEVICE_TOKEN"
18 | const val APP_INSTANCE_USER_NOT_FOUND = "AppInstanceUser NotFound in SharedPrefs"
19 | const val APP_INSTANCE_USER_ENDPOINT_TYPE = "GCM"
20 |
21 | const val MESSAGING_SERVICE_REGION = "us-east-1"
22 | const val APP_INSTANCE_ARN = "appInstanceArn"
23 | const val API_GATEWAY_INVOKE_URL = "apiGatewayInvokeUrl"
24 | const val PINPOINT_APPLICATION_ARN = "pinpointApplicationArn"
25 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/java/com/amazonaws/services/chime/sdkdemo/common/coroutine/CoroutineContextProvider.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdkdemo.common.coroutine
7 |
8 | import kotlin.coroutines.CoroutineContext
9 | import kotlinx.coroutines.Dispatchers
10 |
11 | open class CoroutineContextProvider {
12 | open val main: CoroutineContext by lazy { Dispatchers.Main }
13 | open val io: CoroutineContext by lazy { Dispatchers.IO }
14 | open val default: CoroutineContext by lazy { Dispatchers.Default }
15 | }
16 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/java/com/amazonaws/services/chime/sdkdemo/common/extensions/JavaExtension.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdkdemo.common.extensions
7 |
8 | import java.text.SimpleDateFormat
9 | import java.util.Date
10 | import java.util.Locale
11 | import java.util.TimeZone
12 |
13 | fun String.toDate(
14 | dateFormat: String = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
15 | timeZone: TimeZone = TimeZone.getTimeZone("UTC")
16 | ): Date? {
17 | val parser = SimpleDateFormat(dateFormat, Locale.getDefault())
18 | parser.timeZone = timeZone
19 | return parser.parse(this)
20 | }
21 |
22 | fun Date.formatTo(dateFormat: String, timeZone: TimeZone = TimeZone.getDefault()): String {
23 | val formatter = SimpleDateFormat(dateFormat, Locale.getDefault())
24 | formatter.timeZone = timeZone
25 | return formatter.format(this)
26 | }
27 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/java/com/amazonaws/services/chime/sdkdemo/data/Channel.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdkdemo.data
7 |
8 | data class Channel(
9 | val channelArn: String,
10 | val name: String,
11 | val privacy: String,
12 | val mode: String
13 | )
14 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/java/com/amazonaws/services/chime/sdkdemo/data/ChannelMessage.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdkdemo.data
7 |
8 | import java.util.Date
9 |
10 | data class ChannelMessage(
11 | val messageId: String,
12 | val senderName: String,
13 | val isLocal: Boolean,
14 | val displayTime: Date,
15 | val content: String
16 | )
17 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/java/com/amazonaws/services/chime/sdkdemo/data/Result.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdkdemo.data
7 |
8 | sealed class Result
9 | data class Success(val data: T) : Result()
10 | data class Failure(val exception: Exception) : Result()
11 | object Loading : Result()
12 |
13 | inline fun Result.onSuccess(action: (T) -> Unit): Result {
14 | if (this is Success) action(data)
15 | return this
16 | }
17 |
18 | inline fun Result.onFailure(action: (Exception) -> Unit): Result {
19 | if (this is Failure) action(exception)
20 | return this
21 | }
22 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/java/com/amazonaws/services/chime/sdkdemo/data/User.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdkdemo.data
7 |
8 | import java.io.Serializable
9 |
10 | data class User(
11 | val chimeDisplayName: String,
12 | val chimeUserId: String,
13 | val chimeAppInstanceUserArn: String
14 | ) : Serializable
15 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/java/com/amazonaws/services/chime/sdkdemo/data/UserEndpoint.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdkdemo.data
7 |
8 | data class UserEndpoint(
9 | val endpointId: String,
10 | val appInstanceUserArn: String,
11 | val name: String?,
12 | val allowMessages: String
13 | )
14 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/java/com/amazonaws/services/chime/sdkdemo/data/source/service/AuthService.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdkdemo.data.source.service
7 |
8 | import com.amazonaws.auth.AWSCredentials
9 | import com.amazonaws.services.chime.sdkdemo.data.Result
10 | import com.amazonaws.services.chime.sdkdemo.data.User
11 |
12 | interface AuthService {
13 | suspend fun signIn(userName: String, password: String): Result
14 |
15 | suspend fun signOut()
16 |
17 | suspend fun getCurrentUser(): Result
18 |
19 | suspend fun getAWSCredentials(): Result
20 |
21 | suspend fun exchangeTokenForAwsCredential(accessToken: String): String?
22 | }
23 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/java/com/amazonaws/services/chime/sdkdemo/ui/base/ViewState.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdkdemo.ui.base
7 |
8 | sealed class ViewState
9 | class Success(val data: T? = null) : ViewState()
10 | class Error(val error: Throwable) : ViewState()
11 | class Loading : ViewState()
12 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/drawable/bubble_my_message.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/drawable/bubble_their_message.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/drawable/button_send_message.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/menu/app_instance_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/menu/channel_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 | #008577
10 | #00574B
11 | #D81B60
12 | #3f4149
13 | #FFFFFF
14 | #000000
15 |
16 |
17 | #E9E9E9
18 | #64000000
19 |
20 |
--------------------------------------------------------------------------------
/apps/chat-android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
9 |
15 |
16 |
--------------------------------------------------------------------------------
/apps/chat-android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/apps/chat-android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Mon Dec 07 00:10:41 PST 2020
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip
7 |
--------------------------------------------------------------------------------
/apps/chat-android/media/awsChimeSDKMessagingDemo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-android/media/awsChimeSDKMessagingDemo.png
--------------------------------------------------------------------------------
/apps/chat-android/messaging-websocket/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
8 |
9 |
--------------------------------------------------------------------------------
/apps/chat-android/messaging-websocket/src/main/java/com/amazonaws/services/chime/sdk/messaging/Message.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.messaging
7 |
8 | data class Message(
9 | val Headers: Map,
10 | val Payload: String
11 | )
12 |
--------------------------------------------------------------------------------
/apps/chat-android/messaging-websocket/src/main/java/com/amazonaws/services/chime/sdk/messaging/internal/WebSocketAdapter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.messaging.internal
7 |
8 | interface WebSocketAdapter {
9 | fun create(url: String, observer: WebSocketAdapterObserver)
10 |
11 | fun close()
12 | }
13 |
--------------------------------------------------------------------------------
/apps/chat-android/messaging-websocket/src/main/java/com/amazonaws/services/chime/sdk/messaging/internal/WebSocketAdapterObserver.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.messaging.internal
7 |
8 | import com.amazonaws.services.chime.sdk.messaging.session.MessagingSessionStatus
9 |
10 | interface WebSocketAdapterObserver {
11 | fun onConnect()
12 |
13 | fun onMessage(message: String)
14 |
15 | fun onClose(status: MessagingSessionStatus)
16 | }
17 |
--------------------------------------------------------------------------------
/apps/chat-android/messaging-websocket/src/main/java/com/amazonaws/services/chime/sdk/messaging/session/ChimeUserCredentials.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.messaging.session
7 |
8 | import java.io.Serializable
9 |
10 | data class ChimeUserCredentials(
11 | val accessKeyId: String,
12 | val secretAccessKey: String,
13 | val sessionToken: String? = null
14 | ) : Serializable
15 |
--------------------------------------------------------------------------------
/apps/chat-android/messaging-websocket/src/main/java/com/amazonaws/services/chime/sdk/messaging/session/MessagingSession.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.messaging.session
7 |
8 | interface MessagingSession {
9 | fun start()
10 |
11 | fun stop()
12 |
13 | fun addMessagingSessionObserver(observer: MessagingSessionObserver)
14 |
15 | fun removeMessagingSessionObserver(observer: MessagingSessionObserver)
16 | }
17 |
--------------------------------------------------------------------------------
/apps/chat-android/messaging-websocket/src/main/java/com/amazonaws/services/chime/sdk/messaging/session/MessagingSessionConfiguration.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.messaging.session
7 |
8 | import kotlin.random.Random
9 | import kotlin.random.nextUInt
10 |
11 | data class MessagingSessionConfiguration(
12 | val userArn: String,
13 | val endpointUrl: String,
14 | val region: String,
15 | val credentials: ChimeUserCredentials,
16 | val messagingSessionId: String = Random.nextUInt().toString()
17 | )
18 |
--------------------------------------------------------------------------------
/apps/chat-android/messaging-websocket/src/main/java/com/amazonaws/services/chime/sdk/messaging/session/MessagingSessionObserver.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.messaging.session
7 |
8 | import com.amazonaws.services.chime.sdk.messaging.Message
9 |
10 | interface MessagingSessionObserver {
11 | fun onMessagingSessionStarted()
12 |
13 | fun onMessagingSessionConnecting(reconnecting: Boolean)
14 |
15 | fun onMessagingSessionStopped(status: MessagingSessionStatus)
16 |
17 | fun onMessagingSessionReceivedMessage(message: Message)
18 | }
19 |
--------------------------------------------------------------------------------
/apps/chat-android/messaging-websocket/src/main/java/com/amazonaws/services/chime/sdk/messaging/session/MessagingSessionStatus.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.messaging.session
7 |
8 | class MessagingSessionStatus(
9 | val code: Int?,
10 | val reason: String?
11 | )
12 |
--------------------------------------------------------------------------------
/apps/chat-android/messaging-websocket/src/main/java/com/amazonaws/services/chime/sdk/messaging/utils/SigV4.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.messaging.utils
7 |
8 | interface SigV4 {
9 |
10 | fun signURL(
11 | method: String,
12 | scheme: String,
13 | serviceName: String,
14 | hostname: String,
15 | path: String,
16 | payload: String,
17 | queryParams: Map>?
18 | ): String
19 | }
20 |
--------------------------------------------------------------------------------
/apps/chat-android/messaging-websocket/src/main/java/com/amazonaws/services/chime/sdk/messaging/utils/logger/LogLevel.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.messaging.utils.logger
7 |
8 | enum class LogLevel(val priority: Int) {
9 | VERBOSE(0),
10 | DEBUG(1),
11 | INFO(2),
12 | WARN(3),
13 | ERROR(4),
14 | OFF(5)
15 | }
16 |
--------------------------------------------------------------------------------
/apps/chat-android/messaging-websocket/version.properties:
--------------------------------------------------------------------------------
1 | versionMajor=0
2 | versionMinor=1
3 | versionPatch=0
4 |
--------------------------------------------------------------------------------
/apps/chat-android/pre-commit:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo "Running git pre-commit hook"
4 |
5 | ./gradlew ktlintCheck
6 |
7 | RESULT=$?
8 |
9 | [ $RESULT -ne 0 ] && exit 1
10 |
11 | exit 0
12 |
--------------------------------------------------------------------------------
/apps/chat-android/settings.gradle:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: MIT-0
4 | */
5 |
6 | include ':app', ':messaging-websocket'
7 | rootProject.name='amazon-chime-sdk-messaging-demo-app'
8 |
--------------------------------------------------------------------------------
/apps/chat-ios/.gitignore:
--------------------------------------------------------------------------------
1 | Pods
2 | xcuserdata
3 | **/IDEWorkspaceChecks.plist
4 | .DS_Store
5 | Podfile.lock
6 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo/AmazonChimeSDKMessagingDemo.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | aps-environment
6 | development
7 |
8 |
9 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo/AppConfiguration.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppConfiguration.swift
3 | // AmazonChimeSDKMessagingDemo
4 | //
5 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | // SPDX-License-Identifier: MIT-0
7 | //
8 |
9 | import Foundation
10 |
11 | struct AppConfiguration {
12 | static let region = "us-east-1"
13 | static let appInstanceArn = "APP_INSTANCE_ARN"
14 | static let apiGatewayInvokeUrl = "API_GATEWAY_INVOKE_URL"
15 | static let pinpointAppArn = "PINPOINT_APPLICATION_ARN"
16 | }
17 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo/entity/ChatMessage.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ChatMessage.swift
3 | // AmazonChimeSDKMessagingDemo
4 | //
5 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | // SPDX-License-Identifier: MIT-0
7 | //
8 |
9 | import UIKit
10 |
11 | struct ChatMessage {
12 | let senderName: String
13 | let content: String
14 | let displayTime: String
15 | let isSelf: Bool
16 | let imageUrl: URL?
17 | var displayAttachmentHolder: Bool = false
18 | }
19 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo/entity/CredentialExchangeResponse.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CredentialExchangeResponse.swift
3 | // AmazonChimeSDKMessagingDemo
4 | //
5 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | // SPDX-License-Identifier: MIT-0
7 | //
8 |
9 | import AWSPluginsCore
10 | import Foundation
11 |
12 | struct CredentialExchangeResponse: Codable {
13 | let chimeDisplayName: String
14 | let chimeCredentials: ChimeUserCredentials
15 | let chimeUserId: String
16 | let chimeAppInstanceUserArn: String
17 |
18 | enum CodingKeys: String, CodingKey {
19 | case chimeDisplayName = "ChimeDisplayName"
20 | case chimeCredentials = "ChimeCredentials"
21 | case chimeUserId = "ChimeUserId"
22 | case chimeAppInstanceUserArn = "ChimeAppInstanceUserArn"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo/entity/Message.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Message.swift
3 | // AmazonChimeSDKMessagingDemo
4 | //
5 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | // SPDX-License-Identifier: MIT-0
7 | //
8 |
9 | import Foundation
10 |
11 | @objcMembers public class Message: NSObject, Codable {
12 | let headers: [String: String]
13 | let payload: String?
14 |
15 | enum CodingKeys: String, CodingKey {
16 | case headers = "Headers"
17 | case payload = "Payload"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo/entity/NotificationLevel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NotificationLevel.swift
3 | // AmazonChimeSDKMessagingDemo
4 | //
5 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | // SPDX-License-Identifier: MIT-0
7 | //
8 |
9 | struct NotificationLevel {
10 | let title: String
11 | let subtitle: String
12 | let icon: String? = nil
13 | }
14 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo/entity/User.swift:
--------------------------------------------------------------------------------
1 | //
2 | // User.swift
3 | // AmazonChimeSDKMessagingDemo
4 | //
5 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | // SPDX-License-Identifier: MIT-0
7 | //
8 |
9 | struct User {
10 | let chimeDisplayName: String
11 | let chimeUserId: String
12 | let chimeAppInstanceUserArn: String
13 | }
14 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo/messaging-websocket/internal/WebSocketAdapter.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WebSocketAdapter.swift
3 | // AmazonChimeSDKMessagingDemo
4 | //
5 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | // SPDX-License-Identifier: MIT-0
7 | //
8 |
9 | public protocol WebSocketAdapter {
10 | func connect(url: String, observer: WebSocketAdapterObserver)
11 |
12 | func close()
13 | }
14 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo/messaging-websocket/internal/WebSocketAdapterObserver.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WebSocketAdapterObserver.swift
3 | // AmazonChimeSDKMessagingDemo
4 | //
5 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | // SPDX-License-Identifier: MIT-0
7 | //
8 |
9 | public protocol WebSocketAdapterObserver {
10 | func onConnect()
11 |
12 | func onMessage(message: String)
13 |
14 | func onClose(status: MessagingSessionStatus)
15 | }
16 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo/messaging-websocket/session/ChimeUserCredentials.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ChimeUserCredentials.swift
3 | // AmazonChimeSDKMessagingDemo
4 | //
5 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | // SPDX-License-Identifier: MIT-0
7 | //
8 |
9 | import Foundation
10 |
11 | struct ChimeUserCredentials: Codable {
12 | let accessKeyId: String
13 | let secretAccessKey: String
14 | let sessionToken: String
15 |
16 | enum CodingKeys: String, CodingKey {
17 | case accessKeyId = "AccessKeyId"
18 | case secretAccessKey = "SecretAccessKey"
19 | case sessionToken = "SessionToken"
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo/messaging-websocket/session/MessagingSession.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MessagingSession.swift
3 | // AmazonChimeSDKMessagingDemo
4 | //
5 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | // SPDX-License-Identifier: MIT-0
7 | //
8 | import Foundation
9 |
10 | @objc public protocol MessagingSession {
11 | func start()
12 |
13 | func stop()
14 |
15 | func addMessagingSessionObserver(observer: MessagingSessionObserver)
16 |
17 | func removeMessagingSessionObserver(observer: MessagingSessionObserver)
18 | }
19 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo/messaging-websocket/session/MessagingSessionConfiguration.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MessagingSessionConfiguration.swift
3 | // AmazonChimeSDKMessagingDemo
4 | //
5 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | // SPDX-License-Identifier: MIT-0
7 | //
8 |
9 | import Foundation
10 |
11 | struct MessagingSessionConfiguration {
12 | var userArn: String
13 | var endpointUrl: String
14 | var region: String
15 | var credentials: ChimeUserCredentials
16 | var messagingSessionId: String = UUID().uuidString
17 | }
18 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo/messaging-websocket/session/MessagingSessionObserver.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MessagingSessionObserver.swift
3 | // AmazonChimeSDKMessagingDemo
4 | //
5 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | // SPDX-License-Identifier: MIT-0
7 | //
8 |
9 | import Foundation
10 |
11 | @objc public protocol MessagingSessionObserver {
12 |
13 | func onMessagingSessionStarted()
14 |
15 | func onMessagingSessionConnecting(reconnecting: Bool)
16 |
17 | func onMessagingSessionStopped(status: MessagingSessionStatus)
18 |
19 | func onMessagingSessionMessageReceived(message: Message)
20 | }
21 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo/messaging-websocket/session/MessagingSessionStatus.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MessagingSessionStatus.swift
3 | // AmazonChimeSDKMessagingDemo
4 | //
5 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | // SPDX-License-Identifier: MIT-0
7 | //
8 |
9 | import Foundation
10 |
11 | @objcMembers public class MessagingSessionStatus: NSObject {
12 | public let code: Int
13 | public let reason: String
14 |
15 | public init(code: Int, reason: String) {
16 | self.code = code
17 | self.reason = reason
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo/messaging-websocket/utils/ObserverUtils.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ObserverUtils.swift
3 | // AmazonChimeSDKMessagingDemo
4 | //
5 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | // SPDX-License-Identifier: MIT-0
7 | //
8 |
9 | import Foundation
10 |
11 | @objcMembers class ObserverUtils: NSObject {
12 | public static func forEach(
13 | observers: ConcurrentMutableSet,
14 | observerFunction: @escaping (_ observer: T) -> Void
15 | ) {
16 | DispatchQueue.main.async {
17 | observers.forEach { observer in
18 | if let observer = observer as? T {
19 | observerFunction(observer)
20 | }
21 | }
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/apps/chat-ios/AmazonChimeSDKMessagingDemo/messaging-websocket/utils/SigV4.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SigV4.swift
3 | // AmazonChimeSDKMessagingDemo
4 | //
5 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | // SPDX-License-Identifier: MIT-0
7 | //
8 |
9 | import Foundation
10 |
11 | public protocol SigV4 {
12 | func signUrl(method: String,
13 | scheme: String,
14 | serviceName: String,
15 | hostname: String,
16 | path: String,
17 | payload: String,
18 | queryParams: [String: String]) -> String
19 | }
20 |
--------------------------------------------------------------------------------
/apps/chat-ios/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment the next line to define a global platform for your project
2 | # platform :ios, '9.0'
3 |
4 | target 'AmazonChimeSDKMessagingDemo' do
5 | # Comment the next line if you don't want to use dynamic frameworks
6 | use_frameworks!
7 |
8 | # Pods for AmazonChimeSDKMessagingDemo
9 | pod 'Amplify'
10 | pod 'AmplifyPlugins/AWSS3StoragePlugin'
11 | pod 'AmplifyPlugins/AWSCognitoAuthPlugin'
12 | pod 'AWSChimeSDKMessaging'
13 | pod 'AWSChimeSDKIdentity'
14 | pod 'Starscream', '~> 4.0.0'
15 |
16 | end
17 |
--------------------------------------------------------------------------------
/apps/chat-ios/media/awsChimeSDKMessagingDemo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/chat-ios/media/awsChimeSDKMessagingDemo.png
--------------------------------------------------------------------------------
/apps/chat/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | ["@babel/preset-env", {
4 | "useBuiltIns": "usage",
5 | "corejs": 3
6 | }],
7 | "@babel/preset-react"
8 | ],
9 | "plugins": [
10 | "@babel/plugin-proposal-class-properties"
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/apps/chat/app/chat.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Amazon Chime Chat SDK Demo
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/apps/chat/src/Config.js:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import data from './backend/serverless/appconfig.json'
5 | const appConfigJson = Object.assign({}, ...data.map((x) => ({[x.OutputKey]: x.OutputValue})));
6 |
7 | const appConfig = {
8 | apiGatewayInvokeUrl: '' || appConfigJson.apiGatewayInvokeUrl,
9 | cognitoUserPoolId: '' || appConfigJson.cognitoUserPoolId,
10 | cognitoAppClientId: '' || appConfigJson.cognitoAppClientId,
11 | cognitoIdentityPoolId: '' || appConfigJson.cognitoIdentityPoolId,
12 | appInstanceArn: '' || appConfigJson.appInstanceArn,
13 | region: 'us-east-1', // Only supported region for Amazon Chime SDK Messaging as of this writing
14 | attachments_s3_bucket_name: '' || appConfigJson.attachmentsS3BucketName
15 | };
16 | export default appConfig;
17 |
--------------------------------------------------------------------------------
/apps/chat/src/backend/serverless/appconfig.json:
--------------------------------------------------------------------------------
1 | []
--------------------------------------------------------------------------------
/apps/chat/src/backend/serverless/samconfig.toml:
--------------------------------------------------------------------------------
1 | version = 0.1
2 | [default]
3 | [default.deploy]
4 | [default.deploy.parameters]
5 | stack_name = "chime-sdk-chat-demo"
6 | s3_prefix = "chime-sdk-chat-demo"
7 | region = "us-east-1"
8 | confirm_changeset = true
9 | capabilities = "CAPABILITY_NAMED_IAM"
10 | parameter_overrides = "DemoName=\"ChimeSDKChatDemo\""
11 |
--------------------------------------------------------------------------------
/apps/chat/src/components/ActivityBar/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 | import styled from 'styled-components';
6 |
7 | const Track = styled.div`
8 | width: 100%;
9 | height: 0.625rem;
10 | background-color: #ecf0f1;
11 | border-radius: 0.25rem;
12 | `;
13 |
14 | const Progress = styled.div`
15 | height: 0.625rem;
16 | background-color: #18bc9c;
17 | border-radius: 0.25rem;
18 | transform: scaleX(0);
19 | transform-origin: left;
20 | transition: transform 33ms ease-in-out;
21 | will-change: transform;
22 | `;
23 |
24 | const ActivityBar = React.forwardRef((props, ref: any) => (
25 |
28 | ));
29 |
30 | export default ActivityBar;
31 |
--------------------------------------------------------------------------------
/apps/chat/src/components/Card/Styled.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const SmallText = styled.small`
7 | color: rgba(0, 0, 0, 0.5);
8 | `;
9 |
10 | export const StyledCard = styled.div`
11 | .ch-body {
12 | margin-bottom: 1rem;
13 | }
14 |
15 | .ch-header {
16 | font-size: 1.5rem;
17 | }
18 |
19 | .ch-title {
20 | font-size: 1.25rem;
21 | margin-top: 1rem;
22 | }
23 |
24 | .ch-description {
25 | margin: 1rem 0 1rem 0;
26 | }
27 | `;
28 |
--------------------------------------------------------------------------------
/apps/chat/src/components/Card/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 |
6 | import { SmallText, StyledCard } from './Styled';
7 |
8 | interface CardProps extends React.HTMLAttributes {
9 | header?: string;
10 | title: string;
11 | description: any;
12 | smallText?: string;
13 | }
14 |
15 | const Card: React.FC = ({
16 | header,
17 | title,
18 | description,
19 | smallText
20 | }: CardProps) => (
21 |
22 | {header && {header}
}
23 |
24 |
{title}
25 |
{description}
26 | {smallText &&
{smallText}}
27 |
28 |
29 | );
30 |
31 | export default Card;
32 |
--------------------------------------------------------------------------------
/apps/chat/src/components/ChannelModals/JoinMeetingModal.css:
--------------------------------------------------------------------------------
1 | .join-modal {
2 | text-align: center;
3 | }
4 |
5 | .join-header {
6 | margin-top: 2rem;
7 | }
8 |
9 | .response-buttons{
10 | margin: 0 auto;
11 | width: 50%;
12 | margin-top: 1rem;
13 | }
14 |
15 | .message-buttons{
16 | margin: 0 auto;
17 | width: 28%;
18 | margin-bottom: 2rem;
19 | }
20 |
21 | .join-button{
22 | margin: 0 0.5rem 0 5rem;
23 | background-color: #067000 !important;
24 | }
25 |
26 | .decline-button{
27 | margin: 0 0.5rem 0 5rem;
28 | color: #ffffff !important;
29 | background-color: #c52000 !important;
30 | }
--------------------------------------------------------------------------------
/apps/chat/src/components/ChannelModals/SetCustomStatusModal.css:
--------------------------------------------------------------------------------
1 | #custom-status-form {
2 | display: flex;
3 | flex-direction: column;
4 | margin-top: 1rem;
5 | }
6 |
7 | .custom-status-form-field-input {
8 | display: flex;
9 | flex-direction: row;
10 | width: 100%;
11 | margin: auto auto 10pt;
12 | }
13 |
14 | .custom-status-form-field-input-div {
15 | min-width: 50%;
16 | }
17 |
18 | .custom-status-form-field-input .lbl {
19 | display: flex;
20 | padding: 1rem 0;
21 | flex-direction: column;
22 | margin-top: 0.5rem;
23 | min-width: 10%;
24 | }
25 |
26 | .custom-status-form-field-input .value {
27 | display: flex;
28 | width: 100%;
29 | margin: auto 0;
30 | padding-top: 1rem;
31 | padding-left: 0;
32 | flex-direction: column;
33 | }
34 |
35 | .custom-status-form-field-input .max-length-lbl {
36 | display: flex;
37 | font-size: 9pt;
38 | }
--------------------------------------------------------------------------------
/apps/chat/src/components/ChannelModals/index.jsx:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | export { AddMemberModal } from './AddMemberModal';
5 | export { ManageChannelFlowModal } from './ManageChannelFlowModal';
6 | export { DeleteChannelModal } from './DeleteChannelModal';
7 | export { LeaveChannelModal } from './LeaveChannelModal';
8 | export { JoinMeetingModal } from './JoinMeetingModal';
9 | export { ManageMembersModal } from './ManageMembersModal';
10 | export { NewChannelModal } from './NewChannelModal';
11 | export { ViewChannelDetailsModal } from './ViewChannelDetailsModal';
12 | export { ViewMembersModal } from './ViewMembersModal';
13 | export { EditChannelModal } from './EditChannelModal';
14 | export { BanModal } from './BanModal';
15 | export { SetCustomStatusModal } from './SetCustomStatusModal';
16 | export { ListSubChannelModel } from './ListSubChannelModel';
17 | export { JoinSubChannelModel } from './JoinSubChannelModel';
18 |
--------------------------------------------------------------------------------
/apps/chat/src/components/DeviceSelection/CameraDevices/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 | import {
6 | Heading,
7 | PreviewVideo,
8 | QualitySelection,
9 | CameraSelection,
10 | Label
11 | } from 'amazon-chime-sdk-component-library-react';
12 |
13 | import { title, StyledInputGroup } from '../Styled';
14 |
15 | const CameraDevices = () => {
16 | return (
17 |
18 |
19 | Video
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
30 |
31 |
32 | );
33 | };
34 |
35 | export default CameraDevices;
36 |
--------------------------------------------------------------------------------
/apps/chat/src/components/DeviceSelection/MicrophoneDevices/MicrophoneActivityPreview.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 | import { Label } from 'amazon-chime-sdk-component-library-react';
6 |
7 | import { StyledPreviewGroup } from '../Styled';
8 | import MicrophoneActivityPreviewBar from './MicrophoneActivityPreviewBar';
9 |
10 | const MicrophoneActivityPreview = () => {
11 | return (
12 |
13 |
16 |
17 |
18 | );
19 | };
20 |
21 | export default MicrophoneActivityPreview;
22 |
--------------------------------------------------------------------------------
/apps/chat/src/components/DeviceSelection/MicrophoneDevices/MicrophoneActivityPreviewBar.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React, { useRef } from 'react';
5 | import { useLocalAudioInputActivityPreview } from 'amazon-chime-sdk-component-library-react';
6 |
7 | import ActivityBar from '../../ActivityBar';
8 |
9 | const MicrophoneActivityPreviewBar = () => {
10 | const activityBarRef = useRef();
11 | useLocalAudioInputActivityPreview(activityBarRef);
12 |
13 | return ;
14 | };
15 |
16 | export default MicrophoneActivityPreviewBar;
17 |
--------------------------------------------------------------------------------
/apps/chat/src/components/DeviceSelection/MicrophoneDevices/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 | import {
6 | Heading,
7 | MicSelection
8 | } from 'amazon-chime-sdk-component-library-react';
9 |
10 | import { title } from '../Styled';
11 | import MicrophoneActivityPreview from './MicrophoneActivityPreview';
12 |
13 | const MicrophoneDevices = () => {
14 | return (
15 |
16 |
17 | Audio
18 |
19 |
20 |
21 |
22 | );
23 | };
24 |
25 | export default MicrophoneDevices;
26 |
--------------------------------------------------------------------------------
/apps/chat/src/components/DeviceSelection/SpeakerDevices/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React, { useState } from 'react';
5 | import {
6 | SpeakerSelection,
7 | SecondaryButton,
8 | useAudioOutputs
9 | } from 'amazon-chime-sdk-component-library-react';
10 |
11 | import TestSound from '../../../utilities/TestSound';
12 |
13 | const SpeakerDevices = () => {
14 | const { selectedDevice } = useAudioOutputs();
15 | const [selectedOutput, setSelectedOutput] = useState(selectedDevice);
16 |
17 | const handleChange = (deviceId: string): void => {
18 | setSelectedOutput(deviceId);
19 | };
20 |
21 | const handleTestSpeaker = () => {
22 | new TestSound(selectedOutput);
23 | };
24 |
25 | return (
26 |
27 |
28 |
29 |
30 | );
31 | };
32 |
33 | export default SpeakerDevices;
34 |
--------------------------------------------------------------------------------
/apps/chat/src/components/DeviceSelection/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 |
6 | import { StyledWrapper, StyledAudioGroup, StyledVideoGroup } from './Styled';
7 | import MicrophoneDevices from './MicrophoneDevices';
8 | import SpeakerDevices from './SpeakerDevices';
9 | import CameraDevices from './CameraDevices';
10 |
11 | const DeviceSelection = () => (
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | );
22 |
23 | export default DeviceSelection;
24 |
--------------------------------------------------------------------------------
/apps/chat/src/constants/routes.jsx:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | const awsPath = '/Prod';
5 | export const rootPath = window.location.href.includes(awsPath)
6 | ? `${awsPath}/`
7 | : '/';
8 |
9 | const routes = {
10 | SIGNIN: `${rootPath}`,
11 | CHAT: `${rootPath}rooms`,
12 | DEVICE: `${rootPath}devices`,
13 | MEETING: `${rootPath}meeting`,
14 | };
15 |
16 | export default routes;
17 |
--------------------------------------------------------------------------------
/apps/chat/src/containers/EndMeetingControl/Styled.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const StyledP = styled.p`
7 | padding: 1rem 1rem 1rem 0;
8 | `;
9 |
--------------------------------------------------------------------------------
/apps/chat/src/containers/MeetingControls/Styled.ts:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import styled from 'styled-components';
5 |
6 | interface StyledProps {
7 | active: boolean;
8 | }
9 |
10 | export const StyledControls = styled.div`
11 | opacity: ${props => (props.active ? '1' : '0')};
12 | transition: opacity 250ms ease;
13 |
14 | @media screen and (max-width: 768px) {
15 | opacity: 1;
16 | }
17 |
18 | .controls-menu {
19 | width: 100%;
20 | position: static;
21 | }
22 | `;
23 |
--------------------------------------------------------------------------------
/apps/chat/src/containers/MeetingDetails/Styled.ts:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const StyledList = styled.dl`
7 | font-size: 1rem;
8 |
9 | dt {
10 | display: inline-block;
11 | margin-bottom: 0.75rem;
12 | margin-right: 0.5rem;
13 |
14 | &::after {
15 | content: ':';
16 | }
17 | }
18 |
19 | dd {
20 | display: inline-block;
21 | font-weight: 600;
22 | }
23 | `;
24 |
--------------------------------------------------------------------------------
/apps/chat/src/containers/MeetingMetrics/Styled.ts:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const StyledMetrics = styled.div`
7 | position: absolute;
8 | top: 0.5rem;
9 | right: 0.5rem;
10 | min-width: 7.5rem;
11 | z-index: 5;
12 |
13 | .metric {
14 | white-space: nowrap;
15 | font-size: 0.75rem;
16 | margin-bottom: 0.375rem;
17 |
18 | &.title {
19 | font-weight: bold;
20 | }
21 | }
22 | `;
23 |
--------------------------------------------------------------------------------
/apps/chat/src/containers/Navigation/NavigationControl.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 |
6 | import MeetingRoster from '../MeetingRoster';
7 | import MeetingChat from '../MeetingChat';
8 | import Navigation from '.';
9 | import { useNavigation } from '../../providers/NavigationProvider';
10 |
11 | const NavigationControl = () => {
12 | const { showNavbar, showRoster, showChat } = useNavigation();
13 |
14 | return (
15 | <>
16 | {showNavbar ? : null}
17 | {showChat ? : null}
18 | {showRoster ? : null}
19 | >
20 | );
21 | };
22 |
23 | export default NavigationControl;
24 |
--------------------------------------------------------------------------------
/apps/chat/src/containers/Notifications/index.jsx:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 | import {
6 | useNotificationState,
7 | NotificationGroup,
8 | } from 'amazon-chime-sdk-component-library-react';
9 |
10 | const Notifications = () => {
11 | const { notifications } = useNotificationState();
12 |
13 | return notifications.length ? : null;
14 | };
15 |
16 | export default Notifications;
17 |
--------------------------------------------------------------------------------
/apps/chat/src/containers/Presence/ChannelPresence.css:
--------------------------------------------------------------------------------
1 | .channel-members-list-header {
2 | background-color: inherit;
3 | text-align: center;
4 | padding: 0.75rem;
5 | margin-bottom: 0.5rem;
6 | border-bottom: 0.5px solid #d4d5d8;
7 | position: sticky;
8 | z-index: 2;
9 | top: 0;
10 | right: 0;
11 | left: 0;
12 | }
13 |
14 | .channel-members-list-header-title {
15 | padding-left: 1rem;
16 | }
17 |
18 | .channel-members-list-item {
19 | padding: 0 8px 8px;
20 | }
21 |
22 | .channel-members-container {
23 | background-color: #f0f1f2;
24 | border-left: 1px solid #d4d5d8;
25 | height: 100%;
26 | overflow-y: scroll;
27 | min-width: 12rem;
28 | }
29 |
--------------------------------------------------------------------------------
/apps/chat/src/containers/TypingIndicator/index.css:
--------------------------------------------------------------------------------
1 | .typing-indicator {
2 | display: block;
3 | width: 100%;
4 | height: 100%;
5 | padding-bottom: 0.5rem;
6 | }
7 |
8 | .typing-indicator span {
9 | background-color: gray;
10 | border-radius: 50%;
11 | display: block;
12 | float: left;
13 | height: 5px;
14 | width: 5px;
15 | margin: 0 1px;
16 | opacity: 0.4;
17 | }
18 |
19 | .typing-indicator span:nth-child(1) {
20 | animation: 1s blink infinite 334ms;
21 | }
22 |
23 | .typing-indicator span:nth-child(2) {
24 | animation: 1s blink infinite 667ms;
25 | }
26 |
27 | .typing-indicator span:nth-child(3) {
28 | animation: 1s blink infinite 1s;
29 | }
30 |
31 | @keyframes blink {
32 | 50% {
33 | opacity: 1;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/apps/chat/src/containers/channels/ChannelsWrapper.css:
--------------------------------------------------------------------------------
1 | .channel-list-header {
2 | display: flex;
3 | justify-content: space-between;
4 | padding: 0.25rem 0.5rem;
5 | border-bottom: 0.5px solid #d4d5d8;
6 | }
7 |
8 | button.create-channel-button {
9 | height: 2rem;
10 | width: 2rem;
11 | }
12 |
13 | .channel-list-header-title {
14 | padding-left: 1rem;
15 | }
16 | .channel-list-header,
17 | .channel-list-header-title {
18 | display: flex;
19 | align-items: center;
20 | cursor: unset;
21 | }
22 |
23 | ul.ch-popover-menu {
24 | backdrop-filter: none;
25 | }
26 |
27 | button.ch-sts-popover-toggle.ch-popover-toggle {
28 | right: auto;
29 | border-radius: inherit;
30 | margin: inherit;
31 | width: 100%;
32 | height: 100%;
33 | }
34 |
35 | button.ch-sts-popover-toggle.ch-popover-toggle:hover {
36 | background-color: #004ddb;
37 | }
38 |
39 | li.separator {
40 | margin: 0.5rem 0;
41 | }
42 |
--------------------------------------------------------------------------------
/apps/chat/src/containers/input/Input.css:
--------------------------------------------------------------------------------
1 | .message-input-form {
2 | flex: auto;
3 | padding: 1rem 0 1rem 1rem;
4 | }
5 |
6 | span.text-input {
7 | display: flex;
8 | flex-grow: 1;
9 | }
10 |
11 | .text-input input {
12 | width: 100%;
13 | }
14 |
15 | .message-input-container {
16 | border-top: 1px solid #e4e9f2;
17 | display: flex;
18 | flex-flow: row;
19 | margin-top: auto;
20 | margin-bottom: 0;
21 | min-height: 4rem;
22 | }
23 |
24 | .message-input-container .write-link.attach {
25 | margin: 1rem 1rem auto 0.5rem;
26 | }
27 |
28 | .message-input-container .attachment-preview {
29 | display: flex;
30 | }
31 |
32 | .message-input-container .attachment-preview span {
33 | margin: auto 0;
34 | }
35 |
36 | .message-input-container.join-channel-message {
37 | display: flex;
38 | justify-content: center;
39 | align-items: center;
40 | }
41 |
--------------------------------------------------------------------------------
/apps/chat/src/containers/loginWithCognito/LoginWithCognito.css:
--------------------------------------------------------------------------------
1 | form.signin-form {
2 | display: flex;
3 | flex-direction: column;
4 | margin-top: 1rem;
5 | }
6 |
7 | div.input.username-input, div.input.password-input {
8 | margin-left: -5rem;
9 | width: 100%;
10 | grid-template-columns: 18% 1fr;
11 | }
12 |
13 | div.input {
14 | margin-bottom: 2rem;
15 | text-align: left;
16 | }
17 |
18 | div.input span {
19 | width: 25rem;
20 | }
21 |
22 | .input input {
23 | width: 100%;
24 | }
25 |
26 | div.input span {
27 | width: 25rem;
28 | }
29 |
30 | .signin-buttons {
31 | display: flex;
32 | justify-content: space-between;
33 | align-items: center;
34 | }
35 |
36 | .or-span {
37 | font-size: .875rem;
38 | }
39 |
--------------------------------------------------------------------------------
/apps/chat/src/containers/loginWithCredentialExchangeService/LoginWithCredentialExchangeService.css:
--------------------------------------------------------------------------------
1 | form.signin-form {
2 | display: flex;
3 | flex-direction: column;
4 | margin-top: 1rem;
5 | }
6 |
7 | div.input.access-token-input{
8 | margin-left: -5rem;
9 | width: 100%;
10 | grid-template-columns: 18% 1fr;
11 | }
12 |
13 | div.input {
14 | margin-bottom: 2rem;
15 | text-align: left;
16 | }
17 |
18 | div.input span {
19 | width: 25rem;
20 | }
21 |
22 | .input input {
23 | width: 100%;
24 | }
25 |
26 | div.input span {
27 | width: 25rem;
28 | }
29 |
30 | .access-token-submit-button {
31 | display: flex;
32 | justify-content: space-between;
33 | align-items: center;
34 | }
35 |
36 | .or-span {
37 | font-size: .875rem;
38 | }
39 |
--------------------------------------------------------------------------------
/apps/chat/src/containers/messages/Messages.css:
--------------------------------------------------------------------------------
1 | .message {
2 | margin: 0 1.5rem 0.5rem 0.5rem;
3 | white-space: pre-wrap;
4 | }
5 |
6 | .message-list-container {
7 | background-color: #f0f1f2;
8 | overflow-y: scroll;
9 | position: relative;
10 | }
11 |
12 | .message-list-header {
13 | background-color: inherit;
14 | text-align: center;
15 | padding: 0.76rem;
16 | margin-bottom: 1rem;
17 | border-bottom: 0.5px solid #d4d5d8;
18 | position: sticky;
19 | z-index: 2;
20 | top: 0;
21 | right: 0;
22 | left: 0;
23 | }
24 |
--------------------------------------------------------------------------------
/apps/chat/src/index.js:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 | import ReactDOM from 'react-dom';
6 | import Chat from './Chat';
7 | import configureAmplify from './services/servicesConfig';
8 |
9 | // Call services configuration
10 | configureAmplify();
11 |
12 | document.addEventListener('DOMContentLoaded', _event => {
13 | ReactDOM.render(, document.getElementById('root'));
14 | });
15 |
--------------------------------------------------------------------------------
/apps/chat/src/providers/UserPermissionProvider.jsx:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React, { useContext, useState } from 'react';
5 | const UserPermissionContext = React.createContext();
6 |
7 | const UserPermissionProvider = ({ children }) => {
8 | const [role, setRole] = useState('user');
9 | const providerValue = {
10 | role,
11 | setRole,
12 | };
13 |
14 | return (
15 |
16 | {children}
17 |
18 | );
19 | };
20 |
21 | const useUserPermission = () => {
22 | const context = useContext(UserPermissionContext);
23 |
24 | if (!context) {
25 | throw new Error(
26 | 'useUserPermission must be used within UserPermissionProvider'
27 | );
28 | }
29 |
30 | return context;
31 | };
32 |
33 | export { UserPermissionProvider, useUserPermission };
34 |
--------------------------------------------------------------------------------
/apps/chat/src/utilities/arnParser.js:
--------------------------------------------------------------------------------
1 | const arnParser = (arn) => {
2 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | // SPDX-License-Identifier: MIT-0
4 |
5 | const arnMap = [
6 | 'arn',
7 | 'aws',
8 | 'service',
9 | 'region',
10 | 'namespace',
11 | 'relativeId',
12 | 'relativeValue',
13 | ];
14 | return arn.split(':').reduce(function (aggregator, piece, index) {
15 | aggregator[arnMap[index]] = piece;
16 | return aggregator;
17 | }, {});
18 | };
19 |
20 | export default arnParser;
21 |
--------------------------------------------------------------------------------
/apps/chat/src/utilities/formatBytes.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-restricted-properties */
2 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | // SPDX-License-Identifier: MIT-0
4 |
5 | const formatBytes = (bytes, decimals = 2) => {
6 | if (bytes === 0) return '0 Bytes';
7 |
8 | const k = 1024;
9 | const dm = decimals < 0 ? 0 : decimals;
10 | const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
11 |
12 | const i = Math.floor(Math.log(bytes) / Math.log(k));
13 |
14 | return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
15 | };
16 |
17 | export default formatBytes;
18 |
--------------------------------------------------------------------------------
/apps/chat/src/utilities/styles.css:
--------------------------------------------------------------------------------
1 | li span.date-header {
2 | width: fit-content;
3 | width: -moz-fit-content;
4 | margin: 0 auto;
5 | display: flex;
6 | }
7 |
--------------------------------------------------------------------------------
/apps/chat/src/views/DeviceSetup/Styled.ts:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const StyledLayout = styled.main`
7 | display: flex;
8 | flex-direction: column;
9 | align-items: center;
10 | justify-content: center;
11 | min-height: 100%;
12 | max-width: 85rem;
13 | padding: 2rem;
14 | margin: auto;
15 |
16 | @media (max-width: 760px) {
17 | border-right: unset;
18 | align-items: unset;
19 | justify-content: unset;
20 | }
21 | `;
22 |
--------------------------------------------------------------------------------
/apps/chat/src/views/DeviceSetup/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 | import { Heading } from 'amazon-chime-sdk-component-library-react';
6 |
7 | import JoinMeetingDetails from '../../containers/MeetingJoinDetails';
8 | import { StyledLayout } from './Styled';
9 | import DeviceSelection from '../../components/DeviceSelection';
10 |
11 | const DeviceSetup: React.FC = () => (
12 |
13 |
14 | Device settings
15 |
16 |
17 |
18 |
19 | );
20 |
21 | export default DeviceSetup;
22 |
--------------------------------------------------------------------------------
/apps/chat/src/views/Signin/style.css:
--------------------------------------------------------------------------------
1 | .signin-container {
2 | text-align: center;
3 | width: 25rem;
4 | margin: 0 auto;
5 | margin-top: 6.5rem;
6 | }
7 |
--------------------------------------------------------------------------------
/apps/chat/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "esnext",
4 | "outDir": "build",
5 | "noImplicitAny": true,
6 | "noUnusedLocals": true,
7 | "removeComments": true,
8 | "preserveConstEnums": true,
9 | "sourceMap": true,
10 | "target": "es2018",
11 | "rootDirs": ["src"],
12 | "allowJs": true,
13 | "checkJs": false,
14 | "jsx": "react",
15 | "types": ["react"],
16 | "pretty": true,
17 | "skipLibCheck": true,
18 | "strict": true,
19 | "moduleResolution": "node",
20 | "esModuleInterop": true,
21 | "lib": ["es5", "es6", "es7", "es2017", "dom"],
22 | "allowSyntheticDefaultImports": true,
23 | "forceConsistentCasingInFileNames": true,
24 | "resolveJsonModule": true,
25 | "suppressImplicitAnyIndexErrors": true,
26 | },
27 | "include": ["src/**/*"],
28 | "exclude": [
29 | "node_modules",
30 | "build"
31 | ]
32 | }
33 |
--------------------------------------------------------------------------------
/apps/iOS-WKWebView-sample/.gitignore:
--------------------------------------------------------------------------------
1 | ## User settings
2 | xcuserdata/
3 | .build/
4 | playground.xcworkspace
5 |
--------------------------------------------------------------------------------
/apps/iOS-WKWebView-sample/WkWebView Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/apps/iOS-WKWebView-sample/WkWebView Demo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/apps/iOS-WKWebView-sample/WkWebView Demo/AppConfiguration.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppConfiguration.swift
3 | // WkWebView Demo
4 | //
5 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | // SPDX-License-Identifier: MIT-0
7 | //
8 |
9 | import Foundation
10 |
11 | struct AppConfiguration {
12 | static let url = "YOUR_SERVER_URL"
13 | }
14 |
--------------------------------------------------------------------------------
/apps/iOS-WKWebView-sample/WkWebView Demo/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/apps/iOS-WKWebView-sample/WkWebView Demo/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/apps/iOS-WKWebView-sample/WkWebView Demo/SceneDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SceneDelegate.swift
3 | // WkWebView Demo
4 | //
5 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6 | // SPDX-License-Identifier: MIT-0
7 | //
8 |
9 | import UIKit
10 |
11 | class SceneDelegate: UIResponder, UIWindowSceneDelegate {
12 | var window: UIWindow?
13 |
14 | func scene(_ scene: UIScene,
15 | willConnectTo _: UISceneSession,
16 | options _: UIScene.ConnectionOptions)
17 | {
18 | guard let _ = (scene as? UIWindowScene) else { return }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/apps/iOS-WKWebView-sample/WkWebView DemoUITests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/apps/meeting/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 |
--------------------------------------------------------------------------------
/apps/meeting/app/meeting.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Chime SDK Meeting Demo
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/apps/meeting/serverless/.gitignore:
--------------------------------------------------------------------------------
1 | src/index.html
2 | build
--------------------------------------------------------------------------------
/apps/meeting/serverless/src/index.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 |
3 | exports.handler = async (event, context, callback) => {
4 | var response = {
5 | "statusCode": 200,
6 | "headers": {
7 | 'Content-Type': 'text/html'
8 | },
9 | "body": '',
10 | "isBase64Encoded": false
11 | };
12 | response.body = fs.readFileSync('./index.html', {encoding: 'utf8'});
13 | callback(null, response);
14 | };
15 |
--------------------------------------------------------------------------------
/apps/meeting/serverless/src/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "chime-sdk-meeting-serverless-demos",
3 | "version": "0.1.0",
4 | "description": "Amazon Chime SDK Serverless Demos",
5 | "license": "Apache-2.0",
6 | "repository": {
7 | "type": "git",
8 | "url": "git://github.com/aws-samples/amazon-chime-sdk"
9 | },
10 | "dependencies": {
11 | "@aws-sdk/client-chime-sdk-meetings": "^3.490.0",
12 | "@aws-sdk/client-cloudwatch-logs": "^3.490.0",
13 | "@aws-sdk/client-dynamodb": "^3.494.0"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/apps/meeting/src/components/ActivityBar/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 | import styled from 'styled-components';
6 |
7 | const Track = styled.div`
8 | width: 100%;
9 | height: 0.625rem;
10 | background-color: #ecf0f1;
11 | border-radius: 0.25rem;
12 | `;
13 |
14 | const Progress = styled.div`
15 | height: 0.625rem;
16 | background-color: #18bc9c;
17 | border-radius: 0.25rem;
18 | transform: scaleX(0);
19 | transform-origin: left;
20 | transition: transform 33ms ease-in-out;
21 | will-change: transform;
22 | `;
23 |
24 | // eslint-disable-next-line @typescript-eslint/no-explicit-any
25 | const ActivityBar = React.forwardRef((props, ref: any) => (
26 |
29 | ));
30 |
31 | ActivityBar.displayName = 'ActivityBar';
32 |
33 | export default ActivityBar;
34 |
--------------------------------------------------------------------------------
/apps/meeting/src/components/Card/Styled.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const SmallText = styled.small`
7 | color: rgba(0, 0, 0, 0.5);
8 | `;
9 |
10 | export const StyledCard = styled.div`
11 | .ch-body {
12 | margin-bottom: 1rem;
13 | }
14 |
15 | .ch-header {
16 | font-size: 1.5rem;
17 | }
18 |
19 | .ch-title {
20 | font-size: 1.25rem;
21 | margin-top: 1rem;
22 | }
23 |
24 | .ch-description {
25 | margin: 1rem 0 1rem 0;
26 | }
27 | `;
28 |
--------------------------------------------------------------------------------
/apps/meeting/src/components/Card/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 |
6 | import { SmallText, StyledCard } from './Styled';
7 |
8 | interface CardProps extends React.HTMLAttributes {
9 | header?: string;
10 | title: string;
11 | // eslint-disable-next-line @typescript-eslint/no-explicit-any
12 | description: any;
13 | smallText?: string;
14 | }
15 |
16 | const Card: React.FC = ({
17 | header,
18 | title,
19 | description,
20 | smallText,
21 | }: CardProps) => (
22 |
23 | {header && {header}
}
24 |
25 |
{title}
26 |
{description}
27 | {smallText &&
{smallText}}
28 |
29 |
30 | );
31 |
32 | export default Card;
33 |
--------------------------------------------------------------------------------
/apps/meeting/src/components/DeviceSelection/MicrophoneDevices/MicrophoneActivityPreview.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 | import { Label } from 'amazon-chime-sdk-component-library-react';
6 |
7 | import { StyledPreviewGroup } from '../Styled';
8 | import MicrophoneActivityPreviewBar from './MicrophoneActivityPreviewBar';
9 |
10 | const MicrophoneActivityPreview = () => {
11 | return (
12 |
13 |
16 |
17 |
18 | );
19 | };
20 |
21 | export default MicrophoneActivityPreview;
22 |
--------------------------------------------------------------------------------
/apps/meeting/src/components/DeviceSelection/MicrophoneDevices/MicrophoneActivityPreviewBar.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React, { useRef } from 'react';
5 | import { useLocalAudioInputActivityPreview } from 'amazon-chime-sdk-component-library-react';
6 |
7 | import ActivityBar from '../../ActivityBar';
8 |
9 | const MicrophoneActivityPreviewBar = () => {
10 | const activityBarRef = useRef();
11 | useLocalAudioInputActivityPreview(activityBarRef);
12 |
13 | return ;
14 | };
15 |
16 | export default MicrophoneActivityPreviewBar;
17 |
--------------------------------------------------------------------------------
/apps/meeting/src/components/DeviceSelection/MicrophoneDevices/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 | import {
6 | Heading,
7 | MicSelection,
8 | } from 'amazon-chime-sdk-component-library-react';
9 |
10 | import { title } from '../Styled';
11 | import MicrophoneActivityPreview from './MicrophoneActivityPreview';
12 |
13 | const MicrophoneDevices = () => {
14 | return (
15 |
16 |
17 | Audio
18 |
19 |
20 |
21 |
22 | );
23 | };
24 |
25 | export default MicrophoneDevices;
26 |
--------------------------------------------------------------------------------
/apps/meeting/src/components/DeviceSelection/SpeakerDevices/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React, { useState } from 'react';
5 | import {
6 | SpeakerSelection,
7 | SecondaryButton,
8 | useAudioOutputs,
9 | } from 'amazon-chime-sdk-component-library-react';
10 |
11 | import TestSound from '../../../utils/TestSound';
12 |
13 | const SpeakerDevices = () => {
14 | const { selectedDevice } = useAudioOutputs();
15 | const [selectedOutput, setSelectedOutput] = useState(selectedDevice);
16 |
17 | const handleChange = (deviceId: string): void => {
18 | setSelectedOutput(deviceId);
19 | };
20 |
21 | const handleTestSpeaker = () => {
22 | new TestSound(selectedOutput);
23 | };
24 |
25 | return (
26 |
27 |
28 |
29 |
30 | );
31 | };
32 |
33 | export default SpeakerDevices;
34 |
--------------------------------------------------------------------------------
/apps/meeting/src/components/DeviceSelection/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 |
6 | import { StyledWrapper, StyledAudioGroup, StyledVideoGroup } from './Styled';
7 | import MicrophoneDevices from './MicrophoneDevices';
8 | import SpeakerDevices from './SpeakerDevices';
9 | import CameraDevices from './CameraDevices';
10 |
11 | const DeviceSelection = () => (
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | );
22 |
23 | export default DeviceSelection;
24 |
--------------------------------------------------------------------------------
/apps/meeting/src/components/MediaStatsList/MetricItem.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 | import { StyledItemMetricName, StyledItemMetricValue } from './Styled';
6 |
7 | export interface MetricItemProps {
8 | metricName: string;
9 | metricValues: string[];
10 | }
11 |
12 | export const MetricItem: React.FC = ({
13 | metricName,
14 | metricValues,
15 | }) => {
16 | const showMetricItem = metricValues[0] && metricValues[0] !== '';
17 | return (
18 | <>
19 | {showMetricItem && (
20 | <>
21 | {metricName}
22 | {metricValues.map(metricValue => {
23 | return {metricValue};
24 | })}
25 | >
26 | )}
27 | >
28 | );
29 | };
30 |
31 | export default MetricItem;
32 |
--------------------------------------------------------------------------------
/apps/meeting/src/components/MediaStatsList/Styled.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const StyledList = styled.dl`
7 | font-size: 0.75rem;
8 | display: flex;
9 | flex-wrap: wrap;
10 | width: 28.125rem;
11 | `;
12 |
13 | export const StyledItemMetricName = styled.dt`
14 | line-height: 1.5rem;
15 | margin-left: 1.5rem;
16 | width: 30%;
17 | `;
18 |
19 | export const StyledItemMetricValue = styled.dd`
20 | line-height: 1.5rem;
21 | width: 30%;
22 | margin-left: 0;
23 | `;
24 |
25 | export const StyledMediaMetricsWrapper = styled.div`
26 | header {
27 | border-bottom: none;
28 | }
29 |
30 | .ch-title {
31 | font-weight: bold;
32 | font-size: 0.75rem;
33 | padding: 0 1.5rem;
34 | }
35 |
36 | .ch-popover-menu {
37 | max-width: 30rem;
38 | }
39 | `;
--------------------------------------------------------------------------------
/apps/meeting/src/components/MediaStatsList/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 |
6 | import { MetricItemProps } from './MetricItem';
7 | import { StyledList } from './Styled';
8 |
9 | export interface MediaStatsListProps {
10 | children?: React.ReactElement | React.ReactElement[];
11 | }
12 |
13 | export const MediaStatsList: React.FC = ({ children }) => (
14 | {children}
15 | );
16 |
17 | export default MediaStatsList;
--------------------------------------------------------------------------------
/apps/meeting/src/components/RemoteVideo.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 |
6 | type Props = {
7 | enabled: boolean;
8 | attendeeName?: string;
9 | videoEleRef: (instance: HTMLVideoElement | null) => void;
10 | };
11 |
12 | const RemoteVideo: React.FC = ({ videoEleRef, enabled }) => (
13 |
22 | );
23 |
24 | export default RemoteVideo;
25 |
--------------------------------------------------------------------------------
/apps/meeting/src/components/RosterAttendeeWrapper.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 |
6 | import {
7 | RosterAttendee,
8 | useAttendeeStatus,
9 | } from 'amazon-chime-sdk-component-library-react';
10 | import VideoStreamMetrics from '../containers/VideoStreamMetrics';
11 |
12 | interface Props {
13 | /** The Chime attendee ID */
14 | attendeeId: string;
15 | }
16 |
17 | const RosterAttendeeWrapper: React.FC = ({ attendeeId }) => {
18 | const { videoEnabled } = useAttendeeStatus(attendeeId);
19 | return (
20 | : null
24 | }
25 | />
26 | );
27 | };
28 |
29 | export default RosterAttendeeWrapper;
30 |
--------------------------------------------------------------------------------
/apps/meeting/src/components/VideoTileGrid/Styled.tsx:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const FeaturedArea = styled.div`
7 | grid-area: ft;
8 | `;
9 |
10 | export const ContentShareGrid = styled.div`
11 | display: grid;
12 | grid-template-rows: ${(props) => 'repeat(2, 1fr)'};
13 | grid-template-columns: ${(props) => '1fr'};
14 | gap: 4px;
15 | width: 100%;
16 | height: 100%;
17 | `;
18 |
--------------------------------------------------------------------------------
/apps/meeting/src/components/icons/Spinner/Styled.tsx:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const StyledSpinner = styled.dl`
7 | .spinner {
8 | animation: spin 2s infinite ease;
9 | width: 2rem;
10 | height: 2rem;
11 | }
12 |
13 | @keyframes spin {
14 |
15 | from {
16 | transform: rotate(0deg);
17 | }
18 |
19 | to {
20 | transform: rotate(360deg);
21 | }
22 | }
23 | `;
24 |
25 |
--------------------------------------------------------------------------------
/apps/meeting/src/constants/routes.ts:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | const awsPath = '/Prod';
5 | export const rootPath: string = window.location.href.includes(awsPath) ? `${awsPath}/` : '/';
6 |
7 | const routes = {
8 | HOME: `${rootPath}`,
9 | DEVICE: `${rootPath}devices`,
10 | MEETING: `${rootPath}meeting`,
11 | };
12 |
13 | export default routes;
14 |
--------------------------------------------------------------------------------
/apps/meeting/src/containers/Chat/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Messages from './Messages';
3 | import ChatInput from './ChatInput';
4 | import { StyledChat, StyledTitle } from './Styled';
5 | import { IconButton, Remove } from 'amazon-chime-sdk-component-library-react';
6 | import { useNavigation } from '../../providers/NavigationProvider';
7 |
8 | export default function Chat() {
9 | const { toggleChat } = useNavigation();
10 |
11 | return (
12 |
13 |
14 | Chat
15 |
16 | } label="Close" onClick={toggleChat} />
17 |
18 |
19 |
20 |
21 |
22 | );
23 | }
24 |
--------------------------------------------------------------------------------
/apps/meeting/src/containers/DevicePermissionControl/Styled.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const StyledP = styled.p`
7 | padding: 1rem 1rem 1rem 0;
8 | `;
9 |
--------------------------------------------------------------------------------
/apps/meeting/src/containers/DynamicMeetingControls/Styled.ts:
--------------------------------------------------------------------------------
1 | // Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import styled from 'styled-components';
5 |
6 | interface StyledProps {
7 | $active: boolean;
8 | }
9 |
10 | export const StyledControls = styled.div`
11 | opacity: ${(props) => (props.$active ? '1' : '0')};
12 | transition: opacity 250ms ease;
13 |
14 | @media screen and (max-width: 768px) {
15 | opacity: 1;
16 | }
17 |
18 | .controls-menu {
19 | width: 100%;
20 | position: static;
21 | }
22 | `;
23 |
--------------------------------------------------------------------------------
/apps/meeting/src/containers/EndMeetingControl/Styled.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const StyledP = styled.p`
7 | padding: 1rem 1rem 1rem 0;
8 | `;
9 |
--------------------------------------------------------------------------------
/apps/meeting/src/containers/MeetingControls/Styled.ts:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import styled from 'styled-components';
5 |
6 | interface StyledProps {
7 | $active: boolean;
8 | }
9 |
10 | export const StyledControls = styled.div`
11 | opacity: ${(props) => (props.$active ? '1' : '0')};
12 | transition: opacity 250ms ease;
13 |
14 | @media screen and (max-width: 768px) {
15 | opacity: 1;
16 | }
17 |
18 | .controls-menu {
19 | width: 100%;
20 | position: static;
21 | }
22 | `;
23 |
--------------------------------------------------------------------------------
/apps/meeting/src/containers/MeetingDetails/Styled.ts:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const StyledList = styled.dl`
7 | font-size: 1rem;
8 |
9 | dt {
10 | display: inline-block;
11 | margin-bottom: 0.75rem;
12 | margin-right: 0.5rem;
13 |
14 | &::after {
15 | content: ':';
16 | }
17 | }
18 |
19 | dd {
20 | display: inline-block;
21 | font-weight: 600;
22 | }
23 | `;
24 |
--------------------------------------------------------------------------------
/apps/meeting/src/containers/MeetingEventObserver/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import { useLogger, useMeetingEvent } from 'amazon-chime-sdk-component-library-react';
5 |
6 | const MeetingEventObserver = () => {
7 | const logger = useLogger();
8 | const meetingEvent = useMeetingEvent();
9 | if (meetingEvent) {
10 | logger.info(`Received meeting event in MeetingEventObserver: ${JSON.stringify(meetingEvent)}`);
11 | }
12 | return null;
13 | };
14 |
15 | export default MeetingEventObserver;
16 |
--------------------------------------------------------------------------------
/apps/meeting/src/containers/MeetingFormSelector/Styled.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const StyledWrapper = styled.div`
7 | width: 100%;
8 | display: flex;
9 | flex-direction: column;
10 |
11 | @media (min-width: 600px) and (min-height: 600px) {
12 | min-height: 35.75rem;
13 | max-width: 30rem;
14 | border-radius: 0.25rem;
15 | box-shadow: 0 0.25rem 0.5rem 0 rgba(0, 0, 0, 0.2),
16 | 0 0.375rem 1.25rem 0 rgba(0, 0, 0, 0.2);
17 | }
18 | `;
19 |
20 | export const StyledDiv = styled.div`
21 | border-bottom: 0.125rem solid #e6e6e6;
22 | padding: 2rem;
23 | flex: 1;
24 |
25 | @media (min-width: 600px) and (min-height: 600px) {
26 | padding: 3rem 3rem 2rem;
27 | }
28 | `;
29 |
--------------------------------------------------------------------------------
/apps/meeting/src/containers/Notifications.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 | import {
6 | useNotificationState,
7 | NotificationGroup,
8 | } from 'amazon-chime-sdk-component-library-react';
9 |
10 | const Notifications = () => {
11 | const { notifications } = useNotificationState();
12 |
13 | return notifications.length ? : null;
14 | };
15 |
16 | export default Notifications;
17 |
--------------------------------------------------------------------------------
/apps/meeting/src/containers/SIPURI/Styled.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const StyledDiv = styled.div`
7 | margin-bottom: 1rem;
8 | margin-left: 1rem;
9 | display: inline-flex;
10 | flex-direction: column;
11 |
12 | & > .sip-uri-heading {
13 | font-size: 1.25rem;
14 | font-weight: bold;
15 | }
16 |
17 | & > .sip-uri-data {
18 | word-break: break-all;
19 | }
20 |
21 | & > .btn-copy {
22 | align-self: center;
23 | }
24 | `;
25 |
--------------------------------------------------------------------------------
/apps/meeting/src/hooks/useToggle.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import { useState } from 'react';
5 |
6 | type UseToggleFunc = {
7 | isActive: boolean;
8 | toggle: () => void;
9 | };
10 |
11 | export default function useToggle(initialState: boolean): UseToggleFunc {
12 | const [isActive, setIsActive] = useState(initialState);
13 |
14 | function toggle(): void {
15 | setIsActive(!isActive);
16 | }
17 |
18 | return {
19 | isActive,
20 | toggle,
21 | };
22 | }
23 |
--------------------------------------------------------------------------------
/apps/meeting/src/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import { createRoot } from 'react-dom/client';
5 | import React from 'react';
6 |
7 | import './style.css';
8 | import App from './app';
9 |
10 | window.addEventListener('load', () => {
11 | const container = document.getElementById('root') as HTMLElement;
12 | const root = createRoot(container);
13 | root.render();
14 | });
15 |
--------------------------------------------------------------------------------
/apps/meeting/src/providers/DataMessagesProvider/state.tsx:
--------------------------------------------------------------------------------
1 | export interface ChatDataMessage {
2 | message: string;
3 | senderAttendeeId: string;
4 | timestamp: number;
5 | senderName: string;
6 | isSelf: boolean;
7 | }
8 |
9 | export interface State {
10 | messages: ChatDataMessage[];
11 | }
12 |
13 | export enum DataMessagesActionType {
14 | ADD,
15 | }
16 |
17 | export interface AddAction {
18 | type: DataMessagesActionType.ADD;
19 | payload: ChatDataMessage;
20 | }
21 |
22 | export const initialState: State = {
23 | messages: [],
24 | };
25 |
26 | export type Action = AddAction;
27 |
28 | export function reducer(state: State, action: Action): State {
29 | const { type, payload } = action;
30 | switch (type) {
31 | case DataMessagesActionType.ADD:
32 | return { messages: [...state.messages, payload] };
33 | default:
34 | throw new Error('Incorrect action in DataMessagesProvider reducer');
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/apps/meeting/src/providers/SIPMeetingProvider/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React, { ReactNode, useContext, useState } from 'react';
5 |
6 | import { SIPMeetingManager } from './SIPMeetingManager';
7 |
8 | const SIPMeetingContext = React.createContext(null);
9 |
10 | type Props = {
11 | children: ReactNode;
12 | };
13 |
14 | export default function SIPMeetingProvider({ children }: Props) {
15 | const [sipMeeting] = useState(new SIPMeetingManager());
16 |
17 | return (
18 |
19 | {children}
20 |
21 | );
22 | }
23 |
24 | export const useSIPMeetingManager = (): SIPMeetingManager => {
25 | const sipMeetingManager = useContext(SIPMeetingContext);
26 |
27 | if (!sipMeetingManager) {
28 | throw new Error(
29 | 'useSIPMeetingManager must be used within SIPMeetingProvider'
30 | );
31 | }
32 |
33 | return sipMeetingManager;
34 | };
35 |
--------------------------------------------------------------------------------
/apps/meeting/src/style.css:
--------------------------------------------------------------------------------
1 | html,
2 | body,
3 | #root {
4 | height: 100%;
5 | margin: 0;
6 | padding: 0;
7 | }
8 |
9 | body {
10 | font-family: 'Lato', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
11 | 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',
12 | 'Segoe UI Symbol';
13 | }
14 |
15 | *,
16 | *:before,
17 | *:after {
18 | box-sizing: border-box;
19 | }
20 |
--------------------------------------------------------------------------------
/apps/meeting/src/utils/VersionLabel.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 | import { Versioning } from 'amazon-chime-sdk-component-library-react';
6 | import { Versioning as SDKVersioning } from 'amazon-chime-sdk-js';
7 |
8 | export const VersionLabel = () => {
9 | const versionTag = `${Versioning.sdkName}@${Versioning.sdkVersion}`;
10 | const sdkVersionTag = `${SDKVersioning.sdkName}@${SDKVersioning.sdkVersion}`;
11 |
12 | return (
13 |
22 | {versionTag} | {sdkVersionTag}
23 |
24 | );
25 | };
26 |
--------------------------------------------------------------------------------
/apps/meeting/src/utils/select-options-format.ts:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | export type SelectOptionsType = {
5 | value: string | number;
6 | label: string;
7 | };
8 |
9 | export default function getFormattedOptionsForSelect(
10 | // eslint-disable-next-line @typescript-eslint/no-explicit-any
11 | jsonObject: any
12 | ): SelectOptionsType[] {
13 | const formattedJSONObject = Object.entries(jsonObject).map(entry => ({
14 | value: entry[0],
15 | label: entry[1] as string,
16 | }));
17 | return formattedJSONObject;
18 | }
19 |
--------------------------------------------------------------------------------
/apps/meeting/src/utils/use-memo-compare.ts:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import { useEffect, useRef } from 'react';
5 |
6 | function useMemoCompare(
7 | // eslint-disable-next-line @typescript-eslint/no-explicit-any
8 | next: any,
9 | compare: (prev: T | undefined, next: T | undefined) => boolean
10 | ) {
11 | const previousRef = useRef();
12 | const previous = previousRef.current;
13 | const isEqual = compare(previous, next);
14 |
15 | useEffect(() => {
16 | if (!isEqual) {
17 | previousRef.current = next;
18 | }
19 | });
20 | return isEqual ? previous : next;
21 | }
22 |
23 | export default useMemoCompare;
24 |
--------------------------------------------------------------------------------
/apps/meeting/src/views/DeviceSetup/Styled.ts:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const StyledLayout = styled.main`
7 | display: flex;
8 | flex-direction: column;
9 | align-items: center;
10 | justify-content: center;
11 | min-height: 100%;
12 | max-width: 85rem;
13 | padding: 2rem;
14 | margin: auto;
15 |
16 | @media (max-width: 760px) {
17 | border-right: unset;
18 | align-items: unset;
19 | justify-content: unset;
20 | }
21 | `;
22 |
--------------------------------------------------------------------------------
/apps/meeting/src/views/DeviceSetup/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 | import { Heading } from 'amazon-chime-sdk-component-library-react';
6 | import MeetingJoinDetails from '../../containers/MeetingJoinDetails';
7 | import { StyledLayout } from './Styled';
8 | import DeviceSelection from '../../components/DeviceSelection';
9 |
10 | const DeviceSetup: React.FC = () => (
11 |
12 |
13 | Device settings
14 |
15 |
16 |
17 |
18 | );
19 |
20 | export default DeviceSetup;
21 |
--------------------------------------------------------------------------------
/apps/meeting/src/views/Home/Styled.ts:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const StyledLayout = styled.main`
7 | display: block;
8 | min-height: 100%;
9 | margin: auto;
10 |
11 | @media (min-width: 600px) and (min-height: 600px) {
12 | display: flex;
13 | flex-direction: column;
14 | align-items: center;
15 | justify-content: center;
16 | padding: 2rem;
17 | }
18 | `;
19 |
--------------------------------------------------------------------------------
/apps/meeting/src/views/Home/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 |
6 | import MeetingFormSelector from '../../containers/MeetingFormSelector';
7 | import { StyledLayout } from './Styled';
8 | import { VersionLabel } from '../../utils/VersionLabel';
9 |
10 | const Home: React.FC = () => (
11 |
12 |
13 |
14 |
15 | );
16 |
17 | export default Home;
18 |
--------------------------------------------------------------------------------
/apps/meeting/src/views/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | export { default as DeviceSetup } from './DeviceSetup';
5 | export { default as Home } from './Home';
6 | export { default as Meeting } from './Meeting';
7 |
--------------------------------------------------------------------------------
/apps/meeting/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "esnext",
4 | "outDir": "build",
5 | "noImplicitAny": true,
6 | "noUnusedLocals": true,
7 | "removeComments": true,
8 | "preserveConstEnums": true,
9 | "sourceMap": true,
10 | "target": "es2018",
11 | "rootDirs": ["src"],
12 | "allowJs": true,
13 | "checkJs": false,
14 | "jsx": "react",
15 | "types": ["react"],
16 | "pretty": true,
17 | "skipLibCheck": true,
18 | "strict": true,
19 | "moduleResolution": "node",
20 | "esModuleInterop": true,
21 | "lib": ["es5", "es6", "es7", "es2017", "dom"],
22 | "allowSyntheticDefaultImports": true,
23 | "forceConsistentCasingInFileNames": true,
24 | "resolveJsonModule": true,
25 | "suppressImplicitAnyIndexErrors": true,
26 | },
27 | "include": ["src/**/*"],
28 | "exclude": [
29 | "node_modules",
30 | "build"
31 | ]
32 | }
33 |
--------------------------------------------------------------------------------
/apps/meeting/webpack.config.dev.js:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | const config = require('./webpack.config.js');
5 | const HtmlWebpackPlugin = require('html-webpack-plugin');
6 |
7 | const app = 'meeting';
8 |
9 | module.exports = Object.assign(config, {
10 | mode: 'development',
11 | devtool: 'inline-source-map',
12 | plugins: [
13 | new HtmlWebpackPlugin({
14 | inlineSource: '.(js|css)$',
15 | template: __dirname + `/app/${app}.html`,
16 | filename: __dirname + `/dist/${app}.html`,
17 | inject: 'head',
18 | }),
19 | ],
20 | });
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | ["@babel/preset-env", {
4 | "useBuiltIns": "usage",
5 | "corejs": 3
6 | }],
7 | "@babel/preset-react"
8 | ],
9 | "plugins": [
10 | "@babel/plugin-proposal-class-properties"
11 | ]
12 | }
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true
3 | }
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/app/chat.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Amazon Chime Chat SDK Demo
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/backend/appconfig.json:
--------------------------------------------------------------------------------
1 | []
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/backend/samconfig.toml:
--------------------------------------------------------------------------------
1 | version = 0.1
2 | [default]
3 | [default.deploy]
4 | [default.deploy.parameters]
5 | stack_name = "moderated-chat-and-real-time-sentiment-analysis-demo"
6 | s3_prefix = "moderated-chat-and-real-time-sentiment-analysis-demo"
7 | region = "us-east-1"
8 | confirm_changeset = true
9 | capabilities = "CAPABILITY_NAMED_IAM"
10 | parameter_overrides = "DemoName=\"AWSSDKChimeModeratedChatDemo\""
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/images/basic-authentication.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/moderated-chat-and-sentiment-analysis/images/basic-authentication.png
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/images/join-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/moderated-chat-and-sentiment-analysis/images/join-screen.png
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/images/moderator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/moderated-chat-and-sentiment-analysis/images/moderator.png
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/images/reaction.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/moderated-chat-and-sentiment-analysis/images/reaction.png
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/images/redacted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/moderated-chat-and-sentiment-analysis/images/redacted.png
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/images/redaction-of-PII.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/moderated-chat-and-sentiment-analysis/images/redaction-of-PII.png
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/images/remove-from-chat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/moderated-chat-and-sentiment-analysis/images/remove-from-chat.png
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/src/Config.js:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 | import data from '../backend/appconfig.json'
4 | const appConfigJson = Object.assign({}, ...data.map((x) => ({[x.OutputKey]: x.OutputValue})));
5 |
6 | const appConfig = {
7 | createUserApiGatewayURL: '' || appConfigJson.createUserApiGatewayURL,
8 | appInstanceArn: '' || appConfigJson.appInstanceArn,
9 | adminUserArn: '' || appConfigJson.adminUserArn,
10 | channelArn: '' || appConfigJson.channelArn,
11 | assetsS3BucketName: '' || appConfigJson.assetsS3BucketName,
12 | cloudfrontEndpoint: '' || appConfigJson.cloudfrontEndpoint,
13 | };
14 | export default appConfig;
15 |
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/src/components/Input/style.css:
--------------------------------------------------------------------------------
1 | .message-input-form {
2 | flex: auto;
3 | padding: 1rem;
4 | }
5 |
6 | span.text-input {
7 | display: flex;
8 | flex-grow: 1;
9 | }
10 |
11 | .text-input input {
12 | width: 100%;
13 | }
14 |
15 | .message-input-container {
16 | border-top: 1px solid #e4e9f2;
17 | display: flex;
18 | flex-flow: row;
19 | margin-top: auto;
20 | margin-bottom: 0;
21 | min-height: 4rem;
22 | }
23 |
24 | .message-input-container.join-channel-message {
25 | display: flex;
26 | justify-content: center;
27 | align-items: center;
28 | }
29 |
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/src/components/Messages/style.css:
--------------------------------------------------------------------------------
1 | .message {
2 | margin: 0 1.5rem 0.5rem 0.5rem;
3 | }
4 |
5 | .message-list-container {
6 | background-color: #f0f1f2;
7 | overflow-y: scroll;
8 | position: relative;
9 | }
10 |
11 | .message-list-header {
12 | background-color: inherit;
13 | text-align: center;
14 | padding: 0.76rem;
15 | margin-bottom: 1rem;
16 | border-bottom: 0.5px solid #d4d5d8;
17 | position: sticky;
18 | z-index: 2;
19 | top: 0;
20 | right: 0;
21 | left: 0;
22 | }
23 |
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/src/components/Notifications/index.jsx:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 | import {
6 | useNotificationState,
7 | NotificationGroup,
8 | } from 'amazon-chime-sdk-component-library-react';
9 |
10 | const Notifications = () => {
11 | const { notifications } = useNotificationState();
12 |
13 | return notifications.length ? : null;
14 | };
15 |
16 | export default Notifications;
17 |
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/src/components/SentimentAnalysis/style.css:
--------------------------------------------------------------------------------
1 | .sentiment-emoji {
2 | display: inline-block;
3 | padding: 0px 5px 0px 14px;
4 | }
5 |
6 | .sentiment-percent {
7 | display: inline-block;
8 | }
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/src/components/SentimentReaction/style.css:
--------------------------------------------------------------------------------
1 | .reaction-container {
2 | z-index: 1000;
3 | position: absolute;
4 | bottom: 1rem;
5 | }
6 |
7 | .reaction-up {
8 | display: inline-block;
9 | position: absolute;
10 | animation: up 4s ease-in-out forwards;
11 | }
12 |
13 | .reaction-wobble {
14 | animation: wobble 4s ease-in-out forwards;
15 | }
16 |
17 | @keyframes up {
18 | 0% {
19 | opacity: 0;
20 | transform: translateY(0vh);
21 | }
22 | 5%, 95% {
23 | opacity: 1;
24 | }
25 | 100% {
26 | opacity: 0;
27 | transform: translateY(-100vh);
28 | }
29 | }
30 |
31 | @keyframes wobble {
32 | 33% {
33 | transform: translateX(100px);
34 | }
35 | 66% {
36 | transform: translateX(-100px);
37 | }
38 | }
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/src/constants/routes.jsx:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | const awsPath = '/Prod';
5 | export const rootPath = window.location.href.includes(awsPath)
6 | ? `${awsPath}/`
7 | : '/';
8 |
9 | const routes = {
10 | JOIN: `${rootPath}`,
11 | CHAT: `${rootPath}rooms`,
12 | };
13 |
14 | export default routes;
15 |
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/src/index.js:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 | import ReactDOM from 'react-dom';
6 | import Chat from './Chat';
7 |
8 | document.addEventListener('DOMContentLoaded', (_event) => {
9 | ReactDOM.render(, document.getElementById('root'));
10 | });
11 |
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/src/utilities/getReactionEmoji.jsx:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import React from 'react';
5 |
6 | const getReactionEmoji = (sentiment) => {
7 | if (sentiment === 'POSITIVE') {
8 | return <>😄>;
9 | }
10 | if (sentiment === 'NEGATIVE') {
11 | return <>😔>;
12 | }
13 | };
14 |
15 | export default getReactionEmoji;
16 |
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/src/utilities/styles.css:
--------------------------------------------------------------------------------
1 | li span.date-header {
2 | width: fit-content;
3 | width: -moz-fit-content;
4 | margin: 0 auto;
5 | display: flex;
6 | }
7 |
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/src/views/Channel/style.css:
--------------------------------------------------------------------------------
1 | .user-block {
2 | /* Custom style */
3 | right: 0;
4 | display: inline-block;
5 | position: absolute;
6 | padding-right: 1rem;
7 | }
8 |
9 | .messaging-container {
10 | background-color: #f0f1f2;
11 | }
--------------------------------------------------------------------------------
/apps/moderated-chat-and-sentiment-analysis/src/views/JoinChannel/style.css:
--------------------------------------------------------------------------------
1 | .join-container {
2 | text-align: center;
3 | width: 25rem;
4 | margin: 0 auto;
5 | margin-top: 6.5rem;
6 | }
7 |
8 | form.join-form {
9 | display: flex;
10 | flex-direction: column;
11 | margin-top: 1rem;
12 | }
13 |
14 | div.input.username-input {
15 | margin-left: -5rem;
16 | width: 100%;
17 | grid-template-columns: 18% 1fr;
18 | }
19 |
20 | div.input {
21 | margin-bottom: 2rem;
22 | text-align: left;
23 | }
24 |
25 | div.input span {
26 | width: 25rem;
27 | }
28 |
29 | .input input {
30 | width: 100%;
31 | }
32 |
33 | .join-buttons {
34 | display: flex;
35 | justify-content: space-between;
36 | align-items: center;
37 | }
--------------------------------------------------------------------------------
/apps/real-time-collaboration/.gitignore:
--------------------------------------------------------------------------------
1 | packages/y-chime-messaging/lib
2 | packages/y-chime-messaging/tsconfig.tsbuildinfo
3 | packages/y-chime-messaging/tsconfig.esnext.tsbuildinfo
--------------------------------------------------------------------------------
/apps/real-time-collaboration/backend/appconfig.json:
--------------------------------------------------------------------------------
1 | []
--------------------------------------------------------------------------------
/apps/real-time-collaboration/backend/samconfig.toml:
--------------------------------------------------------------------------------
1 | version = 0.1
2 | [default]
3 | [default.deploy]
4 | [default.deploy.parameters]
5 | stack_name = "amazon-chime-sdk-messaging-yjs-demo"
6 | s3_prefix = "amazon-chime-sdk-messaging-yjs-demo"
7 | region = "us-east-1"
8 | confirm_changeset = true
9 | capabilities = "CAPABILITY_NAMED_IAM"
10 | parameter_overrides = "DemoName=\"AWSSDKChimeCollabAppDemo\""
--------------------------------------------------------------------------------
/apps/real-time-collaboration/examples/text-editor/.eslintignore:
--------------------------------------------------------------------------------
1 | dist
2 | lib
3 | node_modules
--------------------------------------------------------------------------------
/apps/real-time-collaboration/examples/text-editor/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | "extends": [
3 | "@amazon-chime-sdk-messaging-yjs-demo/eslint-config/eslint"
4 | ],
5 | "parserOptions": {
6 | "project": ["./tsconfig.json"]
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/apps/real-time-collaboration/examples/text-editor/README.md:
--------------------------------------------------------------------------------
1 | # @amazon-chime-sdk-messaging-yjs-demo/text-editor
2 |
3 | Follow the instructions in the root directory's README.
4 |
--------------------------------------------------------------------------------
/apps/real-time-collaboration/examples/text-editor/src/Config.js:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | import data from '../../../backend/appconfig.json';
5 |
6 | const appConfigJson = Object.assign({}, ...data.map((x) => ({ [x.OutputKey]: x.OutputValue })));
7 |
8 | export const appConfig = {
9 | ApiGatewayUrl: '' || appConfigJson.ApiGatewayUrl,
10 | AppInstanceArn: '' || appConfigJson.AppInstanceArn,
11 | AdminUserArn: '' || appConfigJson.AdminUserArn,
12 | AssetsS3BucketName: '' || appConfigJson.AssetsS3BucketName,
13 | CloudfrontEndpoint: '' || appConfigJson.CloudfrontEndpoint,
14 | };
15 |
--------------------------------------------------------------------------------
/apps/real-time-collaboration/examples/text-editor/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@amazon-chime-sdk-messaging-yjs-demo/build-tools/tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "./dist",
5 | "rootDir": "./src",
6 | "module": "esnext"
7 | },
8 | "include": [
9 | "src/**/*"
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/apps/real-time-collaboration/lerna.json:
--------------------------------------------------------------------------------
1 | {
2 | "packages": [
3 | "examples/**",
4 | "packages/**"
5 | ],
6 | "version": "1.0.0"
7 | }
8 |
--------------------------------------------------------------------------------
/apps/real-time-collaboration/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "amazon-chime-sdk-messaging-yjs-demo",
3 | "version": "1.0.0",
4 | "private": true,
5 | "scripts": {
6 | "build": "lerna run build",
7 | "postinstall": "lerna bootstrap --hoist --strict --ignore-prepublish",
8 | "clean": "lerna clean && lerna run clean --stream --parallel"
9 | },
10 | "author": "Amazon Chime",
11 | "devDependencies": {
12 | "lerna": "^5.6.2"
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/apps/real-time-collaboration/packages/build-tools/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@amazon-chime-sdk-messaging-yjs-demo/build-tools",
3 | "version": "1.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "@amazon-chime-sdk-messaging-yjs-demo/build-tools",
9 | "version": "1.0.0"
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/apps/real-time-collaboration/packages/build-tools/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@amazon-chime-sdk-messaging-yjs-demo/build-tools",
3 | "version": "1.0.0",
4 | "description": "Build tools for the Amazon Chime SDK Messaging Yjs Demo",
5 | "scripts": {},
6 | "author": "Amazon Chime SDK",
7 | "private": true
8 | }
9 |
--------------------------------------------------------------------------------
/apps/real-time-collaboration/packages/build-tools/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "declaration": true,
5 | "declarationMap": true,
6 | "esModuleInterop": true,
7 | "incremental": true,
8 | "inlineSources": true,
9 | "lib": [ "ES2017", "ES2018.Promise", "DOM", "DOM.Iterable" ],
10 | "module": "commonjs",
11 | "moduleResolution": "node",
12 | "noImplicitAny": false,
13 | "noUnusedLocals": true,
14 | "pretty": true,
15 | "skipLibCheck": true,
16 | "sourceMap": true,
17 | "strict": true,
18 | "target": "es2017",
19 | "types": []
20 | },
21 | "exclude": [
22 | "lib",
23 | "dist",
24 | "node_modules"
25 | ]
26 | }
27 |
--------------------------------------------------------------------------------
/apps/real-time-collaboration/packages/eslint-config/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@amazon-chime-sdk-messaging-yjs-demo/eslint-config",
3 | "version": "1.0.0",
4 | "description": "Build tools for the Amazon Chime SDK Messaging Yjs Demo",
5 | "scripts": {},
6 | "author": "Amazon Chime SDK",
7 | "private": true,
8 | "devDependencies": {
9 | "@rushstack/eslint-patch": "^1.0.6",
10 | "@typescript-eslint/eslint-plugin": "^4.18.0",
11 | "@typescript-eslint/parser": "^4.18.0",
12 | "eslint": "^7.22.0",
13 | "eslint-config-airbnb-typescript": "^12.3.1",
14 | "eslint-plugin-eslint-comments": "^3.2.0",
15 | "eslint-plugin-import": "^2.22.1",
16 | "eslint-plugin-no-null": "^1.0.2",
17 | "eslint-plugin-prefer-arrow": "^1.2.3",
18 | "eslint-plugin-promise": "^5.1.0",
19 | "eslint-plugin-unicorn": "^28.0.2"
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/apps/real-time-collaboration/packages/y-chime-messaging/.eslintignore:
--------------------------------------------------------------------------------
1 | dist
2 | lib
3 | node_modules
--------------------------------------------------------------------------------
/apps/real-time-collaboration/packages/y-chime-messaging/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | "extends": [
3 | "@amazon-chime-sdk-messaging-yjs-demo/eslint-config/eslint"
4 | ],
5 | "parserOptions": {
6 | "project": ["./tsconfig.json"]
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/apps/real-time-collaboration/packages/y-chime-messaging/README.md:
--------------------------------------------------------------------------------
1 | # y-chime-messaging
2 |
3 | Follow the instructions in the root directory's README.
4 |
--------------------------------------------------------------------------------
/apps/real-time-collaboration/packages/y-chime-messaging/src/index.ts:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | export * from './messagingProvider';
5 | export * from './channel';
6 | export * from './utils';
7 |
--------------------------------------------------------------------------------
/apps/real-time-collaboration/packages/y-chime-messaging/tsconfig.esnext.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "./lib",
5 | "module": "esnext"
6 | },
7 | }
8 |
--------------------------------------------------------------------------------
/apps/real-time-collaboration/packages/y-chime-messaging/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@amazon-chime-sdk-messaging-yjs-demo/build-tools/tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "./dist",
5 | "rootDir": "./src",
6 | },
7 | "include": [
8 | "src/**/*"
9 | ]
10 | }
11 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | frontend/src/config.json
3 | dist
4 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/backend/.gitignore:
--------------------------------------------------------------------------------
1 | *.js
2 | !lambda/*.js
3 | !jest.config.js
4 | *.d.ts
5 | **/node_modules
6 |
7 | # CDK asset staging directory
8 | .cdk.staging
9 | cdk.out
10 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/backend/.npmignore:
--------------------------------------------------------------------------------
1 | *.ts
2 | !*.d.ts
3 |
4 | # CDK asset staging directory
5 | .cdk.staging
6 | cdk.out
7 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/backend/bin/cdk.ts:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 | import 'source-map-support/register';
3 | import * as cdk from 'aws-cdk-lib';
4 | import { CdkStack } from '../lib/cdk-stack';
5 |
6 | const app = new cdk.App();
7 | const stackName = 'AmazonChimeSdkTelehealthWidgetDemo';
8 |
9 | new CdkStack(app, stackName);
10 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/backend/cdk.json:
--------------------------------------------------------------------------------
1 | {
2 | "app": "npx ts-node --prefer-ts-exts bin/cdk.ts",
3 | "watch": {
4 | "include": [
5 | "**"
6 | ],
7 | "exclude": [
8 | "README.md",
9 | "cdk*.json",
10 | "**/*.d.ts",
11 | "**/*.js",
12 | "tsconfig.json",
13 | "package*.json",
14 | "yarn.lock",
15 | "node_modules",
16 | "test"
17 | ]
18 | },
19 | "context": {
20 | "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true,
21 | "@aws-cdk/core:stackRelativeExports": true,
22 | "@aws-cdk/aws-rds:lowercaseDbIdentifier": true,
23 | "@aws-cdk/aws-lambda:recognizeVersionProps": true,
24 | "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true,
25 | "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true,
26 | "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true,
27 | "@aws-cdk/core:target-partitions": [
28 | "aws",
29 | "aws-cn"
30 | ]
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/backend/lambda/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "chime-sdk-telehealth-widget-backend-demo-lambda",
3 | "version": "1.0.0",
4 | "description": "Amazon Chime SDK Telehealth Widget Demo Lambda dependencies including AWS SDK for JavaScript v3",
5 | "dependencies": {
6 | "@aws-sdk/client-chime": "^3.350.0",
7 | "@aws-sdk/client-chime-sdk-identity": "^3.350.0",
8 | "@aws-sdk/client-chime-sdk-meetings": "^3.350.0",
9 | "@aws-sdk/client-chime-sdk-messaging": "^3.350.0",
10 | "@aws-sdk/client-cognito-identity-provider": "^3.350.0",
11 | "@aws-sdk/client-dynamodb": "^3.351.0",
12 | "@aws-sdk/client-iam": "^3.350.0",
13 | "@aws-sdk/client-pinpoint": "^3.350.0",
14 | "@aws-sdk/client-sfn": "^3.350.0",
15 | "@aws-sdk/client-sts": "^3.350.0",
16 | "@aws-sdk/lib-dynamodb": "^3.145.0",
17 | "@types/aws-lambda": "^8.10.101",
18 | "@types/uuid": "^8.3.4",
19 | "uuid": "^8.3.2"
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/backend/lambda/src/utils/index.ts:
--------------------------------------------------------------------------------
1 | import { AdminGetUserCommandOutput } from '@aws-sdk/client-cognito-identity-provider';
2 |
3 | import { CognitoUser } from '../../../../frontend/src/types';
4 |
5 | /**
6 | * Convert
7 | * Array: [{ Name: 'hello', value: 'example@email.com' }, { Name: 'email', value: 'example@email.com' }]
8 | * to
9 | * Object: { username: 'hello', email: 'example@email.com' }
10 | */
11 | export const getCognitoUser = (username: string, data: AdminGetUserCommandOutput): CognitoUser => {
12 | return {
13 | username,
14 | attributes: data.UserAttributes!.reduce(
15 | (previous, current) => ({
16 | ...previous,
17 | [current.Name!]: current.Value,
18 | }),
19 | {}
20 | ) as CognitoUser['attributes'],
21 | };
22 | };
23 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/backend/lambda/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json"
3 | }
4 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/backend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "chime-sdk-telehealth-widget-backend-demo",
3 | "version": "1.0.0",
4 | "bin": {
5 | "cdk": "bin/cdk.js"
6 | },
7 | "scripts": {
8 | "bootstrap": "cdk bootstrap",
9 | "build": "tsc",
10 | "cdk": "cdk",
11 | "deploy:no-approval": "cdk deploy --outputs-file ../frontend/src/config.json --require-approval never",
12 | "deploy": "cdk deploy --outputs-file ../frontend/src/config.json",
13 | "postinstall": "cd lambda && npm install",
14 | "start": "npm run watch",
15 | "watch": "tsc -w",
16 | "destroy": "cdk destroy"
17 | },
18 | "devDependencies": {
19 | "@types/node": "10.17.27",
20 | "aws-cdk": "^2.36.0",
21 | "esbuild": "^0.14.54",
22 | "ts-node": "^9.1.1",
23 | "typescript": "~3.9.7"
24 | },
25 | "dependencies": {
26 | "aws-cdk-lib": "^2.36.0",
27 | "constructs": "^10.1.71",
28 | "source-map-support": "^0.5.21"
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/backend/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2018",
4 | "module": "commonjs",
5 | "lib": [
6 | "es2018"
7 | ],
8 | "declaration": true,
9 | "strict": true,
10 | "noImplicitAny": true,
11 | "strictNullChecks": true,
12 | "noImplicitThis": true,
13 | "alwaysStrict": true,
14 | "noUnusedLocals": false,
15 | "noUnusedParameters": false,
16 | "noImplicitReturns": true,
17 | "noFallthroughCasesInSwitch": false,
18 | "inlineSourceMap": true,
19 | "inlineSources": true,
20 | "experimentalDecorators": true,
21 | "strictPropertyInitialization": false,
22 | "typeRoots": [
23 | "./node_modules/@types"
24 | ]
25 | },
26 | "exclude": [
27 | "node_modules",
28 | "cdk.out"
29 | ]
30 | }
31 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
25 | # parcel bundler
26 | .parcel-cache
27 |
28 | # Parcel generates "dist" when used to run the app locally like webpack dev server.
29 | dist
30 | widget-dist
31 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/telehealth-widget/frontend/public/favicon.ico
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Amazon Chime SDK Widget Demo
5 |
6 |
7 |
8 |
9 |
10 |
11 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | }
10 | ],
11 | "start_url": ".",
12 | "display": "standalone",
13 | "theme_color": "#000000",
14 | "background_color": "#ffffff"
15 | }
16 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/scripts/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2018",
4 | "module": "commonjs",
5 | "lib": [
6 | "es2018"
7 | ],
8 | "declaration": true,
9 | "strict": true,
10 | "noImplicitAny": true,
11 | "strictNullChecks": true,
12 | "noImplicitThis": true,
13 | "alwaysStrict": true,
14 | "noUnusedLocals": false,
15 | "noUnusedParameters": false,
16 | "noImplicitReturns": true,
17 | "noFallthroughCasesInSwitch": false,
18 | "inlineSourceMap": true,
19 | "inlineSources": true,
20 | "experimentalDecorators": true,
21 | "strictPropertyInitialization": false,
22 | "typeRoots": [
23 | "./node_modules/@types"
24 | ]
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/src/components/Chat.css:
--------------------------------------------------------------------------------
1 | .Chat {
2 | display: flex;
3 | flex: 1 1 auto;
4 | flex-direction: column;
5 | overflow: hidden;
6 | }
7 |
8 | .Chat__messages {
9 | display: flex;
10 | flex-direction: column;
11 | flex: 1 1 auto;
12 | list-style-type: none;
13 | margin: 0;
14 | overflow-y: scroll;
15 | padding: 0;
16 | }
17 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/src/components/ChatInput.css:
--------------------------------------------------------------------------------
1 | .ChatInput {
2 | display: grid;
3 | flex: 0 0 auto;
4 | border-top: 1px solid var(--chime-sdk-widget-border-color);
5 | }
6 |
7 | .ChatInput::after {
8 | content: attr(data-replicated-value) ' ';
9 | white-space: pre-wrap;
10 | visibility: hidden;
11 | }
12 |
13 | .ChatInput::after,
14 | .ChatInput__textArea {
15 | border: none;
16 | box-sizing: border-box;
17 | grid-area: 1 / 1 / 2 / 2;
18 | outline: none;
19 | padding: 0.75rem;
20 | width: 100%;
21 | overflow-wrap: break-word;
22 | word-wrap: break-word;
23 | -ms-word-break: break-all;
24 | word-break: break-all;
25 | word-break: break-word;
26 | max-height: calc(var(--chime-sdk-widget-content-height) / 2);
27 | }
28 |
29 | .ChatInput__textArea {
30 | resize: none;
31 | }
32 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/src/components/ChatMessage.css:
--------------------------------------------------------------------------------
1 | .ChatMessage {
2 | padding: 0.25rem 0.75rem;
3 | }
4 |
5 | .ChatMessage:hover {
6 | background-color: var(--chime-sdk-widget-light-background-color);
7 | }
8 |
9 | .ChatMessage--hiddenName {
10 | }
11 |
12 | .ChatMessage__senderContainer {
13 |
14 | }
15 |
16 | .ChatMessage__sender {
17 | font-weight: bold;
18 | margin-right: 0.5rem;
19 | }
20 |
21 | .ChatMessage__time {
22 | font-size: 0.8rem;
23 | color: var(--chime-sdk-widget-light-text-color);
24 | }
25 |
26 | .ChatMessage__content {
27 |
28 | }
29 |
30 | .ChatMessage__sender,
31 | .ChatMessage__content {
32 | white-space: pre-wrap;
33 | white-space: break-spaces;
34 | overflow-wrap: break-word;
35 | word-wrap: break-word;
36 | -ms-word-break: break-all;
37 | word-break: break-all;
38 | word-break: break-word;
39 | }
40 |
41 | .ChatMessage__failed {
42 | color: var(--chime-sdk-widget-form-red-color);
43 | font-size: 0.8rem;
44 | }
45 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/src/components/RemoteAttendeeVideo.css:
--------------------------------------------------------------------------------
1 | .RemoteAttendeeVideo {
2 | width: 100%;
3 | height: 100%;
4 | }
5 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/src/components/Spinner.css:
--------------------------------------------------------------------------------
1 | .SpinnerContainer {
2 | display: flex;
3 | flex-direction: column;
4 | justify-content: center;
5 | align-items: center;
6 | height: var(--chime-sdk-widget-content-height);
7 | }
8 |
9 | .SpinnerContainer__spinner {
10 | border: 10px solid #f3f3f3;
11 | border-top: 10px solid #047d95;
12 | border-radius: 50%;
13 | width: 80px;
14 | height: 80px;
15 | animation: spin 1s linear infinite;
16 | }
17 |
18 | @keyframes spin {
19 | 0% {
20 | transform: rotate(0deg);
21 | }
22 | 100% {
23 | transform: rotate(360deg);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/src/components/Spinner.tsx:
--------------------------------------------------------------------------------
1 | import './Spinner.css';
2 |
3 | export default function Spinner() {
4 | return (
5 |
8 | );
9 | }
10 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/src/components/VideoPlaceholder.css:
--------------------------------------------------------------------------------
1 | .VideoPlaceholder {
2 | align-items: center;
3 | background-color: black;
4 | display: flex;
5 | flex-direction: column;
6 | height: 100%;
7 | justify-content: center;
8 | width: 100%;
9 | color: white;
10 | padding: 1rem;
11 | }
12 |
13 | .VideoPlaceholder__title {
14 | text-align: center;
15 | white-space: pre-wrap;
16 | white-space: break-spaces;
17 | overflow-wrap: break-word;
18 | word-wrap: break-word;
19 | -ms-word-break: break-all;
20 | word-break: break-all;
21 | word-break: break-word;
22 | }
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/src/components/VideoPlaceholder.tsx:
--------------------------------------------------------------------------------
1 | import { Camera, Phone } from 'amazon-chime-sdk-component-library-react';
2 | import { ReactNode } from 'react';
3 |
4 | import './VideoPlaceholder.css';
5 |
6 | export default function VideoPlaceholder({
7 | title,
8 | icons = ['Camera'],
9 | }: {
10 | title?: string;
11 | icons?: ('Camera' | 'Phone')[];
12 | }) {
13 | return (
14 |
15 |
16 | {icons.map((icon, index) => {
17 | let iconNode: ReactNode;
18 | switch (icon) {
19 | case 'Camera':
20 | iconNode =
;
21 | break;
22 | case 'Phone':
23 | iconNode =
;
24 | break;
25 | }
26 | return iconNode;
27 | })}
28 |
29 | {title &&
{title}
}
30 |
31 | );
32 | }
33 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/src/components/Widget.css:
--------------------------------------------------------------------------------
1 | .Widget__window>.Window__main {
2 | min-height: var(--chime-sdk-widget-content-height);
3 | display: flex;
4 | flex-direction: column;
5 | }
6 |
7 | .Widget__window > .Window__header > [data-testid='popover'] {
8 | align-items: center;
9 | display: flex;
10 | flex: 0 0 auto;
11 | justify-content: center;
12 | }
13 |
14 | .Widget__popOver {
15 | color: white;
16 | padding: 0 1rem !important;
17 | height: 2.5rem;
18 | }
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/src/constants/index.ts:
--------------------------------------------------------------------------------
1 | export enum AccountType {
2 | Doctor = 'DOCTOR',
3 | Patient = 'PATIENT',
4 | }
5 |
6 | export enum Presence {
7 | Added = 'Added',
8 | CheckedIn = 'CheckedIn',
9 | }
10 |
11 | export enum MeetingInviteStatus {
12 | Accepted = 'Accepted',
13 | Declined = 'Declined',
14 | Unknown = 'Unknown',
15 | Cancel = 'Cancel',
16 | }
17 |
18 | // The Chat component will translate these strings.
19 | export enum ReservedMessageContent {
20 | AcceptedInvite = 'Accepted a meeting invite',
21 | AcceptedInviteByPhone = 'Accepted a meeting invite (phone)',
22 | CanceledInvite = 'Canceled a meeting invite',
23 | CheckedIn = 'checked in',
24 | DeclinedInvite = 'Declined a meeting invite',
25 | DeclinedInviteByPhone = 'Declined a meeting invite (phone)',
26 | SendingInvite = 'Sending a meeting invite',
27 | }
28 |
29 | export const PhoneAttendeePrefix = '(phone)';
30 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/src/hooks/useInterval.tsx:
--------------------------------------------------------------------------------
1 | import { useEffect, useRef } from 'react';
2 |
3 | export default function useInterval(callback: Function, delay: number) {
4 | const savedCallback = useRef();
5 |
6 | useEffect(() => {
7 | savedCallback.current = callback;
8 | });
9 |
10 | useEffect(() => {
11 | function nextTick() {
12 | if (savedCallback.current) {
13 | savedCallback.current();
14 | }
15 | }
16 | const intervalId = setInterval(nextTick, delay);
17 | return () => clearInterval(intervalId);
18 | }, [delay]);
19 | }
20 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/src/hooks/useMountedRef.ts:
--------------------------------------------------------------------------------
1 | import { RefObject, useEffect, useRef } from 'react';
2 |
3 | export default function useMountedRef(): RefObject {
4 | const mounted = useRef(false);
5 | useEffect(() => {
6 | mounted.current = true;
7 | return () => {
8 | mounted.current = false;
9 | };
10 | }, []);
11 | return mounted;
12 | }
13 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/src/reportWebVitals.ts:
--------------------------------------------------------------------------------
1 | import { ReportHandler } from 'web-vitals';
2 |
3 | const reportWebVitals = (onPerfEntry?: ReportHandler) => {
4 | if (onPerfEntry && onPerfEntry instanceof Function) {
5 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
6 | getCLS(onPerfEntry);
7 | getFID(onPerfEntry);
8 | getFCP(onPerfEntry);
9 | getLCP(onPerfEntry);
10 | getTTFB(onPerfEntry);
11 | });
12 | }
13 | };
14 |
15 | export default reportWebVitals;
16 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/src/types/lambda.ts:
--------------------------------------------------------------------------------
1 | export interface CreateAppointmentFunctionEvent {
2 | doctorUsername: string;
3 | patientUsername: string;
4 | timestamp: string;
5 | }
6 |
7 | export interface DeleteAppointmentFunctionEvent {
8 | channelArn: string;
9 | appInstanceUserArn: string;
10 | }
11 |
12 | export interface CreateMeetingFunctionEvent {
13 | appInstanceUserId: string;
14 | channelArn: string;
15 | mediaRegion: string;
16 | }
17 |
18 | export interface CreateAttendeeFunctionEvent {
19 | appInstanceUserId: string;
20 | channelArn: string;
21 | meetingId: string;
22 | }
23 |
24 | export interface MakeOutboundCallFunctionEvent {
25 | channelArn: string;
26 | clientId: string;
27 | doctorUsername: string;
28 | meetingId: string;
29 | patientUsername: string;
30 | }
31 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/src/utils/Config.ts:
--------------------------------------------------------------------------------
1 | import ConfigJSON from '../config.json';
2 |
3 | /**
4 | * CDK generates config.json that has uses custom stack name as a key.
5 | * {
6 | * "__CUSTOM_STACK_NAME__": {
7 | * "CognitoIdentityPoolId": "...",
8 | * ...
9 | * }
10 | * }
11 | *
12 | * Instead, export only an object.
13 | * {
14 | * "CognitoIdentityPoolId": "...",
15 | * ...
16 | * }
17 | */
18 | export default Object.values(ConfigJSON)[0];
19 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/src/utils/configureAmplify.ts:
--------------------------------------------------------------------------------
1 | import { Amplify } from '@aws-amplify/core';
2 | import Config from './Config';
3 |
4 | const configureAmplify = (): void => {
5 | Amplify.configure({
6 | Auth: {
7 | identityPoolId: Config.CognitoIdentityPoolId,
8 | region: Config.Region,
9 | identityPoolRegion: Config.Region,
10 | userPoolId: Config.CognitoUserPoolId,
11 | userPoolWebClientId: Config.CognitoUserPoolClientId,
12 | },
13 | });
14 | };
15 |
16 | export default configureAmplify;
17 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/frontend/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "allowSyntheticDefaultImports": true,
13 | "strict": true,
14 | "forceConsistentCasingInFileNames": true,
15 | "noFallthroughCasesInSwitch": true,
16 | "module": "esnext",
17 | "moduleResolution": "node",
18 | "resolveJsonModule": true,
19 | "isolatedModules": true,
20 | "noEmit": true,
21 | "jsx": "react-jsx"
22 | },
23 | "include": [
24 | "src"
25 | ]
26 | }
27 |
--------------------------------------------------------------------------------
/apps/telehealth-widget/github-assets/appointment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/telehealth-widget/github-assets/appointment.png
--------------------------------------------------------------------------------
/apps/telehealth-widget/github-assets/audio-video-meeting.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/telehealth-widget/github-assets/audio-video-meeting.png
--------------------------------------------------------------------------------
/apps/telehealth-widget/github-assets/audip-video-meeting-patient.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/telehealth-widget/github-assets/audip-video-meeting-patient.png
--------------------------------------------------------------------------------
/apps/telehealth-widget/github-assets/auth.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/telehealth-widget/github-assets/auth.png
--------------------------------------------------------------------------------
/apps/telehealth-widget/github-assets/chat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/telehealth-widget/github-assets/chat.png
--------------------------------------------------------------------------------
/apps/telehealth-widget/github-assets/phone-call-doctor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/telehealth-widget/github-assets/phone-call-doctor.png
--------------------------------------------------------------------------------
/apps/telehealth-widget/github-assets/phone-call-patient.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/telehealth-widget/github-assets/phone-call-patient.png
--------------------------------------------------------------------------------
/apps/telehealth-widget/github-assets/sms-notification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/telehealth-widget/github-assets/sms-notification.png
--------------------------------------------------------------------------------
/apps/telehealth-widget/github-assets/solution-blog-post-architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/telehealth-widget/github-assets/solution-blog-post-architecture.png
--------------------------------------------------------------------------------
/apps/telehealth-widget/github-assets/widget-architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/telehealth-widget/github-assets/widget-architecture.png
--------------------------------------------------------------------------------
/apps/telehealth-widget/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "chime-sdk-telehealth-widget-demo",
3 | "version": "1.0.0",
4 | "scripts": {
5 | "deploy": "npm run install-all && cd backend && npm run bootstrap && npm run deploy:no-approval && cd ../frontend && npm run deploy",
6 | "install-all": "npm --prefix ./backend install && npm --prefix ./frontend install",
7 | "destroy": "cd backend && npm run destroy"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/apps/televisit-demo/backend/createattendee/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "createattendee",
3 | "version": "1.0.0",
4 | "description": "JavaScript implementation of API GW endpoint at /join to join meetings as an attendee"
5 | }
6 |
--------------------------------------------------------------------------------
/apps/televisit-demo/backend/createmeeting/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "createmeeting",
3 | "version": "1.0.0",
4 | "description": "JavaScript implementation of API GW endpoint /create to create meetings"
5 | }
6 |
--------------------------------------------------------------------------------
/apps/televisit-demo/backend/dependencies/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "aws-chime-sdk-televisit-demo-backend",
3 | "version": "1.0",
4 | "author": "Amazon Web Services",
5 | "license": "MIT-0",
6 | "dependencies": {
7 | "aws-sdk": "^2.962.0",
8 | "base64-js": "^1.5.1",
9 | "buffer": "^6.0.3",
10 | "cfn-response": "^1.0.1",
11 | "events": "^3.3.0",
12 | "ieee754": "^1.2.1",
13 | "isarray": "^2.0.5",
14 | "jmespath": "^0.15.0",
15 | "punycode": "^2.1.1",
16 | "querystring": "^0.2.1",
17 | "sax": "^1.2.4",
18 | "url": "^0.11.0",
19 | "uuid": "^8.3.2",
20 | "xml2js": "^0.4.23",
21 | "xmlbuilder": "^15.1.1"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/apps/televisit-demo/backend/endmeeting/index.js:
--------------------------------------------------------------------------------
1 | const AWS = require('aws-sdk');
2 | const chime = new AWS.Chime({ region: 'us-east-1' });
3 |
4 | exports.handler = async (event) => {
5 | const meetingId = event.queryStringParameters.meetingId;
6 | try {
7 | console.info('Deleting meeting');
8 | await chime
9 | .deleteMeeting({
10 | MeetingId: meetingId,
11 | })
12 | .promise();
13 | return {
14 | statusCode: 200,
15 | headers: {
16 | 'Access-Control-Allow-Headers': 'Authorization',
17 | 'Access-Control-Allow-Origin': '*',
18 | 'Access-Control-Allow-Methods': 'POST, OPTIONS',
19 | 'Access-Control-Allow-Credentials': 'true',
20 | },
21 | body: '',
22 | };
23 | } catch (e) {
24 | console.log(JSON.stringify(e));
25 | return {
26 | statusCode: 500,
27 | body: 'Server error while deleting meeting',
28 | };
29 | }
30 | };
31 |
--------------------------------------------------------------------------------
/apps/televisit-demo/backend/endmeeting/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "endmeeting",
3 | "version": "1.0.0",
4 | "description": "JavaScript implementation of API GW endpoint at /end to end the meeting"
5 | }
6 |
--------------------------------------------------------------------------------
/apps/televisit-demo/backend/messagemoderator/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "messagemoderator",
3 | "version": "1.0.0",
4 | "description": "JavaScript implementation of Kinesis stream message processing for moderator bot"
5 | }
6 |
--------------------------------------------------------------------------------
/apps/televisit-demo/backend/samconfig.toml:
--------------------------------------------------------------------------------
1 | version = 0.1
2 | [default]
3 | [default.deploy]
4 | [default.deploy.parameters]
5 | stack_name = "chime-sdk-televisit-backend"
6 | s3_prefix = "chime-sdk-televisit-backend"
7 | region = "us-east-1"
8 | capabilities = "CAPABILITY_NAMED_IAM"
9 | parameter_overrides = "DemoName=\"ChimeSDKTelevisitDemo\" ChimeAppInstanceArn=\"arn:aws:chime:us-east-1::app-instance/\""
10 |
--------------------------------------------------------------------------------
/apps/televisit-demo/backend/signinhook/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "signinhook",
3 | "version": "1.0.0",
4 | "description": "JavaScript implementation of SignInHookLambda"
5 | }
6 |
--------------------------------------------------------------------------------
/apps/televisit-demo/backend/startrecording/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "startrecording",
3 | "version": "1.0.0",
4 | "description": "JavaScript implementation of API GW endpoint at /startrecord to start meeting recording"
5 | }
6 |
--------------------------------------------------------------------------------
/apps/televisit-demo/backend/starttranscript/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "starttranscript",
3 | "version": "1.0.0",
4 | "description": "JavaScript implementation of API GW endpoint at /transcript to start live transcription"
5 | }
6 |
--------------------------------------------------------------------------------
/apps/televisit-demo/backend/stoprecording/index.js:
--------------------------------------------------------------------------------
1 | const AWS = require('aws-sdk');
2 | const chime = new AWS.Chime({ region: 'us-east-1' });
3 | chime.endpoint = new AWS.Endpoint(
4 | 'https://service.chime.aws.amazon.com/console'
5 | );
6 |
7 | exports.handler = async (event) => {
8 | console.log('trigger event: ' + JSON.stringify(event));
9 |
10 | const mediapipelineid = event.queryStringParameters.mediapipelineid;
11 | await chime
12 | .deleteMediaCapturePipeline({
13 | MediaPipelineId: mediapipelineid,
14 | })
15 | .promise();
16 |
17 | return {
18 | statusCode: 200,
19 | headers: {
20 | 'Access-Control-Allow-Headers': 'Authorization',
21 | 'Access-Control-Allow-Origin': '*',
22 | 'Access-Control-Allow-Methods': 'POST, OPTIONS',
23 | 'Access-Control-Allow-Credentials': 'true',
24 | },
25 | body: '',
26 | };
27 | };
28 |
--------------------------------------------------------------------------------
/apps/televisit-demo/backend/stoprecording/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "stoprecording",
3 | "version": "1.0.0",
4 | "description": "JavaScript implementation of API GW endpoint at /stoprecord to stop meeting recording"
5 | }
6 |
--------------------------------------------------------------------------------
/apps/televisit-demo/backend/usercreds/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "usercreds",
3 | "version": "1.0.0",
4 | "description": "JavaScript implementation of API GW endpoint for creds"
5 | }
6 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env", "@babel/preset-react"],
3 | "plugins": [
4 | "@babel/plugin-transform-regenerator",
5 | "@babel/plugin-transform-runtime",
6 | "@babel/plugin-proposal-class-properties",
7 | "@babel/plugin-syntax-jsx"
8 | ]
9 | }
10 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/app/chat.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Amazon Chime Chat SDK Demo
8 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/samconfig.toml:
--------------------------------------------------------------------------------
1 | version = 0.1
2 | [default]
3 | [default.deploy]
4 | [default.deploy.parameters]
5 | stack_name = "chime-sdk-televisit-frontend"
6 | s3_prefix = "chime-sdk-televisit-frontend"
7 | region = "us-east-1"
8 | confirm_changeset = true
9 | capabilities = "CAPABILITY_IAM"
10 | image_repositories = []
11 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/Config.js:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 | const samOutputs = require('./sam-output.json');
4 |
5 | const mappedOutputs = {};
6 |
7 | for (let i = 0; i < samOutputs.length; i++) {
8 | mappedOutputs[samOutputs[i].OutputKey] = samOutputs[i].OutputValue;
9 | }
10 |
11 | const appConfig = {
12 | apiGatewayInvokeUrl: mappedOutputs.apiGatewayInvokeUrl,
13 | cognitoUserPoolId: mappedOutputs.cognitoUserPoolId,
14 | cognitoAppClientId: mappedOutputs.cognitoAppClientId,
15 | cognitoIdentityPoolId: mappedOutputs.cognitoIdentityPoolId,
16 | appInstanceArn: mappedOutputs.appInstanceArn,
17 | region: 'us-east-1',
18 | attachments_s3_bucket_name: mappedOutputs.attachments_s3_bucket_name,
19 | };
20 | export default appConfig;
21 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/components/ActivityBar/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import React from 'react';
5 | import styled from 'styled-components';
6 |
7 | const Track = styled.div`
8 | width: 100%;
9 | height: 0.625rem;
10 | background-color: #ecf0f1;
11 | border-radius: 0.25rem;
12 | `;
13 |
14 | const Progress = styled.div`
15 | height: 0.625rem;
16 | background-color: #18bc9c;
17 | border-radius: 0.25rem;
18 | transform: scaleX(0);
19 | transform-origin: left;
20 | transition: transform 33ms ease-in-out;
21 | will-change: transform;
22 | `;
23 |
24 | const ActivityBar = React.forwardRef((props, ref: any) => (
25 |
28 | ));
29 |
30 | export default ActivityBar;
31 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/components/Card/Styled.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const SmallText = styled.small`
7 | color: rgba(0, 0, 0, 0.5);
8 | `;
9 |
10 | export const StyledCard = styled.div`
11 | .ch-body {
12 | margin-bottom: 1rem;
13 | }
14 |
15 | .ch-header {
16 | font-size: 1.5rem;
17 | }
18 |
19 | .ch-title {
20 | font-size: 1.25rem;
21 | margin-top: 1rem;
22 | }
23 |
24 | .ch-description {
25 | margin: 1rem 0 1rem 0;
26 | }
27 | `;
28 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/components/Card/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import React from 'react';
5 |
6 | import { SmallText, StyledCard } from './Styled';
7 |
8 | interface CardProps extends React.HTMLAttributes {
9 | header?: string;
10 | title: string;
11 | description: any;
12 | smallText?: string;
13 | }
14 |
15 | const Card: React.FC = ({
16 | header,
17 | title,
18 | description,
19 | smallText,
20 | }: CardProps) => (
21 |
22 | {header && {header}
}
23 |
24 |
{title}
25 |
{description}
26 | {smallText &&
{smallText}}
27 |
28 |
29 | );
30 |
31 | export default Card;
32 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/components/ChannelModals/AddModeratorsChannelModal.jsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/televisit-demo/frontend/src/components/ChannelModals/AddModeratorsChannelModal.jsx
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/components/ChannelModals/index.jsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | export { AddMemberModal } from './AddMemberModal';
5 | export { DeleteChannelModal } from './DeleteChannelModal';
6 | export { LeaveChannelModal } from './LeaveChannelModal';
7 | export { JoinMeetingModal } from './JoinMeetingModal';
8 | export { ManageMembersModal } from './ManageMembersModal';
9 | export { NewChannelModal } from './NewChannelModal';
10 | export { ViewChannelDetailsModal } from './ViewChannelDetailsModal';
11 | export { ViewMembersModal } from './ViewMembersModal';
12 | export { EditChannelModal } from './EditChannelModal';
13 | export { BanModal } from './BanModal';
14 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/components/DeviceSelection/CameraDevices/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import React from 'react';
5 | import {
6 | Heading,
7 | PreviewVideo,
8 | QualitySelection,
9 | CameraSelection,
10 | Label,
11 | } from 'amazon-chime-sdk-component-library-react';
12 |
13 | import { title, StyledInputGroup } from '../Styled';
14 |
15 | const CameraDevices = () => {
16 | return (
17 |
18 |
19 | Video
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
30 |
31 |
32 | );
33 | };
34 |
35 | export default CameraDevices;
36 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/components/DeviceSelection/MicrophoneDevices/MicrophoneActivityPreview.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import React from 'react';
5 | import { Label } from 'amazon-chime-sdk-component-library-react';
6 |
7 | import { StyledPreviewGroup } from '../Styled';
8 | import MicrophoneActivityPreviewBar from './MicrophoneActivityPreviewBar';
9 |
10 | const MicrophoneActivityPreview = () => {
11 | return (
12 |
13 |
16 |
17 |
18 | );
19 | };
20 |
21 | export default MicrophoneActivityPreview;
22 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/components/DeviceSelection/MicrophoneDevices/MicrophoneActivityPreviewBar.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import React, { useRef } from 'react';
5 | import { useLocalAudioInputActivityPreview } from 'amazon-chime-sdk-component-library-react';
6 |
7 | import ActivityBar from '../../ActivityBar';
8 |
9 | const MicrophoneActivityPreviewBar = () => {
10 | const activityBarRef = useRef();
11 | useLocalAudioInputActivityPreview(activityBarRef);
12 |
13 | return ;
14 | };
15 |
16 | export default MicrophoneActivityPreviewBar;
17 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/components/DeviceSelection/MicrophoneDevices/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import React from 'react';
5 | import {
6 | Heading,
7 | MicSelection,
8 | } from 'amazon-chime-sdk-component-library-react';
9 |
10 | import { title } from '../Styled';
11 | import MicrophoneActivityPreview from './MicrophoneActivityPreview';
12 |
13 | const MicrophoneDevices = () => {
14 | return (
15 |
16 |
17 | Audio
18 |
19 |
20 |
21 |
22 | );
23 | };
24 |
25 | export default MicrophoneDevices;
26 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/components/DeviceSelection/SpeakerDevices/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import React, { useState } from 'react';
5 | import {
6 | SpeakerSelection,
7 | SecondaryButton,
8 | useAudioOutputs,
9 | } from 'amazon-chime-sdk-component-library-react';
10 |
11 | import TestSound from '../../../utilities/TestSound';
12 |
13 | const SpeakerDevices = () => {
14 | const { selectedDevice } = useAudioOutputs();
15 | const [selectedOutput, setSelectedOutput] = useState(selectedDevice);
16 |
17 | const handleChange = (deviceId: string): void => {
18 | setSelectedOutput(deviceId);
19 | };
20 |
21 | const handleTestSpeaker = () => {
22 | new TestSound(selectedOutput);
23 | };
24 |
25 | return (
26 |
27 |
28 |
29 |
30 | );
31 | };
32 |
33 | export default SpeakerDevices;
34 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/components/DeviceSelection/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import React from 'react';
5 |
6 | import { StyledWrapper, StyledAudioGroup, StyledVideoGroup } from './Styled';
7 | import MicrophoneDevices from './MicrophoneDevices';
8 | import SpeakerDevices from './SpeakerDevices';
9 | import CameraDevices from './CameraDevices';
10 |
11 | const DeviceSelection = () => (
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | );
22 |
23 | export default DeviceSelection;
24 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/constants/routes.jsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | const awsPath = '/Prod';
5 | export const rootPath = window.location.href.includes(awsPath)
6 | ? `${awsPath}/`
7 | : '/';
8 |
9 | const routes = {
10 | SIGNIN: `${rootPath}`,
11 | CHAT: `${rootPath}rooms`,
12 | DEVICE: `${rootPath}devices`,
13 | MEETING: `${rootPath}meeting`,
14 | };
15 |
16 | export default routes;
17 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/EndMeetingControl/Styled.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const StyledP = styled.p`
7 | padding: 1rem 1rem 1rem 0;
8 | `;
9 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/MeetingControls/Styled.ts:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import styled from 'styled-components';
5 |
6 | interface StyledProps {
7 | active: boolean;
8 | }
9 |
10 | export const StyledControls = styled.div`
11 | opacity: ${(props) => (props.active ? '1' : '0')};
12 | transition: opacity 250ms ease;
13 |
14 | @media screen and (max-width: 768px) {
15 | opacity: 1;
16 | }
17 |
18 | .controls-menu {
19 | width: 100%;
20 | position: static;
21 | }
22 | `;
23 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/MeetingDetails/Styled.ts:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const StyledList = styled.dl`
7 | font-size: 1rem;
8 |
9 | dt {
10 | display: inline-block;
11 | margin-bottom: 0.75rem;
12 | margin-right: 0.5rem;
13 |
14 | &::after {
15 | content: ':';
16 | }
17 | }
18 |
19 | dd {
20 | display: inline-block;
21 | font-weight: 600;
22 | }
23 | `;
24 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/MeetingMetrics/Styled.ts:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const StyledMetrics = styled.div`
7 | position: absolute;
8 | top: 0.5rem;
9 | right: 0.5rem;
10 | min-width: 7.5rem;
11 | z-index: 5;
12 |
13 | .metric {
14 | white-space: nowrap;
15 | font-size: 0.75rem;
16 | margin-bottom: 0.375rem;
17 |
18 | &.title {
19 | font-weight: bold;
20 | }
21 | }
22 | `;
23 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/Notifications/index.jsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import React from 'react';
5 | import {
6 | useNotificationState,
7 | NotificationGroup,
8 | } from 'amazon-chime-sdk-component-library-react';
9 |
10 | const Notifications = () => {
11 | const { notifications } = useNotificationState();
12 |
13 | return notifications.length ? : null;
14 | };
15 |
16 | export default Notifications;
17 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/channels/ChannelsWrapper.css:
--------------------------------------------------------------------------------
1 | .channel-list-header {
2 | display: flex;
3 | justify-content: space-between;
4 | padding: 0.25rem 0.5rem;
5 | border-bottom: 0.5px solid #d4d5d8;
6 | }
7 |
8 | button.create-channel-button {
9 | height: 2rem;
10 | width: 2rem;
11 | }
12 |
13 | .channel-list-header-title {
14 | padding-left: 1rem;
15 | }
16 | .channel-list-header,
17 | .channel-list-header-title {
18 | display: flex;
19 | align-items: center;
20 | cursor: unset;
21 | }
22 |
23 | li.separator {
24 | margin: 0.5rem 0;
25 | }
26 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/input/Input.css:
--------------------------------------------------------------------------------
1 | .message-input-form {
2 | flex: auto;
3 | padding: 1rem 0 1rem 1rem;
4 | }
5 |
6 | span.text-input {
7 | display: flex;
8 | flex-grow: 1;
9 | }
10 |
11 | .text-input input {
12 | width: 100%;
13 | }
14 |
15 | .message-input-container {
16 | border-top: 1px solid #e4e9f2;
17 | display: flex;
18 | flex-flow: row;
19 | margin-top: auto;
20 | margin-bottom: 0;
21 | min-height: 4rem;
22 | }
23 |
24 | .message-input-container .write-link.attach {
25 | margin: 1rem 1rem auto 0.5rem;
26 | }
27 |
28 | .message-input-container .attachment-preview {
29 | display: flex;
30 | }
31 |
32 | .message-input-container .attachment-preview span {
33 | margin: auto 0;
34 | }
35 |
36 | .message-input-container.join-channel-message {
37 | display: flex;
38 | justify-content: center;
39 | align-items: center;
40 | }
41 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/login/login.css:
--------------------------------------------------------------------------------
1 | .signin-container {
2 | text-align: center;
3 | width: 25rem;
4 | margin: 0 auto;
5 | margin-top: 6.5rem;
6 | }
7 |
8 | form.signin-form {
9 | display: flex;
10 | flex-direction: column;
11 | margin-top: 1rem;
12 | }
13 |
14 | div.input.username-input,
15 | div.input.password-input {
16 | margin-left: -5rem;
17 | width: 100%;
18 | grid-template-columns: 18% 1fr;
19 | }
20 |
21 | div.input {
22 | margin-bottom: 2rem;
23 | text-align: left;
24 | }
25 |
26 | div.input span {
27 | width: 25rem;
28 | }
29 |
30 | .input input {
31 | width: 100%;
32 | }
33 |
34 | div.input span {
35 | width: 25rem;
36 | }
37 |
38 | .signin-buttons {
39 | display: flex;
40 | justify-content: space-between;
41 | align-items: center;
42 | }
43 |
44 | .or-span {
45 | font-size: 0.875rem;
46 | }
47 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/messages/Messages.css:
--------------------------------------------------------------------------------
1 | .message {
2 | margin: 0 1.5rem 0.5rem 0.5rem;
3 | }
4 |
5 | .message-list-container {
6 | background-color: #f0f1f2;
7 | overflow-y: scroll;
8 | position: relative;
9 | }
10 |
11 | .message-list-header {
12 | background-color: inherit;
13 | text-align: center;
14 | padding: 0.76rem;
15 | margin-bottom: 1rem;
16 | border-bottom: 0.5px solid #d4d5d8;
17 | position: sticky;
18 | z-index: 2;
19 | top: 0;
20 | right: 0;
21 | left: 0;
22 | }
23 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/transcriptions/DeleteIcon.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Icon } from '@chakra-ui/react';
3 |
4 | export const DeleteIcon = (props) => (
5 |
6 |
10 |
11 | );
12 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/transcriptions/SOAPReviewPane.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import s from './SOAPReviewPane.module.css';
3 | import cs from 'clsx';
4 |
5 | import { Heading, Textarea } from '@chakra-ui/react';
6 |
7 | export default function SOAPReviewPane({ onInputChange, inputText }) {
8 | return (
9 |
19 | );
20 | }
21 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/transcriptions/SOAPReviewPane.module.css:
--------------------------------------------------------------------------------
1 | .base {
2 | font-size: 16px;
3 | overflow: auto;
4 | display: flex;
5 | flex: 0 0 0px;
6 | overflow: auto;
7 | flex-direction: column;
8 | position: relative;
9 | transition: flex-grow 1000ms ease;
10 | box-sizing: border-box;
11 | background: #eee;
12 | }
13 |
14 | .visible {
15 | flex-grow: 1;
16 | }
17 |
18 | .base h3 {
19 | margin-top: 1em;
20 | margin-bottom: 1em;
21 | }
22 |
23 | .base main {
24 | margin: 1%;
25 | }
26 |
27 | .base dt {
28 | font-weight: bold;
29 | text-align: right;
30 | padding-right: 1em;
31 | font-size: 0.75em;
32 | text-transform: uppercase;
33 | white-space: nowrap;
34 | overflow: hidden;
35 | text-overflow: ellipsis;
36 | }
37 |
38 | .base dd {
39 | flex: 0 0 70%;
40 | }
41 |
42 | .base textarea {
43 | word-wrap: break-word;
44 | white-space: pre-wrap;
45 | }
46 | @media print {
47 | .base {
48 | display: none;
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/transcriptions/TranscriptLine.module.css:
--------------------------------------------------------------------------------
1 | .base {
2 | line-height: 1.2;
3 | white-space: pre-wrap;
4 | transition: margin 300ms ease;
5 | }
6 |
7 | .base span {
8 | /* display: inline-block; */
9 | line-height: 1.1;
10 | }
11 |
12 | .entering {
13 | margin-bottom: -2.6em;
14 | }
15 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/transcriptions/conceptUtils.js:
--------------------------------------------------------------------------------
1 | export const sortByScoreDescending = (concepts) =>
2 | [...concepts].sort((concept1, concept2) => concept2.Score - concept1.Score);
3 |
4 | export function getSelectedConcept(result) {
5 | const concepts = [
6 | ...(result.ICD10CMConcepts
7 | ? result.ICD10CMConcepts
8 | : result.RxNormConcepts),
9 | ];
10 | return concepts.find(
11 | (concept) => concept.Code === result.selectedConceptCode
12 | );
13 | }
14 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/transcriptions/detectEntities.ts:
--------------------------------------------------------------------------------
1 | import { ComprehendMedical } from 'aws-sdk';
2 | import { Entity } from 'aws-sdk/clients/comprehendmedical';
3 |
4 | const detectEntities = async (
5 | text: string | undefined,
6 | clientParams?: ComprehendMedical.Types.ClientConfiguration
7 | ): Promise => {
8 | const comprehendMedical = new ComprehendMedical(clientParams);
9 |
10 | if (text === undefined || text.replace(/\s/g, '') === '') return [];
11 | const resp = await comprehendMedical
12 | .detectEntitiesV2({ Text: text })
13 | .promise();
14 | return resp.Entities;
15 | };
16 |
17 | export default detectEntities;
18 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/transcriptions/inferICD10CM.ts:
--------------------------------------------------------------------------------
1 | import { ComprehendMedical } from 'aws-sdk';
2 | import { Entity } from 'aws-sdk/clients/comprehendmedical';
3 |
4 | const detectEntities = async (
5 | text: string | undefined,
6 | clientParams?: ComprehendMedical.Types.ClientConfiguration
7 | ): Promise => {
8 | const comprehendMedical = new ComprehendMedical(clientParams);
9 |
10 | if (text === undefined || text.replace(/\s/g, '') === '') return [];
11 |
12 | const resp = await comprehendMedical.inferICD10CM({ Text: text }).promise();
13 | return resp.Entities;
14 | };
15 |
16 | export default detectEntities;
17 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/transcriptions/inferRxNorm.ts:
--------------------------------------------------------------------------------
1 | import { ComprehendMedical } from 'aws-sdk';
2 | import { Entity } from 'aws-sdk/clients/comprehendmedical';
3 |
4 | const detectEntities = async (
5 | text: string | undefined,
6 | clientParams?: ComprehendMedical.Types.ClientConfiguration
7 | ): Promise => {
8 | const comprehendMedical = new ComprehendMedical(clientParams);
9 |
10 | if (text === undefined || text.replace(/\s/g, '') === '') return [];
11 |
12 | const resp = await comprehendMedical.inferRxNorm({ Text: text }).promise();
13 | return resp.Entities;
14 | };
15 |
16 | export default detectEntities;
17 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/transcriptions/transcriptHighlights.js:
--------------------------------------------------------------------------------
1 | import s from './transcriptHighlights.module.css';
2 |
3 | // This file defines the CSS class names we add to each category,
4 | // so it can be shared between TranscriptLine and TranscriptPane
5 | const transcriptHighlights = {
6 | PROTECTED_HEALTH_INFORMATION: s.phi,
7 | MEDICAL_CONDITION: s.condition,
8 | ANATOMY: s.anatomy,
9 | MEDICATION: s.medication,
10 | TEST_TREATMENT_PROCEDURE: s.treatment,
11 | };
12 |
13 | export default transcriptHighlights;
14 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/containers/transcriptions/transcriptHighlights.module.css:
--------------------------------------------------------------------------------
1 | .phi {
2 | background: #999999;
3 | }
4 |
5 | .condition {
6 | background: #5cceff;
7 | }
8 |
9 | .anatomy {
10 | background: #d185af;
11 | }
12 |
13 | .medication {
14 | background: #f0e442;
15 | }
16 |
17 | .treatment {
18 | background: #44aa99;
19 | }
20 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/index.js:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import React from 'react';
5 | import ReactDOM from 'react-dom';
6 | import Chat from './Chat';
7 | import configureAmplify from './services/servicesConfig';
8 |
9 | // Call services configuration
10 | configureAmplify();
11 |
12 | document.addEventListener('DOMContentLoaded', (_event) => {
13 | ReactDOM.render(, document.getElementById('root'));
14 | });
15 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/providers/UserPermissionProvider.jsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import React, { useContext, useState } from 'react';
5 | const UserPermissionContext = React.createContext();
6 |
7 | const UserPermissionProvider = ({ children }) => {
8 | const [role, setRole] = useState('user');
9 | const providerValue = {
10 | role,
11 | setRole,
12 | };
13 |
14 | return (
15 |
16 | {children}
17 |
18 | );
19 | };
20 |
21 | const useUserPermission = () => {
22 | const context = useContext(UserPermissionContext);
23 |
24 | if (!context) {
25 | throw new Error(
26 | 'useUserPermission must be used within UserPermissionProvider'
27 | );
28 | }
29 |
30 | return context;
31 | };
32 |
33 | export { UserPermissionProvider, useUserPermission };
34 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/utilities/arnParser.js:
--------------------------------------------------------------------------------
1 | const arnParser = (arn) => {
2 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | // SPDX-License-Identifier: Apache-2.0
4 |
5 | const arnMap = [
6 | 'arn',
7 | 'aws',
8 | 'service',
9 | 'region',
10 | 'namespace',
11 | 'relativeId',
12 | 'relativeValue',
13 | ];
14 | return arn.split(':').reduce(function (aggregator, piece, index) {
15 | aggregator[arnMap[index]] = piece;
16 | return aggregator;
17 | }, {});
18 | };
19 |
20 | export default arnParser;
21 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/utilities/formatBytes.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-restricted-properties */
2 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | // SPDX-License-Identifier: Apache-2.0
4 |
5 | const formatBytes = (bytes, decimals = 2) => {
6 | if (bytes === 0) return '0 Bytes';
7 |
8 | const k = 1024;
9 | const dm = decimals < 0 ? 0 : decimals;
10 | const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
11 |
12 | const i = Math.floor(Math.log(bytes) / Math.log(k));
13 |
14 | return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
15 | };
16 |
17 | export default formatBytes;
18 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/utilities/mergeArrays.js:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | /**
5 | * Merges two arrays of objects.
6 | * @param {[]} original Original array data.
7 | * @param {[]} newdata New array data to be appended to original
8 | * @param {string} uniqueSelector attribute key to select unique elements.
9 | */
10 | const mergeArrayOfObjects = (original, newdata, uniqueSelector = '') => {
11 | newdata.forEach((dat) => {
12 | const foundIndex = original.findIndex(
13 | (ori) => ori[uniqueSelector] === dat[uniqueSelector]
14 | );
15 | if (foundIndex >= 0) original.splice(foundIndex, 1, dat);
16 | else original.push(dat);
17 | });
18 |
19 | return original;
20 | };
21 |
22 | export default mergeArrayOfObjects;
23 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/utilities/styles.css:
--------------------------------------------------------------------------------
1 | li span.date-header {
2 | width: fit-content;
3 | width: -moz-fit-content;
4 | margin: 0 auto;
5 | display: flex;
6 | }
7 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/views/Channels/style.css:
--------------------------------------------------------------------------------
1 | .user-block {
2 | /* Custom style */
3 | right: 0;
4 | display: inline-block;
5 | position: absolute;
6 | padding-right: 1rem;
7 | }
8 |
9 | .user-block a {
10 | font-size: 14px;
11 | line-height: 1.43;
12 | text-align: center;
13 | color: white;
14 | padding-left: 24px;
15 | }
16 |
17 | .user-info {
18 | position: relative;
19 | display: inline-block;
20 | text-decoration-line: none;
21 | }
22 |
23 | /* Tooltip text */
24 | .user-info .tooltiptext {
25 | visibility: hidden;
26 | background-color: black;
27 | text-align: center;
28 | padding: 5px 0;
29 | border-radius: 6px;
30 | margin-left: -100px;
31 | position: absolute;
32 | z-index: 1;
33 | }
34 |
35 | /* Show the tooltip text when you mouse over the tooltip container */
36 | .user-info:hover .tooltiptext {
37 | visibility: visible;
38 | }
39 |
40 | .messaging-container {
41 | background-color: #f0f1f2;
42 | }
43 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/views/DeviceSetup/Styled.ts:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import styled from 'styled-components';
5 |
6 | export const StyledLayout = styled.main`
7 | display: flex;
8 | flex-direction: column;
9 | align-items: center;
10 | justify-content: center;
11 | min-height: 100%;
12 | max-width: 85rem;
13 | padding: 2rem;
14 | margin: auto;
15 |
16 | @media (max-width: 760px) {
17 | border-right: unset;
18 | align-items: unset;
19 | justify-content: unset;
20 | }
21 | `;
22 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/src/views/DeviceSetup/index.tsx:
--------------------------------------------------------------------------------
1 | // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: Apache-2.0
3 |
4 | import React from 'react';
5 | import { Heading } from 'amazon-chime-sdk-component-library-react';
6 |
7 | import JoinMeetingDetails from '../../containers/MeetingJoinDetails';
8 | import { StyledLayout } from './Styled';
9 | import DeviceSelection from '../../components/DeviceSelection';
10 |
11 | const DeviceSetup: React.FC = () => (
12 |
13 |
14 | Device settings
15 |
16 |
17 |
18 |
19 | );
20 |
21 | export default DeviceSetup;
22 |
--------------------------------------------------------------------------------
/apps/televisit-demo/frontend/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "esnext",
4 | "outDir": "build",
5 | "noImplicitAny": true,
6 | "noUnusedLocals": false,
7 | "removeComments": true,
8 | "preserveConstEnums": true,
9 | "sourceMap": true,
10 | "target": "es2018",
11 | "rootDirs": ["src"],
12 | "allowJs": true,
13 | "checkJs": false,
14 | "jsx": "react-jsx",
15 | "types": ["react"],
16 | "pretty": true,
17 | "skipLibCheck": true,
18 | "strict": true,
19 | "strictNullChecks": false,
20 | "moduleResolution": "node",
21 | "esModuleInterop": true,
22 | "lib": ["es5", "es6", "es7", "es2017", "dom"],
23 | "allowSyntheticDefaultImports": true,
24 | "forceConsistentCasingInFileNames": true,
25 | "resolveJsonModule": true,
26 | "suppressImplicitAnyIndexErrors": true,
27 | "noFallthroughCasesInSwitch": true,
28 | "isolatedModules": true,
29 | "noEmit": false
30 | },
31 | "include": ["src/**/*"],
32 | "exclude": ["node_modules", "build"]
33 | }
34 |
--------------------------------------------------------------------------------
/apps/televisit-demo/images/backendoutputs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/televisit-demo/images/backendoutputs.png
--------------------------------------------------------------------------------
/apps/televisit-demo/images/chatbot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/televisit-demo/images/chatbot.png
--------------------------------------------------------------------------------
/apps/televisit-demo/images/chime-sdk-telemedicine.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/televisit-demo/images/chime-sdk-telemedicine.jpg
--------------------------------------------------------------------------------
/apps/televisit-demo/images/confirmuser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/televisit-demo/images/confirmuser.png
--------------------------------------------------------------------------------
/apps/televisit-demo/images/meeting.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/televisit-demo/images/meeting.png
--------------------------------------------------------------------------------
/apps/televisit-demo/images/newregistration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/amazon-chime-sdk/10d82a0c0b8347b5346fc1d27d9acb1c7f37597b/apps/televisit-demo/images/newregistration.png
--------------------------------------------------------------------------------
/lambda/call-insights-parsing/docker/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM public.ecr.aws/lambda/python:3.9
2 |
3 | # Install the function's dependencies using file requirements.txt
4 |
5 | COPY requirements.txt .
6 | RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"
7 |
8 | # Copy function code
9 | COPY app.py ${LAMBDA_TASK_ROOT}
10 |
11 | # Set the CMD to the handler
12 | CMD [ "app.lambda_handler" ]
--------------------------------------------------------------------------------
/lambda/call-insights-parsing/docker/requirements.txt:
--------------------------------------------------------------------------------
1 | pandas
2 | xmltodict
3 | pyarrow
4 | fastparquet
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "amazon-chime-sdk",
3 | "lockfileVersion": 2,
4 | "requires": true,
5 | "packages": {}
6 | }
7 |
--------------------------------------------------------------------------------
/utils/pstn-audio-lambdas/amazon-chime-pstn-audio-lambda-node/.gitignore:
--------------------------------------------------------------------------------
1 | samconfig.toml
2 | packaged-template.yaml
3 | .aws-sam
4 |
--------------------------------------------------------------------------------
/utils/pstn-audio-lambdas/amazon-chime-pstn-audio-lambda-node/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy of
4 | this software and associated documentation files (the "Software"), to deal in
5 | the Software without restriction, including without limitation the rights to
6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
7 | the Software, and to permit persons to whom the Software is furnished to do so.
8 |
9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
10 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
11 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
12 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
13 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15 |
16 |
--------------------------------------------------------------------------------
/utils/pstn-audio-lambdas/amazon-chime-pstn-audio-lambda-node/README.md:
--------------------------------------------------------------------------------
1 | # amazon-chime-pstn-audio-lambda-node
2 |
3 | The Amazon Chime PSTN Audio Lambda provides a barebones AWS Lambda function for use with [Amazon Chime PSTN Audio](https://docs.aws.amazon.com/chime/latest/dg/build-lambdas-for-sip-sdk.html).
4 |
5 | This Lambda function is not meant to be functional, but provides the skeleton for a function that will be triggered by an Amazon Chime PSTN Audio SIP media application. See [here](https://docs.aws.amazon.com/chime/latest/ag/manage-sip-applications.html) for more information on creating a SIP media application
6 |
--------------------------------------------------------------------------------
/utils/singlejs/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | build
3 | node_modules
4 |
--------------------------------------------------------------------------------
/utils/singlejs/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "singlejs",
3 | "version": "0.1.0",
4 | "description": "Generate a single JS file from Chime SDK",
5 | "scripts": {
6 | "bundle": "rollup --config rollup.config.js"
7 | },
8 | "repository": {
9 | "type": "git",
10 | "url": "git://github.com/aws/amazon-chime-sdk-js"
11 | },
12 | "devDependencies": {
13 | "@rollup/plugin-commonjs": "^24.0.1",
14 | "@rollup/plugin-node-resolve": "^15.0.1",
15 | "@rollup/plugin-terser": "^0.4.0",
16 | "rollup": "^3.13.0"
17 | },
18 | "type": "module",
19 | "dependencies": {
20 | "@rollup/plugin-json": "^6.0.0",
21 | "amazon-chime-sdk-js": "^3.12.0"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/utils/singlejs/src/index.js:
--------------------------------------------------------------------------------
1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 | // SPDX-License-Identifier: MIT-0
3 |
4 | export * as default from 'amazon-chime-sdk-js';
5 |
--------------------------------------------------------------------------------