UNPKG

@microsoft/teams.apps

Version:

<p> <a href="https://www.npmjs.com/package/@microsoft/teams.apps" target="_blank"> <img src="https://img.shields.io/npm/v/@microsoft/teams.apps/latest" /> </a> <a href="https://www.npmjs.com/package/@microsoft/teams.apps?activeTab=code

1,242 lines (1,241 loc) 37.3 kB
export type Manifest = { $schema?: string; /** * A color to use in conjunction with the icon. The value must be a valid HTML color code * starting with '#', for example `#4464ee`. */ accentColor: string; activities?: Activities; /** * Specify and consolidates authorization related information for the App. */ authorization?: ManifestAuthorization; /** * The set of bots for this app. Currently only one bot per app is supported. */ bots?: Bot[]; /** * The set of compose extensions for this app. Currently only one compose extension per app * is supported. */ composeExtensions?: ComposeExtension[]; /** * A list of tenant configured properties for an app */ configurableProperties?: ConfigurableProperty[]; /** * These are tabs users can optionally add to their channels and 1:1 or group chats and * require extra configuration before they are added. Configurable tabs are not supported in * the personal scope. Currently only one configurable tab per app is supported. */ configurableTabs?: ConfigurableTab[]; /** * The set of Office365 connectors for this app. Currently only one connector per app is * supported. */ connectors?: Connector[]; copilotAgents?: CopilotAgents; /** * Defines the list of cards which could be pinned to dashboards that can provide summarized * view of information relevant to user. */ dashboardCards?: DashboardCard[]; /** * A value indicating whether an app is blocked by default until admin allows it */ defaultBlockUntilAdminAction?: boolean; /** * When a group install scope is selected, this will define the default capability when the * user installs the app */ defaultGroupCapability?: DefaultGroupCapability; /** * The install scope defined for this app by default. This will be the option displayed on * the button when a user tries to add the app */ defaultInstallScope?: DefaultInstallScope; description: Description; developer: Developer; /** * Specify the native features on a user's device that your app may request access to. */ devicePermissions?: DevicePermission[]; extensions?: ElementExtension[]; /** * Specify the app's Graph connector configuration. If this is present then * webApplicationInfo.id must also be specified. */ graphConnector?: GraphConnector; icons: Icons; /** * A unique identifier for this app. This id must be a GUID. */ id: string; /** * A value indicating whether a personal app is rendered without a tab header-bar */ isFullScreen?: boolean; localizationInfo?: LocalizationInfo; /** * The version of the schema this manifest is using. This schema version supports extending * Teams apps to other parts of the Microsoft 365 ecosystem. More info at * https://aka.ms/extendteamsapps. */ manifestVersion: ManifestVersion; /** * Specify meeting extension definition. */ meetingExtensionDefinition?: MeetingExtensionDefinition; name: Name; /** * Specifies the permissions the app requests from users. */ permissions?: Permission[]; /** * The url to the page that provides additional app information for the admins */ publisherDocsUrl?: string; /** * A value indicating whether or not show loading indicator when app/tab is loading */ showLoadingIndicator?: boolean; /** * A set of tabs that may be 'pinned' by default, without the user adding them manually. * Static tabs declared in personal scope are always pinned to the app's personal * experience. Static tabs do not currently support the 'teams' scope. */ staticTabs?: StaticTab[]; /** * Subscription offer associated with this app. */ subscriptionOffer?: SubscriptionOffer; /** * List of 'non-standard' channel types that the app supports. Note: Channels of standard * type are supported by default if the app supports team scope. */ supportedChannelTypes?: SupportedChannelType[]; /** * A list of valid domains from which the tabs expect to load any content. Domain listings * can include wildcards, for example `*.example.com`. If your tab configuration or content * UI needs to navigate to any other domain besides the one use for tab configuration, that * domain must be specified here. */ validDomains?: string[]; /** * The version of the app. Changes to your manifest should cause a version change. This * version string must follow the semver standard (http://semver.org). */ version: string; /** * Specify your AAD App ID and Graph information to help users seamlessly sign into your AAD * app. */ webApplicationInfo?: WebApplicationInfo; }; export type Activities = { /** * Specify the types of activites that your app can post to a users activity feed */ activityTypes?: ActivityType[]; }; export type ActivityType = { description: string; templateText: string; type: string; }; /** * Specify and consolidates authorization related information for the App. */ export type ManifestAuthorization = { /** * List of permissions that the app needs to function. */ permissions?: Permissions; }; /** * List of permissions that the app needs to function. */ export type Permissions = { /** * Permissions that must be granted on a per resource instance basis. */ resourceSpecific?: ResourceSpecific[]; }; export type ResourceSpecific = { /** * The name of the resource-specific permission. */ name: string; /** * The type of the resource-specific permission: delegated vs application. */ type: ResourceSpecificType; }; /** * The type of the resource-specific permission: delegated vs application. */ export type ResourceSpecificType = 'Application' | 'Delegated'; export type Bot = { /** * The Microsoft App ID specified for the bot in the Bot Framework portal * (https://dev.botframework.com/bots) */ botId: string; /** * The list of commands that the bot supplies, including their usage, description, and the * scope for which the commands are valid. A separate command list should be used for each * scope. */ commandLists?: CommandList[]; configuration?: Configuration; /** * A value indicating whether or not the bot is a one-way notification only bot, as opposed * to a conversational bot. */ isNotificationOnly?: boolean; /** * This value describes whether or not the bot utilizes a user hint to add the bot to a * specific channel. */ needsChannelSelector?: boolean; /** * Specifies whether the bot offers an experience in the context of a channel in a team, in * a 1:1 or group chat, or in an experience scoped to an individual user alone. These * options are non-exclusive. */ scopes: CommandListScope[]; /** * A value indicating whether the bot supports audio calling. */ supportsCalling?: boolean; /** * A value indicating whether the bot supports uploading/downloading of files. */ supportsFiles?: boolean; /** * A value indicating whether the bot supports video calling. */ supportsVideo?: boolean; }; export type CommandList = { commands: CommandListCommand[]; /** * Specifies the scopes for which the command list is valid */ scopes: CommandListScope[]; }; export type CommandListCommand = { /** * A simple text description or an example of the command syntax and its arguments. */ description: string; /** * The bot command name */ title: string; }; export type CommandListScope = 'team' | 'personal' | 'groupChat'; export type Configuration = { groupChat?: GroupChat; team?: GroupChat; }; export type GroupChat = { fetchTask?: boolean; taskInfo?: TaskInfo; }; export type TaskInfo = { /** * Dialog height - either a number in pixels or default layout such as 'large', 'medium', or * 'small' */ height?: string; /** * Initial dialog title */ title?: string; /** * Initial webview URL */ url?: string; /** * Dialog width - either a number in pixels or default layout such as 'large', 'medium', or * 'small' */ width?: string; }; export type ComposeExtension = { /** * A relative file path to the api specification file in the manifest package. */ apiSpecificationFile?: string; /** * Object capturing authorization information. */ authorization?: ComposeExtensionAuthorization; /** * The Microsoft App ID specified for the bot powering the compose extension in the Bot * Framework portal (https://dev.botframework.com/bots) */ botId?: string; /** * A value indicating whether the configuration of a compose extension can be updated by the * user. */ canUpdateConfiguration?: boolean | null; commands?: ComposeExtensionCommand[]; /** * Type of the compose extension. */ composeExtensionType?: ComposeExtensionType; /** * A list of handlers that allow apps to be invoked when certain conditions are met */ messageHandlers?: MessageHandler[]; }; /** * Object capturing authorization information. */ export type ComposeExtensionAuthorization = { /** * Object capturing details needed to do service auth. It will be only present when auth * type is apiSecretServiceAuth. */ apiSecretServiceAuthConfiguration?: APISecretServiceAuthConfiguration; /** * Enum of possible authentication types. */ authType?: AuthType; /** * Object capturing details needed to do single aad auth flow. It will be only present when * auth type is entraId. */ microsoftEntraConfiguration?: MicrosoftEntraConfiguration; }; /** * Object capturing details needed to do service auth. It will be only present when auth * type is apiSecretServiceAuth. */ export type APISecretServiceAuthConfiguration = { /** * Registration id returned when developer submits the api key through Developer Portal. */ apiSecretRegistrationId?: string; }; /** * Enum of possible authentication types. */ export type AuthType = 'none' | 'apiSecretServiceAuth' | 'microsoftEntra'; /** * Object capturing details needed to do single aad auth flow. It will be only present when * auth type is entraId. */ export type MicrosoftEntraConfiguration = { /** * Boolean indicating whether single sign on is configured for the app. */ supportsSingleSignOn?: boolean; }; export type ComposeExtensionCommand = { /** * A relative file path for api response rendering template file. */ apiResponseRenderingTemplateFile?: string; /** * Context where the command would apply */ context?: CommandContext[]; /** * Description of the command. */ description?: string; /** * A boolean value that indicates if it should fetch task module dynamically */ fetchTask?: boolean; /** * Id of the command. */ id: string; /** * A boolean value that indicates if the command should be run once initially with no * parameter. */ initialRun?: boolean; parameters?: Parameter[]; samplePrompts?: SamplePrompt[]; /** * Semantic description for the command. */ semanticDescription?: string; taskInfo?: TaskInfo; /** * Title of the command. */ title: string; /** * Type of the command */ type?: CommandType; }; export type CommandContext = 'compose' | 'commandBox' | 'message'; export type Parameter = { /** * The choice options for the parameter */ choices?: Choice[]; /** * Description of the parameter. */ description?: string; /** * Type of the parameter */ inputType?: InputType; /** * The value indicates if this parameter is a required field. */ isRequired?: boolean; /** * Name of the parameter. */ name: string; /** * Semantic description for the parameter. */ semanticDescription?: string; /** * Title of the parameter. */ title: string; /** * Initial value for the parameter */ value?: string; }; export type Choice = { /** * Title of the choice */ title: string; /** * Value of the choice */ value: string; }; /** * Type of the parameter */ export type InputType = 'text' | 'textarea' | 'number' | 'date' | 'time' | 'toggle' | 'choiceset'; export type SamplePrompt = { /** * This string will hold the sample prompt */ text: string; }; /** * Type of the command */ export type CommandType = 'query' | 'action'; /** * Type of the compose extension. */ export type ComposeExtensionType = 'botBased' | 'apiBased'; export type MessageHandler = { /** * Type of the message handler */ type: MessageHandlerType; value: Value; }; /** * Type of the message handler */ export type MessageHandlerType = 'link'; export type Value = { /** * A list of domains that the link message handler can register for, and when they are * matched the app will be invoked */ domains?: string[]; /** * A boolean that indicates whether the app's link message handler supports anonymous invoke * flow. */ supportsAnonymizedPayloads?: boolean; [property: string]: any; }; export type ConfigurableProperty = 'name' | 'shortDescription' | 'longDescription' | 'smallImageUrl' | 'largeImageUrl' | 'accentColor' | 'developerUrl' | 'privacyUrl' | 'termsOfUseUrl'; export type ConfigurableTab = { /** * A value indicating whether an instance of the tab's configuration can be updated by the * user after creation. */ canUpdateConfiguration?: boolean; /** * The url to use when configuring the tab. */ configurationUrl: string; /** * The set of contextItem scopes that a tab belong to */ context?: ConfigurableTabContext[]; /** * The set of meetingSurfaceItem scopes that a tab belong to */ meetingSurfaces?: MeetingSurface[]; /** * Specifies whether the tab offers an experience in the context of a channel in a team, in * a 1:1 or group chat, or in an experience scoped to an individual user alone. These * options are non-exclusive. Currently, configurable tabs are only supported in the teams * and groupchats scopes. */ scopes: ConfigurableTabScope[]; /** * A relative file path to a tab preview image for use in SharePoint. Size 1024x768. */ sharePointPreviewImage?: string; /** * Defines how your tab will be made available in SharePoint. */ supportedSharePointHosts?: SupportedSharePointHost[]; }; export type ConfigurableTabContext = 'personalTab' | 'channelTab' | 'privateChatTab' | 'meetingChatTab' | 'meetingDetailsTab' | 'meetingSidePanel' | 'meetingStage'; export type MeetingSurface = 'sidePanel' | 'stage'; export type ConfigurableTabScope = 'team' | 'groupChat'; export type SupportedSharePointHost = 'sharePointFullPage' | 'sharePointWebPart'; export type Connector = { /** * The url to use for configuring the connector using the inline configuration experience. */ configurationUrl?: string; /** * A unique identifier for the connector which matches its ID in the Connectors Developer * Portal. */ connectorId: string; /** * Specifies whether the connector offers an experience in the context of a channel in a * team, or an experience scoped to an individual user alone. Currently, only the team scope * is supported. */ scopes: ConnectorScope[]; }; export type ConnectorScope = 'team'; export type CopilotAgents = { /** * An array of declarative agent elements references. Currently, only one declarative agent * per application is supported. */ declarativeAgents: DeclarativeAgentRef[]; }; /** * A reference to a declarative agent element. The element's definition is in a separate * file. */ export type DeclarativeAgentRef = { /** * Relative file path to this declarative agent element file in the application package. */ file: string; /** * A unique identifier for this declarative agent element. */ id: string; }; /** * Cards wich could be pinned to dashboard providing summarized view of information relevant * to user. */ export type DashboardCard = { contentSource: DashboardCardContentSource; /** * Rendering Size for dashboard card. */ defaultSize: DefaultSize; /** * Description of the card.Maximum length is 255 characters. */ description: string; /** * Represents the name of the card. Maximum length is 255 characters. */ displayName: string; icon?: DashboardCardIcon; /** * Unique Id for the card. Must be unique inside the app. */ id: string; /** * Id of the group in the card picker. This must be guid. */ pickerGroupId: string; }; /** * Represents a configuration for the source of the card’s content. */ export type DashboardCardContentSource = { /** * The configuration for the bot source. Required if sourceType is set to bot. */ botConfiguration?: BotConfiguration; /** * The content of the dashboard card is sourced from a bot. */ sourceType?: SourceType; }; /** * The configuration for the bot source. Required if sourceType is set to bot. */ export type BotConfiguration = { /** * The unique Microsoft app ID for the bot as registered with the Bot Framework. */ botId?: string; }; /** * The content of the dashboard card is sourced from a bot. */ export type SourceType = 'bot'; /** * Rendering Size for dashboard card. */ export type DefaultSize = 'medium' | 'large'; /** * Represents a configuration for the source of the card’s content */ export type DashboardCardIcon = { /** * The icon for the card, to be displayed in the toolbox and card bar, represented as URL. */ iconUrl?: string; /** * Office UI Fabric/Fluent UI icon friendly name for the card. This value will be used if * ‘iconUrl’ is not specified. */ officeUIFabricIconName?: string; }; /** * When a group install scope is selected, this will define the default capability when the * user installs the app */ export type DefaultGroupCapability = { /** * When the install scope selected is GroupChat, this field specifies the default capability * available */ groupchat?: Groupchat; /** * When the install scope selected is Meetings, this field specifies the default capability * available */ meetings?: Groupchat; /** * When the install scope selected is Team, this field specifies the default capability * available */ team?: Groupchat; }; /** * When the install scope selected is GroupChat, this field specifies the default capability * available * * When the install scope selected is Meetings, this field specifies the default capability * available * * When the install scope selected is Team, this field specifies the default capability * available */ export type Groupchat = 'tab' | 'bot' | 'connector'; /** * The install scope defined for this app by default. This will be the option displayed on * the button when a user tries to add the app */ export type DefaultInstallScope = 'personal' | 'team' | 'groupChat' | 'meetings'; export type Description = { /** * The full description of the app. Maximum length is 4000 characters. */ full: string; /** * A short description of the app used when space is limited. Maximum length is 80 * characters. */ short: string; }; export type Developer = { /** * The Microsoft Partner Network ID that identifies the partner organization building the * app. This field is not required, and should only be used if you are already part of the * Microsoft Partner Network. More info at https://aka.ms/partner */ mpnId?: string; /** * The display name for the developer. */ name: string; /** * The url to the page that provides privacy information for the app. */ privacyUrl: string; /** * The url to the page that provides the terms of use for the app. */ termsOfUseUrl: string; /** * The url to the page that provides support information for the app. */ websiteUrl: string; }; export type DevicePermission = 'geolocation' | 'media' | 'notifications' | 'midi' | 'openExternal'; /** * The set of extensions for this app. Currently only one extensions per app is supported. */ export type ElementExtension = { alternates?: ExtensionAlternateVersionsArray[]; /** * The url for your extension, used to validate Exchange user identity tokens. */ audienceClaimUrl?: string; autoRunEvents?: ExtensionAutoRunEventsArray[]; requirements?: RequirementsExtensionElement; ribbons?: ExtensionRibbonsArray[]; runtimes?: ExtensionRuntimesArray[]; }; export type ExtensionAlternateVersionsArray = { alternateIcons?: AlternateIcons; hide?: Hide; prefer?: Prefer; requirements?: RequirementsExtensionElement; }; export type AlternateIcons = { highResolutionIcon: ExtensionCommonIcon; icon: ExtensionCommonIcon; }; export type ExtensionCommonIcon = { /** * Size in pixels of the icon. Three image sizes are required (16, 32, and 80 pixels) */ size: number; /** * Absolute Url to the icon. */ url: string; }; export type Hide = { customOfficeAddin?: CustomOfficeAddin; storeOfficeAddin?: StoreOfficeAddin; [property: string]: any; }; export type CustomOfficeAddin = { /** * Solution ID of the in-market add-in to hide. Maximum length is 64 characters. */ officeAddinId: string; }; export type StoreOfficeAddin = { /** * Asset ID of the in-market add-in to hide. Maximum length is 64 characters. */ assetId: string; /** * Solution ID of an in-market add-in to hide. Maximum length is 64 characters. */ officeAddinId: string; }; export type Prefer = { comAddin?: COMAddin; [property: string]: any; }; export type COMAddin = { /** * Program ID of the alternate com extension. Maximum length is 64 characters. */ progId: string; }; export type RequirementsExtensionElement = { capabilities?: Capability[]; /** * Identifies the form factors that support the add-in. Supported values: mobile, desktop. */ formFactors?: FormFactor[]; /** * Identifies the scopes in which the add-in can run. */ scopes?: RequirementsScope[]; }; export type Capability = { /** * Identifies the maximum version for the requirement sets that the add-in needs to run. */ maxVersion?: string; /** * Identifies the minimum version for the requirement sets that the add-in needs to run. */ minVersion?: string; /** * Identifies the name of the requirement sets that the add-in needs to run. */ name: string; }; export type FormFactor = 'desktop' | 'mobile'; export type RequirementsScope = 'mail' | 'workbook' | 'document' | 'presentation'; export type ExtensionAutoRunEventsArray = { /** * Specifies the type of event. For supported types, please see: * https://review.learn.microsoft.com/en-us/office/dev/add-ins/outlook/autolaunch?tabs=xmlmanifest#supported-events. */ events: Event[]; requirements?: RequirementsExtensionElement; }; export type Event = { /** * The ID of an action defined in runtimes. Maximum length is 64 characters. */ actionId: string; /** * Configures how Outlook responds to the event. */ options?: Options; type: string; }; /** * Configures how Outlook responds to the event. */ export type Options = { sendMode: SendMode; }; export type SendMode = 'promptUser' | 'softBlock' | 'block'; export type ExtensionRibbonsArray = { contexts?: ExtensionContext[]; requirements?: RequirementsExtensionElement; tabs: ExtensionRibbonsArrayTabsItem[]; }; /** * Specifies the Office application windows in which the ribbon customization is available * to the user. Each item in the array is a member of a string array. Possible values are: * mailRead, mailCompose, meetingDetailsOrganizer, meetingDetailsAttendee. */ export type ExtensionContext = 'mailRead' | 'mailCompose' | 'meetingDetailsOrganizer' | 'meetingDetailsAttendee' | 'onlineMeetingDetailsOrganizer' | 'logEventMeetingDetailsAttendee' | 'default'; export type ExtensionRibbonsArrayTabsItem = { /** * Id of the existing office Tab. Maximum length is 64 characters. */ builtInTabId?: string; /** * Defines mobile group item. */ customMobileRibbonGroups?: ExtensionRibbonsCustomMobileGroupItem[]; /** * Defines tab groups. */ groups?: ExtensionRibbonsCustomTabGroupsItem[]; /** * A unique identifier for this tab within the app. Maximum length is 64 characters. */ id?: string; /** * Displayed text for the tab. Maximum length is 64 characters. */ label?: string; position?: Position; }; export type ExtensionRibbonsCustomMobileGroupItem = { controls: ExtensionRibbonsCustomMobileControlButtonItem[]; /** * Specify the Id of the group. Used for mobileMessageRead ext point. */ id: string; /** * Short label of the control. Maximum length is 32 characters. */ label: string; [property: string]: any; }; export type ExtensionRibbonsCustomMobileControlButtonItem = { /** * The ID of an action defined in runtimes. Maximum length is 64 characters. */ actionId: string; icons: ExtensionCustomMobileIcon[]; /** * Specify the Id of the button like msgReadFunctionButton. */ id: string; /** * Short label of the control. Maximum length is 32 characters. */ label: string; type: PurpleType; [property: string]: any; }; export type ExtensionCustomMobileIcon = { /** * How to scale - 1,2,3 for each image. This attribute specifies the UIScreen.scale property * for iOS devices. */ scale: number; /** * Size in pixels of the icon. Three image sizes are required (25, 32, and 48 pixels). */ size: number; /** * Url to the icon. */ url: string; }; export type PurpleType = 'mobileButton'; export type ExtensionRibbonsCustomTabGroupsItem = { /** * Id of a built-in Group. Maximum length is 64 characters. */ builtInGroupId?: string; controls?: ExtensionCommonCustomGroupControlsItem[]; icons?: ExtensionCommonIcon[]; /** * A unique identifier for this group within the app. Maximum length is 64 characters. */ id?: string; /** * Displayed text for the group. Maximum length is 64 characters. */ label?: string; }; export type ExtensionCommonCustomGroupControlsItem = { /** * The ID of an execution-type action that handles this key combination. Maximum length is * 64 characters. */ actionId: string; /** * Id of the existing office control. Maximum length is 64 characters. */ builtInControlId?: string; /** * Whether the control is initially enabled. */ enabled?: boolean; icons: ExtensionCommonIcon[]; /** * A unique identifier for this control within the app. Maximum length is 64 characters. */ id: string; /** * Configures the items for a menu control. */ items?: ExtensionCommonCustomControlMenuItem[]; /** * Displayed text for the control. Maximum length is 64 characters. */ label: string; /** * Specifies whether a group, button, menu, or menu item will be hidden on application and * platform combinations that support the API (Office.ribbon.requestCreateControls) that * installs custom contextual tabs on the ribbon. Default is false. */ overriddenByRibbonApi?: boolean; supertip: ExtensionCommonSuperToolTip; /** * Defines the type of control whether button or menu. */ type: FluffyType; }; export type ExtensionCommonCustomControlMenuItem = { /** * The ID of an action defined in runtimes. Maximum length is 64 characters. */ actionId: string; /** * Whether the control is initially enabled. */ enabled?: boolean; icons?: ExtensionCommonIcon[]; /** * A unique identifier for this control within the app. Maximum length is 64 characters. */ id: string; /** * Displayed text for the control. Maximum length is 64 characters. */ label: string; overriddenByRibbonApi?: boolean; supertip: ExtensionCommonSuperToolTip; /** * Supported values: menuItem. */ type: ItemType; }; export type ExtensionCommonSuperToolTip = { /** * Description of the super tip. Maximum length is 250 characters. */ description: string; /** * Title text of the super tip. Maximum length is 64 characters. */ title: string; }; /** * Supported values: menuItem. */ export type ItemType = 'menuItem'; /** * Defines the type of control whether button or menu. */ export type FluffyType = 'button' | 'menu'; export type Position = { /** * Define alignment of this custom tab relative to the specified built-in tab. */ align: Align; /** * The id of the built-in tab. Maximum length is 64 characters. */ builtInTabId: string; }; /** * Define alignment of this custom tab relative to the specified built-in tab. */ export type Align = 'after' | 'before'; /** * A runtime environment for a page or script */ export type ExtensionRuntimesArray = { actions?: ExtensionRuntimesActionsItem[]; code: ExtensionRuntimeCode; /** * A unique identifier for this runtime within the app. Maximum length is 64 characters. */ id: string; /** * Runtimes with a short lifetime do not preserve state across executions. Runtimes with a * long lifetime do. */ lifetime?: Lifetime; requirements?: RequirementsExtensionElement; /** * Supports running functions and launching pages. */ type?: RuntimeType; }; /** * Specifies the set of actions supported by this runtime. An action is either running a * JavaScript function or opening a view such as a task pane. */ export type ExtensionRuntimesActionsItem = { /** * Display name of the action. Maximum length is 64 characters. */ displayName?: string; /** * Identifier for this action. Maximum length is 64 characters. This value is passed to the * code file. */ id: string; /** * Whether allows the action to have multiple selection. */ multiselect?: boolean; /** * Specifies that a task pane supports pinning, which keeps the task pane open when the user * changes the selection. */ pinnable?: boolean; /** * Whether allows task pane add-ins to activate without the Reading Pane enabled or a * message selected. */ supportsNoItemContext?: boolean; /** * executeFunction: Run a script function without waiting for it to finish. openPate: Open a * page in a view. */ type: ActionType; /** * View where the page should be opened. Maximum length is 64 characters. */ view?: string; }; /** * executeFunction: Run a script function without waiting for it to finish. openPate: Open a * page in a view. */ export type ActionType = 'executeFunction' | 'openPage'; export type ExtensionRuntimeCode = { /** * URL of the .html page to be loaded in browser-based runtimes. */ page: string; /** * URL of the .js script file to be loaded in UI-less runtimes. */ script?: string; }; /** * Runtimes with a short lifetime do not preserve state across executions. Runtimes with a * long lifetime do. */ export type Lifetime = 'short' | 'long'; /** * Supports running functions and launching pages. */ export type RuntimeType = 'general'; /** * Specify the app's Graph connector configuration. If this is present then * webApplicationInfo.id must also be specified. */ export type GraphConnector = { /** * The url where Graph-connector notifications for the application should be sent. */ notificationUrl: string; }; export type Icons = { /** * A relative file path to a full color PNG icon. Size 192x192. */ color: string; /** * A relative file path to a transparent PNG outline icon. The border color needs to be * white. Size 32x32. */ outline: string; }; export type LocalizationInfo = { additionalLanguages?: AdditionalLanguage[]; /** * A relative file path to a the .json file containing strings in the default language. */ defaultLanguageFile?: string; /** * The language tag of the strings in this top level manifest file. */ defaultLanguageTag: string; }; export type AdditionalLanguage = { /** * A relative file path to a the .json file containing the translated strings. */ file: string; /** * The language tag of the strings in the provided file. */ languageTag: string; }; export type ManifestVersion = '1.19'; /** * Specify meeting extension definition. */ export type MeetingExtensionDefinition = { /** * Meeting supported scenes. */ scenes?: Scene[]; /** * A boolean value indicating whether this app allows management by anonymous users. */ supportsAnonymousGuestUsers?: boolean; /** * A boolean value indicating whether this app can stream the meeting's audio video content * to an RTMP endpoint. */ supportsStreaming?: boolean; }; export type Scene = { /** * A relative file path to a scene metadata json file. */ file: string; /** * A unique identifier for this scene. This id must be a GUID. */ id: string; /** * Maximum audiences supported in scene. */ maxAudience: number; /** * Scene name. */ name: string; /** * A relative file path to a scene PNG preview icon. */ preview: string; /** * Number of seats reserved for organizers or presenters. */ seatsReservedForOrganizersOrPresenters: number; }; export type Name = { /** * The full name of the app, used if the full app name exceeds 30 characters. */ full: string; /** * A short display name for the app. */ short: string; }; export type Permission = 'identity' | 'messageTeamMembers'; export type StaticTab = { /** * The Microsoft App ID specified for the bot in the Bot Framework portal * (https://dev.botframework.com/bots) */ contentBotId?: string; /** * The url which points to the entity UI to be displayed in the canvas. */ contentUrl?: string; /** * The set of contextItem scopes that a tab belong to */ context?: StaticTabContext[]; /** * A unique identifier for the entity which the tab displays. */ entityId: string; /** * The display name of the tab. */ name?: string; /** * Specifies whether the tab offers an experience in the context of a channel in a team, or * an experience scoped to an individual user alone or group chat. These options are * non-exclusive. Currently static tabs are only supported in the 'personal' scope. */ scopes: CommandListScope[]; /** * The url to direct a user's search queries. */ searchUrl?: string; /** * The url to point at if a user opts to view in a browser. */ websiteUrl?: string; }; export type StaticTabContext = 'personalTab' | 'channelTab' | 'privateChatTab' | 'meetingChatTab' | 'meetingDetailsTab' | 'meetingSidePanel' | 'meetingStage' | 'teamLevelApp'; /** * Subscription offer associated with this app. */ export type SubscriptionOffer = { /** * A unique identifier for the Commercial Marketplace Software as a Service Offer. */ offerId: string; }; export type SupportedChannelType = 'sharedChannels' | 'privateChannels'; /** * Specify your AAD App ID and Graph information to help users seamlessly sign into your AAD * app. */ export type WebApplicationInfo = { /** * AAD application id of the app. This id must be a GUID. */ id: string; /** * Resource url of app for acquiring auth token for SSO. */ resource?: string; };