package extensions import "time" type ConfigurationSegment string const ( ConfigurationSegmentBroadcaster ConfigurationSegment = "broadcaster" ConfigurationSegmentDeveloper ConfigurationSegment = "developer" ConfigurationSegmentGlobal ConfigurationSegment = "global" ) type ExtensionSecrets struct { // The version number that identifies this definition of the secret’s data. FormatVersion int `json:"format_version"` // The list of secrets. Secrets []ExtensionSecret `json:"secrets"` } type ExtensionSecret struct { // The raw secret that you use with JWT encoding. Content string `json:"content"` // The UTC date and time (in RFC3339 format) that you may begin using this secret to sign a JWT. ActiveAt time.Time `json:"active_at"` // The UTC date and time (in RFC3339 format) that you must stop using this secret to decode a JWT. ExpiresAt time.Time `json:"expires_at"` } type ConfigurationLocation string const ( // The Extensions Configuration Service hosts the configuration. ConfigurationLocationHosted ConfigurationLocation = "hosted" // The Extension Backend Service (EBS) hosts the configuration. ConfigurationLocationCustom ConfigurationLocation = "custom" // The extension doesn't require configuration. ConfigurationLocationNone ConfigurationLocation = "none" ) type ExtensionState string const ( ExtensionStateApproved ExtensionState = "Approved" ExtensionStateAssetsUploaded ExtensionState = "AssetsUploaded" ExtensionStateDeleted ExtensionState = "Deleted" ExtensionStateDeprecated ExtensionState = "Deprecated" ExtensionStateInReview ExtensionState = "InReview" ExtensionStateInTest ExtensionState = "InTest" ExtensionStatePendingAction ExtensionState = "PendingAction" ExtensionStateRejected ExtensionState = "Rejected" ExtensionStateReleased ExtensionState = "Released" ) type Extension struct { // The name of the user or organization that owns the extension AuthorName string `json:"author_name"` // A boolean value that determines whether the extension has features that use bits. // Is true if the extension has features that use bits. HasBits bool `json:"has_bits"` // A boolean value that determines whether a user can install the extension on their channel. // Is true if the user can install the extension on their channel. CanInstall bool `json:"can_install"` // The location of where the extension’s configuration is stored. ConfigurationLocation ConfigurationLocation `json:"configuration_location"` // A longer description of the extension. It appears on the details page. Description string `json:"description"` // A URL to the extension's Terms of Service. EulaTosUrl string `json:"eula_tos_url"` // A boolean value that determines whether the extension can communicate with the installed channel's chat. // Is true if the extension can communicate with the installed channel's chat room. HasChatSupport bool `json:"has_chat_support"` // A URL to the default icon that's displayed in the Extensions directory. IconUrl string `json:"icon_url"` // A dictionary that contains URLs to different sizes of the default icon. // The dictionary’s key identifies the icon’s size (for example, 24x24), and the dictionary’s value contains the URL to the icon. IconUrls map[string]string `json:"icon_urls"` // The extension’s ID. ID string `json:"id"` // The extension’s state. State ExtensionState `json:"state"` // Indicates whether the extension can view the user’s subscription level on the channel that the extension is installed on. // Possible values are: // // none — The extension can't view the user’s subscription level. // // optional — The extension can view the user’s subscription level. SubscriptionsSupportLevel string `json:"subscriptions_support_level"` // A short description of the extension that streamers see when hovering over the discovery splash screen in the Extensions manager. Summary string `json:"summary"` // The email address that users use to get support for the extension. SupportEmail string `json:"support_email"` // The extension’s version number. Version string `json:"version"` // A brief description displayed on the channel to explain how the extension works. ViewerSummary string `json:"viewer_summary"` // Describes all views-related information such as how the extension is displayed on mobile devices. Views struct { // Describes how the extension is displayed on mobile devices. Mobile struct { // The HTML file that is shown to viewers on mobile devices. This page is presented to viewers as a panel behind the chat area of the mobile app. ViewerUrl string `json:"viewer_url"` } `json:"mobile"` // Describes how the extension is rendered if the extension may be activated as a panel extension. Panel struct { // The HTML file that is shown to viewers when the extension is activated as a panel extension. ViewerUrl string `json:"viewer_url"` // The height, in pixels, of the panel component that the extension is rendered in. Height int `json:"height"` // A Boolean value that determines whether the extension can link to non-Twitch domains. CanLinkExternalContent bool `json:"can_link_external_content"` } `json:"panel"` // Describes how the extension is rendered if the extension may be activated as a video-overlay extension. VideoOverlay struct { // The HTML file that is shown to viewers when the extension is activated as a video-overlay extension. ViewerUrl string `json:"viewer_url"` // A Boolean value that determines whether the extension can link to non-Twitch domains. CanLinkExternalContent bool `json:"can_link_external_content"` } `json:"video_overlay"` // Describes how the extension is rendered if the extension may be activated as a video-component extension. VideoComponent struct { // The HTML file that is shown to viewers when the extension is activated as a video-component extension. ViewerUrl string `json:"viewer_url"` // The width value of the ratio (width : height) which determines the extension’s width, // and how the extension’s iframe will resize in different video player environments. AspectRatioX int `json:"aspect_ratio_x"` // The height value of the ratio (width : height) which determines the extension’s height, // and how the extension’s iframe will resize in different video player environments. AspectRatioY int `json:"aspect_ratio_y"` // A Boolean value that determines whether to apply CSS zoom. // If true, a CSS zoom is applied such that the size of the extension is variable but the inner dimensions are fixed based on Scale Pixels. // This allows your extension to render as if it is of fixed width and height. // If false, the inner dimensions of the extension iframe are variable, meaning your extension must implement responsiveness. Autoscale bool `json:"autoscale"` // The base width, in pixels, of the extension to use when scaling (see autoscale). This value is ignored if autoscale is false. ScalePixels int `json:"scale_pixels"` // The height as a percent of the maximum height of a video component extension. Values are between 1% - 100%. TargetHeight int `json:"target_height"` // A boolean value that determines whether the extension can link to non-Twitch domains. CanLinkExternalContent bool `json:"can_link_external_content"` } `json:"video_component"` // Describes the view that is shown to broadcasters while they are configuring your extension within the Extension Manager. Config struct { // The HTML file that is shown to broadcasters while they are configuring your extension within the Extension Manager. ViewerUrl string `json:"viewer_url"` // A Boolean value that determines whether the extension can link to non-Twitch domains. CanLinkExternalContent bool `json:"can_link_external_content"` } `json:"config"` } `json:"views"` // Allowlisted configuration URLs for displaying the extension // (the allowlist is configured on Twitch’s developer site under the Extensions -> Extension -> Version -> Capabilities). AllowlistedConfigUrls []string `json:"allowlisted_config_urls"` // Allowlisted panel URLs for displaying the extension // (the allowlist is configured on Twitch’s developer site under the Extensions -> Extension -> Version -> Capabilities). AllowlistedPanelUrls []string `json:"allowlisted_panel_urls"` } type BitsProduct struct { // The product’s SKU. The SKU is unique across an extension’s products. SKU string `json:"sku"` // An object that contains the product’s cost information. Cost struct { // The product’s price. Amount int `json:"amount"` // The type of currency. Possible values are: // // bits Type string `json:"type"` } `json:"cost"` // A Boolean value that indicates whether the product is in development. If true, the product is not available for public use. InDevelopment bool `json:"in_development"` // The product’s name as displayed in the extension. DisplayName string `json:"display_name"` // The date and time, in RFC3339 format, when the product expires. Expiration time.Time `json:"expiration"` // A Boolean value that determines whether Bits product purchase events are broadcast to all instances of an extension on a channel. // The events are broadcast via the onTransactionComplete helper callback. Is true if the event is broadcast to all instances. IsBroadcast bool `json:"is_broadcast"` }