Package-level declarations

API client, configuration, data models, errors, and the anonymous user token store. This package is UI-free: use it directly when you want to build custom surfaces with Compose, SwiftUI-style.

Types

Link copied to clipboard
data class AppVersion(val id: String, val appId: String, val label: String, val position: Int, val released: Boolean, val releasedAt: String?, val description: String?, val createdAt: String, val updatedAt: String)

A release milestone or version tag of the app, used to categorize and filter FeatureRequestItems.

Link copied to clipboard
data class BoardColumn(val id: String, val appId: String, val name: String, val slug: String, val position: Int, val isVisible: Boolean, val isSystem: Boolean, val kind: BoardColumnKind, val color: String? = null, val createdAt: String, val updatedAt: String)

A column on the public roadmap kanban board, as displayed in dev.cupthread.feedback.ui.RoadmapBoardScreen.

Link copied to clipboard

Semantic classification of a kanban BoardColumn.

Link copied to clipboard
data class ChangelogEntry(val id: String, val title: String, val body: String, val versionLabel: String?, val publishedAt: String, val linkedRequests: List<ChangelogLinkedRequest>)

A published changelog entry or release note, returned by FeedbackClient.fetchChangelog.

Link copied to clipboard
data class ChangelogLinkedRequest(val id: String, val title: String)

Feature request referenced by a ChangelogEntry, highlighting resolved requests.

Link copied to clipboard
data class ChangelogOverlayConfig(val title: String = "What's New", val subtitle: String = "", val entryCount: Int = 3, val primaryButton: String = "Continue", val closeButton: String = "Close")

Copy, button label, and display count settings for the What's-New modal overlay (dev.cupthread.feedback.ui.ChangelogOverlay).

Link copied to clipboard

Persistent store for tracking seen changelog and release notes versions backed by SharedPreferences.

Link copied to clipboard
data class ChangelogSubscriptionResult(val subscribed: Boolean, val alreadySubscribed: Boolean)

Result of subscribing an email to product updates via FeedbackClient.subscribeToChangelog.

Link copied to clipboard
data class ChangelogUnsubscribeResult(val unsubscribed: Boolean)

Result of removing an email from product update emails via FeedbackClient.unsubscribeFromChangelog.

Link copied to clipboard
data class CommentDraft(val body: String = "", val authorName: String? = null, val authorEmail: String? = null, val authorAvatarUrl: String? = null, val parentId: String? = null, val replyToClerkId: String? = null, val replyToAuthorName: String? = null)

Draft content for creating a new comment or threaded @reply via FeedbackClient.postComment.

Link copied to clipboard
data class FeatureRequestComment(val id: String, val featureRequestId: String, val authorName: String? = null, val authorEmail: String? = null, val authorAvatarUrl: String? = null, val authorClerkId: String? = null, val body: String, val parentId: String? = null, val replyToClerkId: String? = null, val replyToAuthorName: String? = null, val isHidden: Boolean = false, val createdAt: String)

A comment or reply on a feature request, returned by FeedbackClient.fetchComments.

Link copied to clipboard
data class FeatureRequestDraft(val title: String = "", val description: String = "", val requesterName: String = "")

Draft content for submitting a new feature request via FeedbackClient.submitFeatureRequest.

Link copied to clipboard
data class FeatureRequestItem(val id: String, val appId: String, val title: String, val description: String, val status: String, val columnId: String?, val columnSlug: String?, val columnName: String?, val columnColor: String? = null, val versionId: String?, val versionLabel: String?, val releasedVersion: String?, val requesterName: String?, val requesterAvatarUrl: String? = null, val requesterClerkId: String? = null, val approved: Boolean, val voteCount: Int, val hasVoted: Boolean, val isOwnRequest: Boolean, val recentCommenters: List<RecentCommenter> = emptyList(), val hasMoreCommenters: Boolean = false, val createdAt: String, val updatedAt: String)

A public feature request, as returned by FeedbackClient.fetchFeatureRequests.

Link copied to clipboard
data class FeatureRequestSubmissionResult(val featureRequestId: String, val pending: Boolean)

Result of submitting a feature request via FeedbackClient.submitFeatureRequest.

Link copied to clipboard
data class FeedbackAttachment(val kind: FeedbackAttachment.Kind, val key: String, val url: String, val filename: String? = null, val mimeType: String? = null, val size: Long? = null)

An uploaded attachment descriptor, as returned by FeedbackClient.uploadAttachment.

Link copied to clipboard

Primary HTTP API client for interacting with the CupThread developer platform.

Link copied to clipboard
data class FeedbackClientConfig(val baseUrl: String, val appKey: String, val defaultPlatform: FeedbackPlatform = FeedbackPlatform.current)

Immutable configuration for FeedbackClient.

Link copied to clipboard
data class FeedbackDraft(val title: String = "", val description: String = "", val reporterName: String = "", val reporterEmail: String = "", val platform: FeedbackPlatform, val appVersion: String = "", val buildNumber: String = "", val metadata: Map<String, String> = emptyMap(), val attachments: List<FeedbackAttachment> = emptyList())

Editable feedback submission content passed to FeedbackClient.submit.

Link copied to clipboard

Base sealed exception class for all errors produced by FeedbackClient.

Link copied to clipboard

Platform identifier recognized by the CupThread REST API.

Link copied to clipboard
data class FeedbackSubmissionResult(val submissionId: String, val forwardedToGithub: Boolean, val githubDiscussionId: String? = null, val githubDiscussionUrl: String? = null, val warning: String? = null)

Result returned by FeedbackClient.submit upon successful delivery of a feedback draft.

Link copied to clipboard
data class ListFeatureRequestsResult(val requests: List<FeatureRequestItem>, val total: Int)

Paginated list of feature requests returned by FeedbackClient.fetchFeatureRequests.

Link copied to clipboard
data class PublicAppConfig(val appId: String, val appKey: String, val slug: String, val name: String, val storeUrl: String?, val storeKind: String?, val iconUrl: String?, val allowPublic: Boolean, val allowedPlatforms: List<FeedbackPlatform>, val maxAttachmentBytes: Long, val allowAnonymousRoadmap: Boolean, val allowAnonymousVote: Boolean, val allowAnonymousFeedback: Boolean, val allowAnonymousChangelog: Boolean, val sdk: SdkAppearance = SdkAppearance.defaults)

Public metadata and configuration for an application, fetched from GET /api/v1/public/config/{appKey}.

Link copied to clipboard
data class PublicAppSummary(val id: String, val name: String, val slug: String, val iconUrl: String? = null, val description: String? = null, val requestCount: Int = 0)

Summary of an application owned or associated with a user profile.

Link copied to clipboard
data class PublicUserProfile(val clerkUserId: String, val displayName: String? = null, val avatarUrl: String? = null, val bio: String? = null, val websiteUrl: String? = null, val hideComments: Boolean = false, val createdAt: String = "", val updatedAt: String = "")

Public user profile information, as returned by FeedbackClient.fetchUserProfile.

Link copied to clipboard
data class PublicUserProfileResult(val profile: PublicUserProfile, val apps: List<PublicAppSummary> = emptyList(), val recentComments: List<UserProfileComment> = emptyList(), val hideComments: Boolean = false)

Combined public profile result returned by FeedbackClient.fetchUserProfile.

Link copied to clipboard
data class RecentCommenter(val authorName: String? = null, val clerkUserId: String? = null, val avatarUrl: String? = null)

Summary of a recent commenter on a FeatureRequestItem, used in avatar stacks.

Link copied to clipboard
data class SdkAppearance(val theme: SdkTheme = SdkTheme.SYSTEM, val features: SdkFeatures = SdkFeatures.allEnabled, val changelogOverlay: ChangelogOverlayConfig = ChangelogOverlayConfig())

Complete remote appearance package configured in the CupThread developer console: color palette theme, feature switches, and changelog presentation options.

Link copied to clipboard

Functional SDK surface areas that can be toggled on or off remotely from the CupThread console.

Link copied to clipboard
data class SdkFeatures(val feedback: Boolean = true, val featureRequests: Boolean = true, val roadmap: Boolean = true, val changelog: Boolean = true)

Feature availability switches configured remotely in the CupThread developer console.

Link copied to clipboard

Visual color themes selectable in the CupThread developer console and applied across SDK composables by dev.cupthread.feedback.ui.CupThreadTheme.

Link copied to clipboard
data class UserAttributesUpdateResult(val ok: Boolean, val updatedAt: String)

Result of updating user telemetry attributes via FeedbackClient.updateUserAttributes.

Link copied to clipboard
data class UserProfileComment(val id: String, val body: String, val createdAt: String, val featureRequestId: String, val featureRequestTitle: String, val appId: String, val appName: String)

A user comment displayed on their public profile activity feed.

Link copied to clipboard

Persistent anonymous device token store backed by Android SharedPreferences.

Link copied to clipboard
data class VoteResult(val voted: Boolean, val voteCount: Int)

Result of toggling an upvote on a feature request via FeedbackClient.toggleVote.