Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@microsoft/teams-manifest

Package Overview
Dependencies
Maintainers
4
Versions
1024
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@microsoft/teams-manifest - npm Package Compare versions

Comparing version 0.0.6-alpha.f90b22ba0.0 to 0.0.6-rc.0

1362

build/devPreviewManifest.d.ts

@@ -6,98 +6,77 @@ /**

*/
export declare type ExtensionRuntimesActions = (
| ExtensionRuntimesActionsExecuteFunction
| ExtensionRuntimesActionsOpenPage
)[];
export declare type ExtensionRuntimesActions = (ExtensionRuntimesActionsExecuteFunction | ExtensionRuntimesActionsOpenPage)[];
export declare type ExtensionRuntimesArray = {
requirements?: RequirementsExtensionElement;
/**
* A unique identifier for this runtime within the app. Maximum length is 64 characters.
*/
id: string;
/**
* Supports running functions and launching pages.
*/
type?: "general";
code: {
requirements?: RequirementsExtensionElement;
/**
* URL of the .html page to be loaded in browser-based runtimes.
* A unique identifier for this runtime within the app. Maximum length is 64 characters.
*/
page: string;
id: string;
/**
* URL of the .js script file to be loaded in UI-less runtimes.
* Supports running functions and launching pages.
*/
script?: string;
};
/**
* Runtimes with a short lifetime do not preserve state across executions. Runtimes with a long lifetime do.
*/
lifetime?: "short";
actions?: ExtensionRuntimesActions;
type?: "general";
code: {
/**
* 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.
*/
lifetime?: "short";
actions?: ExtensionRuntimesActions;
}[];
export declare type ExtensionContexts = (
| "mailRead"
| "mailCompose"
| "meetingDetailsOrganizer"
| "meetingDetailsAttendee"
)[];
export declare type ExtensionContexts = ("mailRead" | "mailCompose" | "meetingDetailsOrganizer" | "meetingDetailsAttendee")[];
export declare type ExtensionRibbonsArray = {
requirements?: RequirementsExtensionElement;
contexts?: ExtensionContexts;
tabs: (ExtensionRibbonsCustomTab | ExtensionRibbonsBuiltInTab)[];
requirements?: RequirementsExtensionElement;
contexts?: ExtensionContexts;
tabs: (ExtensionRibbonsCustomTab | ExtensionRibbonsBuiltInTab)[];
}[];
export declare type ExtensionAutoRunEventsTypes =
| "newMessageComposeCreated"
| "newAppointmentOrganizerCreated"
| "messageAttachmentsChanged"
| "appointmentAttachmentsChanged"
| "messageRecipientsChanged"
| "appointmentAttendeesChanged"
| "appointmentTimeChanged"
| "appointmentRecurrenceChanged"
| "infoBarDismissClicked"
| "messageSending"
| "appointmentSending"
| "documentNew"
| "documentOpen";
export declare type ExtensionAutoRunEventsTypes = "newMessageComposeCreated" | "newAppointmentOrganizerCreated" | "messageAttachmentsChanged" | "appointmentAttachmentsChanged" | "messageRecipientsChanged" | "appointmentAttendeesChanged" | "appointmentTimeChanged" | "appointmentRecurrenceChanged" | "infoBarDismissClicked" | "messageSending" | "appointmentSending" | "documentNew" | "documentOpen";
export declare type ExtensionAutoRunEventsArray = {
requirements?: RequirementsExtensionElement;
events: {
type: ExtensionAutoRunEventsTypes;
/**
* The ID of an action defined in runtimes. Maximum length is 64 characters.
*/
actionId: string;
options?: ExtensionAutoRunEventsOptions;
}[];
requirements?: RequirementsExtensionElement;
events: {
type: ExtensionAutoRunEventsTypes;
/**
* The ID of an action defined in runtimes. Maximum length is 64 characters.
*/
actionId: string;
options?: ExtensionAutoRunEventsOptions;
}[];
}[];
export declare type ExtensionAlternateVersionsArray = {
requirements?: RequirementsExtensionElement;
prefer?: {
comAddin?: {
/**
* Program ID of the alternate com extension. Maximum length is 64 characters.
*/
progId: string;
requirements?: RequirementsExtensionElement;
prefer?: {
comAddin?: {
/**
* Program ID of the alternate com extension. Maximum length is 64 characters.
*/
progId: string;
};
[k: string]: unknown;
};
[k: string]: unknown;
};
hide?: {
storeOfficeAddin?: {
/**
* Solution ID of an in-market add-in to hide. Maximum length is 64 characters.
*/
officeAddinId: string;
/**
* Asset ID of the in-market add-in to hide. Maximum length is 64 characters.
*/
assetId: string;
hide?: {
storeOfficeAddin?: {
/**
* Solution ID of an in-market add-in to hide. Maximum length is 64 characters.
*/
officeAddinId: string;
/**
* Asset ID of the in-market add-in to hide. Maximum length is 64 characters.
*/
assetId: string;
};
customOfficeAddin?: {
/**
* Solution ID of the in-market add-in to hide. Maximum length is 64 characters.
*/
officeAddinId: string;
};
[k: string]: unknown;
};
customOfficeAddin?: {
/**
* Solution ID of the in-market add-in to hide. Maximum length is 64 characters.
*/
officeAddinId: string;
};
[k: string]: unknown;
};
}[];

@@ -108,734 +87,711 @@ /**

export declare type ElementExtensions = {
requirements?: RequirementsExtensionElement;
runtimes?: ExtensionRuntimesArray;
ribbons?: ExtensionRibbonsArray;
autoRunEvents?: ExtensionAutoRunEventsArray;
alternates?: ExtensionAlternateVersionsArray;
requirements?: RequirementsExtensionElement;
runtimes?: ExtensionRuntimesArray;
ribbons?: ExtensionRibbonsArray;
autoRunEvents?: ExtensionAutoRunEventsArray;
alternates?: ExtensionAlternateVersionsArray;
}[];
export interface DevPreviewSchema {
$schema?: string;
/**
* The version of the schema this manifest is using.
*/
manifestVersion: "devPreview" | "m365DevPreview";
/**
* 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;
/**
* A unique identifier for this app. This id must be a GUID.
*/
id: string;
/**
* A unique identifier for this app in reverse domain notation. E.g: com.example.myapp
*/
packageName?: string;
localizationInfo?: {
$schema?: string;
/**
* The language tag of the strings in this top level manifest file.
* The version of the schema this manifest is using.
*/
defaultLanguageTag: string;
additionalLanguages?: {
/**
* The language tag of the strings in the provided file.
*/
languageTag: string;
/**
* A relative file path to a the .json file containing the translated strings.
*/
file: string;
}[];
};
developer: {
manifestVersion: "devPreview" | "m365DevPreview";
/**
* The display name for the developer.
* 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).
*/
name: string;
version: string;
/**
* 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
* A unique identifier for this app. This id must be a GUID.
*/
mpnId?: string;
id: string;
/**
* The url to the page that provides support information for the app.
* A unique identifier for this app in reverse domain notation. E.g: com.example.myapp
*/
websiteUrl: string;
packageName?: string;
localizationInfo?: {
/**
* The language tag of the strings in this top level manifest file.
*/
defaultLanguageTag: string;
additionalLanguages?: {
/**
* The language tag of the strings in the provided file.
*/
languageTag: string;
/**
* A relative file path to a the .json file containing the translated strings.
*/
file: string;
}[];
};
developer: {
/**
* The display name for the developer.
*/
name: string;
/**
* 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 url to the page that provides support information for the app.
*/
websiteUrl: 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;
};
name: {
/**
* A short display name for the app.
*/
short: string;
/**
* The full name of the app, used if the full app name exceeds 30 characters.
*/
full?: string;
};
description: {
/**
* A short description of the app used when space is limited. Maximum length is 80 characters.
*/
short: string;
/**
* The full description of the app. Maximum length is 4000 characters.
*/
full: string;
};
icons: {
/**
* A relative file path to a transparent PNG outline icon. The border color needs to be white. Size 32x32.
*/
outline: string;
/**
* A relative file path to a full color PNG icon. Size 192x192.
*/
color: string;
};
/**
* The url to the page that provides privacy information for the app.
* A color to use in conjunction with the icon. The value must be a valid HTML color code starting with '#', for example `#4464ee`.
*/
privacyUrl: string;
accentColor: string;
/**
* The url to the page that provides the terms of use for the app.
* 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.
*/
termsOfUseUrl: string;
};
name: {
configurableTabs?: {
/**
* The url to use when configuring the tab.
*/
configurationUrl: string;
/**
* A value indicating whether an instance of the tab's configuration can be updated by the user after creation.
*/
canUpdateConfiguration?: boolean;
/**
* 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: ("team" | "groupchat")[];
/**
* The set of meetingSurfaceItem scopes that a tab belong to
*/
meetingSurfaces?: ("sidePanel" | "stage")[];
/**
* The set of contextItem scopes that a tab belong to
*/
context?: ("personalTab" | "channelTab" | "privateChatTab" | "meetingChatTab" | "meetingDetailsTab" | "meetingSidePanel" | "meetingStage" | "callingSidePanel")[];
/**
* The set of supportedPlatform scopes that a tab belong to
*/
supportedPlatform?: ("desktop" | "mobile" | "teamsMeetingDevices")[];
/**
* 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?: ("sharePointFullPage" | "sharePointWebPart")[];
}[];
/**
* A short display name for the app.
* 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.
*/
short: string;
staticTabs?: {
/**
* A unique identifier for the entity which the tab displays.
*/
entityId: string;
/**
* The display name of the tab.
*/
name?: string;
/**
* The url which points to the entity UI to be displayed in the Teams canvas.
*/
contentUrl?: string;
/**
* The Microsoft App ID specified for the bot in the Bot Framework portal (https://dev.botframework.com/bots)
*/
contentBotId?: string;
/**
* The url to point at if a user opts to view in a browser.
*/
websiteUrl?: string;
/**
* The url to direct a user's search queries.
*/
searchUrl?: 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. These options are non-exclusive. Currently static tabs are only supported in the 'personal' scope.
*/
scopes: ("team" | "personal")[];
/**
* The set of contextItem scopes that a tab belong to
*/
context?: ("personalTab" | "channelTab")[];
/**
* The set of supportedPlatform scopes that a tab belong to
*/
supportedPlatform?: ("desktop" | "mobile" | "teamsMeetingDevices")[];
}[];
/**
* The full name of the app, used if the full app name exceeds 30 characters.
* The set of bots for this app. Currently only one bot per app is supported.
*/
full?: string;
};
description: {
bots?: {
/**
* The Microsoft App ID specified for the bot in the Bot Framework portal (https://dev.botframework.com/bots)
*/
botId: string;
/**
* This value describes whether or not the bot utilizes a user hint to add the bot to a specific channel.
*/
needsChannelSelector?: boolean;
/**
* A value indicating whether or not the bot is a one-way notification only bot, as opposed to a conversational bot.
*/
isNotificationOnly?: boolean;
/**
* A value indicating whether the bot supports uploading/downloading of files.
*/
supportsFiles?: boolean;
/**
* A value indicating whether the bot supports audio calling.
*/
supportsCalling?: boolean;
/**
* A value indicating whether the bot supports video calling.
*/
supportsVideo?: 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: ("team" | "personal" | "groupchat")[];
/**
* 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?: {
/**
* Specifies the scopes for which the command list is valid
*/
scopes: ("team" | "personal" | "groupchat")[];
commands: {
/**
* The bot command name
*/
title: string;
/**
* A simple text description or an example of the command syntax and its arguments.
*/
description: string;
}[];
}[];
}[];
/**
* A short description of the app used when space is limited. Maximum length is 80 characters.
* The set of Office365 connectors for this app. Currently only one connector per app is supported.
*/
short: string;
connectors?: {
/**
* A unique identifier for the connector which matches its ID in the Connectors Developer Portal.
*/
connectorId: string;
/**
* The url to use for configuring the connector using the inline configuration experience.
*/
configurationUrl?: 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: "team"[];
}[];
/**
* The full description of the app. Maximum length is 4000 characters.
* Subscription offer associated with this app.
*/
full: string;
};
icons: {
subscriptionOffer?: {
/**
* A unique identifier for the Commercial Marketplace Software as a Service Offer.
*/
offerId: string;
};
/**
* A relative file path to a transparent PNG outline icon. The border color needs to be white. Size 32x32.
* The set of compose extensions for this app. Currently only one compose extension per app is supported.
*/
outline: string;
composeExtensions?: {
/**
* 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;
commands: {
/**
* Id of the command.
*/
id: string;
/**
* Type of the command
*/
type?: "query" | "action";
/**
* Context where the command would apply
*/
context?: ("compose" | "commandBox" | "message")[];
/**
* Title of the command.
*/
title: string;
/**
* Description of the command.
*/
description?: string;
/**
* A boolean value that indicates if the command should be run once initially with no parameter.
*/
initialRun?: boolean;
/**
* A boolean value that indicates if it should fetch task module dynamically
*/
fetchTask?: boolean;
parameters?: {
/**
* Name of the parameter.
*/
name: string;
/**
* Type of the parameter
*/
inputType?: "text" | "textarea" | "number" | "date" | "time" | "toggle" | "choiceset";
/**
* Title of the parameter.
*/
title: string;
/**
* Description of the parameter.
*/
description?: string;
/**
* Initial value for the parameter
*/
value?: string;
/**
* The choice options for the parameter
*/
choices?: {
/**
* Title of the choice
*/
title: string;
/**
* Value of the choice
*/
value: string;
}[];
}[];
taskInfo?: {
/**
* Initial dialog title
*/
title?: string;
/**
* Dialog width - either a number in pixels or default layout such as 'large', 'medium', or 'small'
*/
width?: string;
/**
* Dialog height - either a number in pixels or default layout such as 'large', 'medium', or 'small'
*/
height?: string;
/**
* Initial webview URL
*/
url?: string;
};
}[];
/**
* A list of handlers that allow apps to be invoked when certain conditions are met
*/
messageHandlers?: {
/**
* Type of the message handler
*/
type: "link";
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[];
[k: string]: unknown;
};
}[];
}[];
extensions?: ElementExtensions;
/**
* A relative file path to a full color PNG icon. Size 192x192.
* Specifies the permissions the app requests from users.
*/
color: 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;
/**
* 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?: {
permissions?: ("identity" | "messageTeamMembers")[];
/**
* The url to use when configuring the tab.
* Specify the native features on a user's device that your app may request access to.
*/
configurationUrl: string;
devicePermissions?: ("geolocation" | "media" | "notifications" | "midi" | "openExternal")[];
/**
* A value indicating whether an instance of the tab's configuration can be updated by the user after creation.
* 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.
*/
canUpdateConfiguration?: boolean;
validDomains?: string[];
/**
* 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.
* Specify your AAD App ID and Graph information to help users seamlessly sign into your AAD app.
*/
scopes: ("team" | "groupchat")[];
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;
};
/**
* The set of meetingSurfaceItem scopes that a tab belong to
* Specify the app's Graph connector configuration. If this is present then webApplicationInfo.id must also be specified.
*/
meetingSurfaces?: ("sidePanel" | "stage")[];
graphConnector?: {
/**
* The url where Graph-connector notifications for the application should be sent.
*/
notificationUrl: string;
};
/**
* The set of contextItem scopes that a tab belong to
* A value indicating whether or not show loading indicator when app/tab is loading
*/
context?: (
| "personalTab"
| "channelTab"
| "privateChatTab"
| "meetingChatTab"
| "meetingDetailsTab"
| "meetingSidePanel"
| "meetingStage"
| "callingSidePanel"
)[];
showLoadingIndicator?: boolean;
/**
* The set of supportedPlatform scopes that a tab belong to
* A value indicating whether a personal app is rendered without a tab header-bar
*/
supportedPlatform?: ("desktop" | "mobile" | "teamsMeetingDevices")[];
isFullScreen?: boolean;
activities?: {
/**
* Specify the types of activites that your app can post to a users activity feed
*/
activityTypes?: {
type: string;
description: string;
templateText: string;
}[];
};
/**
* A relative file path to a tab preview image for use in SharePoint. Size 1024x768.
* A list of tenant configured properties for an app
*/
sharePointPreviewImage?: string;
configurableProperties?: ("name" | "shortDescription" | "longDescription" | "smallImageUrl" | "largeImageUrl" | "accentColor" | "developerUrl" | "privacyUrl" | "termsOfUseUrl")[];
/**
* Defines how your tab will be made available in SharePoint.
* A value indicating whether an app is blocked by default until admin allows it
*/
supportedSharePointHosts?: ("sharePointFullPage" | "sharePointWebPart")[];
}[];
/**
* 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?: {
defaultBlockUntilAdminAction?: boolean;
/**
* A unique identifier for the entity which the tab displays.
* The url to the page that provides additional app information for the admins
*/
entityId: string;
publisherDocsUrl?: string;
/**
* The display name of the tab.
* 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
*/
name?: string;
defaultInstallScope?: "personal" | "team" | "groupchat" | "meetings";
/**
* The url which points to the entity UI to be displayed in the Teams canvas.
* When a group install scope is selected, this will define the default capability when the user installs the app
*/
contentUrl?: string;
defaultGroupCapability?: {
/**
* When the install scope selected is Team, this field specifies the default capability available
*/
team?: "tab" | "bot" | "connector";
/**
* When the install scope selected is GroupChat, this field specifies the default capability available
*/
groupchat?: "tab" | "bot" | "connector";
/**
* When the install scope selected is Meetings, this field specifies the default capability available
*/
meetings?: "tab" | "bot" | "connector";
};
/**
* The Microsoft App ID specified for the bot in the Bot Framework portal (https://dev.botframework.com/bots)
* Specify meeting extension definition.
*/
contentBotId?: string;
meetingExtensionDefinition?: {
/**
* Meeting supported scenes.
*/
scenes?: {
/**
* A unique identifier for this scene. This id must be a GUID.
*/
id: string;
/**
* Scene name.
*/
name: string;
/**
* A relative file path to a scene metadata json file.
*/
file: string;
/**
* A relative file path to a scene PNG preview icon.
*/
preview: string;
/**
* Maximum audiences supported in scene.
*/
maxAudience: number;
/**
* Meeting scene's number of seats reserved for organizers or presenters.
*/
seatsReservedForOrganizersOrPresenters: number;
}[];
/**
* Meeting supported A/V filters.
*/
filters?: {
/**
* A unique identifier for this A/V filter. This id must be a GUID.
*/
id: string;
/**
* A/V filter's name.
*/
name: string;
/**
* A relative file path to a A/V filter's thumbnail.
*/
thumbnail: string;
}[];
/**
* The url which indicates A/V filters' video app content.
*/
videoAppContentUrl?: string;
};
/**
* The url to point at if a user opts to view in a browser.
* Specify and consolidates authorization related information for the App.
*/
websiteUrl?: string;
authorization?: {
/**
* Specify Permissions which App lists for accessing Resource.
*/
permissions?: {
/**
* App's organization wide classic permissions provided by user.
*/
orgWide?: {
/**
* The Permission name of app's permission node.
*/
name: string;
/**
* The Permission type of app's permission node.
*/
type: "Application" | "Delegated";
}[];
/**
* App's resource specific permissions provided by user.
*/
resourceSpecific?: {
/**
* The Permission name of app's permission node.
*/
name: string;
/**
* The Permission type of app's permission node.
*/
type: "Application" | "Delegated";
}[];
};
};
}
export interface RequirementsExtensionElement {
capabilities?: {
name: string;
minVersion?: string;
maxVersion?: string;
}[];
scopes?: "mail"[];
formFactors?: ("desktop" | "mobile")[];
}
export interface ExtensionRuntimesActionsExecuteFunction {
/**
* The url to direct a user's search queries.
* Identifier for this action. Maximum length is 64 characters. This value is passed to the code file.
*/
searchUrl?: string;
id: 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. These options are non-exclusive. Currently static tabs are only supported in the 'personal' scope.
* Run a script function without waiting for it to finish.
*/
scopes: ("team" | "personal")[];
type: "executeFunction";
}
export interface ExtensionRuntimesActionsOpenPage {
/**
* The set of contextItem scopes that a tab belong to
* Identifier for this action. Maximum length is 64 characters.
*/
context?: ("personalTab" | "channelTab")[];
id: string;
/**
* The set of supportedPlatform scopes that a tab belong to
* Open a page in a view.
*/
supportedPlatform?: ("desktop" | "mobile" | "teamsMeetingDevices")[];
}[];
/**
* The set of bots for this app. Currently only one bot per app is supported.
*/
bots?: {
type: "openPage";
/**
* The Microsoft App ID specified for the bot in the Bot Framework portal (https://dev.botframework.com/bots)
* Specifies that a task pane supports pinning, which keeps the task pane open when the user changes the selection.
*/
botId: string;
pinnable?: boolean;
}
export interface ExtensionRibbonsCustomTab {
/**
* This value describes whether or not the bot utilizes a user hint to add the bot to a specific channel.
* A unique identifier for this tab within the app. Maximum length is 64 characters.
*/
needsChannelSelector?: boolean;
id: string;
/**
* A value indicating whether or not the bot is a one-way notification only bot, as opposed to a conversational bot.
* Displayed text for the tab. Maximum length is 64 characters.
*/
isNotificationOnly?: boolean;
/**
* A value indicating whether the bot supports uploading/downloading of files.
*/
supportsFiles?: boolean;
/**
* A value indicating whether the bot supports audio calling.
*/
supportsCalling?: boolean;
/**
* A value indicating whether the bot supports video calling.
*/
supportsVideo?: 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: ("team" | "personal" | "groupchat")[];
/**
* 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?: {
/**
* Specifies the scopes for which the command list is valid
*/
scopes: ("team" | "personal" | "groupchat")[];
commands: {
label: string;
position?: {
/**
* The bot command name
* The id of the built-in tab. Maximum length is 64 characters.
*/
title: string;
builtInTabId: string;
/**
* A simple text description or an example of the command syntax and its arguments.
* Define alignment of this custom tab relative to the specified built-in tab.
*/
description: string;
}[];
}[];
}[];
/**
* The set of Office365 connectors for this app. Currently only one connector per app is supported.
*/
connectors?: {
align: "after" | "before";
};
groups: (ExtensionCommonCustomGroup | ExtensionCommonBuiltInGroup)[];
}
export interface ExtensionCommonCustomGroup {
/**
* A unique identifier for the connector which matches its ID in the Connectors Developer Portal.
* A unique identifier for this group within the app. Maximum length is 64 characters.
*/
connectorId: string;
id: string;
/**
* The url to use for configuring the connector using the inline configuration experience.
* Displayed text for the group. Maximum length is 64 characters.
*/
configurationUrl?: string;
label: string;
icons?: ExtensionCommonIcon[];
controls: (ExtensionCommonCustomControlButton | ExtensionCommonBuiltInControlButton | ExtensionCommonCustomControlMenu)[];
}
export interface ExtensionCommonIcon {
/**
* 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.
* Size in pixels of the icon. Three image sizes are required (16, 32, and 80 pixels)
*/
scopes: "team"[];
}[];
/**
* Subscription offer associated with this app.
*/
subscriptionOffer?: {
size: 16 | 20 | 24 | 32 | 40 | 48 | 64 | 80;
/**
* A unique identifier for the Commercial Marketplace Software as a Service Offer.
* Relative path to the file that contains the icon.
*/
offerId: string;
};
/**
* The set of compose extensions for this app. Currently only one compose extension per app is supported.
*/
composeExtensions?: {
file: string;
}
export interface ExtensionCommonCustomControlButton {
/**
* The Microsoft App ID specified for the bot powering the compose extension in the Bot Framework portal (https://dev.botframework.com/bots)
* A unique identifier for this control within the app. Maximum length is 64 characters.
*/
botId: string;
id: string;
type: "button";
/**
* A value indicating whether the configuration of a compose extension can be updated by the user.
* Displayed text for the control. Maximum length is 64 characters.
*/
canUpdateConfiguration?: boolean;
commands: {
/**
* Id of the command.
*/
id: string;
/**
* Type of the command
*/
type?: "query" | "action";
/**
* Context where the command would apply
*/
context?: ("compose" | "commandBox" | "message")[];
/**
* Title of the command.
*/
title: string;
/**
* Description of the command.
*/
description?: string;
/**
* A boolean value that indicates if the command should be run once initially with no parameter.
*/
initialRun?: boolean;
/**
* A boolean value that indicates if it should fetch task module dynamically
*/
fetchTask?: boolean;
parameters?: {
/**
* Name of the parameter.
*/
name: string;
/**
* Type of the parameter
*/
inputType?: "text" | "textarea" | "number" | "date" | "time" | "toggle" | "choiceset";
/**
* Title of the parameter.
*/
title: string;
/**
* Description of the parameter.
*/
description?: string;
/**
* Initial value for the parameter
*/
value?: string;
/**
* The choice options for the parameter
*/
choices?: {
/**
* Title of the choice
*/
title: string;
/**
* Value of the choice
*/
value: string;
}[];
}[];
taskInfo?: {
/**
* Initial dialog title
*/
title?: string;
/**
* Dialog width - either a number in pixels or default layout such as 'large', 'medium', or 'small'
*/
width?: string;
/**
* Dialog height - either a number in pixels or default layout such as 'large', 'medium', or 'small'
*/
height?: string;
/**
* Initial webview URL
*/
url?: string;
};
}[];
label: string;
icons: ExtensionCommonIcon[];
supertip: ExtensionCommonSuperToolTip;
/**
* A list of handlers that allow apps to be invoked when certain conditions are met
* The ID of an execution-type action that handles this key combination. Maximum length is 64 characters.
*/
messageHandlers?: {
/**
* Type of the message handler
*/
type: "link";
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[];
[k: string]: unknown;
};
}[];
}[];
extensions?: ElementExtensions;
/**
* Specifies the permissions the app requests from users.
*/
permissions?: ("identity" | "messageTeamMembers")[];
/**
* Specify the native features on a user's device that your app may request access to.
*/
devicePermissions?: ("geolocation" | "media" | "notifications" | "midi" | "openExternal")[];
/**
* 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[];
/**
* Specify your AAD App ID and Graph information to help users seamlessly sign into your AAD app.
*/
webApplicationInfo?: {
actionId: string;
overriddenByRibbonApi?: boolean & string;
/**
* AAD application id of the app. This id must be a GUID.
* Whether the control is initially enabled.
*/
id: string;
enabled?: boolean;
}
export interface ExtensionCommonSuperToolTip {
/**
* Resource url of app for acquiring auth token for SSO.
* Title text of the super tip. Maximum length is 64 characters.
*/
resource?: string;
};
/**
* Specify the app's Graph connector configuration. If this is present then webApplicationInfo.id must also be specified.
*/
graphConnector?: {
title: string;
/**
* The url where Graph-connector notifications for the application should be sent.
* Description of the super tip. Maximum length is 128 characters.
*/
notificationUrl: string;
};
/**
* A value indicating whether or not show loading indicator when app/tab is loading
*/
showLoadingIndicator?: boolean;
/**
* A value indicating whether a personal app is rendered without a tab header-bar
*/
isFullScreen?: boolean;
activities?: {
description: string;
}
export interface ExtensionCommonBuiltInControlButton {
/**
* Specify the types of activites that your app can post to a users activity feed
* Id of the existing office control. Maximum length is 64 characters.
*/
activityTypes?: {
type: string;
description: string;
templateText: string;
}[];
};
/**
* A list of tenant configured properties for an app
*/
configurableProperties?: (
| "name"
| "shortDescription"
| "longDescription"
| "smallImageUrl"
| "largeImageUrl"
| "accentColor"
| "developerUrl"
| "privacyUrl"
| "termsOfUseUrl"
)[];
/**
* A value indicating whether an app is blocked by default until admin allows it
*/
defaultBlockUntilAdminAction?: boolean;
/**
* The url to the page that provides additional app information for the admins
*/
publisherDocsUrl?: string;
/**
* 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?: "personal" | "team" | "groupchat" | "meetings";
/**
* When a group install scope is selected, this will define the default capability when the user installs the app
*/
defaultGroupCapability?: {
builtInControlId: string;
}
export interface ExtensionCommonCustomControlMenu {
/**
* When the install scope selected is Team, this field specifies the default capability available
* A unique identifier for this control within the app. Maximum length is 64 characters.
*/
team?: "tab" | "bot" | "connector";
id: string;
type: "menu";
/**
* When the install scope selected is GroupChat, this field specifies the default capability available
* Displayed text for the control. Maximum length is 64 characters.
*/
groupchat?: "tab" | "bot" | "connector";
label: string;
icons: ExtensionCommonIcon[];
supertip: ExtensionCommonSuperToolTip;
items: ExtensionCommonCustomControlMenuItem[];
overriddenByRibbonApi?: boolean & string;
}
export interface ExtensionCommonCustomControlMenuItem {
/**
* When the install scope selected is Meetings, this field specifies the default capability available
* A unique identifier for this control within the app. Maximum length is 64 characters.
*/
meetings?: "tab" | "bot" | "connector";
};
/**
* Specify meeting extension definition.
*/
meetingExtensionDefinition?: {
id: string;
type: "menuItem";
/**
* Meeting supported scenes.
* Displayed text for the control. Maximum length is 64 characters.
*/
scenes?: {
/**
* A unique identifier for this scene. This id must be a GUID.
*/
id: string;
/**
* Scene name.
*/
name: string;
/**
* A relative file path to a scene metadata json file.
*/
file: string;
/**
* A relative file path to a scene PNG preview icon.
*/
preview: string;
/**
* Maximum audiences supported in scene.
*/
maxAudience: number;
/**
* Meeting scene's number of seats reserved for organizers or presenters.
*/
seatsReservedForOrganizersOrPresenters: number;
}[];
label: string;
icons?: ExtensionCommonIcon[];
supertip: ExtensionCommonSuperToolTip;
/**
* Meeting supported A/V filters.
* The ID of an action defined in runtimes. Maximum length is 64 characters.
*/
filters?: {
/**
* A unique identifier for this A/V filter. This id must be a GUID.
*/
id: string;
/**
* A/V filter's name.
*/
name: string;
/**
* A relative file path to a A/V filter's thumbnail.
*/
thumbnail: string;
}[];
actionId: string;
/**
* The url which indicates A/V filters' video app content.
* Whether the control is initially enabled.
*/
videoAppContentUrl?: string;
};
/**
* Specify and consolidates authorization related information for the App.
*/
authorization?: {
enabled?: boolean;
overriddenByRibbonApi?: boolean & string;
}
export interface ExtensionCommonBuiltInGroup {
/**
* Specify Permissions which App lists for accessing Resource.
* Id of a built-in Group. Maximum length is 64 characters.
*/
permissions?: {
/**
* App's organization wide classic permissions provided by user.
*/
orgWide?: {
/**
* The Permission name of app's permission node.
*/
name: string;
/**
* The Permission type of app's permission node.
*/
type: "Application" | "Delegated";
}[];
/**
* App's resource specific permissions provided by user.
*/
resourceSpecific?: {
/**
* The Permission name of app's permission node.
*/
name: string;
/**
* The Permission type of app's permission node.
*/
type: "Application" | "Delegated";
}[];
};
};
builtInGroupId: string;
}
export interface RequirementsExtensionElement {
capabilities?: {
name: string;
minVersion?: string;
maxVersion?: string;
}[];
scopes?: "mail"[];
formFactors?: ("desktop" | "mobile")[];
}
export interface ExtensionRuntimesActionsExecuteFunction {
/**
* Identifier for this action. Maximum length is 64 characters. This value is passed to the code file.
*/
id: string;
/**
* Run a script function without waiting for it to finish.
*/
type: "executeFunction";
}
export interface ExtensionRuntimesActionsOpenPage {
/**
* Identifier for this action. Maximum length is 64 characters.
*/
id: string;
/**
* Open a page in a view.
*/
type: "openPage";
/**
* Specifies that a task pane supports pinning, which keeps the task pane open when the user changes the selection.
*/
pinnable?: boolean;
}
export interface ExtensionRibbonsCustomTab {
/**
* 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?: {
export interface ExtensionRibbonsBuiltInTab {
/**
* The id of the built-in tab. Maximum length is 64 characters.
* Id of the existing office Tab. Maximum length is 64 characters.
*/
builtInTabId: string;
/**
* Define alignment of this custom tab relative to the specified built-in tab.
*/
align: "after" | "before";
};
groups: (ExtensionCommonCustomGroup | ExtensionCommonBuiltInGroup)[];
groups?: ExtensionCommonCustomGroup[];
}
export interface ExtensionCommonCustomGroup {
/**
* 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;
icons?: ExtensionCommonIcon[];
controls: (
| ExtensionCommonCustomControlButton
| ExtensionCommonBuiltInControlButton
| ExtensionCommonCustomControlMenu
)[];
}
export interface ExtensionCommonIcon {
/**
* Size in pixels of the icon. Three image sizes are required (16, 32, and 80 pixels)
*/
size: 16 | 20 | 24 | 32 | 40 | 48 | 64 | 80;
/**
* Relative path to the file that contains the icon.
*/
file: string;
}
export interface ExtensionCommonCustomControlButton {
/**
* A unique identifier for this control within the app. Maximum length is 64 characters.
*/
id: string;
type: "button";
/**
* Displayed text for the control. Maximum length is 64 characters.
*/
label: string;
icons: ExtensionCommonIcon[];
supertip: ExtensionCommonSuperToolTip;
/**
* The ID of an execution-type action that handles this key combination. Maximum length is 64 characters.
*/
actionId: string;
overriddenByRibbonApi?: boolean & string;
/**
* Whether the control is initially enabled.
*/
enabled?: boolean;
}
export interface ExtensionCommonSuperToolTip {
/**
* Title text of the super tip. Maximum length is 64 characters.
*/
title: string;
/**
* Description of the super tip. Maximum length is 128 characters.
*/
description: string;
}
export interface ExtensionCommonBuiltInControlButton {
/**
* Id of the existing office control. Maximum length is 64 characters.
*/
builtInControlId: string;
}
export interface ExtensionCommonCustomControlMenu {
/**
* A unique identifier for this control within the app. Maximum length is 64 characters.
*/
id: string;
type: "menu";
/**
* Displayed text for the control. Maximum length is 64 characters.
*/
label: string;
icons: ExtensionCommonIcon[];
supertip: ExtensionCommonSuperToolTip;
items: ExtensionCommonCustomControlMenuItem[];
overriddenByRibbonApi?: boolean & string;
}
export interface ExtensionCommonCustomControlMenuItem {
/**
* A unique identifier for this control within the app. Maximum length is 64 characters.
*/
id: string;
type: "menuItem";
/**
* Displayed text for the control. Maximum length is 64 characters.
*/
label: string;
icons?: ExtensionCommonIcon[];
supertip: ExtensionCommonSuperToolTip;
/**
* The ID of an action defined in runtimes. Maximum length is 64 characters.
*/
actionId: string;
/**
* Whether the control is initially enabled.
*/
enabled?: boolean;
overriddenByRibbonApi?: boolean & string;
}
export interface ExtensionCommonBuiltInGroup {
/**
* Id of a built-in Group. Maximum length is 64 characters.
*/
builtInGroupId: string;
}
export interface ExtensionRibbonsBuiltInTab {
/**
* Id of the existing office Tab. Maximum length is 64 characters.
*/
builtInTabId: string;
groups?: ExtensionCommonCustomGroup[];
}
export interface ExtensionAutoRunEventsOptions {
sendMode: "promptUser" | "softBlock" | "block";
sendMode: "promptUser" | "softBlock" | "block";
}
//# sourceMappingURL=devPreviewManifest.d.ts.map
//# sourceMappingURL=devPreviewManifest.d.ts.map

@@ -10,45 +10,39 @@ import { TeamsAppManifest } from "./manifest";

export declare class ManifestUtil {
/**
* Loads the manifest from the given path without validating its schema.
*
* @param path - The path to the manifest file.
* @throws Will propagate any error thrown by the fs-extra#readJson.
*
* @returns The Manifest Object.
*/
static loadFromPath<T extends Manifest = TeamsAppManifest>(path: string): Promise<T>;
/**
* Writes the manifest object to the given path.
*
* @param path - Where to write
* @param manifest - Manifest object to be saved
* @throws Will propagate any error thrown by the fs-extra#writeJson.
*
*/
static writeToPath<T extends Manifest = TeamsAppManifest>(
path: string,
manifest: T
): Promise<void>;
/**
* Validate manifest against json schema.
*
* @param manifest - Manifest object to be validated
* @param schema - teams-app-manifest schema
* @returns An empty array if it passes validation, or an array of error string otherwise.
*/
static validateManifestAgainstSchema<T extends Manifest = TeamsAppManifest>(
manifest: T,
schema: JSONSchemaType<T>
): Promise<string[]>;
/**
* Validate manifest against {@link TeamsAppManifest#$schema}.
*
* @param manifest - Manifest object to be validated
* @throws Will throw if {@link TeamsAppManifest#$schema} is undefined, not valid
* or there is any network failure when getting the schema.
*
* @returns An empty array if schema validation passes, or an array of error string otherwise.
*/
static validateManifest<T extends Manifest = TeamsAppManifest>(manifest: T): Promise<string[]>;
/**
* Loads the manifest from the given path without validating its schema.
*
* @param path - The path to the manifest file.
* @throws Will propagate any error thrown by the fs-extra#readJson.
*
* @returns The Manifest Object.
*/
static loadFromPath<T extends Manifest = TeamsAppManifest>(path: string): Promise<T>;
/**
* Writes the manifest object to the given path.
*
* @param path - Where to write
* @param manifest - Manifest object to be saved
* @throws Will propagate any error thrown by the fs-extra#writeJson.
*
*/
static writeToPath<T extends Manifest = TeamsAppManifest>(path: string, manifest: T): Promise<void>;
/**
* Validate manifest against json schema.
*
* @param manifest - Manifest object to be validated
* @param schema - teams-app-manifest schema
* @returns An empty array if it passes validation, or an array of error string otherwise.
*/
static validateManifestAgainstSchema<T extends Manifest = TeamsAppManifest>(manifest: T, schema: JSONSchemaType<T>): Promise<string[]>;
/**
* Validate manifest against {@link TeamsAppManifest#$schema}.
*
* @param manifest - Manifest object to be validated
* @throws Will throw if {@link TeamsAppManifest#$schema} is undefined, not valid
* or there is any network failure when getting the schema.
*
* @returns An empty array if schema validation passes, or an array of error string otherwise.
*/
static validateManifest<T extends Manifest = TeamsAppManifest>(manifest: T): Promise<string[]>;
}
//# sourceMappingURL=index.d.ts.map
//# sourceMappingURL=index.d.ts.map
export interface IDeveloper {
/**
* The display name for the developer.
*/
name: string;
/**
* 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 url to the page that provides support information for the app.
*/
websiteUrl: 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 display name for the developer.
*/
name: string;
/**
* 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 url to the page that provides support information for the app.
*/
websiteUrl: 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;
}
export interface IName {
short: string;
/**
* The full name of the app, used if the full app name exceeds 30 characters.
*/
full?: string;
short: string;
/**
* The full name of the app, used if the full app name exceeds 30 characters.
*/
full?: string;
}
export interface IIcons {
color: string;
outline: string;
color: string;
outline: string;
}
export interface IConfigurableTab {
objectId?: string;
/**
* The url to use when configuring the tab.
*/
configurationUrl: string;
/**
* A value indicating whether an instance of the tab's configuration can be updated by the user after creation.
*/
canUpdateConfiguration?: boolean;
/**
* 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: ("team" | "groupchat")[];
/**
* The set of contextItem scopes that a tab belong to
*/
context?: (
| "personalTab"
| "channelTab"
| "privateChatTab"
| "meetingChatTab"
| "meetingDetailsTab"
| "meetingSidePanel"
| "meetingStage"
| "callingSidePanel"
)[];
/**
* The set of meetingSurfaceItem scopes that a tab belong to
*/
meetingSurfaces?: ("sidePanel" | "stage")[];
/**
* 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?: ("sharePointFullPage" | "sharePointWebPart")[];
objectId?: string;
/**
* The url to use when configuring the tab.
*/
configurationUrl: string;
/**
* A value indicating whether an instance of the tab's configuration can be updated by the user after creation.
*/
canUpdateConfiguration?: boolean;
/**
* 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: ("team" | "groupchat")[];
/**
* The set of contextItem scopes that a tab belong to
*/
context?: ("personalTab" | "channelTab" | "privateChatTab" | "meetingChatTab" | "meetingDetailsTab" | "meetingSidePanel" | "meetingStage" | "callingSidePanel")[];
/**
* The set of meetingSurfaceItem scopes that a tab belong to
*/
meetingSurfaces?: ("sidePanel" | "stage")[];
/**
* 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?: ("sharePointFullPage" | "sharePointWebPart")[];
}
export interface IStaticTab {
objectId?: string;
/**
* A unique identifier for the entity which the tab displays.
*/
entityId: string;
/**
* The display name of the tab.
*/
name?: string;
/**
* The url which points to the entity UI to be displayed in the Teams canvas.
*/
contentUrl?: string;
/**
* The url to point at if a user opts to view in a browser.
*/
websiteUrl?: string;
/**
* The url to direct a user's search queries.
*/
searchUrl?: 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. These options are non-exclusive. Currently static tabs are only supported in the 'personal' scope.
*/
scopes: ("team" | "personal")[];
/**
* The set of contextItem scopes that a tab belong to
*/
context?: ("personalTab" | "channelTab")[];
objectId?: string;
/**
* A unique identifier for the entity which the tab displays.
*/
entityId: string;
/**
* The display name of the tab.
*/
name?: string;
/**
* The url which points to the entity UI to be displayed in the Teams canvas.
*/
contentUrl?: string;
/**
* The url to point at if a user opts to view in a browser.
*/
websiteUrl?: string;
/**
* The url to direct a user's search queries.
*/
searchUrl?: 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. These options are non-exclusive. Currently static tabs are only supported in the 'personal' scope.
*/
scopes: ("team" | "personal")[];
/**
* The set of contextItem scopes that a tab belong to
*/
context?: ("personalTab" | "channelTab")[];
}
export interface ICommand {
title: string;
description: string;
title: string;
description: string;
}
export interface ICommandList {
scopes: ("team" | "personal" | "groupchat")[];
commands: ICommand[];
scopes: ("team" | "personal" | "groupchat")[];
commands: ICommand[];
}
export interface IBot {
/**
* The Microsoft App ID specified for the bot in the Bot Framework portal (https://dev.botframework.com/bots)
*/
botId: string;
/**
* This value describes whether or not the bot utilizes a user hint to add the bot to a specific channel.
*/
needsChannelSelector?: boolean;
/**
* A value indicating whether or not the bot is a one-way notification only bot, as opposed to a conversational bot.
*/
isNotificationOnly?: boolean;
/**
* A value indicating whether the bot supports uploading/downloading of files.
*/
supportsFiles?: boolean;
/**
* A value indicating whether the bot supports audio calling.
*/
supportsCalling?: boolean;
/**
* A value indicating whether the bot supports video calling.
*/
supportsVideo?: 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: ("team" | "personal" | "groupchat")[];
/**
* 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?: ICommandList[];
/**
* The Microsoft App ID specified for the bot in the Bot Framework portal (https://dev.botframework.com/bots)
*/
botId: string;
/**
* This value describes whether or not the bot utilizes a user hint to add the bot to a specific channel.
*/
needsChannelSelector?: boolean;
/**
* A value indicating whether or not the bot is a one-way notification only bot, as opposed to a conversational bot.
*/
isNotificationOnly?: boolean;
/**
* A value indicating whether the bot supports uploading/downloading of files.
*/
supportsFiles?: boolean;
/**
* A value indicating whether the bot supports audio calling.
*/
supportsCalling?: boolean;
/**
* A value indicating whether the bot supports video calling.
*/
supportsVideo?: 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: ("team" | "personal" | "groupchat")[];
/**
* 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?: ICommandList[];
}
export interface IConnector {
/**
* A unique identifier for the connector which matches its ID in the Connectors Developer Portal.
*/
connectorId: string;
/**
* The url to use for configuring the connector using the inline configuration experience.
*/
configurationUrl?: 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: "team"[];
/**
* A unique identifier for the connector which matches its ID in the Connectors Developer Portal.
*/
connectorId: string;
/**
* The url to use for configuring the connector using the inline configuration experience.
*/
configurationUrl?: 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: "team"[];
}
export interface IWebApplicationInfo {
/**
* 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;
applicationPermissions?: string[];
/**
* 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;
applicationPermissions?: string[];
}
export interface IComposeExtension {
objectId?: string;
/**
* 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;
commands: IMessagingExtensionCommand[];
/**
* A list of handlers that allow apps to be invoked when certain conditions are met
*/
messageHandlers?: IComposeExtensionMessageHandler[];
objectId?: string;
/**
* 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;
commands: IMessagingExtensionCommand[];
/**
* A list of handlers that allow apps to be invoked when certain conditions are met
*/
messageHandlers?: IComposeExtensionMessageHandler[];
}
export interface IComposeExtensionMessageHandler {
/**
* Type of the message handler
*/
type: "link";
value: {
/**
* A list of domains that the link message handler can register for, and when they are matched the app will be invoked
* Type of the message handler
*/
domains?: string[];
[k: string]: unknown;
};
type: "link";
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[];
[k: string]: unknown;
};
}
export interface IMessagingExtensionCommand {
/**
* Id of the command.
*/
id: string;
/**
* Type of the command
*/
type?: "query" | "action";
/**
* Context where the command would apply
*/
context?: ("compose" | "commandBox" | "message")[];
/**
* Title of the command.
*/
title: string;
/**
* Description of the command.
*/
description?: string;
/**
* A boolean value that indicates if the command should be run once initially with no parameter.
*/
initialRun?: boolean;
/**
* A boolean value that indicates if it should fetch task module dynamically
*/
fetchTask?: boolean;
parameters?: IParameter[];
taskInfo?: ITaskInfo;
/**
* Id of the command.
*/
id: string;
/**
* Type of the command
*/
type?: "query" | "action";
/**
* Context where the command would apply
*/
context?: ("compose" | "commandBox" | "message")[];
/**
* Title of the command.
*/
title: string;
/**
* Description of the command.
*/
description?: string;
/**
* A boolean value that indicates if the command should be run once initially with no parameter.
*/
initialRun?: boolean;
/**
* A boolean value that indicates if it should fetch task module dynamically
*/
fetchTask?: boolean;
parameters?: IParameter[];
taskInfo?: ITaskInfo;
}
export interface IParameter {
/**
* Name of the parameter.
*/
name: string;
/**
* Type of the parameter
*/
inputType?: "text" | "textarea" | "number" | "date" | "time" | "toggle" | "choiceset";
/**
* Title of the parameter.
*/
title: string;
/**
* Description of the parameter.
*/
description?: string;
/**
* Initial value for the parameter
*/
value?: string;
/**
* The choice options for the parameter
*/
choices?: {
/**
* Title of the choice
* Name of the parameter.
*/
name: string;
/**
* Type of the parameter
*/
inputType?: "text" | "textarea" | "number" | "date" | "time" | "toggle" | "choiceset";
/**
* Title of the parameter.
*/
title: string;
/**
* Value of the choice
* Description of the parameter.
*/
value: string;
}[];
description?: string;
/**
* Initial value for the parameter
*/
value?: string;
/**
* The choice options for the parameter
*/
choices?: {
/**
* Title of the choice
*/
title: string;
/**
* Value of the choice
*/
value: string;
}[];
}
export interface ITaskInfo {
/**
* Initial dialog title
*/
title?: string;
/**
* Dialog width - either a number in pixels or default layout such as 'large', 'medium', or 'small'
*/
width?: string;
/**
* Dialog height - either a number in pixels or default layout such as 'large', 'medium', or 'small'
*/
height?: string;
/**
* Initial webview URL
*/
url?: string;
/**
* Initial dialog title
*/
title?: string;
/**
* Dialog width - either a number in pixels or default layout such as 'large', 'medium', or 'small'
*/
width?: string;
/**
* Dialog height - either a number in pixels or default layout such as 'large', 'medium', or 'small'
*/
height?: string;
/**
* Initial webview URL
*/
url?: string;
}
export interface IActivityType {
type: string;
description: string;
templateText: string;
type: string;
description: string;
templateText: string;
}
export interface ILocalizationInfo {
/**
* The language tag of the strings in this top level manifest file.
*/
defaultLanguageTag: string;
additionalLanguages?: {
languageTag: string;
/**
* A relative file path to a the .json file containing the translated strings.
* The language tag of the strings in this top level manifest file.
*/
file: string;
}[];
defaultLanguageTag: string;
additionalLanguages?: {
languageTag: string;
/**
* A relative file path to a the .json file containing the translated strings.
*/
file: string;
}[];
}
export interface IAppPermission {
name: string;
type: "Application" | "Delegated";
name: string;
type: "Application" | "Delegated";
}
export interface ITogetherModeScene {
id: string;
name: string;
file: string;
preview: string;
maxAudience: number;
seatsReservedForOrganizersOrPresenters: number;
id: string;
name: string;
file: string;
preview: string;
maxAudience: number;
seatsReservedForOrganizersOrPresenters: number;
}

@@ -321,154 +312,144 @@ export declare type AppManifest = Record<string, any>;

export declare class TeamsAppManifest implements AppManifest {
$schema?: string;
/**
* The version of the schema this manifest is using.
*/
manifestVersion: 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;
/**
* A unique identifier for this app. This id must be a GUID.
*/
id: string;
/**
* A unique identifier for this app in reverse domain notation. E.g: com.example.myapp
*/
packageName?: string;
localizationInfo?: ILocalizationInfo;
developer: IDeveloper;
name: IName;
description: IName;
icons: IIcons;
/**
* 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;
/**
* 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?: IConfigurableTab[];
/**
* 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?: IStaticTab[];
/**
* The set of bots for this app. Currently only one bot per app is supported.
*/
bots?: IBot[];
/**
* The set of Office365 connectors for this app. Currently only one connector per app is supported.
*/
connectors?: IConnector[];
/**
* Subscription offer associated with this app.
*/
subscriptionOffer?: {
$schema?: string;
/**
* A unique identifier for the Commercial Marketplace Software as a Service Offer.
* The version of the schema this manifest is using.
*/
offerId: string;
};
/**
* Specify the app's Graph connector configuration. If this is present then webApplicationInfo.id must also be specified.
*/
graphConnector?: {
notificationUrl: string;
};
/**
* The set of compose extensions for this app. Currently only one compose extension per app is supported.
*/
composeExtensions?: IComposeExtension[];
/**
* Specifies the permissions the app requests from users.
*/
permissions?: ("identity" | "messageTeamMembers")[];
/**
* Specify the native features on a user's device that your app may request access to.
*/
devicePermissions?: ("geolocation" | "media" | "notifications" | "midi" | "openExternal")[];
/**
* 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[];
/**
* Specify your AAD App ID and Graph information to help users seamlessly sign into your AAD app.
*/
webApplicationInfo?: IWebApplicationInfo;
/**
* A value indicating whether or not show loading indicator when app/tab is loading
*/
showLoadingIndicator?: boolean;
/**
* A value indicating whether a personal app is rendered without a tab header-bar
*/
isFullScreen?: boolean;
activities?: {
manifestVersion: string;
/**
* Specify the types of activites that your app can post to a users activity feed
* 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).
*/
activityTypes?: IActivityType[];
};
/**
* A list of tenant configured properties for an app
*/
configurableProperties?: (
| "name"
| "shortDescription"
| "longDescription"
| "smallImageUrl"
| "largeImageUrl"
| "accentColor"
| "developerUrl"
| "privacyUrl"
| "termsOfUseUrl"
)[];
/**
* A value indicating whether an app is blocked by default until admin allows it
*/
defaultBlockUntilAdminAction?: boolean;
/**
* 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?: "personal" | "team" | "groupchat" | "meetings";
/**
* When a group install scope is selected, this will define the default capability when the user installs the app
*/
defaultGroupCapability?: {
team: "tab" | "bot" | "connector";
groupchat: "tab" | "bot" | "connector";
meetings: "tab" | "bot" | "connector";
};
/**
* Specify meeting extension definition
*/
meetingExtensionDefinition?: {
version: string;
/**
* Meeting supported scenes.
* A unique identifier for this app. This id must be a GUID.
*/
scenes?: ITogetherModeScene[];
id: string;
/**
* Meeting supported A/V filters.
* A unique identifier for this app in reverse domain notation. E.g: com.example.myapp
*/
filters?: {
id: string;
name: string;
thumbnail: string;
}[];
videoAppContentUrl?: string;
};
/**
* The url to the page that provides additional app information for the admins
*/
publisherDocsUrl?: string;
/**
* Specify and consolidates authorization related information for the App.
*/
authorization?: {
permissions?: {
resourceSpecific?: IAppPermission[];
packageName?: string;
localizationInfo?: ILocalizationInfo;
developer: IDeveloper;
name: IName;
description: IName;
icons: IIcons;
/**
* 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;
/**
* 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?: IConfigurableTab[];
/**
* 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?: IStaticTab[];
/**
* The set of bots for this app. Currently only one bot per app is supported.
*/
bots?: IBot[];
/**
* The set of Office365 connectors for this app. Currently only one connector per app is supported.
*/
connectors?: IConnector[];
/**
* Subscription offer associated with this app.
*/
subscriptionOffer?: {
/**
* A unique identifier for the Commercial Marketplace Software as a Service Offer.
*/
offerId: string;
};
};
/**
* Specify the app's Graph connector configuration. If this is present then webApplicationInfo.id must also be specified.
*/
graphConnector?: {
notificationUrl: string;
};
/**
* The set of compose extensions for this app. Currently only one compose extension per app is supported.
*/
composeExtensions?: IComposeExtension[];
/**
* Specifies the permissions the app requests from users.
*/
permissions?: ("identity" | "messageTeamMembers")[];
/**
* Specify the native features on a user's device that your app may request access to.
*/
devicePermissions?: ("geolocation" | "media" | "notifications" | "midi" | "openExternal")[];
/**
* 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[];
/**
* Specify your AAD App ID and Graph information to help users seamlessly sign into your AAD app.
*/
webApplicationInfo?: IWebApplicationInfo;
/**
* A value indicating whether or not show loading indicator when app/tab is loading
*/
showLoadingIndicator?: boolean;
/**
* A value indicating whether a personal app is rendered without a tab header-bar
*/
isFullScreen?: boolean;
activities?: {
/**
* Specify the types of activites that your app can post to a users activity feed
*/
activityTypes?: IActivityType[];
};
/**
* A list of tenant configured properties for an app
*/
configurableProperties?: ("name" | "shortDescription" | "longDescription" | "smallImageUrl" | "largeImageUrl" | "accentColor" | "developerUrl" | "privacyUrl" | "termsOfUseUrl")[];
/**
* A value indicating whether an app is blocked by default until admin allows it
*/
defaultBlockUntilAdminAction?: boolean;
/**
* 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?: "personal" | "team" | "groupchat" | "meetings";
/**
* When a group install scope is selected, this will define the default capability when the user installs the app
*/
defaultGroupCapability?: {
team: "tab" | "bot" | "connector";
groupchat: "tab" | "bot" | "connector";
meetings: "tab" | "bot" | "connector";
};
/**
* Specify meeting extension definition
*/
meetingExtensionDefinition?: {
/**
* Meeting supported scenes.
*/
scenes?: ITogetherModeScene[];
/**
* Meeting supported A/V filters.
*/
filters?: {
id: string;
name: string;
thumbnail: string;
}[];
videoAppContentUrl?: string;
};
/**
* The url to the page that provides additional app information for the admins
*/
publisherDocsUrl?: string;
/**
* Specify and consolidates authorization related information for the App.
*/
authorization?: {
permissions?: {
resourceSpecific?: IAppPermission[];
};
};
}
//# sourceMappingURL=manifest.d.ts.map
//# sourceMappingURL=manifest.d.ts.map
{
"name": "@microsoft/teams-manifest",
"version": "0.0.6-alpha.f90b22ba0.0",
"version": "0.0.6-rc.0",
"main": "build/index.js",

@@ -43,5 +43,4 @@ "types": "build/index.d.ts",

"build": "rimraf build && npx tsc -p ./",
"postbuild": "eslint \"**/*.ts\" --fix",
"test": "npm run test:unit",
"test:unit": "npx nyc mocha --no-timeouts --require ts-node/register test/**/*.test.ts",
"test:unit": "npx nyc --reporter=lcov mocha --no-timeouts --require ts-node/register test/**/*.test.ts && npx codecov",
"lint": "eslint \"**/*.ts\"",

@@ -63,3 +62,3 @@ "precommit": "lint-staged",

},
"gitHead": "0f6fdee82f563fbce53a042e0685237dcc4b15be"
"gitHead": "257b8d14b9e562dbe5ed2836e6779add7c7c468a"
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc