@microsoft/m365-spec-parser 0.2.2-rc.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm2017.mjs","sources":["../src/interfaces.ts","../src/constants.ts","../src/specParserError.ts","../src/utils.ts","../src/validators/validator.ts","../src/validators/copilotValidator.ts","../src/validators/smeValidator.ts","../src/validators/teamsAIValidator.ts","../src/validators/validatorFactory.ts","../src/specOptimizer.ts","../src/specFilter.ts","../src/adaptiveCardGenerator.ts","../src/adaptiveCardWrapper.ts","../src/manifestUpdater.ts","../src/specParser.ts"],"sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { IParameter } from \"@microsoft/teams-manifest\";\nimport { OpenAPIV3 } from \"openapi-types\";\n\n/**\n * An interface that represents the result of validating an OpenAPI specification file.\n */\nexport interface ValidateResult {\n /**\n * The validation status of the OpenAPI specification file.\n */\n status: ValidationStatus;\n\n /**\n * An array of warning results generated during validation.\n */\n warnings: WarningResult[];\n\n /**\n * An array of error results generated during validation.\n */\n errors: ErrorResult[];\n\n specHash?: string;\n}\n\nexport interface SpecValidationResult {\n /**\n * An array of warning results generated during validation.\n */\n warnings: WarningResult[];\n\n /**\n * An array of error results generated during validation.\n */\n errors: ErrorResult[];\n}\n\n/**\n * An interface that represents a warning result generated during validation.\n */\nexport interface WarningResult {\n /**\n * The type of warning.\n */\n type: WarningType;\n\n /**\n * The content of the warning.\n */\n content: string;\n\n /**\n * data of the warning.\n */\n data?: any;\n}\n\n/**\n * An interface that represents an error result generated during validation.\n */\nexport interface ErrorResult {\n /**\n * The type of error.\n */\n type: ErrorType;\n\n /**\n * The content of the error.\n */\n content: string;\n\n /**\n * data of the error.\n */\n data?: any;\n}\n\nexport interface GenerateResult {\n allSuccess: boolean;\n warnings: WarningResult[];\n}\n\n/**\n * An enum that represents the types of errors that can occur during validation.\n */\nexport enum ErrorType {\n SpecNotValid = \"spec-not-valid\",\n RemoteRefNotSupported = \"remote-ref-not-supported\",\n NoServerInformation = \"no-server-information\",\n UrlProtocolNotSupported = \"url-protocol-not-supported\",\n RelativeServerUrlNotSupported = \"relative-server-url-not-supported\",\n NoSupportedApi = \"no-supported-api\",\n NoExtraAPICanBeAdded = \"no-extra-api-can-be-added\",\n AddedAPINotInOriginalSpec = \"added-api-not-in-original-spec\",\n ResolveServerUrlFailed = \"resolve-server-url-failed\",\n SwaggerNotSupported = \"swagger-not-supported\",\n MultipleAuthNotSupported = \"multiple-auth-not-supported\",\n SpecVersionNotSupported = \"spec-version-not-supported\",\n CircularReferenceNotSupported = \"circular-reference-not-supported\",\n\n ListFailed = \"list-failed\",\n listSupportedAPIInfoFailed = \"list-supported-api-info-failed\",\n FilterSpecFailed = \"filter-spec-failed\",\n UpdateManifestFailed = \"update-manifest-failed\",\n GenerateAdaptiveCardFailed = \"generate-adaptive-card-failed\",\n GenerateFailed = \"generate-failed\",\n ValidateFailed = \"validate-failed\",\n GetSpecFailed = \"get-spec-failed\",\n\n AuthTypeIsNotSupported = \"auth-type-is-not-supported\",\n MissingOperationId = \"missing-operation-id\",\n PostBodyContainMultipleMediaTypes = \"post-body-contain-multiple-media-types\",\n ResponseContainMultipleMediaTypes = \"response-contain-multiple-media-types\",\n ResponseJsonIsEmpty = \"response-json-is-empty\",\n PostBodySchemaIsNotJson = \"post-body-schema-is-not-json\",\n PostBodyContainsRequiredUnsupportedSchema = \"post-body-contains-required-unsupported-schema\",\n ParamsContainRequiredUnsupportedSchema = \"params-contain-required-unsupported-schema\",\n ParamsContainsNestedObject = \"params-contains-nested-object\",\n RequestBodyContainsNestedObject = \"request-body-contains-nested-object\",\n ExceededRequiredParamsLimit = \"exceeded-required-params-limit\",\n NoParameter = \"no-parameter\",\n NoAPIInfo = \"no-api-info\",\n MethodNotAllowed = \"method-not-allowed\",\n UrlPathNotExist = \"url-path-not-exist\",\n\n Cancelled = \"cancelled\",\n Unknown = \"unknown\",\n}\n\n/**\n * An enum that represents the types of warnings that can occur during validation.\n */\nexport enum WarningType {\n OperationIdMissing = \"operationid-missing\",\n GenerateCardFailed = \"generate-card-failed\",\n OperationOnlyContainsOptionalParam = \"operation-only-contains-optional-param\",\n ConvertSwaggerToOpenAPI = \"convert-swagger-to-openapi\",\n FuncDescriptionTooLong = \"function-description-too-long\",\n Unknown = \"unknown\",\n}\n\n/**\n * An enum that represents the validation status of an OpenAPI specification file.\n */\nexport enum ValidationStatus {\n Valid,\n Warning, // If there are any warnings, the file is still valid\n Error, // If there are any errors, the file is not valid\n}\n\nexport interface TextBlockElement {\n type: string;\n text: string;\n wrap: boolean;\n}\n\nexport interface ImageElement {\n type: string;\n url: string;\n $when: string;\n}\n\nexport type AdaptiveCardBody = Array<TextBlockElement | ImageElement | ArrayElement>;\n\nexport interface ArrayElement {\n type: string;\n $data: string;\n items: AdaptiveCardBody;\n}\n\nexport interface AdaptiveCard {\n type: string;\n $schema: string;\n version: string;\n body: AdaptiveCardBody;\n}\n\nexport interface PreviewCardTemplate {\n title: string;\n subtitle?: string;\n image?: {\n url: string;\n alt?: string;\n $when?: string;\n };\n}\n\nexport interface WrappedAdaptiveCard {\n version: string;\n $schema?: string;\n jsonPath?: string;\n responseLayout: string;\n responseCardTemplate: AdaptiveCard;\n previewCardTemplate: PreviewCardTemplate;\n}\n\nexport interface CheckParamResult {\n requiredNum: number;\n optionalNum: number;\n isValid: boolean;\n reason: ErrorType[];\n}\n\nexport interface ParseOptions {\n /**\n * If true, the parser will not throw an error if an ID is missing the spec file.\n */\n allowMissingId?: boolean;\n\n /**\n * If true, the parser will allow parsing of Swagger specifications.\n */\n allowSwagger?: boolean;\n\n /**\n * If true, the parser will allow API Key authentication in the spec file.\n */\n allowAPIKeyAuth?: boolean;\n\n /**\n * If true, the parser will allow Bearer Token authentication in the spec file.\n */\n allowBearerTokenAuth?: boolean;\n\n /**\n * If true, the parser will allow multiple parameters in the spec file. Teams AI project would ignore this parameters and always true\n */\n allowMultipleParameters?: boolean;\n\n /**\n * If true, the parser will allow OAuth2 authentication in the spec file. Currently only support OAuth2 with auth code flow.\n */\n allowOauth2?: boolean;\n\n /**\n * An array of HTTP methods that the parser will allow in the spec file.\n */\n allowMethods?: string[];\n\n /**\n * If true, the parser will allow conversation starters in plugin file. Only take effect in Copilot project\n */\n allowConversationStarters?: boolean;\n\n /**\n * If true, the parser will allow response semantics in plugin file. Only take effect in Copilot project\n */\n allowResponseSemantics?: boolean;\n\n /**\n * If true, the paser will allow confirmation in plugin file. Only take effect in Copilot project\n */\n allowConfirmation?: boolean;\n\n /**\n * The type of project that the parser is being used for.\n * Project can be SME/Copilot/TeamsAi\n */\n projectType?: ProjectType;\n\n /**\n * If true, we will generate files of plugin for GPT (Declarative Extensions in a Copilot Extension). Otherwise, we will generate files of plugin for Copilot.\n */\n isGptPlugin?: boolean;\n}\n\nexport enum ProjectType {\n Copilot,\n SME,\n TeamsAi,\n}\n\nexport interface APIInfo {\n method: string;\n path: string;\n title: string;\n id: string;\n parameters: IParameter[];\n description: string;\n warning?: WarningResult;\n}\n\nexport interface ListAPIInfo {\n api: string;\n server: string;\n operationId: string;\n isValid: boolean;\n reason: ErrorType[];\n auth?: AuthInfo;\n}\n\nexport interface APIMap {\n [key: string]: {\n operation: OpenAPIV3.OperationObject;\n isValid: boolean;\n reason: ErrorType[];\n };\n}\n\nexport interface APIValidationResult {\n isValid: boolean;\n reason: ErrorType[];\n}\n\nexport interface ListAPIResult {\n allAPICount: number;\n validAPICount: number;\n APIs: ListAPIInfo[];\n}\n\nexport type AuthType = OpenAPIV3.SecuritySchemeObject | { type: \"multipleAuth\" };\n\nexport interface AuthInfo {\n authScheme: AuthType;\n name: string;\n}\n\nexport interface InvalidAPIInfo {\n api: string;\n reason: ErrorType[];\n}\n\nexport interface InferredProperties {\n title?: string;\n subtitle?: string;\n imageUrl?: string;\n}\n\nexport interface ExistingPluginManifestInfo {\n manifestPath: string;\n specPath: string;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nexport class ConstantString {\n static readonly CancelledMessage = \"Operation is cancelled.\";\n static readonly NoServerInformation =\n \"No server information is found in the OpenAPI description document.\";\n static readonly RemoteRefNotSupported = \"Remote reference is not supported: %s.\";\n static readonly MissingOperationId = \"Missing operationIds: %s.\";\n static readonly NoSupportedApi =\n \"No supported API is found in the OpenAPI description document: only GET and POST methods are supported, additionally, there can be at most one required parameter, and no auth is allowed.\";\n\n static readonly AdditionalPropertiesNotSupported =\n \"'additionalProperties' is not supported, and will be ignored.\";\n static readonly SchemaNotSupported =\n \"'oneOf', 'allOf', 'anyOf', and 'not' schema are not supported: %s.\";\n static readonly UnknownSchema = \"Unknown schema: %s.\";\n\n static readonly UrlProtocolNotSupported =\n \"Server url is not correct: protocol %s is not supported, you should use https protocol instead.\";\n static readonly RelativeServerUrlNotSupported =\n \"Server url is not correct: relative server url is not supported.\";\n static readonly ResolveServerUrlFailed =\n \"Unable to resolve the server URL: please make sure that the environment variable %s is defined.\";\n static readonly OperationOnlyContainsOptionalParam =\n \"Operation %s contains multiple optional parameters. The first optional parameter is used for this command.\";\n static readonly ConvertSwaggerToOpenAPI =\n \"The Swagger 2.0 file has been converted to OpenAPI 3.0.\";\n\n static readonly SwaggerNotSupported =\n \"Swagger 2.0 is not supported. Please convert to OpenAPI 3.0 manually before proceeding.\";\n\n static readonly SpecVersionNotSupported =\n \"Unsupported OpenAPI version %s. Please use version 3.0.x.\";\n\n static readonly MultipleAuthNotSupported =\n \"Multiple authentication methods are unsupported. Ensure all selected APIs use identical authentication.\";\n\n static readonly UnsupportedSchema = \"Unsupported schema in %s %s: %s\";\n static readonly FuncDescriptionTooLong =\n \"The description of the function '%s' is too long. The current length is %s characters, while the maximum allowed length is %s characters.\";\n\n static readonly WrappedCardVersion = \"devPreview\";\n static readonly WrappedCardSchema =\n \"https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.ResponseRenderingTemplate.schema.json\";\n static readonly WrappedCardResponseLayout = \"list\";\n\n static readonly GetMethod = \"get\";\n static readonly PostMethod = \"post\";\n static readonly AdaptiveCardVersion = \"1.5\";\n static readonly AdaptiveCardSchema = \"http://adaptivecards.io/schemas/adaptive-card.json\";\n static readonly AdaptiveCardType = \"AdaptiveCard\";\n static readonly TextBlockType = \"TextBlock\";\n static readonly ImageType = \"Image\";\n static readonly ContainerType = \"Container\";\n static readonly RegistrationIdPostfix: { [key: string]: string } = {\n apiKey: \"REGISTRATION_ID\",\n oauth2: \"CONFIGURATION_ID\",\n http: \"REGISTRATION_ID\",\n openIdConnect: \"REGISTRATION_ID\",\n };\n static readonly ResponseCodeFor20X = [\n \"200\",\n \"201\",\n \"202\",\n \"203\",\n \"204\",\n \"205\",\n \"206\",\n \"207\",\n \"208\",\n \"226\",\n \"default\",\n ];\n static readonly AllOperationMethods = [\n \"get\",\n \"post\",\n \"put\",\n \"delete\",\n \"patch\",\n \"head\",\n \"options\",\n \"trace\",\n ];\n\n // TODO: update after investigating the usage of these constants.\n static readonly WellknownResultNames = [\n \"result\",\n \"data\",\n \"items\",\n \"root\",\n \"matches\",\n \"queries\",\n \"list\",\n \"output\",\n ];\n static readonly WellknownTitleName = [\"title\", \"name\", \"summary\", \"caption\", \"subject\", \"label\"];\n static readonly WellknownSubtitleName = [\n \"subtitle\",\n \"id\",\n \"uid\",\n \"description\",\n \"desc\",\n \"detail\",\n ];\n static readonly WellknownImageName = [\n \"image\",\n \"icon\",\n \"avatar\",\n \"picture\",\n \"photo\",\n \"logo\",\n \"pic\",\n \"thumbnail\",\n \"img\",\n ];\n\n static readonly ShortDescriptionMaxLens = 80;\n static readonly FullDescriptionMaxLens = 4000;\n static readonly CommandDescriptionMaxLens = 128;\n static readonly ParameterDescriptionMaxLens = 128;\n static readonly ConversationStarterMaxLens = 50;\n static readonly CommandTitleMaxLens = 32;\n static readonly ParameterTitleMaxLens = 32;\n static readonly SMERequiredParamsMaxNum = 5;\n static readonly FunctionDescriptionMaxLens = 100;\n static readonly DefaultPluginId = \"plugin_1\";\n static readonly PluginManifestSchema =\n \"https://developer.microsoft.com/json-schemas/copilot/plugin/v2.1/schema.json\";\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { ErrorType } from \"./interfaces\";\n\nexport class SpecParserError extends Error {\n public readonly errorType: ErrorType;\n\n constructor(message: string, errorType: ErrorType) {\n super(message);\n this.errorType = errorType;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { OpenAPIV3 } from \"openapi-types\";\nimport { ConstantString } from \"./constants\";\nimport {\n AdaptiveCardBody,\n ArrayElement,\n AuthInfo,\n AuthType,\n ErrorResult,\n ErrorType,\n ParseOptions,\n} from \"./interfaces\";\nimport { IMessagingExtensionCommand, IParameter } from \"@microsoft/teams-manifest\";\nimport { SpecParserError } from \"./specParserError\";\n\nexport class Utils {\n static hasNestedObjectInSchema(schema: OpenAPIV3.SchemaObject): boolean {\n if (this.isObjectSchema(schema)) {\n for (const property in schema.properties) {\n const nestedSchema = schema.properties[property] as OpenAPIV3.SchemaObject;\n if (this.isObjectSchema(nestedSchema)) {\n return true;\n }\n }\n }\n return false;\n }\n\n static isObjectSchema(schema: OpenAPIV3.SchemaObject): boolean {\n return schema.type === \"object\" || (!schema.type && !!schema.properties);\n }\n\n static containMultipleMediaTypes(\n bodyObject: OpenAPIV3.RequestBodyObject | OpenAPIV3.ResponseObject\n ): boolean {\n return Object.keys(bodyObject?.content || {}).length > 1;\n }\n\n static isBearerTokenAuth(authScheme: AuthType): boolean {\n return authScheme.type === \"http\" && authScheme.scheme === \"bearer\";\n }\n\n static isAPIKeyAuth(authScheme: AuthType): boolean {\n return authScheme.type === \"apiKey\";\n }\n\n static isOAuthWithAuthCodeFlow(authScheme: AuthType): boolean {\n return !!(\n authScheme.type === \"oauth2\" &&\n authScheme.flows &&\n authScheme.flows.authorizationCode\n );\n }\n\n static getAuthArray(\n securities: OpenAPIV3.SecurityRequirementObject[] | undefined,\n spec: OpenAPIV3.Document\n ): AuthInfo[][] {\n const result: AuthInfo[][] = [];\n const securitySchemas = spec.components?.securitySchemes;\n const securitiesArr = securities ?? spec.security;\n if (securitiesArr && securitySchemas) {\n for (let i = 0; i < securitiesArr.length; i++) {\n const security = securitiesArr[i];\n\n const authArray: AuthInfo[] = [];\n for (const name in security) {\n const auth = securitySchemas[name] as OpenAPIV3.SecuritySchemeObject;\n authArray.push({\n authScheme: auth,\n name: name,\n });\n }\n\n if (authArray.length > 0) {\n result.push(authArray);\n }\n }\n }\n\n result.sort((a, b) => a[0].name.localeCompare(b[0].name));\n\n return result;\n }\n\n static getAuthInfo(spec: OpenAPIV3.Document): AuthInfo | undefined {\n let authInfo: AuthInfo | undefined = undefined;\n\n for (const url in spec.paths) {\n for (const method in spec.paths[url]) {\n const operation = (spec.paths[url] as any)[method] as OpenAPIV3.OperationObject;\n\n const authArray = Utils.getAuthArray(operation.security, spec);\n\n if (authArray && authArray.length > 0) {\n const currentAuth = authArray[0][0];\n if (!authInfo) {\n authInfo = authArray[0][0];\n } else if (authInfo.name !== currentAuth.name) {\n throw new SpecParserError(\n ConstantString.MultipleAuthNotSupported,\n ErrorType.MultipleAuthNotSupported\n );\n }\n }\n }\n }\n\n return authInfo;\n }\n\n static updateFirstLetter(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n static getResponseJson(\n operationObject: OpenAPIV3.OperationObject | undefined,\n allowMultipleMediaType = false\n ): {\n json: OpenAPIV3.MediaTypeObject;\n multipleMediaType: boolean;\n } {\n let json: OpenAPIV3.MediaTypeObject = {};\n let multipleMediaType = false;\n\n for (const code of ConstantString.ResponseCodeFor20X) {\n const responseObject = operationObject?.responses?.[code] as OpenAPIV3.ResponseObject;\n\n if (responseObject?.content) {\n for (const contentType of Object.keys(responseObject.content)) {\n // json media type can also be \"application/json; charset=utf-8\"\n if (contentType.indexOf(\"application/json\") >= 0) {\n multipleMediaType = false;\n json = responseObject.content[contentType];\n if (Utils.containMultipleMediaTypes(responseObject)) {\n multipleMediaType = true;\n if (!allowMultipleMediaType) {\n json = {};\n }\n } else {\n return { json, multipleMediaType };\n }\n }\n }\n }\n }\n\n return { json, multipleMediaType };\n }\n\n static convertPathToCamelCase(path: string): string {\n const pathSegments = path.split(/[./{]/);\n const camelCaseSegments = pathSegments.map((segment) => {\n segment = segment.replace(/}/g, \"\");\n return segment.charAt(0).toUpperCase() + segment.slice(1);\n });\n const camelCasePath = camelCaseSegments.join(\"\");\n return camelCasePath;\n }\n\n static getUrlProtocol(urlString: string): string | undefined {\n try {\n const url = new URL(urlString);\n return url.protocol;\n } catch (err) {\n return undefined;\n }\n }\n\n static resolveEnv(str: string): string {\n const placeHolderReg = /\\${{\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*}}/g;\n let matches = placeHolderReg.exec(str);\n let newStr = str;\n while (matches != null) {\n const envVar = matches[1];\n const envVal = process.env[envVar];\n if (!envVal) {\n throw new Error(Utils.format(ConstantString.ResolveServerUrlFailed, envVar));\n } else {\n newStr = newStr.replace(matches[0], envVal);\n }\n matches = placeHolderReg.exec(str);\n }\n return newStr;\n }\n\n static checkServerUrl(servers: OpenAPIV3.ServerObject[]): ErrorResult[] {\n const errors: ErrorResult[] = [];\n\n let serverUrl;\n try {\n serverUrl = Utils.resolveEnv(servers[0].url);\n } catch (err) {\n errors.push({\n type: ErrorType.ResolveServerUrlFailed,\n content: (err as Error).message,\n data: servers,\n });\n return errors;\n }\n\n const protocol = Utils.getUrlProtocol(serverUrl);\n if (!protocol) {\n // Relative server url is not supported\n errors.push({\n type: ErrorType.RelativeServerUrlNotSupported,\n content: ConstantString.RelativeServerUrlNotSupported,\n data: servers,\n });\n } else if (protocol !== \"https:\") {\n // Http server url is not supported\n const protocolString = protocol.slice(0, -1);\n errors.push({\n type: ErrorType.UrlProtocolNotSupported,\n content: Utils.format(ConstantString.UrlProtocolNotSupported, protocol.slice(0, -1)),\n data: protocolString,\n });\n }\n\n return errors;\n }\n\n static validateServer(spec: OpenAPIV3.Document, options: ParseOptions): ErrorResult[] {\n const errors: ErrorResult[] = [];\n\n let hasTopLevelServers = false;\n let hasPathLevelServers = false;\n let hasOperationLevelServers = false;\n\n if (spec.servers && spec.servers.length >= 1) {\n hasTopLevelServers = true;\n\n // for multiple server, we only use the first url\n const serverErrors = Utils.checkServerUrl(spec.servers);\n errors.push(...serverErrors);\n }\n\n const paths = spec.paths;\n for (const path in paths) {\n const methods = paths[path];\n\n if (methods?.servers && methods.servers.length >= 1) {\n hasPathLevelServers = true;\n const serverErrors = Utils.checkServerUrl(methods.servers);\n\n errors.push(...serverErrors);\n }\n\n for (const method in methods) {\n const operationObject = (methods as any)[method] as OpenAPIV3.OperationObject;\n if (options.allowMethods?.includes(method) && operationObject) {\n if (operationObject?.servers && operationObject.servers.length >= 1) {\n hasOperationLevelServers = true;\n const serverErrors = Utils.checkServerUrl(operationObject.servers);\n errors.push(...serverErrors);\n }\n }\n }\n }\n\n if (!hasTopLevelServers && !hasPathLevelServers && !hasOperationLevelServers) {\n errors.push({\n type: ErrorType.NoServerInformation,\n content: ConstantString.NoServerInformation,\n });\n }\n\n return errors;\n }\n\n static isWellKnownName(name: string, wellknownNameList: string[]): boolean {\n for (let i = 0; i < wellknownNameList.length; i++) {\n name = name.replace(/_/g, \"\").replace(/-/g, \"\");\n if (name.toLowerCase().includes(wellknownNameList[i])) {\n return true;\n }\n }\n return false;\n }\n\n static generateParametersFromSchema(\n schema: OpenAPIV3.SchemaObject,\n name: string,\n allowMultipleParameters: boolean,\n isRequired = false\n ): [IParameter[], IParameter[]] {\n const requiredParams: IParameter[] = [];\n const optionalParams: IParameter[] = [];\n\n if (\n schema.type === \"string\" ||\n schema.type === \"integer\" ||\n schema.type === \"boolean\" ||\n schema.type === \"number\"\n ) {\n const parameter: IParameter = {\n name: name,\n title: Utils.updateFirstLetter(name).slice(0, ConstantString.ParameterTitleMaxLens),\n description: (schema.description ?? \"\").slice(\n 0,\n ConstantString.ParameterDescriptionMaxLens\n ),\n };\n\n if (allowMultipleParameters) {\n Utils.updateParameterWithInputType(schema, parameter);\n }\n\n if (isRequired && schema.default === undefined) {\n parameter.isRequired = true;\n requiredParams.push(parameter);\n } else {\n optionalParams.push(parameter);\n }\n } else if (Utils.isObjectSchema(schema)) {\n const { properties } = schema;\n for (const property in properties) {\n let isRequired = false;\n if (schema.required && schema.required?.indexOf(property) >= 0) {\n isRequired = true;\n }\n const [requiredP, optionalP] = Utils.generateParametersFromSchema(\n properties[property] as OpenAPIV3.SchemaObject,\n property,\n allowMultipleParameters,\n isRequired\n );\n\n requiredParams.push(...requiredP);\n optionalParams.push(...optionalP);\n }\n }\n\n return [requiredParams, optionalParams];\n }\n\n static updateParameterWithInputType(schema: OpenAPIV3.SchemaObject, param: IParameter): void {\n if (schema.enum) {\n param.inputType = \"choiceset\";\n param.choices = [];\n for (let i = 0; i < schema.enum.length; i++) {\n param.choices.push({\n title: schema.enum[i],\n value: schema.enum[i],\n });\n }\n } else if (schema.type === \"string\") {\n param.inputType = \"text\";\n } else if (schema.type === \"integer\" || schema.type === \"number\") {\n param.inputType = \"number\";\n } else if (schema.type === \"boolean\") {\n param.inputType = \"toggle\";\n }\n\n if (schema.default) {\n param.value = schema.default;\n }\n }\n\n static parseApiInfo(\n operationItem: OpenAPIV3.OperationObject,\n options: ParseOptions\n ): IMessagingExtensionCommand {\n const requiredParams: IParameter[] = [];\n const optionalParams: IParameter[] = [];\n const paramObject = operationItem.parameters as OpenAPIV3.ParameterObject[];\n\n if (paramObject) {\n paramObject.forEach((param: OpenAPIV3.ParameterObject) => {\n const parameter: IParameter = {\n name: param.name,\n title: Utils.updateFirstLetter(param.name).slice(0, ConstantString.ParameterTitleMaxLens),\n description: (param.description ?? \"\").slice(\n 0,\n ConstantString.ParameterDescriptionMaxLens\n ),\n };\n\n const schema = param.schema as OpenAPIV3.SchemaObject;\n if (options.allowMultipleParameters && schema) {\n Utils.updateParameterWithInputType(schema, parameter);\n }\n\n if (param.in !== \"header\" && param.in !== \"cookie\") {\n if (param.required && schema?.default === undefined) {\n parameter.isRequired = true;\n requiredParams.push(parameter);\n } else {\n optionalParams.push(parameter);\n }\n }\n });\n }\n\n if (operationItem.requestBody) {\n const requestBody = operationItem.requestBody as OpenAPIV3.RequestBodyObject;\n const requestJson = requestBody.content[\"application/json\"];\n if (Object.keys(requestJson).length !== 0) {\n const schema = requestJson.schema as OpenAPIV3.SchemaObject;\n const [requiredP, optionalP] = Utils.generateParametersFromSchema(\n schema,\n \"requestBody\",\n !!options.allowMultipleParameters,\n requestBody.required\n );\n requiredParams.push(...requiredP);\n optionalParams.push(...optionalP);\n }\n }\n\n const operationId = operationItem.operationId!;\n\n const parameters = [...requiredParams, ...optionalParams];\n\n const command: IMessagingExtensionCommand = {\n context: [\"compose\"],\n type: \"query\",\n title: (operationItem.summary ?? \"\").slice(0, ConstantString.CommandTitleMaxLens),\n id: operationId,\n parameters: parameters,\n description: (operationItem.description ?? \"\").slice(\n 0,\n ConstantString.CommandDescriptionMaxLens\n ),\n };\n return command;\n }\n\n static format(str: string, ...args: string[]): string {\n let index = 0;\n return str.replace(/%s/g, () => {\n const arg = args[index++];\n return arg !== undefined ? arg : \"\";\n });\n }\n\n static getSafeRegistrationIdEnvName(authName: string): string {\n if (!authName) {\n return \"\";\n }\n\n let safeRegistrationIdEnvName = authName.toUpperCase().replace(/[^A-Z0-9_]/g, \"_\");\n\n if (!safeRegistrationIdEnvName.match(/^[A-Z]/)) {\n safeRegistrationIdEnvName = \"PREFIX_\" + safeRegistrationIdEnvName;\n }\n\n return safeRegistrationIdEnvName;\n }\n\n static getServerObject(\n spec: OpenAPIV3.Document,\n method: string,\n path: string\n ): OpenAPIV3.ServerObject | undefined {\n const pathObj = spec.paths[path] as any;\n\n const operationObject = pathObj[method] as OpenAPIV3.OperationObject;\n\n const rootServer = spec.servers && spec.servers[0];\n const methodServer = spec.paths[path]!.servers && spec.paths[path]!.servers![0];\n const operationServer = operationObject.servers && operationObject.servers[0];\n\n const serverUrl = operationServer || methodServer || rootServer;\n\n return serverUrl;\n }\n\n static limitACBodyProperties(body: AdaptiveCardBody, maxCount: number): AdaptiveCardBody {\n const result: AdaptiveCardBody = [];\n let currentCount = 0;\n\n for (const element of body) {\n if (element.type === ConstantString.ContainerType) {\n const items = this.limitACBodyProperties(\n (element as ArrayElement).items,\n maxCount - currentCount\n );\n\n result.push({\n type: ConstantString.ContainerType,\n $data: (element as ArrayElement).$data,\n items: items,\n });\n\n currentCount += items.length;\n } else {\n result.push(element);\n currentCount++;\n }\n\n if (currentCount >= maxCount) {\n break;\n }\n }\n\n return result;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { OpenAPIV3 } from \"openapi-types\";\nimport {\n ParseOptions,\n APIValidationResult,\n ErrorType,\n CheckParamResult,\n ProjectType,\n APIMap,\n SpecValidationResult,\n WarningType,\n InvalidAPIInfo,\n} from \"../interfaces\";\nimport { Utils } from \"../utils\";\nimport { ConstantString } from \"../constants\";\n\nexport abstract class Validator {\n projectType!: ProjectType;\n spec!: OpenAPIV3.Document;\n options!: ParseOptions;\n\n private apiMap: APIMap | undefined;\n private hasCircularReference = false;\n\n abstract validateAPI(method: string, path: string): APIValidationResult;\n abstract validateSpec(): SpecValidationResult;\n\n protected checkCircularReference(): void {\n try {\n JSON.stringify(this.spec);\n } catch (e) {\n if ((e as Error).message.includes(\"Converting circular structure to JSON\")) {\n this.hasCircularReference = true;\n }\n }\n }\n\n listAPIs(): APIMap {\n if (this.apiMap) {\n return this.apiMap;\n }\n\n const paths = this.spec.paths;\n const result: APIMap = {};\n for (const path in paths) {\n const methods = paths[path];\n for (const method in methods) {\n const operationObject = (methods as any)[method] as OpenAPIV3.OperationObject;\n if (this.options.allowMethods?.includes(method) && operationObject) {\n const validateResult = this.validateAPI(method, path);\n result[`${method.toUpperCase()} ${path}`] = {\n operation: operationObject,\n isValid: validateResult.isValid,\n reason: validateResult.reason,\n };\n }\n }\n }\n\n this.apiMap = result;\n return result;\n }\n\n protected validateSpecVersion(): SpecValidationResult {\n const result: SpecValidationResult = { errors: [], warnings: [] };\n\n if (this.spec.openapi >= \"3.1.0\") {\n result.errors.push({\n type: ErrorType.SpecVersionNotSupported,\n content: Utils.format(ConstantString.SpecVersionNotSupported, this.spec.openapi),\n data: this.spec.openapi,\n });\n }\n\n return result;\n }\n\n protected validateSpecServer(): SpecValidationResult {\n const result: SpecValidationResult = { errors: [], warnings: [] };\n const serverErrors = Utils.validateServer(this.spec, this.options);\n result.errors.push(...serverErrors);\n return result;\n }\n\n protected validateSpecNoSupportAPI(): SpecValidationResult {\n const result: SpecValidationResult = { errors: [], warnings: [] };\n\n const apiMap = this.listAPIs();\n\n const validAPIs = Object.entries(apiMap).filter(([, value]) => value.isValid);\n if (validAPIs.length === 0) {\n const data = [];\n for (const key in apiMap) {\n const { reason } = apiMap[key];\n const apiInvalidReason: InvalidAPIInfo = { api: key, reason: reason };\n data.push(apiInvalidReason);\n }\n\n result.errors.push({\n type: ErrorType.NoSupportedApi,\n content: ConstantString.NoSupportedApi,\n data,\n });\n }\n\n return result;\n }\n\n protected validateSpecOperationId(): SpecValidationResult {\n const result: SpecValidationResult = { errors: [], warnings: [] };\n const apiMap = this.listAPIs();\n\n // OperationId missing\n const apisMissingOperationId: string[] = [];\n for (const key in apiMap) {\n const { operation } = apiMap[key];\n if (!operation.operationId) {\n apisMissingOperationId.push(key);\n }\n }\n\n if (apisMissingOperationId.length > 0) {\n result.warnings.push({\n type: WarningType.OperationIdMissing,\n content: Utils.format(ConstantString.MissingOperationId, apisMissingOperationId.join(\", \")),\n data: apisMissingOperationId,\n });\n }\n\n return result;\n }\n\n protected validateMethodAndPath(method: string, path: string): APIValidationResult {\n const result: APIValidationResult = { isValid: true, reason: [] };\n\n if (this.options.allowMethods && !this.options.allowMethods.includes(method)) {\n result.isValid = false;\n result.reason.push(ErrorType.MethodNotAllowed);\n return result;\n }\n\n const pathObj = this.spec.paths[path] as any;\n\n if (!pathObj || !pathObj[method]) {\n result.isValid = false;\n result.reason.push(ErrorType.UrlPathNotExist);\n return result;\n }\n\n return result;\n }\n\n protected validateCircularReference(method: string, path: string): APIValidationResult {\n const result: APIValidationResult = { isValid: true, reason: [] };\n if (this.hasCircularReference) {\n const operationObject = (this.spec.paths[path] as any)[method] as OpenAPIV3.OperationObject;\n try {\n JSON.stringify(operationObject);\n } catch (e) {\n if ((e as Error).message.includes(\"Converting circular structure to JSON\")) {\n result.isValid = false;\n result.reason.push(ErrorType.CircularReferenceNotSupported);\n }\n }\n }\n\n return result;\n }\n\n protected validateResponse(method: string, path: string): APIValidationResult {\n const result: APIValidationResult = { isValid: true, reason: [] };\n\n const operationObject = (this.spec.paths[path] as any)[method] as OpenAPIV3.OperationObject;\n\n const { json, multipleMediaType } = Utils.getResponseJson(operationObject);\n\n if (this.options.projectType === ProjectType.SME) {\n // only support response body only contains “application/json” content type\n if (multipleMediaType) {\n result.reason.push(ErrorType.ResponseContainMultipleMediaTypes);\n } else if (Object.keys(json).length === 0) {\n // response body should not be empty\n result.reason.push(ErrorType.ResponseJsonIsEmpty);\n }\n }\n\n return result;\n }\n\n protected validateServer(method: string, path: string): APIValidationResult {\n const result: APIValidationResult = { isValid: true, reason: [] };\n const serverObj = Utils.getServerObject(this.spec, method, path);\n if (!serverObj) {\n // should contain server URL\n result.reason.push(ErrorType.NoServerInformation);\n } else {\n // server url should be absolute url with https protocol\n const serverValidateResult = Utils.checkServerUrl([serverObj]);\n result.reason.push(...serverValidateResult.map((item) => item.type));\n }\n\n return result;\n }\n\n protected validateAuth(method: string, path: string): APIValidationResult {\n const pathObj = this.spec.paths[path] as any;\n const operationObject = pathObj[method] as OpenAPIV3.OperationObject;\n\n const securities = operationObject.security;\n const authSchemeArray = Utils.getAuthArray(securities, this.spec);\n\n if (authSchemeArray.length === 0) {\n return { isValid: true, reason: [] };\n }\n\n if (\n this.options.allowAPIKeyAuth ||\n this.options.allowOauth2 ||\n this.options.allowBearerTokenAuth\n ) {\n // Currently we don't support multiple auth in one operation\n if (authSchemeArray.length > 0 && authSchemeArray.every((auths) => auths.length > 1)) {\n return {\n isValid: false,\n reason: [ErrorType.MultipleAuthNotSupported],\n };\n }\n\n for (const auths of authSchemeArray) {\n if (auths.length === 1) {\n if (\n (this.options.allowAPIKeyAuth && Utils.isAPIKeyAuth(auths[0].authScheme)) ||\n (this.options.allowOauth2 && Utils.isOAuthWithAuthCodeFlow(auths[0].authScheme)) ||\n (this.options.allowBearerTokenAuth && Utils.isBearerTokenAuth(auths[0].authScheme))\n ) {\n return { isValid: true, reason: [] };\n }\n }\n }\n }\n\n return { isValid: false, reason: [ErrorType.AuthTypeIsNotSupported] };\n }\n\n protected checkPostBodySchema(\n schema: OpenAPIV3.SchemaObject,\n isRequired = false\n ): CheckParamResult {\n const paramResult: CheckParamResult = {\n requiredNum: 0,\n optionalNum: 0,\n isValid: true,\n reason: [],\n };\n\n if (Object.keys(schema).length === 0) {\n return paramResult;\n }\n\n const isRequiredWithoutDefault = isRequired && schema.default === undefined;\n const isCopilot = this.projectType === ProjectType.Copilot;\n\n if (isCopilot && Utils.hasNestedObjectInSchema(schema)) {\n paramResult.isValid = false;\n paramResult.reason = [ErrorType.RequestBodyContainsNestedObject];\n return paramResult;\n }\n\n if (\n schema.type === \"string\" ||\n schema.type === \"integer\" ||\n schema.type === \"boolean\" ||\n schema.type === \"number\"\n ) {\n if (isRequiredWithoutDefault) {\n paramResult.requiredNum = paramResult.requiredNum + 1;\n } else {\n paramResult.optionalNum = paramResult.optionalNum + 1;\n }\n } else if (Utils.isObjectSchema(schema)) {\n const { properties } = schema;\n for (const property in properties) {\n let isRequired = false;\n if (schema.required && schema.required?.indexOf(property) >= 0) {\n isRequired = true;\n }\n const result = this.checkPostBodySchema(\n properties[property] as OpenAPIV3.SchemaObject,\n isRequired\n );\n paramResult.requiredNum += result.requiredNum;\n paramResult.optionalNum += result.optionalNum;\n paramResult.isValid = paramResult.isValid && result.isValid;\n paramResult.reason.push(...result.reason);\n }\n } else {\n if (isRequiredWithoutDefault && !isCopilot) {\n paramResult.isValid = false;\n paramResult.reason.push(ErrorType.PostBodyContainsRequiredUnsupportedSchema);\n }\n }\n return paramResult;\n }\n\n protected checkParamSchema(paramObject: OpenAPIV3.ParameterObject[]): CheckParamResult {\n const paramResult: CheckParamResult = {\n requiredNum: 0,\n optionalNum: 0,\n isValid: true,\n reason: [],\n };\n\n if (!paramObject) {\n return paramResult;\n }\n\n const isCopilot = this.projectType === ProjectType.Copilot;\n\n for (let i = 0; i < paramObject.length; i++) {\n const param = paramObject[i];\n const schema = param.schema as OpenAPIV3.SchemaObject;\n\n if (isCopilot && Utils.hasNestedObjectInSchema(schema)) {\n paramResult.isValid = false;\n paramResult.reason.push(ErrorType.ParamsContainsNestedObject);\n continue;\n }\n\n const isRequiredWithoutDefault = param.required && schema.default === undefined;\n\n if (isCopilot) {\n if (isRequiredWithoutDefault) {\n paramResult.requiredNum = paramResult.requiredNum + 1;\n } else {\n paramResult.optionalNum = paramResult.optionalNum + 1;\n }\n continue;\n }\n\n if (param.in === \"header\" || param.in === \"cookie\") {\n if (isRequiredWithoutDefault) {\n paramResult.isValid = false;\n paramResult.reason.push(ErrorType.ParamsContainRequiredUnsupportedSchema);\n }\n continue;\n }\n\n if (\n schema.type !== \"boolean\" &&\n schema.type !== \"string\" &&\n schema.type !== \"number\" &&\n schema.type !== \"integer\"\n ) {\n if (isRequiredWithoutDefault) {\n paramResult.isValid = false;\n paramResult.reason.push(ErrorType.ParamsContainRequiredUnsupportedSchema);\n }\n continue;\n }\n\n if (param.in === \"query\" || param.in === \"path\") {\n if (isRequiredWithoutDefault) {\n paramResult.requiredNum = paramResult.requiredNum + 1;\n } else {\n paramResult.optionalNum = paramResult.optionalNum + 1;\n }\n }\n }\n\n return paramResult;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { OpenAPIV3 } from \"openapi-types\";\nimport {\n ParseOptions,\n APIValidationResult,\n ErrorType,\n ProjectType,\n SpecValidationResult,\n} from \"../interfaces\";\nimport { Validator } from \"./validator\";\nimport { Utils } from \"../utils\";\n\nexport class CopilotValidator extends Validator {\n constructor(spec: OpenAPIV3.Document, options: ParseOptions) {\n super();\n this.projectType = ProjectType.Copilot;\n this.options = options;\n this.spec = spec;\n this.checkCircularReference();\n }\n\n validateSpec(): SpecValidationResult {\n const result: SpecValidationResult = { errors: [], warnings: [] };\n\n // validate spec version\n let validationResult = this.validateSpecVersion();\n result.errors.push(...validationResult.errors);\n\n // validate spec server\n validationResult = this.validateSpecServer();\n result.errors.push(...validationResult.errors);\n\n // validate no supported API\n validationResult = this.validateSpecNoSupportAPI();\n result.errors.push(...validationResult.errors);\n\n // validate operationId missing\n validationResult = this.validateSpecOperationId();\n result.warnings.push(...validationResult.warnings);\n\n return result;\n }\n\n validateAPI(method: string, path: string): APIValidationResult {\n const result: APIValidationResult = { isValid: true, reason: [] };\n method = method.toLocaleLowerCase();\n\n // validate method and path\n const methodAndPathResult = this.validateMethodAndPath(method, path);\n if (!methodAndPathResult.isValid) {\n return methodAndPathResult;\n }\n\n const circularReferenceResult = this.validateCircularReference(method, path);\n if (!circularReferenceResult.isValid) {\n return circularReferenceResult;\n }\n\n const operationObject = (this.spec.paths[path] as any)[method] as OpenAPIV3.OperationObject;\n\n // validate auth\n const authCheckResult = this.validateAuth(method, path);\n result.reason.push(...authCheckResult.reason);\n\n // validate operationId\n if (!this.options.allowMissingId && !operationObject.operationId) {\n result.reason.push(ErrorType.MissingOperationId);\n }\n\n // validate server\n const validateServerResult = this.validateServer(method, path);\n result.reason.push(...validateServerResult.reason);\n\n // validate response\n const validateResponseResult = this.validateResponse(method, path);\n result.reason.push(...validateResponseResult.reason);\n\n // validate requestBody\n const requestBody = operationObject.requestBody as OpenAPIV3.RequestBodyObject;\n const requestJsonBody = requestBody?.content[\"application/json\"];\n\n if (requestJsonBody) {\n const requestBodySchema = requestJsonBody.schema as OpenAPIV3.SchemaObject;\n\n if (!Utils.isObjectSchema(requestBodySchema)) {\n result.reason.push(ErrorType.PostBodySchemaIsNotJson);\n }\n\n const requestBodyParamResult = this.checkPostBodySchema(\n requestBodySchema,\n requestBody.required\n );\n result.reason.push(...requestBodyParamResult.reason);\n }\n\n // validate parameters\n const paramObject = operationObject.parameters as OpenAPIV3.ParameterObject[];\n const paramResult = this.checkParamSchema(paramObject);\n result.reason.push(...paramResult.reason);\n\n if (result.reason.length > 0) {\n result.isValid = false;\n }\n\n return result;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { OpenAPIV3 } from \"openapi-types\";\nimport {\n ParseOptions,\n APIValidationResult,\n ErrorType,\n ProjectType,\n CheckParamResult,\n SpecValidationResult,\n} from \"../interfaces\";\nimport { Validator } from \"./validator\";\nimport { Utils } from \"../utils\";\n\nexport class SMEValidator extends Validator {\n private static readonly SMERequiredParamsMaxNum = 5;\n\n constructor(spec: OpenAPIV3.Document, options: ParseOptions) {\n super();\n this.projectType = ProjectType.SME;\n this.options = options;\n this.spec = spec;\n this.checkCircularReference();\n }\n\n validateSpec(): SpecValidationResult {\n const result: SpecValidationResult = { errors: [], warnings: [] };\n\n // validate spec version\n let validationResult = this.validateSpecVersion();\n result.errors.push(...validationResult.errors);\n\n // validate spec server\n validationResult = this.validateSpecServer();\n result.errors.push(...validationResult.errors);\n\n // validate no supported API\n validationResult = this.validateSpecNoSupportAPI();\n result.errors.push(...validationResult.errors);\n\n // validate operationId missing\n if (this.options.allowMissingId) {\n validationResult = this.validateSpecOperationId();\n result.warnings.push(...validationResult.warnings);\n }\n\n return result;\n }\n\n validateAPI(method: string, path: string): APIValidationResult {\n const result: APIValidationResult = { isValid: true, reason: [] };\n method = method.toLocaleLowerCase();\n\n // validate method and path\n const methodAndPathResult = this.validateMethodAndPath(method, path);\n if (!methodAndPathResult.isValid) {\n return methodAndPathResult;\n }\n\n const circularReferenceResult = this.validateCircularReference(method, path);\n if (!circularReferenceResult.isValid) {\n return circularReferenceResult;\n }\n\n const operationObject = (this.spec.paths[path] as any)[method] as OpenAPIV3.OperationObject;\n\n // validate auth\n const authCheckResult = this.validateAuth(method, path);\n result.reason.push(...authCheckResult.reason);\n\n // validate operationId\n if (!this.options.allowMissingId && !operationObject.operationId) {\n result.reason.push(ErrorType.MissingOperationId);\n }\n\n // validate server\n const validateServerResult = this.validateServer(method, path);\n result.reason.push(...validateServerResult.reason);\n\n // validate response\n const validateResponseResult = this.validateResponse(method, path);\n result.reason.push(...validateResponseResult.reason);\n\n let postBodyResult: CheckParamResult = {\n requiredNum: 0,\n optionalNum: 0,\n isValid: true,\n reason: [],\n };\n\n // validate requestBody\n const requestBody = operationObject.requestBody as OpenAPIV3.RequestBodyObject;\n const requestJsonBody = requestBody?.content[\"application/json\"];\n\n if (Utils.containMultipleMediaTypes(requestBody)) {\n result.reason.push(ErrorType.PostBodyContainMultipleMediaTypes);\n }\n\n if (requestJsonBody) {\n const requestBodySchema = requestJsonBody.schema as OpenAPIV3.SchemaObject;\n\n postBodyResult = this.checkPostBodySchema(requestBodySchema, requestBody.required);\n result.reason.push(...postBodyResult.reason);\n }\n\n // validate parameters\n const paramObject = operationObject.parameters as OpenAPIV3.ParameterObject[];\n const paramResult = this.checkParamSchema(paramObject);\n result.reason.push(...paramResult.reason);\n\n // validate total parameters count\n if (paramResult.isValid && postBodyResult.isValid) {\n const paramCountResult = this.validateParamCount(postBodyResult, paramResult);\n result.reason.push(...paramCountResult.reason);\n }\n\n if (result.reason.length > 0) {\n result.isValid = false;\n }\n\n return result;\n }\n\n private validateParamCount(\n postBodyResult: CheckParamResult,\n paramResult: CheckParamResult\n ): APIValidationResult {\n const result: APIValidationResult = { isValid: true, reason: [] };\n const totalRequiredParams = postBodyResult.requiredNum + paramResult.requiredNum;\n const totalParams = totalRequiredParams + postBodyResult.optionalNum + paramResult.optionalNum;\n\n if (totalRequiredParams > 1) {\n if (\n !this.options.allowMultipleParameters ||\n totalRequiredParams > SMEValidator.SMERequiredParamsMaxNum\n ) {\n result.reason.push(ErrorType.ExceededRequiredParamsLimit);\n }\n } else if (totalParams === 0) {\n result.reason.push(ErrorType.NoParameter);\n }\n\n return result;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { OpenAPIV3 } from \"openapi-types\";\nimport {\n ParseOptions,\n APIValidationResult,\n ErrorType,\n ProjectType,\n SpecValidationResult,\n} from \"../interfaces\";\nimport { Validator } from \"./validator\";\n\nexport class TeamsAIValidator extends Validator {\n constructor(spec: OpenAPIV3.Document, options: ParseOptions) {\n super();\n this.projectType = ProjectType.TeamsAi;\n this.options = options;\n this.spec = spec;\n this.checkCircularReference();\n }\n\n validateSpec(): SpecValidationResult {\n const result: SpecValidationResult = { errors: [], warnings: [] };\n\n // validate spec server\n let validationResult = this.validateSpecServer();\n result.errors.push(...validationResult.errors);\n\n // validate no supported API\n validationResult = this.validateSpecNoSupportAPI();\n result.errors.push(...validationResult.errors);\n\n return result;\n }\n\n validateAPI(method: string, path: string): APIValidationResult {\n const result: APIValidationResult = { isValid: true, reason: [] };\n method = method.toLocaleLowerCase();\n\n // validate method and path\n const methodAndPathResult = this.validateMethodAndPath(method, path);\n if (!methodAndPathResult.isValid) {\n return methodAndPathResult;\n }\n\n const circularReferenceResult = this.validateCircularReference(method, path);\n if (!circularReferenceResult.isValid) {\n return circularReferenceResult;\n }\n\n const operationObject = (this.spec.paths[path] as any)[method] as OpenAPIV3.OperationObject;\n\n // validate operationId\n if (!this.options.allowMissingId && !operationObject.operationId) {\n result.reason.push(ErrorType.MissingOperationId);\n }\n\n // validate server\n const validateServerResult = this.validateServer(method, path);\n result.reason.push(...validateServerResult.reason);\n\n if (result.reason.length > 0) {\n result.isValid = false;\n }\n\n return result;\n }\n}\n","import { OpenAPIV3 } from \"openapi-types\";\nimport { ParseOptions, ProjectType } from \"../interfaces\";\nimport { CopilotValidator } from \"./copilotValidator\";\nimport { SMEValidator } from \"./smeValidator\";\nimport { TeamsAIValidator } from \"./teamsAIValidator\";\nimport { Validator } from \"./validator\";\n\nexport class ValidatorFactory {\n static create(spec: OpenAPIV3.Document, options: ParseOptions): Validator {\n const type = options.projectType ?? ProjectType.SME;\n\n switch (type) {\n case ProjectType.SME:\n return new SMEValidator(spec, options);\n case ProjectType.Copilot:\n return new CopilotValidator(spec, options);\n case ProjectType.TeamsAi:\n return new TeamsAIValidator(spec, options);\n default:\n throw new Error(`Invalid project type: ${type}`);\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { OpenAPIV3 } from \"openapi-types\";\n\nexport interface OptimizerOptions {\n removeUnusedComponents: boolean;\n removeUnusedTags: boolean;\n removeUserDefinedRootProperty: boolean;\n removeUnusedSecuritySchemas: boolean;\n}\n\nexport class SpecOptimizer {\n private static defaultOptions: OptimizerOptions = {\n removeUnusedComponents: true,\n removeUnusedTags: true,\n removeUserDefinedRootProperty: true,\n removeUnusedSecuritySchemas: true,\n };\n\n static optimize(spec: OpenAPIV3.Document, options?: OptimizerOptions): OpenAPIV3.Document {\n const mergedOptions = {\n ...SpecOptimizer.defaultOptions,\n ...(options ?? {}),\n } as Required<OptimizerOptions>;\n\n const newSpec = JSON.parse(JSON.stringify(spec));\n\n if (mergedOptions.removeUserDefinedRootProperty) {\n SpecOptimizer.removeUserDefinedRootProperty(newSpec);\n }\n\n if (mergedOptions.removeUnusedComponents) {\n SpecOptimizer.removeUnusedComponents(newSpec);\n }\n\n if (mergedOptions.removeUnusedTags) {\n SpecOptimizer.removeUnusedTags(newSpec);\n }\n\n if (mergedOptions.removeUnusedSecuritySchemas) {\n SpecOptimizer.removeUnusedSecuritySchemas(newSpec);\n }\n\n return newSpec;\n }\n\n private static removeUnusedSecuritySchemas(spec: OpenAPIV3.Document): void {\n if (!spec.components || !spec.components.securitySchemes) {\n return;\n }\n\n const usedSecuritySchemas = new Set<string>();\n\n for (const pathKey in spec.paths) {\n for (const methodKey in spec.paths[pathKey]) {\n const operation: OpenAPIV3.OperationObject = (spec.paths[pathKey] as any)[methodKey];\n if (operation.security) {\n operation.security.forEach((securityReq) => {\n for (const schemaKey in securityReq) {\n usedSecuritySchemas.add(schemaKey);\n }\n });\n }\n }\n }\n\n if (spec.security) {\n spec.security.forEach((securityReq) => {\n for (const schemaKey in securityReq) {\n usedSecuritySchemas.add(schemaKey);\n }\n });\n }\n\n for (const schemaKey in spec.components.securitySchemes) {\n if (!usedSecuritySchemas.has(schemaKey)) {\n delete spec.components.securitySchemes[schemaKey];\n }\n }\n\n if (Object.keys(spec.components.securitySchemes).length === 0) {\n delete spec.components.securitySchemes;\n }\n\n if (Object.keys(spec.components).length === 0) {\n delete spec.components;\n }\n }\n\n private static removeUnusedTags(spec: OpenAPIV3.Document): void {\n if (!spec.tags) {\n return;\n }\n\n const usedTags = new Set<string>();\n\n for (const pathKey in spec.paths) {\n for (const methodKey in spec.paths[pathKey]) {\n const operation: OpenAPIV3.OperationObject = (spec.paths[pathKey] as any)[methodKey];\n if (operation.tags) {\n operation.tags.forEach((tag) => usedTags.add(tag));\n }\n }\n }\n\n spec.tags = spec.tags.filter((tagObj) => usedTags.has(tagObj.name));\n }\n\n private static removeUserDefinedRootProperty(spec: OpenAPIV3.Document): void {\n for (const key in spec) {\n if (key.startsWith(\"x-\")) {\n delete (spec as any)[key];\n }\n }\n }\n\n private static removeUnusedComponents(spec: OpenAPIV3.Document): void {\n const components = spec.components;\n if (!components) {\n return;\n }\n\n delete spec.components;\n\n const usedComponentsSet = new Set<string>();\n\n const specString = JSON.stringify(spec);\n const componentReferences = SpecOptimizer.getComponentReferences(specString);\n\n for (const reference of componentReferences) {\n this.addComponent(reference, usedComponentsSet, components);\n }\n\n const newComponents: any = {};\n\n for (const componentName of usedComponentsSet) {\n const parts = componentName.split(\"/\");\n const component = this.getComponent(componentName, components);\n if (component) {\n let current = newComponents;\n for (let i = 2; i < parts.length; i++) {\n if (i === parts.length - 1) {\n current[parts[i]] = component;\n } else if (!current[parts[i]]) {\n current[parts[i]] = {};\n }\n current = current[parts[i]];\n }\n }\n }\n\n // securitySchemes are referenced directly by name, to void issue, just keep them all and use removeUnusedSecuritySchemas to remove unused ones\n if (components.securitySchemes) {\n newComponents.securitySchemes = components.securitySchemes;\n }\n\n if (Object.keys(newComponents).length !== 0) {\n spec.components = newComponents;\n }\n }\n\n private static getComponentReferences(specString: string): string[] {\n const matches = Array.from(specString.matchAll(/['\"](#\\/components\\/.+?)['\"]/g));\n const matchResult = matches.map((match) => match[1]);\n return matchResult;\n }\n\n private static getComponent(componentPath: string, components: OpenAPIV3.ComponentsObject): any {\n const parts = componentPath.split(\"/\");\n let current: any = components;\n\n for (const part of parts) {\n if (part === \"#\" || part === \"components\") {\n continue;\n }\n current = current[part];\n if (!current) {\n return null;\n }\n }\n\n return current;\n }\n\n private static addComponent(\n componentName: string,\n usedComponentsSet: Set<string>,\n components: OpenAPIV3.ComponentsObject\n ) {\n if (usedComponentsSet.has(componentName)) {\n return;\n }\n usedComponentsSet.add(componentName);\n\n const component = this.getComponent(componentName, components);\n if (component) {\n const componentString = JSON.stringify(component);\n const componentReferences = SpecOptimizer.getComponentReferences(componentString);\n for (const reference of componentReferences) {\n this.addComponent(reference, usedComponentsSet, components);\n }\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { OpenAPIV3 } from \"openapi-types\";\nimport { Utils } from \"./utils\";\nimport { SpecParserError } from \"./specParserError\";\nimport { ErrorType, ParseOptions } from \"./interfaces\";\nimport { ConstantString } from \"./constants\";\nimport { ValidatorFactory } from \"./validators/validatorFactory\";\nimport { SpecOptimizer } from \"./specOptimizer\";\n\nexport class SpecFilter {\n static specFilter(\n filter: string[],\n unResolveSpec: OpenAPIV3.Document,\n resolvedSpec: OpenAPIV3.Document,\n options: ParseOptions\n ): OpenAPIV3.Document {\n try {\n const newSpec = { ...unResolveSpec };\n const newPaths: OpenAPIV3.PathsObject = {};\n for (const filterItem of filter) {\n const [method, path] = filterItem.split(\" \");\n const methodName = method.toLowerCase();\n\n const pathObj = resolvedSpec.paths?.[path] as any;\n if (\n ConstantString.AllOperationMethods.includes(methodName) &&\n pathObj &&\n pathObj[methodName]\n ) {\n const validator = ValidatorFactory.create(resolvedSpec, options);\n const validateResult = validator.validateAPI(methodName, path);\n\n if (!validateResult.isValid) {\n continue;\n }\n\n if (!newPaths[path]) {\n newPaths[path] = { ...unResolveSpec.paths[path] };\n for (const m of ConstantString.AllOperationMethods) {\n delete (newPaths[path] as any)[m];\n }\n }\n\n (newPaths[path] as any)[methodName] = (unResolveSpec.paths[path] as any)[methodName];\n\n // Add the operationId if missing\n if (!(newPaths[path] as any)[methodName].operationId) {\n (newPaths[path] as any)[\n methodName\n ].operationId = `${methodName}${Utils.convertPathToCamelCase(path)}`;\n }\n }\n }\n\n newSpec.paths = newPaths;\n return SpecOptimizer.optimize(newSpec);\n } catch (err) {\n throw new SpecParserError((err as Error).toString(), ErrorType.FilterSpecFailed);\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { OpenAPIV3 } from \"openapi-types\";\nimport { Utils } from \"./utils\";\nimport {\n AdaptiveCard,\n ArrayElement,\n ErrorType,\n ImageElement,\n TextBlockElement,\n} from \"./interfaces\";\nimport { ConstantString } from \"./constants\";\nimport { SpecParserError } from \"./specParserError\";\n\nexport class AdaptiveCardGenerator {\n static generateAdaptiveCard(\n operationItem: OpenAPIV3.OperationObject,\n allowMultipleMediaType = false\n ): [AdaptiveCard, string] {\n try {\n const { json } = Utils.getResponseJson(operationItem, allowMultipleMediaType);\n\n let cardBody: Array<TextBlockElement | ImageElement | ArrayElement> = [];\n\n let schema = json.schema as OpenAPIV3.SchemaObject;\n let jsonPath = \"$\";\n if (schema && Object.keys(schema).length > 0) {\n jsonPath = AdaptiveCardGenerator.getResponseJsonPathFromSchema(schema);\n if (jsonPath !== \"$\") {\n schema = schema.properties![jsonPath] as OpenAPIV3.SchemaObject;\n }\n\n cardBody = AdaptiveCardGenerator.generateCardFromResponse(schema, \"\");\n }\n\n // if no schema, try to use example value\n if (cardBody.length === 0 && (json.examples || json.example)) {\n cardBody = [\n {\n type: ConstantString.TextBlockType,\n text: \"${jsonStringify($root)}\",\n wrap: true,\n },\n ];\n }\n\n // if no example value, use default success response\n if (cardBody.length === 0) {\n cardBody = [\n {\n type: ConstantString.TextBlockType,\n text: \"success\",\n wrap: true,\n },\n ];\n }\n\n const fullCard: AdaptiveCard = {\n type: ConstantString.AdaptiveCardType,\n $schema: ConstantString.AdaptiveCardSchema,\n version: ConstantString.AdaptiveCardVersion,\n body: cardBody,\n };\n\n return [fullCard, jsonPath];\n } catch (err) {\n throw new SpecParserError((err as Error).toString(), ErrorType.GenerateAdaptiveCardFailed);\n }\n }\n\n static generateCardFromResponse(\n schema: OpenAPIV3.SchemaObject,\n name: string,\n parentArrayName = \"\"\n ): Array<TextBlockElement | ImageElement | ArrayElement> {\n if (schema.type === \"array\") {\n // schema.items can be arbitrary object: schema { type: array, items: {} }\n if (Object.keys(schema.items).length === 0) {\n return [\n {\n type: ConstantString.TextBlockType,\n text: name ? `${name}: \\${jsonStringify(${name})}` : \"result: ${jsonStringify($root)}\",\n wrap: true,\n },\n ];\n }\n\n const obj = AdaptiveCardGenerator.generateCardFromResponse(\n schema.items as OpenAPIV3.SchemaObject,\n \"\",\n name\n );\n const template = {\n type: ConstantString.ContainerType,\n $data: name ? `\\${${name}}` : \"${$root}\",\n items: Array<TextBlockElement | ImageElement | ArrayElement>(),\n };\n\n template.items.push(...obj);\n return [template];\n }\n // some schema may not contain type but contain properties\n if (Utils.isObjectSchema(schema)) {\n const { properties } = schema;\n const result: Array<TextBlockElement | ImageElement | ArrayElement> = [];\n for (const property in properties) {\n const obj = AdaptiveCardGenerator.generateCardFromResponse(\n properties[property] as OpenAPIV3.SchemaObject,\n name ? `${name}.${property}` : property,\n parentArrayName\n );\n result.push(...obj);\n }\n\n if (schema.additionalProperties) {\n // TODO: better ways to handler warnings.\n console.warn(ConstantString.AdditionalPropertiesNotSupported);\n }\n\n return result;\n }\n if (\n schema.type === \"string\" ||\n schema.type === \"integer\" ||\n schema.type === \"boolean\" ||\n schema.type === \"number\"\n ) {\n if (!AdaptiveCardGenerator.isImageUrlProperty(schema, name, parentArrayName)) {\n // string in root: \"ddd\"\n let text = \"result: ${$root}\";\n if (name) {\n // object { id: \"1\" }\n text = `${name}: \\${if(${name}, ${name}, 'N/A')}`;\n if (parentArrayName) {\n // object types inside array: { tags: [\"id\": 1, \"name\": \"name\"] }\n text = `${parentArrayName}.${text}`;\n }\n } else if (parentArrayName) {\n // string array: photoUrls: [\"1\", \"2\"]\n text = `${parentArrayName}: ` + \"${$data}\";\n }\n\n return [\n {\n type: ConstantString.TextBlockType,\n text,\n wrap: true,\n },\n ];\n } else {\n if (name) {\n return [\n {\n type: \"Image\",\n url: `\\${${name}}`,\n $when: `\\${${name} != null && ${name} != ''}`,\n },\n ];\n } else {\n return [\n {\n type: \"Image\",\n url: \"${$data}\",\n $when: \"${$data != null && $data != ''}\",\n },\n ];\n }\n }\n }\n\n if (schema.oneOf || schema.anyOf || schema.not || schema.allOf) {\n throw new Error(Utils.format(ConstantString.SchemaNotSupported, JSON.stringify(schema)));\n }\n\n throw new Error(Utils.format(ConstantString.UnknownSchema, JSON.stringify(schema)));\n }\n\n // Find the first array property in the response schema object with the well-known name\n static getResponseJsonPathFromSchema(schema: OpenAPIV3.SchemaObject): string {\n if (Utils.isObjectSchema(schema)) {\n const { properties } = schema;\n for (const property in properties) {\n const schema = properties[property] as OpenAPIV3.SchemaObject;\n if (\n schema.type === \"array\" &&\n Utils.isWellKnownName(property, ConstantString.WellknownResultNames)\n ) {\n return property;\n }\n }\n }\n\n return \"$\";\n }\n\n static isImageUrlProperty(\n schema: OpenAPIV3.NonArraySchemaObject,\n name: string,\n parentArrayName: string\n ): boolean {\n const propertyName = name ? name : parentArrayName;\n return (\n !!propertyName &&\n schema.type === \"string\" &&\n Utils.isWellKnownName(propertyName, ConstantString.WellknownImageName) &&\n (propertyName.toLocaleLowerCase().indexOf(\"url\") >= 0 || schema.format === \"uri\")\n );\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { ResponseSemanticsObject } from \"@microsoft/teams-manifest\";\nimport { ConstantString } from \"./constants\";\nimport {\n AdaptiveCard,\n ArrayElement,\n ImageElement,\n InferredProperties,\n PreviewCardTemplate,\n TextBlockElement,\n WrappedAdaptiveCard,\n} from \"./interfaces\";\nimport { Utils } from \"./utils\";\n\nexport function wrapAdaptiveCard(card: AdaptiveCard, jsonPath: string): WrappedAdaptiveCard {\n const result: WrappedAdaptiveCard = {\n version: ConstantString.WrappedCardVersion,\n $schema: ConstantString.WrappedCardSchema,\n jsonPath: jsonPath,\n responseLayout: ConstantString.WrappedCardResponseLayout,\n responseCardTemplate: card,\n previewCardTemplate: inferPreviewCardTemplate(card),\n };\n\n return result;\n}\n\nexport function wrapResponseSemantics(\n card: AdaptiveCard,\n jsonPath: string\n): ResponseSemanticsObject {\n const props = inferProperties(card);\n const dataPath = jsonPath === \"$\" ? \"$\" : \"$.\" + jsonPath;\n const result: ResponseSemanticsObject = {\n data_path: dataPath,\n };\n\n if (props.title || props.subtitle || props.imageUrl) {\n result.properties = {};\n if (props.title) {\n result.properties.title = \"$.\" + props.title;\n }\n\n if (props.subtitle) {\n result.properties.subtitle = \"$.\" + props.subtitle;\n }\n\n if (props.imageUrl) {\n result.properties.url = \"$.\" + props.imageUrl;\n }\n }\n\n result.static_template = card as any;\n\n return result;\n}\n\n/**\n * Infers the preview card template from an Adaptive Card and a JSON path.\n * The preview card template includes a title and an optional subtitle and image.\n * It populates the preview card template with the first text block that matches\n * each well-known name, in the order of title, subtitle, and image.\n * If no text block matches the title or subtitle, it uses the first two text block as the title and subtitle.\n * If the title is still empty and the subtitle is not empty, it uses subtitle as the title.\n * @param card The Adaptive Card to infer the preview card template from.\n * @param jsonPath The JSON path to the root object in the card body.\n * @returns The inferred preview card template.\n */\nexport function inferPreviewCardTemplate(card: AdaptiveCard): PreviewCardTemplate {\n const result: PreviewCardTemplate = {\n title: \"result\",\n };\n const inferredProperties = inferProperties(card);\n if (inferredProperties.title) {\n result.title = `\\${if(${inferredProperties.title}, ${inferredProperties.title}, 'N/A')}`;\n }\n\n if (inferredProperties.subtitle) {\n result.subtitle = `\\${if(${inferredProperties.subtitle}, ${inferredProperties.subtitle}, 'N/A')}`;\n }\n\n if (inferredProperties.imageUrl) {\n result.image = {\n url: `\\${${inferredProperties.imageUrl}}`,\n alt: `\\${if(${inferredProperties.imageUrl}, ${inferredProperties.imageUrl}, 'N/A')}`,\n $when: `\\${${inferredProperties.imageUrl} != null && ${inferredProperties.imageUrl} != ''}`,\n };\n }\n\n return result;\n}\n\nfunction inferProperties(card: AdaptiveCard): InferredProperties {\n const result: InferredProperties = {};\n\n const nameSet = new Set<string>();\n\n let rootObject: (TextBlockElement | ArrayElement | ImageElement)[];\n if (card.body[0]?.type === ConstantString.ContainerType) {\n rootObject = (card.body[0] as ArrayElement).items;\n } else {\n rootObject = card.body;\n }\n\n for (const element of rootObject) {\n if (element.type === ConstantString.TextBlockType) {\n const textElement = element as TextBlockElement;\n const index = textElement.text.indexOf(\"${if(\");\n if (index > 0) {\n const text = textElement.text.substring(index);\n const match = text.match(/\\${if\\(([^,]+),/);\n const property = match ? match[1] : \"\";\n if (property) {\n nameSet.add(property);\n }\n }\n } else if (element.type === ConstantString.ImageType) {\n const imageElement = element as ImageElement;\n const match = imageElement.url.match(/\\${([^,]+)}/);\n const property = match ? match[1] : \"\";\n if (property) {\n nameSet.add(property);\n }\n }\n }\n\n for (const name of nameSet) {\n if (!result.title && Utils.isWellKnownName(name, ConstantString.WellknownTitleName)) {\n result.title = name;\n nameSet.delete(name);\n } else if (\n !result.subtitle &&\n Utils.isWellKnownName(name, ConstantString.WellknownSubtitleName)\n ) {\n result.subtitle = name;\n nameSet.delete(name);\n } else if (!result.imageUrl && Utils.isWellKnownName(name, ConstantString.WellknownImageName)) {\n result.imageUrl = name;\n nameSet.delete(name);\n }\n }\n\n for (const name of nameSet) {\n if (!result.title) {\n result.title = name;\n nameSet.delete(name);\n } else if (!result.subtitle) {\n result.subtitle = name;\n nameSet.delete(name);\n }\n }\n\n if (!result.title && result.subtitle) {\n result.title = result.subtitle;\n delete result.subtitle;\n }\n\n return result;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { OpenAPIV3 } from \"openapi-types\";\nimport fs from \"fs-extra\";\nimport path from \"path\";\nimport {\n AuthInfo,\n ErrorType,\n ExistingPluginManifestInfo,\n ParseOptions,\n ProjectType,\n WarningResult,\n WarningType,\n} from \"./interfaces\";\nimport { Utils } from \"./utils\";\nimport { SpecParserError } from \"./specParserError\";\nimport { ConstantString } from \"./constants\";\nimport {\n IComposeExtension,\n IMessagingExtensionCommand,\n TeamsAppManifest,\n PluginManifestSchema,\n FunctionObject,\n AuthObject,\n} from \"@microsoft/teams-manifest\";\nimport { AdaptiveCardGenerator } from \"./adaptiveCardGenerator\";\nimport { wrapResponseSemantics } from \"./adaptiveCardWrapper\";\n\nexport class ManifestUpdater {\n static async updateManifestWithAiPlugin(\n manifestPath: string,\n outputSpecPath: string,\n apiPluginFilePath: string,\n spec: OpenAPIV3.Document,\n options: ParseOptions,\n authInfo?: AuthInfo,\n existingPluginManifestInfo?: ExistingPluginManifestInfo\n ): Promise<[TeamsAppManifest, PluginManifestSchema, WarningResult[]]> {\n const manifest: TeamsAppManifest = await fs.readJSON(manifestPath);\n const apiPluginRelativePath = ManifestUpdater.getRelativePath(manifestPath, apiPluginFilePath);\n manifest.copilotExtensions = manifest.copilotExtensions || {};\n // Insert plugins in manifest.json if it is plugin for Copilot.\n if (!options.isGptPlugin) {\n manifest.copilotExtensions.plugins = [\n {\n file: apiPluginRelativePath,\n id: ConstantString.DefaultPluginId,\n },\n ];\n ManifestUpdater.updateManifestDescription(manifest, spec);\n }\n\n const appName = this.removeEnvs(manifest.name.short);\n\n const specRelativePath = ManifestUpdater.getRelativePath(manifestPath, outputSpecPath);\n const [apiPlugin, warnings] = await ManifestUpdater.generatePluginManifestSchema(\n spec,\n specRelativePath,\n apiPluginFilePath,\n appName,\n authInfo,\n options,\n existingPluginManifestInfo\n );\n\n return [manifest, apiPlugin, warnings];\n }\n\n static updateManifestDescription(manifest: TeamsAppManifest, spec: OpenAPIV3.Document): void {\n manifest.description = {\n short: spec.info.title.slice(0, ConstantString.ShortDescriptionMaxLens),\n full: (spec.info.description ?? manifest.description.full)?.slice(\n 0,\n ConstantString.FullDescriptionMaxLens\n ),\n };\n }\n\n static checkSchema(schema: OpenAPIV3.SchemaObject, method: string, pathUrl: string): void {\n if (schema.type === \"array\") {\n const items = schema.items as OpenAPIV3.SchemaObject;\n ManifestUpdater.checkSchema(items, method, pathUrl);\n } else if (\n schema.type !== \"string\" &&\n schema.type !== \"boolean\" &&\n schema.type !== \"integer\" &&\n schema.type !== \"number\"\n ) {\n throw new SpecParserError(\n Utils.format(ConstantString.UnsupportedSchema, method, pathUrl, JSON.stringify(schema)),\n ErrorType.UpdateManifestFailed\n );\n }\n }\n\n static async generatePluginManifestSchema(\n spec: OpenAPIV3.Document,\n specRelativePath: string,\n apiPluginFilePath: string,\n appName: string,\n authInfo: AuthInfo | undefined,\n options: ParseOptions,\n existingPluginManifestInfo?: ExistingPluginManifestInfo\n ): Promise<[PluginManifestSchema, WarningResult[]]> {\n const warnings: WarningResult[] = [];\n const functions: FunctionObject[] = [];\n const functionNames: string[] = [];\n const conversationStarters: string[] = [];\n\n const paths = spec.paths;\n\n const pluginAuthObj: AuthObject = {\n type: \"None\",\n };\n\n if (authInfo) {\n if (Utils.isOAuthWithAuthCodeFlow(authInfo.authScheme)) {\n pluginAuthObj.type = \"OAuthPluginVault\";\n } else if (Utils.isBearerTokenAuth(authInfo.authScheme)) {\n pluginAuthObj.type = \"ApiKeyPluginVault\";\n }\n\n if (pluginAuthObj.type !== \"None\") {\n const safeRegistrationIdName = Utils.getSafeRegistrationIdEnvName(\n `${authInfo.name}_${ConstantString.RegistrationIdPostfix[authInfo.authScheme.type]}`\n );\n\n pluginAuthObj.reference_id = `\\${{${safeRegistrationIdName}}}`;\n }\n }\n\n for (const pathUrl in paths) {\n const pathItem = paths[pathUrl];\n if (pathItem) {\n const operations = pathItem;\n for (const method in operations) {\n if (options.allowMethods!.includes(method)) {\n const operationItem = (operations as any)[method] as OpenAPIV3.OperationObject;\n const confirmationBodies: string[] = [];\n if (operationItem) {\n const operationId = operationItem.operationId!;\n const safeFunctionName = operationId.replace(/[^a-zA-Z0-9]/g, \"_\");\n const description = operationItem.description ?? \"\";\n const summary = operationItem.summary;\n const paramObject = operationItem.parameters as OpenAPIV3.ParameterObject[];\n const requestBody = operationItem.requestBody as OpenAPIV3.ParameterObject;\n\n if (paramObject) {\n for (let i = 0; i < paramObject.length; i++) {\n const param = paramObject[i];\n const schema = param.schema as OpenAPIV3.SchemaObject;\n ManifestUpdater.checkSchema(schema, method, pathUrl);\n confirmationBodies.push(ManifestUpdater.getConfirmationBodyItem(param.name));\n }\n }\n\n if (requestBody) {\n const requestJsonBody = requestBody.content![\"application/json\"];\n const requestBodySchema = requestJsonBody.schema as OpenAPIV3.SchemaObject;\n if (Utils.isObjectSchema(requestBodySchema)) {\n for (const property in requestBodySchema.properties) {\n const schema = requestBodySchema.properties[property] as OpenAPIV3.SchemaObject;\n ManifestUpdater.checkSchema(schema, method, pathUrl);\n confirmationBodies.push(ManifestUpdater.getConfirmationBodyItem(property));\n }\n } else {\n throw new SpecParserError(\n Utils.format(\n ConstantString.UnsupportedSchema,\n method,\n pathUrl,\n JSON.stringify(requestBodySchema)\n ),\n ErrorType.UpdateManifestFailed\n );\n }\n }\n\n let funcDescription = operationItem.description || operationItem.summary || \"\";\n if (funcDescription.length > ConstantString.FunctionDescriptionMaxLens) {\n warnings.push({\n type: WarningType.FuncDescriptionTooLong,\n content: Utils.format(\n ConstantString.FuncDescriptionTooLong,\n safeFunctionName,\n funcDescription.length.toString(),\n ConstantString.FunctionDescriptionMaxLens.toString()\n ),\n data: safeFunctionName,\n });\n funcDescription = funcDescription.slice(\n 0,\n ConstantString.FunctionDescriptionMaxLens\n );\n }\n\n const funcObj: FunctionObject = {\n name: safeFunctionName,\n description: funcDescription,\n };\n\n if (options.allowResponseSemantics) {\n try {\n const { json } = Utils.getResponseJson(operationItem);\n if (json.schema) {\n const [card, jsonPath] =\n AdaptiveCardGenerator.generateAdaptiveCard(operationItem);\n\n card.body = Utils.limitACBodyProperties(card.body, 5);\n const responseSemantic = wrapResponseSemantics(card, jsonPath);\n funcObj.capabilities = {\n response_semantics: responseSemantic,\n };\n }\n } catch (err) {\n warnings.push({\n type: WarningType.GenerateCardFailed,\n content: (err as Error).toString(),\n data: operationId,\n });\n }\n }\n\n if (options.allowConfirmation && method !== ConstantString.GetMethod) {\n if (!funcObj.capabilities) {\n funcObj.capabilities = {};\n }\n\n funcObj.capabilities.confirmation = {\n type: \"AdaptiveCard\",\n title: operationItem.summary ?? description,\n };\n\n if (confirmationBodies.length > 0) {\n funcObj.capabilities.confirmation.body = confirmationBodies.join(\"\\n\");\n }\n }\n\n functions.push(funcObj);\n functionNames.push(safeFunctionName);\n const conversationStarterStr = (summary ?? description).slice(\n 0,\n ConstantString.ConversationStarterMaxLens\n );\n if (conversationStarterStr) {\n conversationStarters.push(conversationStarterStr);\n }\n }\n }\n }\n }\n }\n\n let apiPlugin: PluginManifestSchema;\n if (await fs.pathExists(apiPluginFilePath)) {\n apiPlugin = await fs.readJSON(apiPluginFilePath);\n } else if (\n existingPluginManifestInfo &&\n (await fs.pathExists(existingPluginManifestInfo.manifestPath))\n ) {\n apiPlugin = await fs.readJSON(existingPluginManifestInfo.manifestPath);\n } else {\n apiPlugin = {\n $schema: ConstantString.PluginManifestSchema,\n schema_version: \"v2.1\",\n name_for_human: \"\",\n description_for_human: \"\",\n namespace: \"\",\n functions: [],\n runtimes: [],\n };\n }\n\n apiPlugin.functions = apiPlugin.functions || [];\n\n for (const func of functions) {\n const index = apiPlugin.functions?.findIndex((f) => f.name === func.name);\n if (index === -1) {\n apiPlugin.functions.push(func);\n } else {\n apiPlugin.functions[index] = func;\n }\n }\n\n apiPlugin.runtimes = apiPlugin.runtimes || [];\n // Need to delete previous runtime since spec path has changed\n if (existingPluginManifestInfo) {\n const relativePath = ManifestUpdater.getRelativePath(\n existingPluginManifestInfo.manifestPath,\n existingPluginManifestInfo.specPath\n );\n apiPlugin.runtimes = apiPlugin.runtimes.filter(\n (runtime) => runtime.spec.url !== relativePath\n );\n }\n const index = apiPlugin.runtimes.findIndex(\n (runtime) =>\n runtime.spec.url === specRelativePath &&\n runtime.type === \"OpenApi\" &&\n (runtime.auth?.type ?? \"None\") === pluginAuthObj.type\n );\n if (index === -1) {\n apiPlugin.runtimes.push({\n type: \"OpenApi\",\n auth: pluginAuthObj,\n spec: {\n url: specRelativePath,\n },\n run_for_functions: functionNames,\n });\n } else {\n apiPlugin.runtimes[index].run_for_functions = functionNames;\n }\n\n if (!apiPlugin.name_for_human) {\n apiPlugin.name_for_human = appName;\n }\n\n if (!apiPlugin.namespace) {\n apiPlugin.namespace = ManifestUpdater.removeAllSpecialCharacters(appName);\n }\n\n if (!apiPlugin.description_for_human) {\n apiPlugin.description_for_human =\n spec.info.description ?? \"<Please add description of the plugin>\";\n }\n\n if (options.allowConversationStarters && conversationStarters.length > 0) {\n if (!apiPlugin.capabilities) {\n apiPlugin.capabilities = {\n localization: {},\n };\n }\n if (!apiPlugin.capabilities.conversation_starters) {\n apiPlugin.capabilities.conversation_starters = conversationStarters\n .slice(0, 5)\n .map((text) => ({ text }));\n }\n }\n\n return [apiPlugin, warnings];\n }\n\n static async updateManifest(\n manifestPath: string,\n outputSpecPath: string,\n spec: OpenAPIV3.Document,\n options: ParseOptions,\n adaptiveCardFolder?: string,\n authInfo?: AuthInfo\n ): Promise<[TeamsAppManifest, WarningResult[]]> {\n try {\n const originalManifest: TeamsAppManifest = await fs.readJSON(manifestPath);\n const updatedPart: any = {};\n updatedPart.composeExtensions = [];\n let warnings: WarningResult[] = [];\n\n if (options.projectType === ProjectType.SME) {\n const updateResult = await ManifestUpdater.generateCommands(\n spec,\n manifestPath,\n options,\n adaptiveCardFolder\n );\n const commands = updateResult[0];\n warnings = updateResult[1];\n\n const composeExtension: IComposeExtension = {\n composeExtensionType: \"apiBased\",\n apiSpecificationFile: ManifestUpdater.getRelativePath(manifestPath, outputSpecPath),\n commands: commands,\n };\n\n if (authInfo) {\n const auth = authInfo.authScheme;\n const safeRegistrationIdName = Utils.getSafeRegistrationIdEnvName(\n `${authInfo.name}_${ConstantString.RegistrationIdPostfix[authInfo.authScheme.type]}`\n );\n if (Utils.isAPIKeyAuth(auth) || Utils.isBearerTokenAuth(auth)) {\n (composeExtension as any).authorization = {\n authType: \"apiSecretServiceAuth\",\n apiSecretServiceAuthConfiguration: {\n apiSecretRegistrationId: `\\${{${safeRegistrationIdName}}}`,\n },\n };\n } else if (Utils.isOAuthWithAuthCodeFlow(auth)) {\n // TODO: below schema is coming from design doc, may need to update when shcema is finalized\n (composeExtension as any).authorization = {\n authType: \"oAuth2.0\",\n oAuthConfiguration: {\n oauthConfigurationId: `\\${{${safeRegistrationIdName}}}`,\n },\n };\n }\n }\n\n updatedPart.composeExtensions = [composeExtension];\n }\n\n updatedPart.description = originalManifest.description;\n ManifestUpdater.updateManifestDescription(updatedPart, spec);\n\n const updatedManifest = { ...originalManifest, ...updatedPart };\n\n return [updatedManifest, warnings];\n } catch (err) {\n throw new SpecParserError((err as Error).toString(), ErrorType.UpdateManifestFailed);\n }\n }\n\n static async generateCommands(\n spec: OpenAPIV3.Document,\n manifestPath: string,\n options: ParseOptions,\n adaptiveCardFolder?: string\n ): Promise<[IMessagingExtensionCommand[], WarningResult[]]> {\n const paths = spec.paths;\n const commands: IMessagingExtensionCommand[] = [];\n const warnings: WarningResult[] = [];\n if (paths) {\n for (const pathUrl in paths) {\n const pathItem = paths[pathUrl];\n if (pathItem) {\n const operations = pathItem;\n\n // Currently only support GET and POST method\n for (const method in operations) {\n if (options.allowMethods?.includes(method)) {\n const operationItem = (operations as any)[method];\n if (operationItem) {\n const command = Utils.parseApiInfo(operationItem, options);\n\n if (\n command.parameters &&\n command.parameters.length >= 1 &&\n command.parameters.some((param) => param.isRequired)\n ) {\n command.parameters = command.parameters.filter((param) => param.isRequired);\n } else if (command.parameters && command.parameters.length > 0) {\n if (command.parameters.length > 1) {\n command.parameters = [command.parameters[0]];\n warnings.push({\n type: WarningType.OperationOnlyContainsOptionalParam,\n content: Utils.format(\n ConstantString.OperationOnlyContainsOptionalParam,\n command.id\n ),\n data: {\n commandId: command.id,\n parameterName: command.parameters[0].name,\n },\n });\n }\n }\n\n if (adaptiveCardFolder) {\n const adaptiveCardPath = path.join(adaptiveCardFolder, command.id + \".json\");\n command.apiResponseRenderingTemplateFile = (await fs.pathExists(adaptiveCardPath))\n ? ManifestUpdater.getRelativePath(manifestPath, adaptiveCardPath)\n : \"\";\n }\n\n commands.push(command);\n }\n }\n }\n }\n }\n }\n\n return [commands, warnings];\n }\n\n static getRelativePath(from: string, to: string): string {\n const relativePath = path.relative(path.dirname(from), to);\n return path.normalize(relativePath).replace(/\\\\/g, \"/\");\n }\n\n static removeEnvs(str: string): string {\n const placeHolderReg = /\\${{\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*}}/g;\n const matches = placeHolderReg.exec(str);\n let newStr = str;\n if (matches != null) {\n newStr = newStr.replace(matches[0], \"\");\n }\n return newStr;\n }\n\n static removeAllSpecialCharacters(str: string): string {\n return str.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n }\n\n static getConfirmationBodyItem(paramName: string): string {\n return `* **${Utils.updateFirstLetter(paramName)}**: {{function.parameters.${paramName}}}`;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport SwaggerParser from \"@apidevtools/swagger-parser\";\nimport { OpenAPIV3 } from \"openapi-types\";\nimport converter from \"swagger2openapi\";\nimport jsyaml from \"js-yaml\";\nimport fs from \"fs-extra\";\nimport path from \"path\";\nimport {\n APIInfo,\n APIMap,\n ErrorResult,\n ErrorType,\n GenerateResult,\n ListAPIInfo,\n ListAPIResult,\n ParseOptions,\n ProjectType,\n ValidateResult,\n ValidationStatus,\n WarningResult,\n WarningType,\n} from \"./interfaces\";\nimport { ConstantString } from \"./constants\";\nimport { SpecParserError } from \"./specParserError\";\nimport { SpecFilter } from \"./specFilter\";\nimport { Utils } from \"./utils\";\nimport { ManifestUpdater } from \"./manifestUpdater\";\nimport { AdaptiveCardGenerator } from \"./adaptiveCardGenerator\";\nimport { wrapAdaptiveCard } from \"./adaptiveCardWrapper\";\nimport { ValidatorFactory } from \"./validators/validatorFactory\";\nimport { Validator } from \"./validators/validator\";\nimport { PluginManifestSchema } from \"@microsoft/teams-manifest\";\nimport { createHash } from \"crypto\";\n\n/**\n * A class that parses an OpenAPI specification file and provides methods to validate, list, and generate artifacts.\n */\nexport class SpecParser {\n public readonly pathOrSpec: string | OpenAPIV3.Document;\n public readonly parser: SwaggerParser;\n public readonly options: Required<ParseOptions>;\n\n private validator: Validator | undefined;\n private spec: OpenAPIV3.Document | undefined;\n private unResolveSpec: OpenAPIV3.Document | undefined;\n private isSwaggerFile: boolean | undefined;\n\n private defaultOptions: ParseOptions = {\n allowMissingId: true,\n allowSwagger: true,\n allowAPIKeyAuth: false,\n allowBearerTokenAuth: false,\n allowMultipleParameters: false,\n allowOauth2: false,\n allowMethods: [\"get\", \"post\"],\n allowConversationStarters: false,\n allowResponseSemantics: false,\n allowConfirmation: false,\n projectType: ProjectType.SME,\n isGptPlugin: false,\n };\n\n /**\n * Creates a new instance of the SpecParser class.\n * @param pathOrDoc The path to the OpenAPI specification file or the OpenAPI specification object.\n * @param options The options for parsing the OpenAPI specification file.\n */\n constructor(pathOrDoc: string | OpenAPIV3.Document, options?: ParseOptions) {\n this.pathOrSpec = pathOrDoc;\n this.parser = new SwaggerParser();\n this.options = {\n ...this.defaultOptions,\n ...(options ?? {}),\n } as Required<ParseOptions>;\n }\n\n /**\n * Validates the OpenAPI specification file and returns a validation result.\n *\n * @returns A validation result object that contains information about any errors or warnings in the specification file.\n */\n async validate(): Promise<ValidateResult> {\n try {\n let hash = \"\";\n\n try {\n await this.loadSpec();\n if (!this.parser.$refs.circular) {\n await this.parser.validate(this.spec!);\n } else {\n const clonedUnResolveSpec = JSON.parse(JSON.stringify(this.unResolveSpec));\n await this.parser.validate(clonedUnResolveSpec);\n }\n } catch (e) {\n return {\n status: ValidationStatus.Error,\n warnings: [],\n errors: [{ type: ErrorType.SpecNotValid, content: (e as Error).toString() }],\n specHash: hash,\n };\n }\n\n if (this.unResolveSpec!.servers) {\n const serverString = JSON.stringify(this.unResolveSpec!.servers);\n hash = createHash(\"sha256\").update(serverString).digest(\"hex\");\n }\n\n const errors: ErrorResult[] = [];\n const warnings: WarningResult[] = [];\n\n if (!this.options.allowSwagger && this.isSwaggerFile) {\n return {\n status: ValidationStatus.Error,\n warnings: [],\n errors: [\n { type: ErrorType.SwaggerNotSupported, content: ConstantString.SwaggerNotSupported },\n ],\n specHash: hash,\n };\n }\n\n // Remote reference not supported\n const refPaths = this.parser.$refs.paths();\n // refPaths [0] is the current spec file path\n if (refPaths.length > 1) {\n errors.push({\n type: ErrorType.RemoteRefNotSupported,\n content: Utils.format(ConstantString.RemoteRefNotSupported, refPaths.join(\", \")),\n data: refPaths,\n });\n }\n\n if (!!this.isSwaggerFile && this.options.allowSwagger) {\n warnings.push({\n type: WarningType.ConvertSwaggerToOpenAPI,\n content: ConstantString.ConvertSwaggerToOpenAPI,\n });\n }\n\n const validator = this.getValidator(this.spec!);\n const validationResult = validator.validateSpec();\n\n warnings.push(...validationResult.warnings);\n errors.push(...validationResult.errors);\n\n let status = ValidationStatus.Valid;\n if (warnings.length > 0 && errors.length === 0) {\n status = ValidationStatus.Warning;\n } else if (errors.length > 0) {\n status = ValidationStatus.Error;\n }\n\n return {\n status: status,\n warnings: warnings,\n errors: errors,\n specHash: hash,\n };\n } catch (err) {\n throw new SpecParserError((err as Error).toString(), ErrorType.ValidateFailed);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async listSupportedAPIInfo(): Promise<APIInfo[]> {\n throw new Error(\"Method not implemented.\");\n }\n\n /**\n * Lists all the OpenAPI operations in the specification file.\n * @returns A string array that represents the HTTP method and path of each operation, such as ['GET /pets/{petId}', 'GET /user/{userId}']\n * according to copilot plugin spec, only list get and post method without auth\n */\n async list(): Promise<ListAPIResult> {\n try {\n await this.loadSpec();\n const spec = this.spec!;\n const apiMap = this.getAPIs(spec);\n const result: ListAPIResult = {\n APIs: [],\n allAPICount: 0,\n validAPICount: 0,\n };\n for (const apiKey in apiMap) {\n const { operation, isValid, reason } = apiMap[apiKey];\n const [method, path] = apiKey.split(\" \");\n\n const operationId =\n operation.operationId ?? `${method.toLowerCase()}${Utils.convertPathToCamelCase(path)}`;\n\n const apiResult: ListAPIInfo = {\n api: apiKey,\n server: \"\",\n operationId: operationId,\n isValid: isValid,\n reason: reason,\n };\n\n // Try best to parse server url and auth type\n try {\n const serverObj = Utils.getServerObject(spec, method.toLocaleLowerCase(), path);\n if (serverObj) {\n apiResult.server = serverObj.url;\n }\n } catch (err) {\n // ignore\n }\n\n try {\n const authArray = Utils.getAuthArray(operation.security, spec);\n\n if (authArray.length !== 0) {\n for (const auths of authArray) {\n if (auths.length === 1) {\n apiResult.auth = auths[0];\n break;\n } else {\n apiResult.auth = {\n authScheme: { type: \"multipleAuth\" },\n name: auths.map((auth) => auth.name).join(\", \"),\n };\n }\n }\n }\n } catch (err) {\n // ignore\n }\n\n result.APIs.push(apiResult);\n }\n\n result.allAPICount = result.APIs.length;\n result.validAPICount = result.APIs.filter((api) => api.isValid).length;\n\n return result;\n } catch (err) {\n if (err instanceof SpecParserError) {\n throw err;\n }\n throw new SpecParserError((err as Error).toString(), ErrorType.ListFailed);\n }\n }\n\n /**\n * Generate specs according to the filters.\n * @param filter An array of strings that represent the filters to apply when generating the artifacts. If filter is empty, it would process nothing.\n */\n async getFilteredSpecs(\n filter: string[],\n signal?: AbortSignal\n ): Promise<[OpenAPIV3.Document, OpenAPIV3.Document]> {\n try {\n if (signal?.aborted) {\n throw new SpecParserError(ConstantString.CancelledMessage, ErrorType.Cancelled);\n }\n\n await this.loadSpec();\n if (signal?.aborted) {\n throw new SpecParserError(ConstantString.CancelledMessage, ErrorType.Cancelled);\n }\n\n const newUnResolvedSpec = SpecFilter.specFilter(\n filter,\n this.unResolveSpec!,\n this.spec!,\n this.options\n );\n\n if (signal?.aborted) {\n throw new SpecParserError(ConstantString.CancelledMessage, ErrorType.Cancelled);\n }\n\n const clonedUnResolveSpec = JSON.parse(JSON.stringify(newUnResolvedSpec));\n const newSpec = (await this.parser.dereference(clonedUnResolveSpec)) as OpenAPIV3.Document;\n return [newUnResolvedSpec, newSpec];\n } catch (err) {\n if (err instanceof SpecParserError) {\n throw err;\n }\n throw new SpecParserError((err as Error).toString(), ErrorType.GetSpecFailed);\n }\n }\n\n /**\n * Generates and update artifacts from the OpenAPI specification file. Generate Adaptive Cards, update Teams app manifest, and generate a new OpenAPI specification file.\n * @param manifestPath A file path of the Teams app manifest file to update.\n * @param filter An array of strings that represent the filters to apply when generating the artifacts. If filter is empty, it would process nothing.\n * @param outputSpecPath File path of the new OpenAPI specification file to generate. If not specified or empty, no spec file will be generated.\n * @param pluginFilePath File path of the api plugin file to generate.\n */\n async generateForCopilot(\n manifestPath: string,\n filter: string[],\n outputSpecPath: string,\n pluginFilePath: string,\n existingPluginFilePath?: string,\n signal?: AbortSignal\n ): Promise<GenerateResult> {\n const result: GenerateResult = {\n allSuccess: true,\n warnings: [],\n };\n\n try {\n const newSpecs = await this.getFilteredSpecs(filter, signal);\n const newUnResolvedSpec = newSpecs[0];\n const newSpec = newSpecs[1];\n\n const authInfo = Utils.getAuthInfo(newSpec);\n\n await this.saveFilterSpec(outputSpecPath, newUnResolvedSpec);\n\n if (signal?.aborted) {\n throw new SpecParserError(ConstantString.CancelledMessage, ErrorType.Cancelled);\n }\n\n const existingPluginManifestInfo = existingPluginFilePath\n ? {\n manifestPath: existingPluginFilePath,\n specPath: this.pathOrSpec as string,\n }\n : undefined;\n const [updatedManifest, apiPlugin, warnings] =\n await ManifestUpdater.updateManifestWithAiPlugin(\n manifestPath,\n outputSpecPath,\n pluginFilePath,\n newSpec,\n this.options,\n authInfo,\n existingPluginManifestInfo\n );\n\n result.warnings.push(...warnings);\n\n await fs.outputJSON(manifestPath, updatedManifest, { spaces: 4 });\n await fs.outputJSON(pluginFilePath, apiPlugin, { spaces: 4 });\n } catch (err) {\n if (err instanceof SpecParserError) {\n throw err;\n }\n throw new SpecParserError((err as Error).toString(), ErrorType.GenerateFailed);\n }\n\n return result;\n }\n\n /**\n * Generates and update artifacts from the OpenAPI specification file. Generate Adaptive Cards, update Teams app manifest, and generate a new OpenAPI specification file.\n * @param manifestPath A file path of the Teams app manifest file to update.\n * @param filter An array of strings that represent the filters to apply when generating the artifacts. If filter is empty, it would process nothing.\n * @param outputSpecPath File path of the new OpenAPI specification file to generate. If not specified or empty, no spec file will be generated.\n * @param adaptiveCardFolder Folder path where the Adaptive Card files will be generated. If not specified or empty, Adaptive Card files will not be generated.\n */\n async generate(\n manifestPath: string,\n filter: string[],\n outputSpecPath: string,\n adaptiveCardFolder?: string,\n signal?: AbortSignal\n ): Promise<GenerateResult> {\n const result: GenerateResult = {\n allSuccess: true,\n warnings: [],\n };\n try {\n const newSpecs = await this.getFilteredSpecs(filter, signal);\n const newUnResolvedSpec = newSpecs[0];\n const newSpec = newSpecs[1];\n let authInfo = undefined;\n\n if (this.options.projectType === ProjectType.SME) {\n authInfo = Utils.getAuthInfo(newSpec);\n }\n\n await this.saveFilterSpec(outputSpecPath, newUnResolvedSpec);\n\n if (adaptiveCardFolder) {\n for (const url in newSpec.paths) {\n for (const method in newSpec.paths[url]) {\n // paths object may contain description/summary which is not a http method, so we need to check if it is a operation object\n if (this.options.allowMethods.includes(method)) {\n const operation = (newSpec.paths[url] as any)[method] as OpenAPIV3.OperationObject;\n try {\n const [card, jsonPath] = AdaptiveCardGenerator.generateAdaptiveCard(operation);\n const safeAdaptiveCardName = operation.operationId!.replace(/[^a-zA-Z0-9]/g, \"_\");\n const fileName = path.join(adaptiveCardFolder, `${safeAdaptiveCardName}.json`);\n const wrappedCard = wrapAdaptiveCard(card, jsonPath);\n await fs.outputJSON(fileName, wrappedCard, { spaces: 2 });\n const dataFileName = path.join(\n adaptiveCardFolder,\n `${safeAdaptiveCardName}.data.json`\n );\n await fs.outputJSON(dataFileName, {}, { spaces: 2 });\n } catch (err) {\n result.allSuccess = false;\n result.warnings.push({\n type: WarningType.GenerateCardFailed,\n content: (err as Error).toString(),\n data: operation.operationId!,\n });\n }\n }\n }\n }\n }\n\n if (signal?.aborted) {\n throw new SpecParserError(ConstantString.CancelledMessage, ErrorType.Cancelled);\n }\n\n const [updatedManifest, warnings] = await ManifestUpdater.updateManifest(\n manifestPath,\n outputSpecPath,\n newSpec,\n this.options,\n adaptiveCardFolder,\n authInfo\n );\n\n await fs.outputJSON(manifestPath, updatedManifest, { spaces: 2 });\n\n result.warnings.push(...warnings);\n } catch (err) {\n if (err instanceof SpecParserError) {\n throw err;\n }\n throw new SpecParserError((err as Error).toString(), ErrorType.GenerateFailed);\n }\n\n return result;\n }\n\n private async loadSpec(): Promise<void> {\n if (!this.spec) {\n const spec = (await this.parser.parse(this.pathOrSpec)) as OpenAPIV3.Document;\n this.unResolveSpec = this.resolveEnvForSpec(spec);\n // Convert swagger 2.0 to openapi 3.0\n if (!this.unResolveSpec.openapi && (this.unResolveSpec as any).swagger === \"2.0\") {\n const specObj = await converter.convert(this.unResolveSpec as any, {});\n this.unResolveSpec = specObj.openapi as OpenAPIV3.Document;\n this.isSwaggerFile = true;\n }\n\n const clonedUnResolveSpec = JSON.parse(JSON.stringify(this.unResolveSpec));\n this.spec = (await this.parser.dereference(clonedUnResolveSpec)) as OpenAPIV3.Document;\n }\n }\n\n private getAPIs(spec: OpenAPIV3.Document): APIMap {\n const validator = this.getValidator(spec);\n const apiMap = validator.listAPIs();\n return apiMap;\n }\n\n private getValidator(spec: OpenAPIV3.Document): Validator {\n if (this.validator) {\n return this.validator;\n }\n const validator = ValidatorFactory.create(spec, this.options);\n this.validator = validator;\n return validator;\n }\n\n private async saveFilterSpec(\n outputSpecPath: string,\n unResolvedSpec: OpenAPIV3.Document\n ): Promise<void> {\n let resultStr;\n if (outputSpecPath.endsWith(\".yaml\") || outputSpecPath.endsWith(\".yml\")) {\n resultStr = jsyaml.dump(unResolvedSpec);\n } else {\n resultStr = JSON.stringify(unResolvedSpec, null, 2);\n }\n await fs.outputFile(outputSpecPath, resultStr);\n }\n\n private resolveEnvForSpec(spec: OpenAPIV3.Document): OpenAPIV3.Document {\n const specString = JSON.stringify(spec);\n const specResolved = Utils.resolveEnv(specString);\n return JSON.parse(specResolved) as OpenAPIV3.Document;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm2017.mjs","sources":["../src/interfaces.ts","../src/constants.ts","../src/specParserError.ts","../src/utils.ts","../src/validators/validator.ts","../src/validators/copilotValidator.ts","../src/validators/smeValidator.ts","../src/validators/teamsAIValidator.ts","../src/validators/validatorFactory.ts","../src/specOptimizer.ts","../src/specFilter.ts","../src/adaptiveCardGenerator.ts","../src/adaptiveCardWrapper.ts","../src/manifestUpdater.ts","../src/specParser.ts"],"sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { IParameter } from \"@microsoft/teams-manifest\";\nimport { OpenAPIV3 } from \"openapi-types\";\n\n/**\n * An interface that represents the result of validating an OpenAPI specification file.\n */\nexport interface ValidateResult {\n /**\n * The validation status of the OpenAPI specification file.\n */\n status: ValidationStatus;\n\n /**\n * An array of warning results generated during validation.\n */\n warnings: WarningResult[];\n\n /**\n * An array of error results generated during validation.\n */\n errors: ErrorResult[];\n\n specHash?: string;\n}\n\nexport interface SpecValidationResult {\n /**\n * An array of warning results generated during validation.\n */\n warnings: WarningResult[];\n\n /**\n * An array of error results generated during validation.\n */\n errors: ErrorResult[];\n}\n\n/**\n * An interface that represents a warning result generated during validation.\n */\nexport interface WarningResult {\n /**\n * The type of warning.\n */\n type: WarningType;\n\n /**\n * The content of the warning.\n */\n content: string;\n\n /**\n * data of the warning.\n */\n data?: any;\n}\n\n/**\n * An interface that represents an error result generated during validation.\n */\nexport interface ErrorResult {\n /**\n * The type of error.\n */\n type: ErrorType;\n\n /**\n * The content of the error.\n */\n content: string;\n\n /**\n * data of the error.\n */\n data?: any;\n}\n\nexport interface GenerateResult {\n allSuccess: boolean;\n warnings: WarningResult[];\n}\n\n/**\n * An enum that represents the types of errors that can occur during validation.\n */\nexport enum ErrorType {\n SpecNotValid = \"spec-not-valid\",\n RemoteRefNotSupported = \"remote-ref-not-supported\",\n NoServerInformation = \"no-server-information\",\n UrlProtocolNotSupported = \"url-protocol-not-supported\",\n RelativeServerUrlNotSupported = \"relative-server-url-not-supported\",\n NoSupportedApi = \"no-supported-api\",\n NoExtraAPICanBeAdded = \"no-extra-api-can-be-added\",\n AddedAPINotInOriginalSpec = \"added-api-not-in-original-spec\",\n ResolveServerUrlFailed = \"resolve-server-url-failed\",\n SwaggerNotSupported = \"swagger-not-supported\",\n MultipleAuthNotSupported = \"multiple-auth-not-supported\",\n SpecVersionNotSupported = \"spec-version-not-supported\",\n CircularReferenceNotSupported = \"circular-reference-not-supported\",\n\n ListFailed = \"list-failed\",\n listSupportedAPIInfoFailed = \"list-supported-api-info-failed\",\n FilterSpecFailed = \"filter-spec-failed\",\n UpdateManifestFailed = \"update-manifest-failed\",\n GenerateAdaptiveCardFailed = \"generate-adaptive-card-failed\",\n GenerateFailed = \"generate-failed\",\n ValidateFailed = \"validate-failed\",\n GetSpecFailed = \"get-spec-failed\",\n\n AuthTypeIsNotSupported = \"auth-type-is-not-supported\",\n MissingOperationId = \"missing-operation-id\",\n PostBodyContainMultipleMediaTypes = \"post-body-contain-multiple-media-types\",\n ResponseContainMultipleMediaTypes = \"response-contain-multiple-media-types\",\n ResponseJsonIsEmpty = \"response-json-is-empty\",\n PostBodySchemaIsNotJson = \"post-body-schema-is-not-json\",\n PostBodyContainsRequiredUnsupportedSchema = \"post-body-contains-required-unsupported-schema\",\n ParamsContainRequiredUnsupportedSchema = \"params-contain-required-unsupported-schema\",\n ParamsContainsNestedObject = \"params-contains-nested-object\",\n RequestBodyContainsNestedObject = \"request-body-contains-nested-object\",\n ExceededRequiredParamsLimit = \"exceeded-required-params-limit\",\n NoParameter = \"no-parameter\",\n NoAPIInfo = \"no-api-info\",\n MethodNotAllowed = \"method-not-allowed\",\n UrlPathNotExist = \"url-path-not-exist\",\n\n Cancelled = \"cancelled\",\n Unknown = \"unknown\",\n}\n\n/**\n * An enum that represents the types of warnings that can occur during validation.\n */\nexport enum WarningType {\n OperationIdMissing = \"operationid-missing\",\n GenerateCardFailed = \"generate-card-failed\",\n OperationOnlyContainsOptionalParam = \"operation-only-contains-optional-param\",\n ConvertSwaggerToOpenAPI = \"convert-swagger-to-openapi\",\n FuncDescriptionTooLong = \"function-description-too-long\",\n Unknown = \"unknown\",\n}\n\n/**\n * An enum that represents the validation status of an OpenAPI specification file.\n */\nexport enum ValidationStatus {\n Valid,\n Warning, // If there are any warnings, the file is still valid\n Error, // If there are any errors, the file is not valid\n}\n\nexport interface TextBlockElement {\n type: string;\n text: string;\n wrap: boolean;\n}\n\nexport interface ImageElement {\n type: string;\n url: string;\n $when: string;\n}\n\nexport type AdaptiveCardBody = Array<TextBlockElement | ImageElement | ArrayElement>;\n\nexport interface ArrayElement {\n type: string;\n $data: string;\n items: AdaptiveCardBody;\n}\n\nexport interface AdaptiveCard {\n type: string;\n $schema: string;\n version: string;\n body: AdaptiveCardBody;\n}\n\nexport interface PreviewCardTemplate {\n title: string;\n subtitle?: string;\n image?: {\n url: string;\n alt?: string;\n $when?: string;\n };\n}\n\nexport interface WrappedAdaptiveCard {\n version: string;\n $schema?: string;\n jsonPath?: string;\n responseLayout: string;\n responseCardTemplate: AdaptiveCard;\n previewCardTemplate: PreviewCardTemplate;\n}\n\nexport interface CheckParamResult {\n requiredNum: number;\n optionalNum: number;\n isValid: boolean;\n reason: ErrorType[];\n}\n\nexport interface ParseOptions {\n /**\n * If true, the parser will not throw an error if an ID is missing the spec file.\n */\n allowMissingId?: boolean;\n\n /**\n * If true, the parser will allow parsing of Swagger specifications.\n */\n allowSwagger?: boolean;\n\n /**\n * If true, the parser will allow API Key authentication in the spec file.\n */\n allowAPIKeyAuth?: boolean;\n\n /**\n * If true, the parser will allow Bearer Token authentication in the spec file.\n */\n allowBearerTokenAuth?: boolean;\n\n /**\n * If true, the parser will allow multiple parameters in the spec file. Teams AI project would ignore this parameters and always true\n */\n allowMultipleParameters?: boolean;\n\n /**\n * If true, the parser will allow OAuth2 authentication in the spec file. Currently only support OAuth2 with auth code flow.\n */\n allowOauth2?: boolean;\n\n /**\n * An array of HTTP methods that the parser will allow in the spec file.\n */\n allowMethods?: string[];\n\n /**\n * If true, the parser will allow conversation starters in plugin file. Only take effect in Copilot project\n */\n allowConversationStarters?: boolean;\n\n /**\n * If true, the parser will allow response semantics in plugin file. Only take effect in Copilot project\n */\n allowResponseSemantics?: boolean;\n\n /**\n * If true, the paser will allow confirmation in plugin file. Only take effect in Copilot project\n */\n allowConfirmation?: boolean;\n\n /**\n * The type of project that the parser is being used for.\n * Project can be SME/Copilot/TeamsAi\n */\n projectType?: ProjectType;\n\n /**\n * If true, we will generate files of plugin for GPT (Declarative Extensions in a Copilot Extension). Otherwise, we will generate files of plugin for Copilot.\n */\n isGptPlugin?: boolean;\n}\n\nexport enum ProjectType {\n Copilot,\n SME,\n TeamsAi,\n}\n\nexport interface APIInfo {\n method: string;\n path: string;\n title: string;\n id: string;\n parameters: IParameter[];\n description: string;\n warning?: WarningResult;\n}\n\nexport interface ListAPIInfo {\n api: string;\n server: string;\n operationId: string;\n isValid: boolean;\n reason: ErrorType[];\n auth?: AuthInfo;\n}\n\nexport interface APIMap {\n [key: string]: {\n operation: OpenAPIV3.OperationObject;\n isValid: boolean;\n reason: ErrorType[];\n };\n}\n\nexport interface APIValidationResult {\n isValid: boolean;\n reason: ErrorType[];\n}\n\nexport interface ListAPIResult {\n allAPICount: number;\n validAPICount: number;\n APIs: ListAPIInfo[];\n}\n\nexport type AuthType = OpenAPIV3.SecuritySchemeObject | { type: \"multipleAuth\" };\n\nexport interface AuthInfo {\n authScheme: AuthType;\n name: string;\n}\n\nexport interface InvalidAPIInfo {\n api: string;\n reason: ErrorType[];\n}\n\nexport interface InferredProperties {\n title?: string;\n subtitle?: string;\n imageUrl?: string;\n}\n\nexport interface ExistingPluginManifestInfo {\n manifestPath: string;\n specPath: string;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nexport class ConstantString {\n static readonly CancelledMessage = \"Operation is cancelled.\";\n static readonly NoServerInformation =\n \"No server information is found in the OpenAPI description document.\";\n static readonly RemoteRefNotSupported = \"Remote reference is not supported: %s.\";\n static readonly MissingOperationId = \"Missing operationIds: %s.\";\n static readonly NoSupportedApi =\n \"No supported API is found in the OpenAPI description document: only GET and POST methods are supported, additionally, there can be at most one required parameter, and no auth is allowed.\";\n\n static readonly AdditionalPropertiesNotSupported =\n \"'additionalProperties' is not supported, and will be ignored.\";\n static readonly SchemaNotSupported =\n \"'oneOf', 'allOf', 'anyOf', and 'not' schema are not supported: %s.\";\n static readonly UnknownSchema = \"Unknown schema: %s.\";\n\n static readonly UrlProtocolNotSupported =\n \"Server url is not correct: protocol %s is not supported, you should use https protocol instead.\";\n static readonly RelativeServerUrlNotSupported =\n \"Server url is not correct: relative server url is not supported.\";\n static readonly ResolveServerUrlFailed =\n \"Unable to resolve the server URL: please make sure that the environment variable %s is defined.\";\n static readonly OperationOnlyContainsOptionalParam =\n \"Operation %s contains multiple optional parameters. The first optional parameter is used for this command.\";\n static readonly ConvertSwaggerToOpenAPI =\n \"The Swagger 2.0 file has been converted to OpenAPI 3.0.\";\n\n static readonly SwaggerNotSupported =\n \"Swagger 2.0 is not supported. Please convert to OpenAPI 3.0 manually before proceeding.\";\n\n static readonly SpecVersionNotSupported =\n \"Unsupported OpenAPI version %s. Please use version 3.0.x.\";\n\n static readonly MultipleAuthNotSupported =\n \"Multiple authentication methods are unsupported. Ensure all selected APIs use identical authentication.\";\n\n static readonly UnsupportedSchema = \"Unsupported schema in %s %s: %s\";\n static readonly FuncDescriptionTooLong =\n \"The description of the function '%s' is too long. The current length is %s characters, while the maximum allowed length is %s characters.\";\n\n static readonly WrappedCardVersion = \"devPreview\";\n static readonly WrappedCardSchema =\n \"https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.ResponseRenderingTemplate.schema.json\";\n static readonly WrappedCardResponseLayout = \"list\";\n\n static readonly GetMethod = \"get\";\n static readonly PostMethod = \"post\";\n static readonly AdaptiveCardVersion = \"1.5\";\n static readonly AdaptiveCardSchema = \"http://adaptivecards.io/schemas/adaptive-card.json\";\n static readonly AdaptiveCardType = \"AdaptiveCard\";\n static readonly TextBlockType = \"TextBlock\";\n static readonly ImageType = \"Image\";\n static readonly ContainerType = \"Container\";\n static readonly RegistrationIdPostfix: { [key: string]: string } = {\n apiKey: \"REGISTRATION_ID\",\n oauth2: \"CONFIGURATION_ID\",\n http: \"REGISTRATION_ID\",\n openIdConnect: \"REGISTRATION_ID\",\n };\n static readonly ResponseCodeFor20X = [\n \"200\",\n \"201\",\n \"202\",\n \"203\",\n \"204\",\n \"205\",\n \"206\",\n \"207\",\n \"208\",\n \"226\",\n \"default\",\n ];\n static readonly AllOperationMethods = [\n \"get\",\n \"post\",\n \"put\",\n \"delete\",\n \"patch\",\n \"head\",\n \"options\",\n \"trace\",\n ];\n\n // TODO: update after investigating the usage of these constants.\n static readonly WellknownResultNames = [\n \"result\",\n \"data\",\n \"items\",\n \"root\",\n \"matches\",\n \"queries\",\n \"list\",\n \"output\",\n ];\n static readonly WellknownTitleName = [\"title\", \"name\", \"summary\", \"caption\", \"subject\", \"label\"];\n static readonly WellknownSubtitleName = [\n \"subtitle\",\n \"id\",\n \"uid\",\n \"description\",\n \"desc\",\n \"detail\",\n ];\n static readonly WellknownImageName = [\n \"image\",\n \"icon\",\n \"avatar\",\n \"picture\",\n \"photo\",\n \"logo\",\n \"pic\",\n \"thumbnail\",\n \"img\",\n ];\n\n static readonly ShortDescriptionMaxLens = 80;\n static readonly FullDescriptionMaxLens = 4000;\n static readonly CommandDescriptionMaxLens = 128;\n static readonly ParameterDescriptionMaxLens = 128;\n static readonly ConversationStarterMaxLens = 50;\n static readonly CommandTitleMaxLens = 32;\n static readonly ParameterTitleMaxLens = 32;\n static readonly SMERequiredParamsMaxNum = 5;\n static readonly FunctionDescriptionMaxLens = 100;\n static readonly DefaultPluginId = \"plugin_1\";\n static readonly PluginManifestSchema =\n \"https://developer.microsoft.com/json-schemas/copilot/plugin/v2.1/schema.json\";\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { ErrorType } from \"./interfaces\";\n\nexport class SpecParserError extends Error {\n public readonly errorType: ErrorType;\n\n constructor(message: string, errorType: ErrorType) {\n super(message);\n this.errorType = errorType;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { OpenAPIV3 } from \"openapi-types\";\nimport { ConstantString } from \"./constants\";\nimport {\n AdaptiveCardBody,\n ArrayElement,\n AuthInfo,\n AuthType,\n ErrorResult,\n ErrorType,\n ParseOptions,\n} from \"./interfaces\";\nimport { IMessagingExtensionCommand, IParameter } from \"@microsoft/teams-manifest\";\nimport { SpecParserError } from \"./specParserError\";\n\nexport class Utils {\n static hasNestedObjectInSchema(schema: OpenAPIV3.SchemaObject): boolean {\n if (schema.type === \"object\") {\n for (const property in schema.properties) {\n const nestedSchema = schema.properties[property] as OpenAPIV3.SchemaObject;\n if (nestedSchema.type === \"object\") {\n return true;\n }\n }\n }\n return false;\n }\n\n static containMultipleMediaTypes(\n bodyObject: OpenAPIV3.RequestBodyObject | OpenAPIV3.ResponseObject\n ): boolean {\n return Object.keys(bodyObject?.content || {}).length > 1;\n }\n\n static isBearerTokenAuth(authScheme: AuthType): boolean {\n return authScheme.type === \"http\" && authScheme.scheme === \"bearer\";\n }\n\n static isAPIKeyAuth(authScheme: AuthType): boolean {\n return authScheme.type === \"apiKey\";\n }\n\n static isOAuthWithAuthCodeFlow(authScheme: AuthType): boolean {\n return !!(\n authScheme.type === \"oauth2\" &&\n authScheme.flows &&\n authScheme.flows.authorizationCode\n );\n }\n\n static getAuthArray(\n securities: OpenAPIV3.SecurityRequirementObject[] | undefined,\n spec: OpenAPIV3.Document\n ): AuthInfo[][] {\n const result: AuthInfo[][] = [];\n const securitySchemas = spec.components?.securitySchemes;\n const securitiesArr = securities ?? spec.security;\n if (securitiesArr && securitySchemas) {\n for (let i = 0; i < securitiesArr.length; i++) {\n const security = securitiesArr[i];\n\n const authArray: AuthInfo[] = [];\n for (const name in security) {\n const auth = securitySchemas[name] as OpenAPIV3.SecuritySchemeObject;\n authArray.push({\n authScheme: auth,\n name: name,\n });\n }\n\n if (authArray.length > 0) {\n result.push(authArray);\n }\n }\n }\n\n result.sort((a, b) => a[0].name.localeCompare(b[0].name));\n\n return result;\n }\n\n static getAuthInfo(spec: OpenAPIV3.Document): AuthInfo | undefined {\n let authInfo: AuthInfo | undefined = undefined;\n\n for (const url in spec.paths) {\n for (const method in spec.paths[url]) {\n const operation = (spec.paths[url] as any)[method] as OpenAPIV3.OperationObject;\n\n const authArray = Utils.getAuthArray(operation.security, spec);\n\n if (authArray && authArray.length > 0) {\n const currentAuth = authArray[0][0];\n if (!authInfo) {\n authInfo = authArray[0][0];\n } else if (authInfo.name !== currentAuth.name) {\n throw new SpecParserError(\n ConstantString.MultipleAuthNotSupported,\n ErrorType.MultipleAuthNotSupported\n );\n }\n }\n }\n }\n\n return authInfo;\n }\n\n static updateFirstLetter(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n static getResponseJson(\n operationObject: OpenAPIV3.OperationObject | undefined,\n allowMultipleMediaType = false\n ): {\n json: OpenAPIV3.MediaTypeObject;\n multipleMediaType: boolean;\n } {\n let json: OpenAPIV3.MediaTypeObject = {};\n let multipleMediaType = false;\n\n for (const code of ConstantString.ResponseCodeFor20X) {\n const responseObject = operationObject?.responses?.[code] as OpenAPIV3.ResponseObject;\n\n if (responseObject?.content) {\n for (const contentType of Object.keys(responseObject.content)) {\n // json media type can also be \"application/json; charset=utf-8\"\n if (contentType.indexOf(\"application/json\") >= 0) {\n multipleMediaType = false;\n json = responseObject.content[contentType];\n if (Utils.containMultipleMediaTypes(responseObject)) {\n multipleMediaType = true;\n if (!allowMultipleMediaType) {\n json = {};\n }\n } else {\n return { json, multipleMediaType };\n }\n }\n }\n }\n }\n\n return { json, multipleMediaType };\n }\n\n static convertPathToCamelCase(path: string): string {\n const pathSegments = path.split(/[./{]/);\n const camelCaseSegments = pathSegments.map((segment) => {\n segment = segment.replace(/}/g, \"\");\n return segment.charAt(0).toUpperCase() + segment.slice(1);\n });\n const camelCasePath = camelCaseSegments.join(\"\");\n return camelCasePath;\n }\n\n static getUrlProtocol(urlString: string): string | undefined {\n try {\n const url = new URL(urlString);\n return url.protocol;\n } catch (err) {\n return undefined;\n }\n }\n\n static resolveEnv(str: string): string {\n const placeHolderReg = /\\${{\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*}}/g;\n let matches = placeHolderReg.exec(str);\n let newStr = str;\n while (matches != null) {\n const envVar = matches[1];\n const envVal = process.env[envVar];\n if (!envVal) {\n throw new Error(Utils.format(ConstantString.ResolveServerUrlFailed, envVar));\n } else {\n newStr = newStr.replace(matches[0], envVal);\n }\n matches = placeHolderReg.exec(str);\n }\n return newStr;\n }\n\n static checkServerUrl(servers: OpenAPIV3.ServerObject[]): ErrorResult[] {\n const errors: ErrorResult[] = [];\n\n let serverUrl;\n try {\n serverUrl = Utils.resolveEnv(servers[0].url);\n } catch (err) {\n errors.push({\n type: ErrorType.ResolveServerUrlFailed,\n content: (err as Error).message,\n data: servers,\n });\n return errors;\n }\n\n const protocol = Utils.getUrlProtocol(serverUrl);\n if (!protocol) {\n // Relative server url is not supported\n errors.push({\n type: ErrorType.RelativeServerUrlNotSupported,\n content: ConstantString.RelativeServerUrlNotSupported,\n data: servers,\n });\n } else if (protocol !== \"https:\") {\n // Http server url is not supported\n const protocolString = protocol.slice(0, -1);\n errors.push({\n type: ErrorType.UrlProtocolNotSupported,\n content: Utils.format(ConstantString.UrlProtocolNotSupported, protocol.slice(0, -1)),\n data: protocolString,\n });\n }\n\n return errors;\n }\n\n static validateServer(spec: OpenAPIV3.Document, options: ParseOptions): ErrorResult[] {\n const errors: ErrorResult[] = [];\n\n let hasTopLevelServers = false;\n let hasPathLevelServers = false;\n let hasOperationLevelServers = false;\n\n if (spec.servers && spec.servers.length >= 1) {\n hasTopLevelServers = true;\n\n // for multiple server, we only use the first url\n const serverErrors = Utils.checkServerUrl(spec.servers);\n errors.push(...serverErrors);\n }\n\n const paths = spec.paths;\n for (const path in paths) {\n const methods = paths[path];\n\n if (methods?.servers && methods.servers.length >= 1) {\n hasPathLevelServers = true;\n const serverErrors = Utils.checkServerUrl(methods.servers);\n\n errors.push(...serverErrors);\n }\n\n for (const method in methods) {\n const operationObject = (methods as any)[method] as OpenAPIV3.OperationObject;\n if (options.allowMethods?.includes(method) && operationObject) {\n if (operationObject?.servers && operationObject.servers.length >= 1) {\n hasOperationLevelServers = true;\n const serverErrors = Utils.checkServerUrl(operationObject.servers);\n errors.push(...serverErrors);\n }\n }\n }\n }\n\n if (!hasTopLevelServers && !hasPathLevelServers && !hasOperationLevelServers) {\n errors.push({\n type: ErrorType.NoServerInformation,\n content: ConstantString.NoServerInformation,\n });\n }\n\n return errors;\n }\n\n static isWellKnownName(name: string, wellknownNameList: string[]): boolean {\n for (let i = 0; i < wellknownNameList.length; i++) {\n name = name.replace(/_/g, \"\").replace(/-/g, \"\");\n if (name.toLowerCase().includes(wellknownNameList[i])) {\n return true;\n }\n }\n return false;\n }\n\n static generateParametersFromSchema(\n schema: OpenAPIV3.SchemaObject,\n name: string,\n allowMultipleParameters: boolean,\n isRequired = false\n ): [IParameter[], IParameter[]] {\n const requiredParams: IParameter[] = [];\n const optionalParams: IParameter[] = [];\n\n if (\n schema.type === \"string\" ||\n schema.type === \"integer\" ||\n schema.type === \"boolean\" ||\n schema.type === \"number\"\n ) {\n const parameter: IParameter = {\n name: name,\n title: Utils.updateFirstLetter(name).slice(0, ConstantString.ParameterTitleMaxLens),\n description: (schema.description ?? \"\").slice(\n 0,\n ConstantString.ParameterDescriptionMaxLens\n ),\n };\n\n if (allowMultipleParameters) {\n Utils.updateParameterWithInputType(schema, parameter);\n }\n\n if (isRequired && schema.default === undefined) {\n parameter.isRequired = true;\n requiredParams.push(parameter);\n } else {\n optionalParams.push(parameter);\n }\n } else if (schema.type === \"object\") {\n const { properties } = schema;\n for (const property in properties) {\n let isRequired = false;\n if (schema.required && schema.required?.indexOf(property) >= 0) {\n isRequired = true;\n }\n const [requiredP, optionalP] = Utils.generateParametersFromSchema(\n properties[property] as OpenAPIV3.SchemaObject,\n property,\n allowMultipleParameters,\n isRequired\n );\n\n requiredParams.push(...requiredP);\n optionalParams.push(...optionalP);\n }\n }\n\n return [requiredParams, optionalParams];\n }\n\n static updateParameterWithInputType(schema: OpenAPIV3.SchemaObject, param: IParameter): void {\n if (schema.enum) {\n param.inputType = \"choiceset\";\n param.choices = [];\n for (let i = 0; i < schema.enum.length; i++) {\n param.choices.push({\n title: schema.enum[i],\n value: schema.enum[i],\n });\n }\n } else if (schema.type === \"string\") {\n param.inputType = \"text\";\n } else if (schema.type === \"integer\" || schema.type === \"number\") {\n param.inputType = \"number\";\n } else if (schema.type === \"boolean\") {\n param.inputType = \"toggle\";\n }\n\n if (schema.default) {\n param.value = schema.default;\n }\n }\n\n static parseApiInfo(\n operationItem: OpenAPIV3.OperationObject,\n options: ParseOptions\n ): IMessagingExtensionCommand {\n const requiredParams: IParameter[] = [];\n const optionalParams: IParameter[] = [];\n const paramObject = operationItem.parameters as OpenAPIV3.ParameterObject[];\n\n if (paramObject) {\n paramObject.forEach((param: OpenAPIV3.ParameterObject) => {\n const parameter: IParameter = {\n name: param.name,\n title: Utils.updateFirstLetter(param.name).slice(0, ConstantString.ParameterTitleMaxLens),\n description: (param.description ?? \"\").slice(\n 0,\n ConstantString.ParameterDescriptionMaxLens\n ),\n };\n\n const schema = param.schema as OpenAPIV3.SchemaObject;\n if (options.allowMultipleParameters && schema) {\n Utils.updateParameterWithInputType(schema, parameter);\n }\n\n if (param.in !== \"header\" && param.in !== \"cookie\") {\n if (param.required && schema?.default === undefined) {\n parameter.isRequired = true;\n requiredParams.push(parameter);\n } else {\n optionalParams.push(parameter);\n }\n }\n });\n }\n\n if (operationItem.requestBody) {\n const requestBody = operationItem.requestBody as OpenAPIV3.RequestBodyObject;\n const requestJson = requestBody.content[\"application/json\"];\n if (Object.keys(requestJson).length !== 0) {\n const schema = requestJson.schema as OpenAPIV3.SchemaObject;\n const [requiredP, optionalP] = Utils.generateParametersFromSchema(\n schema,\n \"requestBody\",\n !!options.allowMultipleParameters,\n requestBody.required\n );\n requiredParams.push(...requiredP);\n optionalParams.push(...optionalP);\n }\n }\n\n const operationId = operationItem.operationId!;\n\n const parameters = [...requiredParams, ...optionalParams];\n\n const command: IMessagingExtensionCommand = {\n context: [\"compose\"],\n type: \"query\",\n title: (operationItem.summary ?? \"\").slice(0, ConstantString.CommandTitleMaxLens),\n id: operationId,\n parameters: parameters,\n description: (operationItem.description ?? \"\").slice(\n 0,\n ConstantString.CommandDescriptionMaxLens\n ),\n };\n return command;\n }\n\n static format(str: string, ...args: string[]): string {\n let index = 0;\n return str.replace(/%s/g, () => {\n const arg = args[index++];\n return arg !== undefined ? arg : \"\";\n });\n }\n\n static getSafeRegistrationIdEnvName(authName: string): string {\n if (!authName) {\n return \"\";\n }\n\n let safeRegistrationIdEnvName = authName.toUpperCase().replace(/[^A-Z0-9_]/g, \"_\");\n\n if (!safeRegistrationIdEnvName.match(/^[A-Z]/)) {\n safeRegistrationIdEnvName = \"PREFIX_\" + safeRegistrationIdEnvName;\n }\n\n return safeRegistrationIdEnvName;\n }\n\n static getServerObject(\n spec: OpenAPIV3.Document,\n method: string,\n path: string\n ): OpenAPIV3.ServerObject | undefined {\n const pathObj = spec.paths[path] as any;\n\n const operationObject = pathObj[method] as OpenAPIV3.OperationObject;\n\n const rootServer = spec.servers && spec.servers[0];\n const methodServer = spec.paths[path]!.servers && spec.paths[path]!.servers![0];\n const operationServer = operationObject.servers && operationObject.servers[0];\n\n const serverUrl = operationServer || methodServer || rootServer;\n\n return serverUrl;\n }\n\n static limitACBodyProperties(body: AdaptiveCardBody, maxCount: number): AdaptiveCardBody {\n const result: AdaptiveCardBody = [];\n let currentCount = 0;\n\n for (const element of body) {\n if (element.type === ConstantString.ContainerType) {\n const items = this.limitACBodyProperties(\n (element as ArrayElement).items,\n maxCount - currentCount\n );\n\n result.push({\n type: ConstantString.ContainerType,\n $data: (element as ArrayElement).$data,\n items: items,\n });\n\n currentCount += items.length;\n } else {\n result.push(element);\n currentCount++;\n }\n\n if (currentCount >= maxCount) {\n break;\n }\n }\n\n return result;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { OpenAPIV3 } from \"openapi-types\";\nimport {\n ParseOptions,\n APIValidationResult,\n ErrorType,\n CheckParamResult,\n ProjectType,\n APIMap,\n SpecValidationResult,\n WarningType,\n InvalidAPIInfo,\n} from \"../interfaces\";\nimport { Utils } from \"../utils\";\nimport { ConstantString } from \"../constants\";\n\nexport abstract class Validator {\n projectType!: ProjectType;\n spec!: OpenAPIV3.Document;\n options!: ParseOptions;\n\n private apiMap: APIMap | undefined;\n private hasCircularReference = false;\n\n abstract validateAPI(method: string, path: string): APIValidationResult;\n abstract validateSpec(): SpecValidationResult;\n\n protected checkCircularReference(): void {\n try {\n JSON.stringify(this.spec);\n } catch (e) {\n if ((e as Error).message.includes(\"Converting circular structure to JSON\")) {\n this.hasCircularReference = true;\n }\n }\n }\n\n listAPIs(): APIMap {\n if (this.apiMap) {\n return this.apiMap;\n }\n\n const paths = this.spec.paths;\n const result: APIMap = {};\n for (const path in paths) {\n const methods = paths[path];\n for (const method in methods) {\n const operationObject = (methods as any)[method] as OpenAPIV3.OperationObject;\n if (this.options.allowMethods?.includes(method) && operationObject) {\n const validateResult = this.validateAPI(method, path);\n result[`${method.toUpperCase()} ${path}`] = {\n operation: operationObject,\n isValid: validateResult.isValid,\n reason: validateResult.reason,\n };\n }\n }\n }\n\n this.apiMap = result;\n return result;\n }\n\n protected validateSpecVersion(): SpecValidationResult {\n const result: SpecValidationResult = { errors: [], warnings: [] };\n\n if (this.spec.openapi >= \"3.1.0\") {\n result.errors.push({\n type: ErrorType.SpecVersionNotSupported,\n content: Utils.format(ConstantString.SpecVersionNotSupported, this.spec.openapi),\n data: this.spec.openapi,\n });\n }\n\n return result;\n }\n\n protected validateSpecServer(): SpecValidationResult {\n const result: SpecValidationResult = { errors: [], warnings: [] };\n const serverErrors = Utils.validateServer(this.spec, this.options);\n result.errors.push(...serverErrors);\n return result;\n }\n\n protected validateSpecNoSupportAPI(): SpecValidationResult {\n const result: SpecValidationResult = { errors: [], warnings: [] };\n\n const apiMap = this.listAPIs();\n\n const validAPIs = Object.entries(apiMap).filter(([, value]) => value.isValid);\n if (validAPIs.length === 0) {\n const data = [];\n for (const key in apiMap) {\n const { reason } = apiMap[key];\n const apiInvalidReason: InvalidAPIInfo = { api: key, reason: reason };\n data.push(apiInvalidReason);\n }\n\n result.errors.push({\n type: ErrorType.NoSupportedApi,\n content: ConstantString.NoSupportedApi,\n data,\n });\n }\n\n return result;\n }\n\n protected validateSpecOperationId(): SpecValidationResult {\n const result: SpecValidationResult = { errors: [], warnings: [] };\n const apiMap = this.listAPIs();\n\n // OperationId missing\n const apisMissingOperationId: string[] = [];\n for (const key in apiMap) {\n const { operation } = apiMap[key];\n if (!operation.operationId) {\n apisMissingOperationId.push(key);\n }\n }\n\n if (apisMissingOperationId.length > 0) {\n result.warnings.push({\n type: WarningType.OperationIdMissing,\n content: Utils.format(ConstantString.MissingOperationId, apisMissingOperationId.join(\", \")),\n data: apisMissingOperationId,\n });\n }\n\n return result;\n }\n\n protected validateMethodAndPath(method: string, path: string): APIValidationResult {\n const result: APIValidationResult = { isValid: true, reason: [] };\n\n if (this.options.allowMethods && !this.options.allowMethods.includes(method)) {\n result.isValid = false;\n result.reason.push(ErrorType.MethodNotAllowed);\n return result;\n }\n\n const pathObj = this.spec.paths[path] as any;\n\n if (!pathObj || !pathObj[method]) {\n result.isValid = false;\n result.reason.push(ErrorType.UrlPathNotExist);\n return result;\n }\n\n return result;\n }\n\n protected validateCircularReference(method: string, path: string): APIValidationResult {\n const result: APIValidationResult = { isValid: true, reason: [] };\n if (this.hasCircularReference) {\n const operationObject = (this.spec.paths[path] as any)[method] as OpenAPIV3.OperationObject;\n try {\n JSON.stringify(operationObject);\n } catch (e) {\n if ((e as Error).message.includes(\"Converting circular structure to JSON\")) {\n result.isValid = false;\n result.reason.push(ErrorType.CircularReferenceNotSupported);\n }\n }\n }\n\n return result;\n }\n\n protected validateResponse(method: string, path: string): APIValidationResult {\n const result: APIValidationResult = { isValid: true, reason: [] };\n\n const operationObject = (this.spec.paths[path] as any)[method] as OpenAPIV3.OperationObject;\n\n const { json, multipleMediaType } = Utils.getResponseJson(operationObject);\n\n if (this.options.projectType === ProjectType.SME) {\n // only support response body only contains “application/json” content type\n if (multipleMediaType) {\n result.reason.push(ErrorType.ResponseContainMultipleMediaTypes);\n } else if (Object.keys(json).length === 0) {\n // response body should not be empty\n result.reason.push(ErrorType.ResponseJsonIsEmpty);\n }\n }\n\n return result;\n }\n\n protected validateServer(method: string, path: string): APIValidationResult {\n const result: APIValidationResult = { isValid: true, reason: [] };\n const serverObj = Utils.getServerObject(this.spec, method, path);\n if (!serverObj) {\n // should contain server URL\n result.reason.push(ErrorType.NoServerInformation);\n } else {\n // server url should be absolute url with https protocol\n const serverValidateResult = Utils.checkServerUrl([serverObj]);\n result.reason.push(...serverValidateResult.map((item) => item.type));\n }\n\n return result;\n }\n\n protected validateAuth(method: string, path: string): APIValidationResult {\n const pathObj = this.spec.paths[path] as any;\n const operationObject = pathObj[method] as OpenAPIV3.OperationObject;\n\n const securities = operationObject.security;\n const authSchemeArray = Utils.getAuthArray(securities, this.spec);\n\n if (authSchemeArray.length === 0) {\n return { isValid: true, reason: [] };\n }\n\n if (\n this.options.allowAPIKeyAuth ||\n this.options.allowOauth2 ||\n this.options.allowBearerTokenAuth\n ) {\n // Currently we don't support multiple auth in one operation\n if (authSchemeArray.length > 0 && authSchemeArray.every((auths) => auths.length > 1)) {\n return {\n isValid: false,\n reason: [ErrorType.MultipleAuthNotSupported],\n };\n }\n\n for (const auths of authSchemeArray) {\n if (auths.length === 1) {\n if (\n (this.options.allowAPIKeyAuth && Utils.isAPIKeyAuth(auths[0].authScheme)) ||\n (this.options.allowOauth2 && Utils.isOAuthWithAuthCodeFlow(auths[0].authScheme)) ||\n (this.options.allowBearerTokenAuth && Utils.isBearerTokenAuth(auths[0].authScheme))\n ) {\n return { isValid: true, reason: [] };\n }\n }\n }\n }\n\n return { isValid: false, reason: [ErrorType.AuthTypeIsNotSupported] };\n }\n\n protected checkPostBodySchema(\n schema: OpenAPIV3.SchemaObject,\n isRequired = false\n ): CheckParamResult {\n const paramResult: CheckParamResult = {\n requiredNum: 0,\n optionalNum: 0,\n isValid: true,\n reason: [],\n };\n\n if (Object.keys(schema).length === 0) {\n return paramResult;\n }\n\n const isRequiredWithoutDefault = isRequired && schema.default === undefined;\n const isCopilot = this.projectType === ProjectType.Copilot;\n\n if (isCopilot && this.hasNestedObjectInSchema(schema)) {\n paramResult.isValid = false;\n paramResult.reason = [ErrorType.RequestBodyContainsNestedObject];\n return paramResult;\n }\n\n if (\n schema.type === \"string\" ||\n schema.type === \"integer\" ||\n schema.type === \"boolean\" ||\n schema.type === \"number\"\n ) {\n if (isRequiredWithoutDefault) {\n paramResult.requiredNum = paramResult.requiredNum + 1;\n } else {\n paramResult.optionalNum = paramResult.optionalNum + 1;\n }\n } else if (schema.type === \"object\") {\n const { properties } = schema;\n for (const property in properties) {\n let isRequired = false;\n if (schema.required && schema.required?.indexOf(property) >= 0) {\n isRequired = true;\n }\n const result = this.checkPostBodySchema(\n properties[property] as OpenAPIV3.SchemaObject,\n isRequired\n );\n paramResult.requiredNum += result.requiredNum;\n paramResult.optionalNum += result.optionalNum;\n paramResult.isValid = paramResult.isValid && result.isValid;\n paramResult.reason.push(...result.reason);\n }\n } else {\n if (isRequiredWithoutDefault && !isCopilot) {\n paramResult.isValid = false;\n paramResult.reason.push(ErrorType.PostBodyContainsRequiredUnsupportedSchema);\n }\n }\n return paramResult;\n }\n\n protected checkParamSchema(paramObject: OpenAPIV3.ParameterObject[]): CheckParamResult {\n const paramResult: CheckParamResult = {\n requiredNum: 0,\n optionalNum: 0,\n isValid: true,\n reason: [],\n };\n\n if (!paramObject) {\n return paramResult;\n }\n\n const isCopilot = this.projectType === ProjectType.Copilot;\n\n for (let i = 0; i < paramObject.length; i++) {\n const param = paramObject[i];\n const schema = param.schema as OpenAPIV3.SchemaObject;\n\n if (isCopilot && this.hasNestedObjectInSchema(schema)) {\n paramResult.isValid = false;\n paramResult.reason.push(ErrorType.ParamsContainsNestedObject);\n continue;\n }\n\n const isRequiredWithoutDefault = param.required && schema.default === undefined;\n\n if (isCopilot) {\n if (isRequiredWithoutDefault) {\n paramResult.requiredNum = paramResult.requiredNum + 1;\n } else {\n paramResult.optionalNum = paramResult.optionalNum + 1;\n }\n continue;\n }\n\n if (param.in === \"header\" || param.in === \"cookie\") {\n if (isRequiredWithoutDefault) {\n paramResult.isValid = false;\n paramResult.reason.push(ErrorType.ParamsContainRequiredUnsupportedSchema);\n }\n continue;\n }\n\n if (\n schema.type !== \"boolean\" &&\n schema.type !== \"string\" &&\n schema.type !== \"number\" &&\n schema.type !== \"integer\"\n ) {\n if (isRequiredWithoutDefault) {\n paramResult.isValid = false;\n paramResult.reason.push(ErrorType.ParamsContainRequiredUnsupportedSchema);\n }\n continue;\n }\n\n if (param.in === \"query\" || param.in === \"path\") {\n if (isRequiredWithoutDefault) {\n paramResult.requiredNum = paramResult.requiredNum + 1;\n } else {\n paramResult.optionalNum = paramResult.optionalNum + 1;\n }\n }\n }\n\n return paramResult;\n }\n\n private hasNestedObjectInSchema(schema: OpenAPIV3.SchemaObject): boolean {\n if (schema.type === \"object\") {\n for (const property in schema.properties) {\n const nestedSchema = schema.properties[property] as OpenAPIV3.SchemaObject;\n if (nestedSchema.type === \"object\") {\n return true;\n }\n }\n }\n return false;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { OpenAPIV3 } from \"openapi-types\";\nimport {\n ParseOptions,\n APIValidationResult,\n ErrorType,\n ProjectType,\n SpecValidationResult,\n} from \"../interfaces\";\nimport { Validator } from \"./validator\";\n\nexport class CopilotValidator extends Validator {\n constructor(spec: OpenAPIV3.Document, options: ParseOptions) {\n super();\n this.projectType = ProjectType.Copilot;\n this.options = options;\n this.spec = spec;\n this.checkCircularReference();\n }\n\n validateSpec(): SpecValidationResult {\n const result: SpecValidationResult = { errors: [], warnings: [] };\n\n // validate spec version\n let validationResult = this.validateSpecVersion();\n result.errors.push(...validationResult.errors);\n\n // validate spec server\n validationResult = this.validateSpecServer();\n result.errors.push(...validationResult.errors);\n\n // validate no supported API\n validationResult = this.validateSpecNoSupportAPI();\n result.errors.push(...validationResult.errors);\n\n // validate operationId missing\n validationResult = this.validateSpecOperationId();\n result.warnings.push(...validationResult.warnings);\n\n return result;\n }\n\n validateAPI(method: string, path: string): APIValidationResult {\n const result: APIValidationResult = { isValid: true, reason: [] };\n method = method.toLocaleLowerCase();\n\n // validate method and path\n const methodAndPathResult = this.validateMethodAndPath(method, path);\n if (!methodAndPathResult.isValid) {\n return methodAndPathResult;\n }\n\n const circularReferenceResult = this.validateCircularReference(method, path);\n if (!circularReferenceResult.isValid) {\n return circularReferenceResult;\n }\n\n const operationObject = (this.spec.paths[path] as any)[method] as OpenAPIV3.OperationObject;\n\n // validate auth\n const authCheckResult = this.validateAuth(method, path);\n result.reason.push(...authCheckResult.reason);\n\n // validate operationId\n if (!this.options.allowMissingId && !operationObject.operationId) {\n result.reason.push(ErrorType.MissingOperationId);\n }\n\n // validate server\n const validateServerResult = this.validateServer(method, path);\n result.reason.push(...validateServerResult.reason);\n\n // validate response\n const validateResponseResult = this.validateResponse(method, path);\n result.reason.push(...validateResponseResult.reason);\n\n // validate requestBody\n const requestBody = operationObject.requestBody as OpenAPIV3.RequestBodyObject;\n const requestJsonBody = requestBody?.content[\"application/json\"];\n\n if (requestJsonBody) {\n const requestBodySchema = requestJsonBody.schema as OpenAPIV3.SchemaObject;\n\n if (requestBodySchema.type !== \"object\") {\n result.reason.push(ErrorType.PostBodySchemaIsNotJson);\n }\n\n const requestBodyParamResult = this.checkPostBodySchema(\n requestBodySchema,\n requestBody.required\n );\n result.reason.push(...requestBodyParamResult.reason);\n }\n\n // validate parameters\n const paramObject = operationObject.parameters as OpenAPIV3.ParameterObject[];\n const paramResult = this.checkParamSchema(paramObject);\n result.reason.push(...paramResult.reason);\n\n if (result.reason.length > 0) {\n result.isValid = false;\n }\n\n return result;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { OpenAPIV3 } from \"openapi-types\";\nimport {\n ParseOptions,\n APIValidationResult,\n ErrorType,\n ProjectType,\n CheckParamResult,\n SpecValidationResult,\n} from \"../interfaces\";\nimport { Validator } from \"./validator\";\nimport { Utils } from \"../utils\";\n\nexport class SMEValidator extends Validator {\n private static readonly SMERequiredParamsMaxNum = 5;\n\n constructor(spec: OpenAPIV3.Document, options: ParseOptions) {\n super();\n this.projectType = ProjectType.SME;\n this.options = options;\n this.spec = spec;\n this.checkCircularReference();\n }\n\n validateSpec(): SpecValidationResult {\n const result: SpecValidationResult = { errors: [], warnings: [] };\n\n // validate spec version\n let validationResult = this.validateSpecVersion();\n result.errors.push(...validationResult.errors);\n\n // validate spec server\n validationResult = this.validateSpecServer();\n result.errors.push(...validationResult.errors);\n\n // validate no supported API\n validationResult = this.validateSpecNoSupportAPI();\n result.errors.push(...validationResult.errors);\n\n // validate operationId missing\n if (this.options.allowMissingId) {\n validationResult = this.validateSpecOperationId();\n result.warnings.push(...validationResult.warnings);\n }\n\n return result;\n }\n\n validateAPI(method: string, path: string): APIValidationResult {\n const result: APIValidationResult = { isValid: true, reason: [] };\n method = method.toLocaleLowerCase();\n\n // validate method and path\n const methodAndPathResult = this.validateMethodAndPath(method, path);\n if (!methodAndPathResult.isValid) {\n return methodAndPathResult;\n }\n\n const circularReferenceResult = this.validateCircularReference(method, path);\n if (!circularReferenceResult.isValid) {\n return circularReferenceResult;\n }\n\n const operationObject = (this.spec.paths[path] as any)[method] as OpenAPIV3.OperationObject;\n\n // validate auth\n const authCheckResult = this.validateAuth(method, path);\n result.reason.push(...authCheckResult.reason);\n\n // validate operationId\n if (!this.options.allowMissingId && !operationObject.operationId) {\n result.reason.push(ErrorType.MissingOperationId);\n }\n\n // validate server\n const validateServerResult = this.validateServer(method, path);\n result.reason.push(...validateServerResult.reason);\n\n // validate response\n const validateResponseResult = this.validateResponse(method, path);\n result.reason.push(...validateResponseResult.reason);\n\n let postBodyResult: CheckParamResult = {\n requiredNum: 0,\n optionalNum: 0,\n isValid: true,\n reason: [],\n };\n\n // validate requestBody\n const requestBody = operationObject.requestBody as OpenAPIV3.RequestBodyObject;\n const requestJsonBody = requestBody?.content[\"application/json\"];\n\n if (Utils.containMultipleMediaTypes(requestBody)) {\n result.reason.push(ErrorType.PostBodyContainMultipleMediaTypes);\n }\n\n if (requestJsonBody) {\n const requestBodySchema = requestJsonBody.schema as OpenAPIV3.SchemaObject;\n\n postBodyResult = this.checkPostBodySchema(requestBodySchema, requestBody.required);\n result.reason.push(...postBodyResult.reason);\n }\n\n // validate parameters\n const paramObject = operationObject.parameters as OpenAPIV3.ParameterObject[];\n const paramResult = this.checkParamSchema(paramObject);\n result.reason.push(...paramResult.reason);\n\n // validate total parameters count\n if (paramResult.isValid && postBodyResult.isValid) {\n const paramCountResult = this.validateParamCount(postBodyResult, paramResult);\n result.reason.push(...paramCountResult.reason);\n }\n\n if (result.reason.length > 0) {\n result.isValid = false;\n }\n\n return result;\n }\n\n private validateParamCount(\n postBodyResult: CheckParamResult,\n paramResult: CheckParamResult\n ): APIValidationResult {\n const result: APIValidationResult = { isValid: true, reason: [] };\n const totalRequiredParams = postBodyResult.requiredNum + paramResult.requiredNum;\n const totalParams = totalRequiredParams + postBodyResult.optionalNum + paramResult.optionalNum;\n\n if (totalRequiredParams > 1) {\n if (\n !this.options.allowMultipleParameters ||\n totalRequiredParams > SMEValidator.SMERequiredParamsMaxNum\n ) {\n result.reason.push(ErrorType.ExceededRequiredParamsLimit);\n }\n } else if (totalParams === 0) {\n result.reason.push(ErrorType.NoParameter);\n }\n\n return result;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { OpenAPIV3 } from \"openapi-types\";\nimport {\n ParseOptions,\n APIValidationResult,\n ErrorType,\n ProjectType,\n SpecValidationResult,\n} from \"../interfaces\";\nimport { Validator } from \"./validator\";\n\nexport class TeamsAIValidator extends Validator {\n constructor(spec: OpenAPIV3.Document, options: ParseOptions) {\n super();\n this.projectType = ProjectType.TeamsAi;\n this.options = options;\n this.spec = spec;\n this.checkCircularReference();\n }\n\n validateSpec(): SpecValidationResult {\n const result: SpecValidationResult = { errors: [], warnings: [] };\n\n // validate spec server\n let validationResult = this.validateSpecServer();\n result.errors.push(...validationResult.errors);\n\n // validate no supported API\n validationResult = this.validateSpecNoSupportAPI();\n result.errors.push(...validationResult.errors);\n\n return result;\n }\n\n validateAPI(method: string, path: string): APIValidationResult {\n const result: APIValidationResult = { isValid: true, reason: [] };\n method = method.toLocaleLowerCase();\n\n // validate method and path\n const methodAndPathResult = this.validateMethodAndPath(method, path);\n if (!methodAndPathResult.isValid) {\n return methodAndPathResult;\n }\n\n const circularReferenceResult = this.validateCircularReference(method, path);\n if (!circularReferenceResult.isValid) {\n return circularReferenceResult;\n }\n\n const operationObject = (this.spec.paths[path] as any)[method] as OpenAPIV3.OperationObject;\n\n // validate operationId\n if (!this.options.allowMissingId && !operationObject.operationId) {\n result.reason.push(ErrorType.MissingOperationId);\n }\n\n // validate server\n const validateServerResult = this.validateServer(method, path);\n result.reason.push(...validateServerResult.reason);\n\n if (result.reason.length > 0) {\n result.isValid = false;\n }\n\n return result;\n }\n}\n","import { OpenAPIV3 } from \"openapi-types\";\nimport { ParseOptions, ProjectType } from \"../interfaces\";\nimport { CopilotValidator } from \"./copilotValidator\";\nimport { SMEValidator } from \"./smeValidator\";\nimport { TeamsAIValidator } from \"./teamsAIValidator\";\nimport { Validator } from \"./validator\";\n\nexport class ValidatorFactory {\n static create(spec: OpenAPIV3.Document, options: ParseOptions): Validator {\n const type = options.projectType ?? ProjectType.SME;\n\n switch (type) {\n case ProjectType.SME:\n return new SMEValidator(spec, options);\n case ProjectType.Copilot:\n return new CopilotValidator(spec, options);\n case ProjectType.TeamsAi:\n return new TeamsAIValidator(spec, options);\n default:\n throw new Error(`Invalid project type: ${type}`);\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { OpenAPIV3 } from \"openapi-types\";\n\nexport interface OptimizerOptions {\n removeUnusedComponents: boolean;\n removeUnusedTags: boolean;\n removeUserDefinedRootProperty: boolean;\n removeUnusedSecuritySchemas: boolean;\n}\n\nexport class SpecOptimizer {\n private static defaultOptions: OptimizerOptions = {\n removeUnusedComponents: true,\n removeUnusedTags: true,\n removeUserDefinedRootProperty: true,\n removeUnusedSecuritySchemas: true,\n };\n\n static optimize(spec: OpenAPIV3.Document, options?: OptimizerOptions): OpenAPIV3.Document {\n const mergedOptions = {\n ...SpecOptimizer.defaultOptions,\n ...(options ?? {}),\n } as Required<OptimizerOptions>;\n\n const newSpec = JSON.parse(JSON.stringify(spec));\n\n if (mergedOptions.removeUserDefinedRootProperty) {\n SpecOptimizer.removeUserDefinedRootProperty(newSpec);\n }\n\n if (mergedOptions.removeUnusedComponents) {\n SpecOptimizer.removeUnusedComponents(newSpec);\n }\n\n if (mergedOptions.removeUnusedTags) {\n SpecOptimizer.removeUnusedTags(newSpec);\n }\n\n if (mergedOptions.removeUnusedSecuritySchemas) {\n SpecOptimizer.removeUnusedSecuritySchemas(newSpec);\n }\n\n return newSpec;\n }\n\n private static removeUnusedSecuritySchemas(spec: OpenAPIV3.Document): void {\n if (!spec.components || !spec.components.securitySchemes) {\n return;\n }\n\n const usedSecuritySchemas = new Set<string>();\n\n for (const pathKey in spec.paths) {\n for (const methodKey in spec.paths[pathKey]) {\n const operation: OpenAPIV3.OperationObject = (spec.paths[pathKey] as any)[methodKey];\n if (operation.security) {\n operation.security.forEach((securityReq) => {\n for (const schemaKey in securityReq) {\n usedSecuritySchemas.add(schemaKey);\n }\n });\n }\n }\n }\n\n if (spec.security) {\n spec.security.forEach((securityReq) => {\n for (const schemaKey in securityReq) {\n usedSecuritySchemas.add(schemaKey);\n }\n });\n }\n\n for (const schemaKey in spec.components.securitySchemes) {\n if (!usedSecuritySchemas.has(schemaKey)) {\n delete spec.components.securitySchemes[schemaKey];\n }\n }\n\n if (Object.keys(spec.components.securitySchemes).length === 0) {\n delete spec.components.securitySchemes;\n }\n\n if (Object.keys(spec.components).length === 0) {\n delete spec.components;\n }\n }\n\n private static removeUnusedTags(spec: OpenAPIV3.Document): void {\n if (!spec.tags) {\n return;\n }\n\n const usedTags = new Set<string>();\n\n for (const pathKey in spec.paths) {\n for (const methodKey in spec.paths[pathKey]) {\n const operation: OpenAPIV3.OperationObject = (spec.paths[pathKey] as any)[methodKey];\n if (operation.tags) {\n operation.tags.forEach((tag) => usedTags.add(tag));\n }\n }\n }\n\n spec.tags = spec.tags.filter((tagObj) => usedTags.has(tagObj.name));\n }\n\n private static removeUserDefinedRootProperty(spec: OpenAPIV3.Document): void {\n for (const key in spec) {\n if (key.startsWith(\"x-\")) {\n delete (spec as any)[key];\n }\n }\n }\n\n private static removeUnusedComponents(spec: OpenAPIV3.Document): void {\n const components = spec.components;\n if (!components) {\n return;\n }\n\n delete spec.components;\n\n const usedComponentsSet = new Set<string>();\n\n const specString = JSON.stringify(spec);\n const componentReferences = SpecOptimizer.getComponentReferences(specString);\n\n for (const reference of componentReferences) {\n this.addComponent(reference, usedComponentsSet, components);\n }\n\n const newComponents: any = {};\n\n for (const componentName of usedComponentsSet) {\n const parts = componentName.split(\"/\");\n const component = this.getComponent(componentName, components);\n if (component) {\n let current = newComponents;\n for (let i = 2; i < parts.length; i++) {\n if (i === parts.length - 1) {\n current[parts[i]] = component;\n } else if (!current[parts[i]]) {\n current[parts[i]] = {};\n }\n current = current[parts[i]];\n }\n }\n }\n\n // securitySchemes are referenced directly by name, to void issue, just keep them all and use removeUnusedSecuritySchemas to remove unused ones\n if (components.securitySchemes) {\n newComponents.securitySchemes = components.securitySchemes;\n }\n\n if (Object.keys(newComponents).length !== 0) {\n spec.components = newComponents;\n }\n }\n\n private static getComponentReferences(specString: string): string[] {\n const matches = Array.from(specString.matchAll(/['\"](#\\/components\\/.+?)['\"]/g));\n const matchResult = matches.map((match) => match[1]);\n return matchResult;\n }\n\n private static getComponent(componentPath: string, components: OpenAPIV3.ComponentsObject): any {\n const parts = componentPath.split(\"/\");\n let current: any = components;\n\n for (const part of parts) {\n if (part === \"#\" || part === \"components\") {\n continue;\n }\n current = current[part];\n if (!current) {\n return null;\n }\n }\n\n return current;\n }\n\n private static addComponent(\n componentName: string,\n usedComponentsSet: Set<string>,\n components: OpenAPIV3.ComponentsObject\n ) {\n if (usedComponentsSet.has(componentName)) {\n return;\n }\n usedComponentsSet.add(componentName);\n\n const component = this.getComponent(componentName, components);\n if (component) {\n const componentString = JSON.stringify(component);\n const componentReferences = SpecOptimizer.getComponentReferences(componentString);\n for (const reference of componentReferences) {\n this.addComponent(reference, usedComponentsSet, components);\n }\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { OpenAPIV3 } from \"openapi-types\";\nimport { Utils } from \"./utils\";\nimport { SpecParserError } from \"./specParserError\";\nimport { ErrorType, ParseOptions } from \"./interfaces\";\nimport { ConstantString } from \"./constants\";\nimport { ValidatorFactory } from \"./validators/validatorFactory\";\nimport { SpecOptimizer } from \"./specOptimizer\";\n\nexport class SpecFilter {\n static specFilter(\n filter: string[],\n unResolveSpec: OpenAPIV3.Document,\n resolvedSpec: OpenAPIV3.Document,\n options: ParseOptions\n ): OpenAPIV3.Document {\n try {\n const newSpec = { ...unResolveSpec };\n const newPaths: OpenAPIV3.PathsObject = {};\n for (const filterItem of filter) {\n const [method, path] = filterItem.split(\" \");\n const methodName = method.toLowerCase();\n\n const pathObj = resolvedSpec.paths?.[path] as any;\n if (\n ConstantString.AllOperationMethods.includes(methodName) &&\n pathObj &&\n pathObj[methodName]\n ) {\n const validator = ValidatorFactory.create(resolvedSpec, options);\n const validateResult = validator.validateAPI(methodName, path);\n\n if (!validateResult.isValid) {\n continue;\n }\n\n if (!newPaths[path]) {\n newPaths[path] = { ...unResolveSpec.paths[path] };\n for (const m of ConstantString.AllOperationMethods) {\n delete (newPaths[path] as any)[m];\n }\n }\n\n (newPaths[path] as any)[methodName] = (unResolveSpec.paths[path] as any)[methodName];\n\n // Add the operationId if missing\n if (!(newPaths[path] as any)[methodName].operationId) {\n (newPaths[path] as any)[\n methodName\n ].operationId = `${methodName}${Utils.convertPathToCamelCase(path)}`;\n }\n }\n }\n\n newSpec.paths = newPaths;\n return SpecOptimizer.optimize(newSpec);\n } catch (err) {\n throw new SpecParserError((err as Error).toString(), ErrorType.FilterSpecFailed);\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { OpenAPIV3 } from \"openapi-types\";\nimport { Utils } from \"./utils\";\nimport {\n AdaptiveCard,\n ArrayElement,\n ErrorType,\n ImageElement,\n TextBlockElement,\n} from \"./interfaces\";\nimport { ConstantString } from \"./constants\";\nimport { SpecParserError } from \"./specParserError\";\n\nexport class AdaptiveCardGenerator {\n static generateAdaptiveCard(\n operationItem: OpenAPIV3.OperationObject,\n allowMultipleMediaType = false\n ): [AdaptiveCard, string] {\n try {\n const { json } = Utils.getResponseJson(operationItem, allowMultipleMediaType);\n\n let cardBody: Array<TextBlockElement | ImageElement | ArrayElement> = [];\n\n let schema = json.schema as OpenAPIV3.SchemaObject;\n let jsonPath = \"$\";\n if (schema && Object.keys(schema).length > 0) {\n jsonPath = AdaptiveCardGenerator.getResponseJsonPathFromSchema(schema);\n if (jsonPath !== \"$\") {\n schema = schema.properties![jsonPath] as OpenAPIV3.SchemaObject;\n }\n\n cardBody = AdaptiveCardGenerator.generateCardFromResponse(schema, \"\");\n }\n\n // if no schema, try to use example value\n if (cardBody.length === 0 && (json.examples || json.example)) {\n cardBody = [\n {\n type: ConstantString.TextBlockType,\n text: \"${jsonStringify($root)}\",\n wrap: true,\n },\n ];\n }\n\n // if no example value, use default success response\n if (cardBody.length === 0) {\n cardBody = [\n {\n type: ConstantString.TextBlockType,\n text: \"success\",\n wrap: true,\n },\n ];\n }\n\n const fullCard: AdaptiveCard = {\n type: ConstantString.AdaptiveCardType,\n $schema: ConstantString.AdaptiveCardSchema,\n version: ConstantString.AdaptiveCardVersion,\n body: cardBody,\n };\n\n return [fullCard, jsonPath];\n } catch (err) {\n throw new SpecParserError((err as Error).toString(), ErrorType.GenerateAdaptiveCardFailed);\n }\n }\n\n static generateCardFromResponse(\n schema: OpenAPIV3.SchemaObject,\n name: string,\n parentArrayName = \"\"\n ): Array<TextBlockElement | ImageElement | ArrayElement> {\n if (schema.type === \"array\") {\n // schema.items can be arbitrary object: schema { type: array, items: {} }\n if (Object.keys(schema.items).length === 0) {\n return [\n {\n type: ConstantString.TextBlockType,\n text: name ? `${name}: \\${jsonStringify(${name})}` : \"result: ${jsonStringify($root)}\",\n wrap: true,\n },\n ];\n }\n\n const obj = AdaptiveCardGenerator.generateCardFromResponse(\n schema.items as OpenAPIV3.SchemaObject,\n \"\",\n name\n );\n const template = {\n type: ConstantString.ContainerType,\n $data: name ? `\\${${name}}` : \"${$root}\",\n items: Array<TextBlockElement | ImageElement | ArrayElement>(),\n };\n\n template.items.push(...obj);\n return [template];\n }\n // some schema may not contain type but contain properties\n if (schema.type === \"object\" || (!schema.type && schema.properties)) {\n const { properties } = schema;\n const result: Array<TextBlockElement | ImageElement | ArrayElement> = [];\n for (const property in properties) {\n const obj = AdaptiveCardGenerator.generateCardFromResponse(\n properties[property] as OpenAPIV3.SchemaObject,\n name ? `${name}.${property}` : property,\n parentArrayName\n );\n result.push(...obj);\n }\n\n if (schema.additionalProperties) {\n // TODO: better ways to handler warnings.\n console.warn(ConstantString.AdditionalPropertiesNotSupported);\n }\n\n return result;\n }\n if (\n schema.type === \"string\" ||\n schema.type === \"integer\" ||\n schema.type === \"boolean\" ||\n schema.type === \"number\"\n ) {\n if (!AdaptiveCardGenerator.isImageUrlProperty(schema, name, parentArrayName)) {\n // string in root: \"ddd\"\n let text = \"result: ${$root}\";\n if (name) {\n // object { id: \"1\" }\n text = `${name}: \\${if(${name}, ${name}, 'N/A')}`;\n if (parentArrayName) {\n // object types inside array: { tags: [\"id\": 1, \"name\": \"name\"] }\n text = `${parentArrayName}.${text}`;\n }\n } else if (parentArrayName) {\n // string array: photoUrls: [\"1\", \"2\"]\n text = `${parentArrayName}: ` + \"${$data}\";\n }\n\n return [\n {\n type: ConstantString.TextBlockType,\n text,\n wrap: true,\n },\n ];\n } else {\n if (name) {\n return [\n {\n type: \"Image\",\n url: `\\${${name}}`,\n $when: `\\${${name} != null && ${name} != ''}`,\n },\n ];\n } else {\n return [\n {\n type: \"Image\",\n url: \"${$data}\",\n $when: \"${$data != null && $data != ''}\",\n },\n ];\n }\n }\n }\n\n if (schema.oneOf || schema.anyOf || schema.not || schema.allOf) {\n throw new Error(Utils.format(ConstantString.SchemaNotSupported, JSON.stringify(schema)));\n }\n\n throw new Error(Utils.format(ConstantString.UnknownSchema, JSON.stringify(schema)));\n }\n\n // Find the first array property in the response schema object with the well-known name\n static getResponseJsonPathFromSchema(schema: OpenAPIV3.SchemaObject): string {\n if (schema.type === \"object\" || (!schema.type && schema.properties)) {\n const { properties } = schema;\n for (const property in properties) {\n const schema = properties[property] as OpenAPIV3.SchemaObject;\n if (\n schema.type === \"array\" &&\n Utils.isWellKnownName(property, ConstantString.WellknownResultNames)\n ) {\n return property;\n }\n }\n }\n\n return \"$\";\n }\n\n static isImageUrlProperty(\n schema: OpenAPIV3.NonArraySchemaObject,\n name: string,\n parentArrayName: string\n ): boolean {\n const propertyName = name ? name : parentArrayName;\n return (\n !!propertyName &&\n schema.type === \"string\" &&\n Utils.isWellKnownName(propertyName, ConstantString.WellknownImageName) &&\n (propertyName.toLocaleLowerCase().indexOf(\"url\") >= 0 || schema.format === \"uri\")\n );\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { ResponseSemanticsObject } from \"@microsoft/teams-manifest\";\nimport { ConstantString } from \"./constants\";\nimport {\n AdaptiveCard,\n ArrayElement,\n ImageElement,\n InferredProperties,\n PreviewCardTemplate,\n TextBlockElement,\n WrappedAdaptiveCard,\n} from \"./interfaces\";\nimport { Utils } from \"./utils\";\n\nexport function wrapAdaptiveCard(card: AdaptiveCard, jsonPath: string): WrappedAdaptiveCard {\n const result: WrappedAdaptiveCard = {\n version: ConstantString.WrappedCardVersion,\n $schema: ConstantString.WrappedCardSchema,\n jsonPath: jsonPath,\n responseLayout: ConstantString.WrappedCardResponseLayout,\n responseCardTemplate: card,\n previewCardTemplate: inferPreviewCardTemplate(card),\n };\n\n return result;\n}\n\nexport function wrapResponseSemantics(\n card: AdaptiveCard,\n jsonPath: string\n): ResponseSemanticsObject {\n const props = inferProperties(card);\n const dataPath = jsonPath === \"$\" ? \"$\" : \"$.\" + jsonPath;\n const result: ResponseSemanticsObject = {\n data_path: dataPath,\n };\n\n if (props.title || props.subtitle || props.imageUrl) {\n result.properties = {};\n if (props.title) {\n result.properties.title = \"$.\" + props.title;\n }\n\n if (props.subtitle) {\n result.properties.subtitle = \"$.\" + props.subtitle;\n }\n\n if (props.imageUrl) {\n result.properties.url = \"$.\" + props.imageUrl;\n }\n }\n\n result.static_template = card as any;\n\n return result;\n}\n\n/**\n * Infers the preview card template from an Adaptive Card and a JSON path.\n * The preview card template includes a title and an optional subtitle and image.\n * It populates the preview card template with the first text block that matches\n * each well-known name, in the order of title, subtitle, and image.\n * If no text block matches the title or subtitle, it uses the first two text block as the title and subtitle.\n * If the title is still empty and the subtitle is not empty, it uses subtitle as the title.\n * @param card The Adaptive Card to infer the preview card template from.\n * @param jsonPath The JSON path to the root object in the card body.\n * @returns The inferred preview card template.\n */\nexport function inferPreviewCardTemplate(card: AdaptiveCard): PreviewCardTemplate {\n const result: PreviewCardTemplate = {\n title: \"result\",\n };\n const inferredProperties = inferProperties(card);\n if (inferredProperties.title) {\n result.title = `\\${if(${inferredProperties.title}, ${inferredProperties.title}, 'N/A')}`;\n }\n\n if (inferredProperties.subtitle) {\n result.subtitle = `\\${if(${inferredProperties.subtitle}, ${inferredProperties.subtitle}, 'N/A')}`;\n }\n\n if (inferredProperties.imageUrl) {\n result.image = {\n url: `\\${${inferredProperties.imageUrl}}`,\n alt: `\\${if(${inferredProperties.imageUrl}, ${inferredProperties.imageUrl}, 'N/A')}`,\n $when: `\\${${inferredProperties.imageUrl} != null && ${inferredProperties.imageUrl} != ''}`,\n };\n }\n\n return result;\n}\n\nfunction inferProperties(card: AdaptiveCard): InferredProperties {\n const result: InferredProperties = {};\n\n const nameSet = new Set<string>();\n\n let rootObject: (TextBlockElement | ArrayElement | ImageElement)[];\n if (card.body[0]?.type === ConstantString.ContainerType) {\n rootObject = (card.body[0] as ArrayElement).items;\n } else {\n rootObject = card.body;\n }\n\n for (const element of rootObject) {\n if (element.type === ConstantString.TextBlockType) {\n const textElement = element as TextBlockElement;\n const index = textElement.text.indexOf(\"${if(\");\n if (index > 0) {\n const text = textElement.text.substring(index);\n const match = text.match(/\\${if\\(([^,]+),/);\n const property = match ? match[1] : \"\";\n if (property) {\n nameSet.add(property);\n }\n }\n } else if (element.type === ConstantString.ImageType) {\n const imageElement = element as ImageElement;\n const match = imageElement.url.match(/\\${([^,]+)}/);\n const property = match ? match[1] : \"\";\n if (property) {\n nameSet.add(property);\n }\n }\n }\n\n for (const name of nameSet) {\n if (!result.title && Utils.isWellKnownName(name, ConstantString.WellknownTitleName)) {\n result.title = name;\n nameSet.delete(name);\n } else if (\n !result.subtitle &&\n Utils.isWellKnownName(name, ConstantString.WellknownSubtitleName)\n ) {\n result.subtitle = name;\n nameSet.delete(name);\n } else if (!result.imageUrl && Utils.isWellKnownName(name, ConstantString.WellknownImageName)) {\n result.imageUrl = name;\n nameSet.delete(name);\n }\n }\n\n for (const name of nameSet) {\n if (!result.title) {\n result.title = name;\n nameSet.delete(name);\n } else if (!result.subtitle) {\n result.subtitle = name;\n nameSet.delete(name);\n }\n }\n\n if (!result.title && result.subtitle) {\n result.title = result.subtitle;\n delete result.subtitle;\n }\n\n return result;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport { OpenAPIV3 } from \"openapi-types\";\nimport fs from \"fs-extra\";\nimport path from \"path\";\nimport {\n AuthInfo,\n ErrorType,\n ExistingPluginManifestInfo,\n ParseOptions,\n ProjectType,\n WarningResult,\n WarningType,\n} from \"./interfaces\";\nimport { Utils } from \"./utils\";\nimport { SpecParserError } from \"./specParserError\";\nimport { ConstantString } from \"./constants\";\nimport {\n IComposeExtension,\n IMessagingExtensionCommand,\n TeamsAppManifest,\n PluginManifestSchema,\n FunctionObject,\n AuthObject,\n ManifestUtil,\n} from \"@microsoft/teams-manifest\";\nimport { AdaptiveCardGenerator } from \"./adaptiveCardGenerator\";\nimport { wrapResponseSemantics } from \"./adaptiveCardWrapper\";\n\nexport class ManifestUpdater {\n static async updateManifestWithAiPlugin(\n manifestPath: string,\n outputSpecPath: string,\n apiPluginFilePath: string,\n spec: OpenAPIV3.Document,\n options: ParseOptions,\n authInfo?: AuthInfo,\n existingPluginManifestInfo?: ExistingPluginManifestInfo\n ): Promise<[TeamsAppManifest, PluginManifestSchema, WarningResult[]]> {\n const manifest: TeamsAppManifest = await fs.readJSON(manifestPath);\n const apiPluginRelativePath = ManifestUpdater.getRelativePath(manifestPath, apiPluginFilePath);\n\n const useCopilotExtensionsInSchema = await ManifestUtil.useCopilotExtensionsInSchema(manifest);\n if (manifest.copilotExtensions || useCopilotExtensionsInSchema) {\n manifest.copilotExtensions = manifest.copilotExtensions || {};\n if (!options.isGptPlugin) {\n manifest.copilotExtensions.plugins = [\n {\n file: apiPluginRelativePath,\n id: ConstantString.DefaultPluginId,\n },\n ];\n ManifestUpdater.updateManifestDescription(manifest, spec);\n }\n } else {\n manifest.copilotAgents = manifest.copilotAgents || {};\n if (!options.isGptPlugin) {\n (manifest as any).copilotAgents.plugins = [\n {\n file: apiPluginRelativePath,\n id: ConstantString.DefaultPluginId,\n },\n ];\n ManifestUpdater.updateManifestDescription(manifest, spec);\n }\n }\n\n const appName = this.removeEnvs(manifest.name.short);\n\n const specRelativePath = ManifestUpdater.getRelativePath(manifestPath, outputSpecPath);\n const [apiPlugin, warnings] = await ManifestUpdater.generatePluginManifestSchema(\n spec,\n specRelativePath,\n apiPluginFilePath,\n appName,\n authInfo,\n options,\n existingPluginManifestInfo\n );\n\n return [manifest, apiPlugin, warnings];\n }\n\n static updateManifestDescription(manifest: TeamsAppManifest, spec: OpenAPIV3.Document): void {\n manifest.description = {\n short: spec.info.title.slice(0, ConstantString.ShortDescriptionMaxLens),\n full: (spec.info.description ?? manifest.description.full)?.slice(\n 0,\n ConstantString.FullDescriptionMaxLens\n ),\n };\n }\n\n static checkSchema(schema: OpenAPIV3.SchemaObject, method: string, pathUrl: string): void {\n if (schema.type === \"array\") {\n const items = schema.items as OpenAPIV3.SchemaObject;\n ManifestUpdater.checkSchema(items, method, pathUrl);\n } else if (\n schema.type !== \"string\" &&\n schema.type !== \"boolean\" &&\n schema.type !== \"integer\" &&\n schema.type !== \"number\"\n ) {\n throw new SpecParserError(\n Utils.format(ConstantString.UnsupportedSchema, method, pathUrl, JSON.stringify(schema)),\n ErrorType.UpdateManifestFailed\n );\n }\n }\n\n static async generatePluginManifestSchema(\n spec: OpenAPIV3.Document,\n specRelativePath: string,\n apiPluginFilePath: string,\n appName: string,\n authInfo: AuthInfo | undefined,\n options: ParseOptions,\n existingPluginManifestInfo?: ExistingPluginManifestInfo\n ): Promise<[PluginManifestSchema, WarningResult[]]> {\n const warnings: WarningResult[] = [];\n const functions: FunctionObject[] = [];\n const functionNames: string[] = [];\n const conversationStarters: string[] = [];\n\n const paths = spec.paths;\n\n const pluginAuthObj: AuthObject = {\n type: \"None\",\n };\n\n if (authInfo) {\n if (Utils.isOAuthWithAuthCodeFlow(authInfo.authScheme)) {\n pluginAuthObj.type = \"OAuthPluginVault\";\n } else if (Utils.isBearerTokenAuth(authInfo.authScheme)) {\n pluginAuthObj.type = \"ApiKeyPluginVault\";\n }\n\n if (pluginAuthObj.type !== \"None\") {\n const safeRegistrationIdName = Utils.getSafeRegistrationIdEnvName(\n `${authInfo.name}_${ConstantString.RegistrationIdPostfix[authInfo.authScheme.type]}`\n );\n\n pluginAuthObj.reference_id = `\\${{${safeRegistrationIdName}}}`;\n }\n }\n\n for (const pathUrl in paths) {\n const pathItem = paths[pathUrl];\n if (pathItem) {\n const operations = pathItem;\n for (const method in operations) {\n if (options.allowMethods!.includes(method)) {\n const operationItem = (operations as any)[method] as OpenAPIV3.OperationObject;\n const confirmationBodies: string[] = [];\n if (operationItem) {\n const operationId = operationItem.operationId!;\n const safeFunctionName = operationId.replace(/[^a-zA-Z0-9]/g, \"_\");\n const description = operationItem.description ?? \"\";\n const summary = operationItem.summary;\n const paramObject = operationItem.parameters as OpenAPIV3.ParameterObject[];\n const requestBody = operationItem.requestBody as OpenAPIV3.ParameterObject;\n\n if (paramObject) {\n for (let i = 0; i < paramObject.length; i++) {\n const param = paramObject[i];\n const schema = param.schema as OpenAPIV3.SchemaObject;\n ManifestUpdater.checkSchema(schema, method, pathUrl);\n confirmationBodies.push(ManifestUpdater.getConfirmationBodyItem(param.name));\n }\n }\n\n if (requestBody) {\n const requestJsonBody = requestBody.content![\"application/json\"];\n const requestBodySchema = requestJsonBody.schema as OpenAPIV3.SchemaObject;\n if (requestBodySchema.type === \"object\") {\n for (const property in requestBodySchema.properties) {\n const schema = requestBodySchema.properties[property] as OpenAPIV3.SchemaObject;\n ManifestUpdater.checkSchema(schema, method, pathUrl);\n confirmationBodies.push(ManifestUpdater.getConfirmationBodyItem(property));\n }\n } else {\n throw new SpecParserError(\n Utils.format(\n ConstantString.UnsupportedSchema,\n method,\n pathUrl,\n JSON.stringify(requestBodySchema)\n ),\n ErrorType.UpdateManifestFailed\n );\n }\n }\n\n let funcDescription = operationItem.description || operationItem.summary || \"\";\n if (funcDescription.length > ConstantString.FunctionDescriptionMaxLens) {\n warnings.push({\n type: WarningType.FuncDescriptionTooLong,\n content: Utils.format(\n ConstantString.FuncDescriptionTooLong,\n safeFunctionName,\n funcDescription.length.toString(),\n ConstantString.FunctionDescriptionMaxLens.toString()\n ),\n data: safeFunctionName,\n });\n funcDescription = funcDescription.slice(\n 0,\n ConstantString.FunctionDescriptionMaxLens\n );\n }\n\n const funcObj: FunctionObject = {\n name: safeFunctionName,\n description: funcDescription,\n };\n\n if (options.allowResponseSemantics) {\n try {\n const { json } = Utils.getResponseJson(operationItem);\n if (json.schema) {\n const [card, jsonPath] =\n AdaptiveCardGenerator.generateAdaptiveCard(operationItem);\n\n card.body = Utils.limitACBodyProperties(card.body, 5);\n const responseSemantic = wrapResponseSemantics(card, jsonPath);\n funcObj.capabilities = {\n response_semantics: responseSemantic,\n };\n }\n } catch (err) {\n warnings.push({\n type: WarningType.GenerateCardFailed,\n content: (err as Error).toString(),\n data: operationId,\n });\n }\n }\n\n if (options.allowConfirmation && method !== ConstantString.GetMethod) {\n if (!funcObj.capabilities) {\n funcObj.capabilities = {};\n }\n\n funcObj.capabilities.confirmation = {\n type: \"AdaptiveCard\",\n title: operationItem.summary ?? description,\n };\n\n if (confirmationBodies.length > 0) {\n funcObj.capabilities.confirmation.body = confirmationBodies.join(\"\\n\");\n }\n }\n\n functions.push(funcObj);\n functionNames.push(safeFunctionName);\n const conversationStarterStr = (summary ?? description).slice(\n 0,\n ConstantString.ConversationStarterMaxLens\n );\n if (conversationStarterStr) {\n conversationStarters.push(conversationStarterStr);\n }\n }\n }\n }\n }\n }\n\n let apiPlugin: PluginManifestSchema;\n if (await fs.pathExists(apiPluginFilePath)) {\n apiPlugin = await fs.readJSON(apiPluginFilePath);\n } else if (\n existingPluginManifestInfo &&\n (await fs.pathExists(existingPluginManifestInfo.manifestPath))\n ) {\n apiPlugin = await fs.readJSON(existingPluginManifestInfo.manifestPath);\n } else {\n apiPlugin = {\n $schema: ConstantString.PluginManifestSchema,\n schema_version: \"v2.1\",\n name_for_human: \"\",\n description_for_human: \"\",\n namespace: \"\",\n functions: [],\n runtimes: [],\n };\n }\n\n apiPlugin.functions = apiPlugin.functions || [];\n\n for (const func of functions) {\n const index = apiPlugin.functions?.findIndex((f) => f.name === func.name);\n if (index === -1) {\n apiPlugin.functions.push(func);\n } else {\n apiPlugin.functions[index] = func;\n }\n }\n\n apiPlugin.runtimes = apiPlugin.runtimes || [];\n // Need to delete previous runtime since spec path has changed\n if (existingPluginManifestInfo) {\n const relativePath = ManifestUpdater.getRelativePath(\n existingPluginManifestInfo.manifestPath,\n existingPluginManifestInfo.specPath\n );\n apiPlugin.runtimes = apiPlugin.runtimes.filter(\n (runtime) => runtime.spec.url !== relativePath\n );\n }\n const index = apiPlugin.runtimes.findIndex(\n (runtime) =>\n runtime.spec.url === specRelativePath &&\n runtime.type === \"OpenApi\" &&\n (runtime.auth?.type ?? \"None\") === pluginAuthObj.type\n );\n if (index === -1) {\n apiPlugin.runtimes.push({\n type: \"OpenApi\",\n auth: pluginAuthObj,\n spec: {\n url: specRelativePath,\n },\n run_for_functions: functionNames,\n });\n } else {\n apiPlugin.runtimes[index].run_for_functions = functionNames;\n }\n\n if (!apiPlugin.name_for_human) {\n apiPlugin.name_for_human = appName;\n }\n\n if (!apiPlugin.namespace) {\n apiPlugin.namespace = ManifestUpdater.removeAllSpecialCharacters(appName);\n }\n\n if (!apiPlugin.description_for_human) {\n apiPlugin.description_for_human =\n spec.info.description ?? \"<Please add description of the plugin>\";\n }\n\n if (options.allowConversationStarters && conversationStarters.length > 0) {\n if (!apiPlugin.capabilities) {\n apiPlugin.capabilities = {\n localization: {},\n };\n }\n if (!apiPlugin.capabilities.conversation_starters) {\n apiPlugin.capabilities.conversation_starters = conversationStarters\n .slice(0, 5)\n .map((text) => ({ text }));\n }\n }\n\n return [apiPlugin, warnings];\n }\n\n static async updateManifest(\n manifestPath: string,\n outputSpecPath: string,\n spec: OpenAPIV3.Document,\n options: ParseOptions,\n adaptiveCardFolder?: string,\n authInfo?: AuthInfo\n ): Promise<[TeamsAppManifest, WarningResult[]]> {\n try {\n const originalManifest: TeamsAppManifest = await fs.readJSON(manifestPath);\n const updatedPart: any = {};\n updatedPart.composeExtensions = [];\n let warnings: WarningResult[] = [];\n\n if (options.projectType === ProjectType.SME) {\n const updateResult = await ManifestUpdater.generateCommands(\n spec,\n manifestPath,\n options,\n adaptiveCardFolder\n );\n const commands = updateResult[0];\n warnings = updateResult[1];\n\n const composeExtension: IComposeExtension = {\n composeExtensionType: \"apiBased\",\n apiSpecificationFile: ManifestUpdater.getRelativePath(manifestPath, outputSpecPath),\n commands: commands,\n };\n\n if (authInfo) {\n const auth = authInfo.authScheme;\n const safeRegistrationIdName = Utils.getSafeRegistrationIdEnvName(\n `${authInfo.name}_${ConstantString.RegistrationIdPostfix[authInfo.authScheme.type]}`\n );\n if (Utils.isAPIKeyAuth(auth) || Utils.isBearerTokenAuth(auth)) {\n (composeExtension as any).authorization = {\n authType: \"apiSecretServiceAuth\",\n apiSecretServiceAuthConfiguration: {\n apiSecretRegistrationId: `\\${{${safeRegistrationIdName}}}`,\n },\n };\n } else if (Utils.isOAuthWithAuthCodeFlow(auth)) {\n // TODO: below schema is coming from design doc, may need to update when shcema is finalized\n (composeExtension as any).authorization = {\n authType: \"oAuth2.0\",\n oAuthConfiguration: {\n oauthConfigurationId: `\\${{${safeRegistrationIdName}}}`,\n },\n };\n }\n }\n\n updatedPart.composeExtensions = [composeExtension];\n }\n\n updatedPart.description = originalManifest.description;\n ManifestUpdater.updateManifestDescription(updatedPart, spec);\n\n const updatedManifest = { ...originalManifest, ...updatedPart };\n\n return [updatedManifest, warnings];\n } catch (err) {\n throw new SpecParserError((err as Error).toString(), ErrorType.UpdateManifestFailed);\n }\n }\n\n static async generateCommands(\n spec: OpenAPIV3.Document,\n manifestPath: string,\n options: ParseOptions,\n adaptiveCardFolder?: string\n ): Promise<[IMessagingExtensionCommand[], WarningResult[]]> {\n const paths = spec.paths;\n const commands: IMessagingExtensionCommand[] = [];\n const warnings: WarningResult[] = [];\n if (paths) {\n for (const pathUrl in paths) {\n const pathItem = paths[pathUrl];\n if (pathItem) {\n const operations = pathItem;\n\n // Currently only support GET and POST method\n for (const method in operations) {\n if (options.allowMethods?.includes(method)) {\n const operationItem = (operations as any)[method];\n if (operationItem) {\n const command = Utils.parseApiInfo(operationItem, options);\n\n if (\n command.parameters &&\n command.parameters.length >= 1 &&\n command.parameters.some((param) => param.isRequired)\n ) {\n command.parameters = command.parameters.filter((param) => param.isRequired);\n } else if (command.parameters && command.parameters.length > 0) {\n if (command.parameters.length > 1) {\n command.parameters = [command.parameters[0]];\n warnings.push({\n type: WarningType.OperationOnlyContainsOptionalParam,\n content: Utils.format(\n ConstantString.OperationOnlyContainsOptionalParam,\n command.id\n ),\n data: {\n commandId: command.id,\n parameterName: command.parameters[0].name,\n },\n });\n }\n }\n\n if (adaptiveCardFolder) {\n const adaptiveCardPath = path.join(adaptiveCardFolder, command.id + \".json\");\n command.apiResponseRenderingTemplateFile = (await fs.pathExists(adaptiveCardPath))\n ? ManifestUpdater.getRelativePath(manifestPath, adaptiveCardPath)\n : \"\";\n }\n\n commands.push(command);\n }\n }\n }\n }\n }\n }\n\n return [commands, warnings];\n }\n\n static getRelativePath(from: string, to: string): string {\n const relativePath = path.relative(path.dirname(from), to);\n return path.normalize(relativePath).replace(/\\\\/g, \"/\");\n }\n\n static removeEnvs(str: string): string {\n const placeHolderReg = /\\${{\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*}}/g;\n const matches = placeHolderReg.exec(str);\n let newStr = str;\n if (matches != null) {\n newStr = newStr.replace(matches[0], \"\");\n }\n return newStr;\n }\n\n static removeAllSpecialCharacters(str: string): string {\n return str.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n }\n\n static getConfirmationBodyItem(paramName: string): string {\n return `* **${Utils.updateFirstLetter(paramName)}**: {{function.parameters.${paramName}}}`;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\"use strict\";\n\nimport SwaggerParser from \"@apidevtools/swagger-parser\";\nimport { OpenAPIV3 } from \"openapi-types\";\nimport converter from \"swagger2openapi\";\nimport jsyaml from \"js-yaml\";\nimport fs from \"fs-extra\";\nimport path from \"path\";\nimport {\n APIInfo,\n APIMap,\n ErrorResult,\n ErrorType,\n GenerateResult,\n ListAPIInfo,\n ListAPIResult,\n ParseOptions,\n ProjectType,\n ValidateResult,\n ValidationStatus,\n WarningResult,\n WarningType,\n} from \"./interfaces\";\nimport { ConstantString } from \"./constants\";\nimport { SpecParserError } from \"./specParserError\";\nimport { SpecFilter } from \"./specFilter\";\nimport { Utils } from \"./utils\";\nimport { ManifestUpdater } from \"./manifestUpdater\";\nimport { AdaptiveCardGenerator } from \"./adaptiveCardGenerator\";\nimport { wrapAdaptiveCard } from \"./adaptiveCardWrapper\";\nimport { ValidatorFactory } from \"./validators/validatorFactory\";\nimport { Validator } from \"./validators/validator\";\nimport { PluginManifestSchema } from \"@microsoft/teams-manifest\";\nimport { createHash } from \"crypto\";\n\n/**\n * A class that parses an OpenAPI specification file and provides methods to validate, list, and generate artifacts.\n */\nexport class SpecParser {\n public readonly pathOrSpec: string | OpenAPIV3.Document;\n public readonly parser: SwaggerParser;\n public readonly options: Required<ParseOptions>;\n\n private validator: Validator | undefined;\n private spec: OpenAPIV3.Document | undefined;\n private unResolveSpec: OpenAPIV3.Document | undefined;\n private isSwaggerFile: boolean | undefined;\n\n private defaultOptions: ParseOptions = {\n allowMissingId: true,\n allowSwagger: true,\n allowAPIKeyAuth: false,\n allowBearerTokenAuth: false,\n allowMultipleParameters: false,\n allowOauth2: false,\n allowMethods: [\"get\", \"post\"],\n allowConversationStarters: false,\n allowResponseSemantics: false,\n allowConfirmation: false,\n projectType: ProjectType.SME,\n isGptPlugin: false,\n };\n\n /**\n * Creates a new instance of the SpecParser class.\n * @param pathOrDoc The path to the OpenAPI specification file or the OpenAPI specification object.\n * @param options The options for parsing the OpenAPI specification file.\n */\n constructor(pathOrDoc: string | OpenAPIV3.Document, options?: ParseOptions) {\n this.pathOrSpec = pathOrDoc;\n this.parser = new SwaggerParser();\n this.options = {\n ...this.defaultOptions,\n ...(options ?? {}),\n } as Required<ParseOptions>;\n }\n\n /**\n * Validates the OpenAPI specification file and returns a validation result.\n *\n * @returns A validation result object that contains information about any errors or warnings in the specification file.\n */\n async validate(): Promise<ValidateResult> {\n try {\n let hash = \"\";\n\n try {\n await this.loadSpec();\n if (!this.parser.$refs.circular) {\n await this.parser.validate(this.spec!);\n } else {\n const clonedUnResolveSpec = JSON.parse(JSON.stringify(this.unResolveSpec));\n await this.parser.validate(clonedUnResolveSpec);\n }\n } catch (e) {\n return {\n status: ValidationStatus.Error,\n warnings: [],\n errors: [{ type: ErrorType.SpecNotValid, content: (e as Error).toString() }],\n specHash: hash,\n };\n }\n\n if (this.unResolveSpec!.servers) {\n const serverString = JSON.stringify(this.unResolveSpec!.servers);\n hash = createHash(\"sha256\").update(serverString).digest(\"hex\");\n }\n\n const errors: ErrorResult[] = [];\n const warnings: WarningResult[] = [];\n\n if (!this.options.allowSwagger && this.isSwaggerFile) {\n return {\n status: ValidationStatus.Error,\n warnings: [],\n errors: [\n { type: ErrorType.SwaggerNotSupported, content: ConstantString.SwaggerNotSupported },\n ],\n specHash: hash,\n };\n }\n\n // Remote reference not supported\n const refPaths = this.parser.$refs.paths();\n // refPaths [0] is the current spec file path\n if (refPaths.length > 1) {\n errors.push({\n type: ErrorType.RemoteRefNotSupported,\n content: Utils.format(ConstantString.RemoteRefNotSupported, refPaths.join(\", \")),\n data: refPaths,\n });\n }\n\n if (!!this.isSwaggerFile && this.options.allowSwagger) {\n warnings.push({\n type: WarningType.ConvertSwaggerToOpenAPI,\n content: ConstantString.ConvertSwaggerToOpenAPI,\n });\n }\n\n const validator = this.getValidator(this.spec!);\n const validationResult = validator.validateSpec();\n\n warnings.push(...validationResult.warnings);\n errors.push(...validationResult.errors);\n\n let status = ValidationStatus.Valid;\n if (warnings.length > 0 && errors.length === 0) {\n status = ValidationStatus.Warning;\n } else if (errors.length > 0) {\n status = ValidationStatus.Error;\n }\n\n return {\n status: status,\n warnings: warnings,\n errors: errors,\n specHash: hash,\n };\n } catch (err) {\n throw new SpecParserError((err as Error).toString(), ErrorType.ValidateFailed);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async listSupportedAPIInfo(): Promise<APIInfo[]> {\n throw new Error(\"Method not implemented.\");\n }\n\n /**\n * Lists all the OpenAPI operations in the specification file.\n * @returns A string array that represents the HTTP method and path of each operation, such as ['GET /pets/{petId}', 'GET /user/{userId}']\n * according to copilot plugin spec, only list get and post method without auth\n */\n async list(): Promise<ListAPIResult> {\n try {\n await this.loadSpec();\n const spec = this.spec!;\n const apiMap = this.getAPIs(spec);\n const result: ListAPIResult = {\n APIs: [],\n allAPICount: 0,\n validAPICount: 0,\n };\n for (const apiKey in apiMap) {\n const { operation, isValid, reason } = apiMap[apiKey];\n const [method, path] = apiKey.split(\" \");\n\n const operationId =\n operation.operationId ?? `${method.toLowerCase()}${Utils.convertPathToCamelCase(path)}`;\n\n const apiResult: ListAPIInfo = {\n api: apiKey,\n server: \"\",\n operationId: operationId,\n isValid: isValid,\n reason: reason,\n };\n\n // Try best to parse server url and auth type\n try {\n const serverObj = Utils.getServerObject(spec, method.toLocaleLowerCase(), path);\n if (serverObj) {\n apiResult.server = serverObj.url;\n }\n } catch (err) {\n // ignore\n }\n\n try {\n const authArray = Utils.getAuthArray(operation.security, spec);\n\n if (authArray.length !== 0) {\n for (const auths of authArray) {\n if (auths.length === 1) {\n apiResult.auth = auths[0];\n break;\n } else {\n apiResult.auth = {\n authScheme: { type: \"multipleAuth\" },\n name: auths.map((auth) => auth.name).join(\", \"),\n };\n }\n }\n }\n } catch (err) {\n // ignore\n }\n\n result.APIs.push(apiResult);\n }\n\n result.allAPICount = result.APIs.length;\n result.validAPICount = result.APIs.filter((api) => api.isValid).length;\n\n return result;\n } catch (err) {\n if (err instanceof SpecParserError) {\n throw err;\n }\n throw new SpecParserError((err as Error).toString(), ErrorType.ListFailed);\n }\n }\n\n /**\n * Generate specs according to the filters.\n * @param filter An array of strings that represent the filters to apply when generating the artifacts. If filter is empty, it would process nothing.\n */\n async getFilteredSpecs(\n filter: string[],\n signal?: AbortSignal\n ): Promise<[OpenAPIV3.Document, OpenAPIV3.Document]> {\n try {\n if (signal?.aborted) {\n throw new SpecParserError(ConstantString.CancelledMessage, ErrorType.Cancelled);\n }\n\n await this.loadSpec();\n if (signal?.aborted) {\n throw new SpecParserError(ConstantString.CancelledMessage, ErrorType.Cancelled);\n }\n\n const newUnResolvedSpec = SpecFilter.specFilter(\n filter,\n this.unResolveSpec!,\n this.spec!,\n this.options\n );\n\n if (signal?.aborted) {\n throw new SpecParserError(ConstantString.CancelledMessage, ErrorType.Cancelled);\n }\n\n const clonedUnResolveSpec = JSON.parse(JSON.stringify(newUnResolvedSpec));\n const newSpec = (await this.parser.dereference(clonedUnResolveSpec)) as OpenAPIV3.Document;\n return [newUnResolvedSpec, newSpec];\n } catch (err) {\n if (err instanceof SpecParserError) {\n throw err;\n }\n throw new SpecParserError((err as Error).toString(), ErrorType.GetSpecFailed);\n }\n }\n\n /**\n * Generates and update artifacts from the OpenAPI specification file. Generate Adaptive Cards, update Teams app manifest, and generate a new OpenAPI specification file.\n * @param manifestPath A file path of the Teams app manifest file to update.\n * @param filter An array of strings that represent the filters to apply when generating the artifacts. If filter is empty, it would process nothing.\n * @param outputSpecPath File path of the new OpenAPI specification file to generate. If not specified or empty, no spec file will be generated.\n * @param pluginFilePath File path of the api plugin file to generate.\n */\n async generateForCopilot(\n manifestPath: string,\n filter: string[],\n outputSpecPath: string,\n pluginFilePath: string,\n existingPluginFilePath?: string,\n signal?: AbortSignal\n ): Promise<GenerateResult> {\n const result: GenerateResult = {\n allSuccess: true,\n warnings: [],\n };\n\n try {\n const newSpecs = await this.getFilteredSpecs(filter, signal);\n const newUnResolvedSpec = newSpecs[0];\n const newSpec = newSpecs[1];\n\n const authInfo = Utils.getAuthInfo(newSpec);\n\n await this.saveFilterSpec(outputSpecPath, newUnResolvedSpec);\n\n if (signal?.aborted) {\n throw new SpecParserError(ConstantString.CancelledMessage, ErrorType.Cancelled);\n }\n\n const existingPluginManifestInfo = existingPluginFilePath\n ? {\n manifestPath: existingPluginFilePath,\n specPath: this.pathOrSpec as string,\n }\n : undefined;\n const [updatedManifest, apiPlugin, warnings] =\n await ManifestUpdater.updateManifestWithAiPlugin(\n manifestPath,\n outputSpecPath,\n pluginFilePath,\n newSpec,\n this.options,\n authInfo,\n existingPluginManifestInfo\n );\n\n result.warnings.push(...warnings);\n\n await fs.outputJSON(manifestPath, updatedManifest, { spaces: 4 });\n await fs.outputJSON(pluginFilePath, apiPlugin, { spaces: 4 });\n } catch (err) {\n if (err instanceof SpecParserError) {\n throw err;\n }\n throw new SpecParserError((err as Error).toString(), ErrorType.GenerateFailed);\n }\n\n return result;\n }\n\n /**\n * Generates and update artifacts from the OpenAPI specification file. Generate Adaptive Cards, update Teams app manifest, and generate a new OpenAPI specification file.\n * @param manifestPath A file path of the Teams app manifest file to update.\n * @param filter An array of strings that represent the filters to apply when generating the artifacts. If filter is empty, it would process nothing.\n * @param outputSpecPath File path of the new OpenAPI specification file to generate. If not specified or empty, no spec file will be generated.\n * @param adaptiveCardFolder Folder path where the Adaptive Card files will be generated. If not specified or empty, Adaptive Card files will not be generated.\n */\n async generate(\n manifestPath: string,\n filter: string[],\n outputSpecPath: string,\n adaptiveCardFolder?: string,\n signal?: AbortSignal\n ): Promise<GenerateResult> {\n const result: GenerateResult = {\n allSuccess: true,\n warnings: [],\n };\n try {\n const newSpecs = await this.getFilteredSpecs(filter, signal);\n const newUnResolvedSpec = newSpecs[0];\n const newSpec = newSpecs[1];\n let authInfo = undefined;\n\n if (this.options.projectType === ProjectType.SME) {\n authInfo = Utils.getAuthInfo(newSpec);\n }\n\n await this.saveFilterSpec(outputSpecPath, newUnResolvedSpec);\n\n if (adaptiveCardFolder) {\n for (const url in newSpec.paths) {\n for (const method in newSpec.paths[url]) {\n // paths object may contain description/summary which is not a http method, so we need to check if it is a operation object\n if (this.options.allowMethods.includes(method)) {\n const operation = (newSpec.paths[url] as any)[method] as OpenAPIV3.OperationObject;\n try {\n const [card, jsonPath] = AdaptiveCardGenerator.generateAdaptiveCard(operation);\n const safeAdaptiveCardName = operation.operationId!.replace(/[^a-zA-Z0-9]/g, \"_\");\n const fileName = path.join(adaptiveCardFolder, `${safeAdaptiveCardName}.json`);\n const wrappedCard = wrapAdaptiveCard(card, jsonPath);\n await fs.outputJSON(fileName, wrappedCard, { spaces: 2 });\n const dataFileName = path.join(\n adaptiveCardFolder,\n `${safeAdaptiveCardName}.data.json`\n );\n await fs.outputJSON(dataFileName, {}, { spaces: 2 });\n } catch (err) {\n result.allSuccess = false;\n result.warnings.push({\n type: WarningType.GenerateCardFailed,\n content: (err as Error).toString(),\n data: operation.operationId!,\n });\n }\n }\n }\n }\n }\n\n if (signal?.aborted) {\n throw new SpecParserError(ConstantString.CancelledMessage, ErrorType.Cancelled);\n }\n\n const [updatedManifest, warnings] = await ManifestUpdater.updateManifest(\n manifestPath,\n outputSpecPath,\n newSpec,\n this.options,\n adaptiveCardFolder,\n authInfo\n );\n\n await fs.outputJSON(manifestPath, updatedManifest, { spaces: 2 });\n\n result.warnings.push(...warnings);\n } catch (err) {\n if (err instanceof SpecParserError) {\n throw err;\n }\n throw new SpecParserError((err as Error).toString(), ErrorType.GenerateFailed);\n }\n\n return result;\n }\n\n private async loadSpec(): Promise<void> {\n if (!this.spec) {\n const spec = (await this.parser.parse(this.pathOrSpec)) as OpenAPIV3.Document;\n this.unResolveSpec = this.resolveEnvForSpec(spec);\n // Convert swagger 2.0 to openapi 3.0\n if (!this.unResolveSpec.openapi && (this.unResolveSpec as any).swagger === \"2.0\") {\n const specObj = await converter.convert(this.unResolveSpec as any, {});\n this.unResolveSpec = specObj.openapi as OpenAPIV3.Document;\n this.isSwaggerFile = true;\n }\n\n const clonedUnResolveSpec = JSON.parse(JSON.stringify(this.unResolveSpec));\n this.spec = (await this.parser.dereference(clonedUnResolveSpec)) as OpenAPIV3.Document;\n }\n }\n\n private getAPIs(spec: OpenAPIV3.Document): APIMap {\n const validator = this.getValidator(spec);\n const apiMap = validator.listAPIs();\n return apiMap;\n }\n\n private getValidator(spec: OpenAPIV3.Document): Validator {\n if (this.validator) {\n return this.validator;\n }\n const validator = ValidatorFactory.create(spec, this.options);\n this.validator = validator;\n return validator;\n }\n\n private async saveFilterSpec(\n outputSpecPath: string,\n unResolvedSpec: OpenAPIV3.Document\n ): Promise<void> {\n let resultStr;\n if (outputSpecPath.endsWith(\".yaml\") || outputSpecPath.endsWith(\".yml\")) {\n resultStr = jsyaml.dump(unResolvedSpec);\n } else {\n resultStr = JSON.stringify(unResolvedSpec, null, 2);\n }\n await fs.outputFile(outputSpecPath, resultStr);\n }\n\n private resolveEnvForSpec(spec: OpenAPIV3.Document): OpenAPIV3.Document {\n const specString = JSON.stringify(spec);\n const specResolved = Utils.resolveEnv(specString);\n return JSON.parse(specResolved) as OpenAPIV3.Document;\n }\n}\n"],"names":[],"mappings":"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"}