@microsoft/m365-spec-parser 0.1.1-alpha.8d8f5a0bb.0 → 0.1.1-alpha.a277dba4e.0

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.
@@ -13,7 +13,8 @@ export declare class ConstantString {
13
13
  static readonly OperationOnlyContainsOptionalParam = "Operation %s contains multiple optional parameters. The first optional parameter is used for this command.";
14
14
  static readonly ConvertSwaggerToOpenAPI = "The Swagger 2.0 file has been converted to OpenAPI 3.0.";
15
15
  static readonly SwaggerNotSupported = "Swagger 2.0 is not supported. Please convert to OpenAPI 3.0 manually before proceeding.";
16
- static readonly MultipleAPIKeyNotSupported = "Multiple API keys are not supported. Please make sure that all selected APIs use the same API key.";
16
+ static readonly SpecVersionNotSupported = "Unsupported OpenAPI version %s. Please use version 3.0.x.";
17
+ static readonly MultipleAuthNotSupported = "Multiple authentication methods are unsupported. Ensure all selected APIs use identical authentication.";
17
18
  static readonly UnsupportedSchema = "Unsupported schema in %s %s: %s";
18
19
  static readonly WrappedCardVersion = "devPreview";
19
20
  static readonly WrappedCardSchema = "https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.ResponseRenderingTemplate.schema.json";
@@ -26,6 +27,7 @@ export declare class ConstantString {
26
27
  static readonly TextBlockType = "TextBlock";
27
28
  static readonly ContainerType = "Container";
28
29
  static readonly RegistrationIdPostfix = "REGISTRATION_ID";
30
+ static readonly OAuthRegistrationIdPostFix = "OAUTH_REGISTRATION_ID";
29
31
  static readonly ResponseCodeFor20X: string[];
30
32
  static readonly AllOperationMethods: string[];
31
33
  static readonly WellknownResultNames: string[];
@@ -38,4 +40,5 @@ export declare class ConstantString {
38
40
  static readonly ParameterDescriptionMaxLens = 128;
39
41
  static readonly CommandTitleMaxLens = 32;
40
42
  static readonly ParameterTitleMaxLens = 32;
43
+ static readonly SMERequiredParamsMaxNum = 5;
41
44
  }
@@ -1,7 +1,7 @@
1
1
  export { SpecParser } from "./specParser.browser";
2
2
  export { SpecParserError } from "./specParserError";
3
3
  export { ValidationStatus, WarningType, ErrorType, ListAPIResult } from "./interfaces";
4
- export type { ErrorResult, APIInfo, ValidateResult, WarningResult, ParseOptions, AdaptiveCard, } from "./interfaces";
4
+ export type { ErrorResult, APIInfo, ValidateResult, WarningResult, ParseOptions, AdaptiveCard, ProjectType, } from "./interfaces";
5
5
  export { ConstantString } from "./constants";
6
6
  export { Utils } from "./utils";
7
7
  export { AdaptiveCardGenerator } from "./adaptiveCardGenerator";
@@ -1,6 +1,6 @@
1
1
  export { SpecParser } from "./specParser";
2
2
  export { SpecParserError } from "./specParserError";
3
- export { ValidationStatus, WarningType, ErrorType, WarningResult, ErrorResult, ListAPIResult, APIInfo, ValidateResult, ParseOptions, AdaptiveCard, } from "./interfaces";
3
+ export { ValidationStatus, WarningType, ErrorType, WarningResult, ErrorResult, ListAPIResult, APIInfo, ValidateResult, ParseOptions, AdaptiveCard, ProjectType, } from "./interfaces";
4
4
  export { ConstantString } from "./constants";
5
5
  export { Utils } from "./utils";
6
6
  export { AdaptiveCardGenerator } from "./adaptiveCardGenerator";
@@ -1,3 +1,4 @@
1
+ import { IParameter } from "@microsoft/teams-manifest";
1
2
  import { OpenAPIV3 } from "openapi-types";
2
3
  /**
3
4
  * An interface that represents the result of validating an OpenAPI specification file.
@@ -67,7 +68,8 @@ export declare enum ErrorType {
67
68
  NoExtraAPICanBeAdded = "no-extra-api-can-be-added",
68
69
  ResolveServerUrlFailed = "resolve-server-url-failed",
69
70
  SwaggerNotSupported = "swagger-not-supported",
70
- MultipleAPIKeyNotSupported = "multiple-api-key-not-supported",
71
+ MultipleAuthNotSupported = "multiple-auth-not-supported",
72
+ SpecVersionNotSupported = "spec-version-not-supported",
71
73
  ListFailed = "list-failed",
72
74
  listSupportedAPIInfoFailed = "list-supported-api-info-failed",
73
75
  FilterSpecFailed = "filter-spec-failed",
@@ -135,47 +137,72 @@ export interface WrappedAdaptiveCard {
135
137
  responseCardTemplate: AdaptiveCard;
136
138
  previewCardTemplate: PreviewCardTemplate;
137
139
  }
138
- export interface ChoicesItem {
139
- title: string;
140
- value: string;
141
- }
142
- export interface Parameter {
143
- name: string;
144
- title: string;
145
- description: string;
146
- inputType?: "text" | "textarea" | "number" | "date" | "time" | "toggle" | "choiceset";
147
- value?: string;
148
- choices?: ChoicesItem[];
149
- }
150
140
  export interface CheckParamResult {
151
141
  requiredNum: number;
152
142
  optionalNum: number;
153
143
  isValid: boolean;
154
144
  }
155
145
  export interface ParseOptions {
146
+ /**
147
+ * If true, the parser will not throw an error if an ID is missing the spec file.
148
+ */
156
149
  allowMissingId?: boolean;
150
+ /**
151
+ * If true, the parser will allow parsing of Swagger specifications.
152
+ */
157
153
  allowSwagger?: boolean;
154
+ /**
155
+ * If true, the parser will allow API Key authentication in the spec file.
156
+ */
158
157
  allowAPIKeyAuth?: boolean;
158
+ /**
159
+ * If true, the parser will allow Bearer Token authentication in the spec file.
160
+ */
161
+ allowBearerTokenAuth?: boolean;
162
+ /**
163
+ * If true, the parser will allow multiple parameters in the spec file. Teams AI project would ignore this parameters and always true
164
+ */
159
165
  allowMultipleParameters?: boolean;
166
+ /**
167
+ * If true, the parser will allow OAuth2 authentication in the spec file. Currently only support OAuth2 with auth code flow.
168
+ */
160
169
  allowOauth2?: boolean;
161
- isCopilot?: boolean;
170
+ /**
171
+ * An array of HTTP methods that the parser will allow in the spec file.
172
+ */
173
+ allowMethods?: string[];
174
+ /**
175
+ * The type of project that the parser is being used for.
176
+ * Project can be SME/Copilot/TeamsAi
177
+ */
178
+ projectType?: ProjectType;
179
+ }
180
+ export declare enum ProjectType {
181
+ Copilot = 0,
182
+ SME = 1,
183
+ TeamsAi = 2
162
184
  }
163
185
  export interface APIInfo {
164
186
  method: string;
165
187
  path: string;
166
188
  title: string;
167
189
  id: string;
168
- parameters: Parameter[];
190
+ parameters: IParameter[];
169
191
  description: string;
170
192
  warning?: WarningResult;
171
193
  }
172
- export interface ListAPIResult {
194
+ export interface ListAPIInfo {
173
195
  api: string;
174
196
  server: string;
175
197
  operationId: string;
176
- auth?: OpenAPIV3.SecuritySchemeObject;
198
+ auth?: AuthInfo;
199
+ }
200
+ export interface ListAPIResult {
201
+ allAPICount: number;
202
+ validAPICount: number;
203
+ validAPIs: ListAPIInfo[];
177
204
  }
178
- export interface AuthSchema {
179
- authSchema: OpenAPIV3.SecuritySchemeObject;
205
+ export interface AuthInfo {
206
+ authScheme: OpenAPIV3.SecuritySchemeObject;
180
207
  name: string;
181
208
  }
@@ -1,12 +1,12 @@
1
1
  import { OpenAPIV3 } from "openapi-types";
2
- import { WarningResult } from "./interfaces";
2
+ import { AuthInfo, ParseOptions, WarningResult } from "./interfaces";
3
3
  import { IMessagingExtensionCommand, TeamsAppManifest, PluginManifestSchema, FunctionParameter } from "@microsoft/teams-manifest";
4
4
  export declare class ManifestUpdater {
5
- static updateManifestWithAiPlugin(manifestPath: string, outputSpecPath: string, apiPluginFilePath: string, spec: OpenAPIV3.Document): Promise<[TeamsAppManifest, PluginManifestSchema]>;
5
+ static updateManifestWithAiPlugin(manifestPath: string, outputSpecPath: string, apiPluginFilePath: string, spec: OpenAPIV3.Document, options: ParseOptions): Promise<[TeamsAppManifest, PluginManifestSchema]>;
6
6
  static updateManifestDescription(manifest: TeamsAppManifest, spec: OpenAPIV3.Document): void;
7
7
  static mapOpenAPISchemaToFuncParam(schema: OpenAPIV3.SchemaObject, method: string, pathUrl: string): FunctionParameter;
8
- static generatePluginManifestSchema(spec: OpenAPIV3.Document, specRelativePath: string): PluginManifestSchema;
9
- static updateManifest(manifestPath: string, outputSpecPath: string, adaptiveCardFolder: string, spec: OpenAPIV3.Document, allowMultipleParameters: boolean, auth?: OpenAPIV3.SecuritySchemeObject, isMe?: boolean): Promise<[TeamsAppManifest, WarningResult[]]>;
10
- static generateCommands(spec: OpenAPIV3.Document, adaptiveCardFolder: string, manifestPath: string, allowMultipleParameters: boolean): Promise<[IMessagingExtensionCommand[], WarningResult[]]>;
8
+ static generatePluginManifestSchema(spec: OpenAPIV3.Document, specRelativePath: string, options: ParseOptions): PluginManifestSchema;
9
+ static updateManifest(manifestPath: string, outputSpecPath: string, spec: OpenAPIV3.Document, options: ParseOptions, adaptiveCardFolder?: string, authInfo?: AuthInfo): Promise<[TeamsAppManifest, WarningResult[]]>;
10
+ static generateCommands(spec: OpenAPIV3.Document, manifestPath: string, options: ParseOptions, adaptiveCardFolder?: string): Promise<[IMessagingExtensionCommand[], WarningResult[]]>;
11
11
  static getRelativePath(from: string, to: string): string;
12
12
  }
@@ -1,4 +1,5 @@
1
1
  import { OpenAPIV3 } from "openapi-types";
2
+ import { ParseOptions } from "./interfaces";
2
3
  export declare class SpecFilter {
3
- static specFilter(filter: string[], unResolveSpec: OpenAPIV3.Document, resolvedSpec: OpenAPIV3.Document, allowMissingId: boolean, allowAPIKeyAuth: boolean, allowMultipleParameters: boolean, allowOauth2: boolean, isCopilot: boolean): OpenAPIV3.Document;
4
+ static specFilter(filter: string[], unResolveSpec: OpenAPIV3.Document, resolvedSpec: OpenAPIV3.Document, options: ParseOptions): OpenAPIV3.Document;
4
5
  }
@@ -53,7 +53,7 @@ export declare class SpecParser {
53
53
  * @param adaptiveCardFolder Folder path where the Adaptive Card files will be generated. If not specified or empty, Adaptive Card files will not be generated.
54
54
  * @param isMe Boolean that indicates whether the project is an Messaging Extension. For Messaging Extension, composeExtensions will be added in Teams app manifest.
55
55
  */
56
- generate(manifestPath: string, filter: string[], outputSpecPath: string, adaptiveCardFolder: string, signal?: AbortSignal, isMe?: boolean): Promise<GenerateResult>;
56
+ generate(manifestPath: string, filter: string[], outputSpecPath: string, adaptiveCardFolder?: string, signal?: AbortSignal): Promise<GenerateResult>;
57
57
  private loadSpec;
58
58
  private getAllSupportedAPIs;
59
59
  }
@@ -31,7 +31,7 @@ export declare class SpecParser {
31
31
  * @returns A string array that represents the HTTP method and path of each operation, such as ['GET /pets/{petId}', 'GET /user/{userId}']
32
32
  * according to copilot plugin spec, only list get and post method without auth
33
33
  */
34
- list(): Promise<ListAPIResult[]>;
34
+ list(): Promise<ListAPIResult>;
35
35
  /**
36
36
  * Generate specs according to the filters.
37
37
  * @param filter An array of strings that represent the filters to apply when generating the artifacts. If filter is empty, it would process nothing.
@@ -51,9 +51,8 @@ export declare class SpecParser {
51
51
  * @param filter An array of strings that represent the filters to apply when generating the artifacts. If filter is empty, it would process nothing.
52
52
  * @param outputSpecPath File path of the new OpenAPI specification file to generate. If not specified or empty, no spec file will be generated.
53
53
  * @param adaptiveCardFolder Folder path where the Adaptive Card files will be generated. If not specified or empty, Adaptive Card files will not be generated.
54
- * @param isMe Boolean that indicates whether the project is an Messaging Extension. For Messaging Extension, composeExtensions will be added in Teams app manifest.
55
54
  */
56
- generate(manifestPath: string, filter: string[], outputSpecPath: string, adaptiveCardFolder: string, signal?: AbortSignal, isMe?: boolean): Promise<GenerateResult>;
55
+ generate(manifestPath: string, filter: string[], outputSpecPath: string, adaptiveCardFolder?: string, signal?: AbortSignal): Promise<GenerateResult>;
57
56
  private loadSpec;
58
57
  private getAllSupportedAPIs;
59
58
  }
@@ -1,11 +1,12 @@
1
1
  import { OpenAPIV3 } from "openapi-types";
2
2
  import SwaggerParser from "@apidevtools/swagger-parser";
3
- import { AuthSchema, CheckParamResult, ErrorResult, Parameter, ValidateResult, WarningResult } from "./interfaces";
4
- import { IMessagingExtensionCommand } from "@microsoft/teams-manifest";
3
+ import { AuthInfo, CheckParamResult, ErrorResult, ParseOptions, ValidateResult, WarningResult } from "./interfaces";
4
+ import { IMessagingExtensionCommand, IParameter } from "@microsoft/teams-manifest";
5
5
  export declare class Utils {
6
6
  static hasNestedObjectInSchema(schema: OpenAPIV3.SchemaObject): boolean;
7
7
  static checkParameters(paramObject: OpenAPIV3.ParameterObject[], isCopilot: boolean): CheckParamResult;
8
8
  static checkPostBody(schema: OpenAPIV3.SchemaObject, isRequired?: boolean, isCopilot?: boolean): CheckParamResult;
9
+ static containMultipleMediaTypes(bodyObject: OpenAPIV3.RequestBodyObject | OpenAPIV3.ResponseObject): boolean;
9
10
  /**
10
11
  * Checks if the given API is supported.
11
12
  * @param {string} method - The HTTP method of the API.
@@ -20,26 +21,28 @@ export declare class Utils {
20
21
  * 5. response body should be “application/json” and not empty, and response code should be 20X
21
22
  * 6. only support request body with “application/json” content type
22
23
  */
23
- static isSupportedApi(method: string, path: string, spec: OpenAPIV3.Document, allowMissingId: boolean, allowAPIKeyAuth: boolean, allowMultipleParameters: boolean, allowOauth2: boolean, isCopilot: boolean): boolean;
24
- static isSupportedAuth(authSchemaArray: AuthSchema[][], allowAPIKeyAuth: boolean, allowOauth2: boolean): boolean;
25
- static isAPIKeyAuth(authSchema: OpenAPIV3.SecuritySchemeObject): boolean;
26
- static isBearerTokenAuth(authSchema: OpenAPIV3.SecuritySchemeObject): boolean;
27
- static getAuthArray(securities: OpenAPIV3.SecurityRequirementObject[] | undefined, spec: OpenAPIV3.Document): AuthSchema[][];
24
+ static isSupportedApi(method: string, path: string, spec: OpenAPIV3.Document, options: ParseOptions): boolean;
25
+ static isSupportedAuth(authSchemeArray: AuthInfo[][], options: ParseOptions): boolean;
26
+ static isBearerTokenAuth(authScheme: OpenAPIV3.SecuritySchemeObject): boolean;
27
+ static isAPIKeyAuth(authScheme: OpenAPIV3.SecuritySchemeObject): boolean;
28
+ static isOAuthWithAuthCodeFlow(authScheme: OpenAPIV3.SecuritySchemeObject): boolean;
29
+ static getAuthArray(securities: OpenAPIV3.SecurityRequirementObject[] | undefined, spec: OpenAPIV3.Document): AuthInfo[][];
28
30
  static updateFirstLetter(str: string): string;
29
- static getResponseJson(operationObject: OpenAPIV3.OperationObject | undefined): OpenAPIV3.MediaTypeObject;
31
+ static getResponseJson(operationObject: OpenAPIV3.OperationObject | undefined, isTeamsAiProject?: boolean): OpenAPIV3.MediaTypeObject;
30
32
  static convertPathToCamelCase(path: string): string;
31
33
  static getUrlProtocol(urlString: string): string | undefined;
32
34
  static resolveServerUrl(url: string): string;
33
35
  static checkServerUrl(servers: OpenAPIV3.ServerObject[]): ErrorResult[];
34
- static validateServer(spec: OpenAPIV3.Document, allowMissingId: boolean, allowAPIKeyAuth: boolean, allowMultipleParameters: boolean, allowOauth2: boolean, isCopilot: boolean): ErrorResult[];
36
+ static validateServer(spec: OpenAPIV3.Document, options: ParseOptions): ErrorResult[];
35
37
  static isWellKnownName(name: string, wellknownNameList: string[]): boolean;
36
- static generateParametersFromSchema(schema: OpenAPIV3.SchemaObject, name: string, allowMultipleParameters: boolean, isRequired?: boolean): [Parameter[], Parameter[]];
37
- static updateParameterWithInputType(schema: OpenAPIV3.SchemaObject, param: Parameter): void;
38
- static parseApiInfo(operationItem: OpenAPIV3.OperationObject, allowMultipleParameters: boolean): [IMessagingExtensionCommand, WarningResult | undefined];
39
- static listSupportedAPIs(spec: OpenAPIV3.Document, allowMissingId: boolean, allowAPIKeyAuth: boolean, allowMultipleParameters: boolean, allowOauth2: boolean, isCopilot: boolean): {
38
+ static generateParametersFromSchema(schema: OpenAPIV3.SchemaObject, name: string, allowMultipleParameters: boolean, isRequired?: boolean): [IParameter[], IParameter[]];
39
+ static updateParameterWithInputType(schema: OpenAPIV3.SchemaObject, param: IParameter): void;
40
+ static parseApiInfo(operationItem: OpenAPIV3.OperationObject, options: ParseOptions): [IMessagingExtensionCommand, WarningResult | undefined];
41
+ static listSupportedAPIs(spec: OpenAPIV3.Document, options: ParseOptions): {
40
42
  [key: string]: OpenAPIV3.OperationObject;
41
43
  };
42
- static validateSpec(spec: OpenAPIV3.Document, parser: SwaggerParser, isSwaggerFile: boolean, allowMissingId: boolean, allowAPIKeyAuth: boolean, allowMultipleParameters: boolean, allowOauth2: boolean, isCopilot: boolean): ValidateResult;
44
+ static validateSpec(spec: OpenAPIV3.Document, parser: SwaggerParser, isSwaggerFile: boolean, options: ParseOptions): ValidateResult;
43
45
  static format(str: string, ...args: string[]): string;
44
46
  static getSafeRegistrationIdEnvName(authName: string): string;
47
+ static getAllAPICount(spec: OpenAPIV3.Document): number;
45
48
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@microsoft/m365-spec-parser",
3
- "version": "0.1.1-alpha.8d8f5a0bb.0",
3
+ "version": "0.1.1-alpha.a277dba4e.0",
4
4
  "description": "OpenAPI specification files Parser for M365 Apps",
5
5
  "main": "dist/index.node.cjs.js",
6
6
  "browser": "dist/index.esm2017.js",
@@ -39,7 +39,7 @@
39
39
  "sideEffects": false,
40
40
  "dependencies": {
41
41
  "@apidevtools/swagger-parser": "^10.1.0",
42
- "@microsoft/teams-manifest": "0.1.4-alpha.8d8f5a0bb.0",
42
+ "@microsoft/teams-manifest": "0.1.4-alpha.a277dba4e.0",
43
43
  "fs-extra": "^11.2.0",
44
44
  "js-yaml": "^4.1.0",
45
45
  "openapi-types": "^7.2.3",
@@ -148,5 +148,5 @@
148
148
  "npx eslint --cache --fix --quiet"
149
149
  ]
150
150
  },
151
- "gitHead": "4251118a2311a884f5361573cc6f7ffb62f0dbc2"
151
+ "gitHead": "fc43da6bdf04948555fc8c425324b475cc05bb95"
152
152
  }