@microsoft/m365-spec-parser 0.1.1-alpha.a277dba4e.0 → 0.1.1-alpha.ad8f60cf1.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.
- package/dist/index.esm2017.js +606 -333
- package/dist/index.esm2017.js.map +1 -1
- package/dist/index.esm2017.mjs +1147 -719
- package/dist/index.esm2017.mjs.map +1 -1
- package/dist/index.esm5.js +606 -333
- package/dist/index.esm5.js.map +1 -1
- package/dist/index.node.cjs.js +1092 -660
- package/dist/index.node.cjs.js.map +1 -1
- package/dist/src/adaptiveCardWrapper.d.ts +2 -0
- package/dist/src/constants.d.ts +3 -2
- package/dist/src/index.d.ts +1 -1
- package/dist/src/interfaces.d.ts +65 -1
- package/dist/src/manifestUpdater.d.ts +5 -2
- package/dist/src/specParser.browser.d.ts +3 -2
- package/dist/src/specParser.d.ts +4 -2
- package/dist/src/utils.d.ts +9 -28
- package/package.json +3 -3
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { ResponseSemanticsObject } from "@microsoft/teams-manifest";
|
|
1
2
|
import { AdaptiveCard, PreviewCardTemplate, WrappedAdaptiveCard } from "./interfaces";
|
|
2
3
|
export declare function wrapAdaptiveCard(card: AdaptiveCard, jsonPath: string): WrappedAdaptiveCard;
|
|
4
|
+
export declare function wrapResponseSemantics(card: AdaptiveCard, jsonPath: string): ResponseSemanticsObject;
|
|
3
5
|
/**
|
|
4
6
|
* Infers the preview card template from an Adaptive Card and a JSON path.
|
|
5
7
|
* The preview card template includes a title and an optional subtitle and image.
|
package/dist/src/constants.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export declare class ConstantString {
|
|
|
5
5
|
static readonly MissingOperationId = "Missing operationIds: %s.";
|
|
6
6
|
static readonly NoSupportedApi = "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.";
|
|
7
7
|
static readonly AdditionalPropertiesNotSupported = "'additionalProperties' is not supported, and will be ignored.";
|
|
8
|
-
static readonly SchemaNotSupported = "'oneOf', 'anyOf', and 'not' schema are not supported: %s.";
|
|
8
|
+
static readonly SchemaNotSupported = "'oneOf', 'allOf', 'anyOf', and 'not' schema are not supported: %s.";
|
|
9
9
|
static readonly UnknownSchema = "Unknown schema: %s.";
|
|
10
10
|
static readonly UrlProtocolNotSupported = "Server url is not correct: protocol %s is not supported, you should use https protocol instead.";
|
|
11
11
|
static readonly RelativeServerUrlNotSupported = "Server url is not correct: relative server url is not supported.";
|
|
@@ -25,9 +25,9 @@ export declare class ConstantString {
|
|
|
25
25
|
static readonly AdaptiveCardSchema = "http://adaptivecards.io/schemas/adaptive-card.json";
|
|
26
26
|
static readonly AdaptiveCardType = "AdaptiveCard";
|
|
27
27
|
static readonly TextBlockType = "TextBlock";
|
|
28
|
+
static readonly ImageType = "Image";
|
|
28
29
|
static readonly ContainerType = "Container";
|
|
29
30
|
static readonly RegistrationIdPostfix = "REGISTRATION_ID";
|
|
30
|
-
static readonly OAuthRegistrationIdPostFix = "OAUTH_REGISTRATION_ID";
|
|
31
31
|
static readonly ResponseCodeFor20X: string[];
|
|
32
32
|
static readonly AllOperationMethods: string[];
|
|
33
33
|
static readonly WellknownResultNames: string[];
|
|
@@ -41,4 +41,5 @@ export declare class ConstantString {
|
|
|
41
41
|
static readonly CommandTitleMaxLens = 32;
|
|
42
42
|
static readonly ParameterTitleMaxLens = 32;
|
|
43
43
|
static readonly SMERequiredParamsMaxNum = 5;
|
|
44
|
+
static readonly DefaultPluginId = "plugin_1";
|
|
44
45
|
}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -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, ProjectType, } from "./interfaces";
|
|
3
|
+
export { ValidationStatus, WarningType, ErrorType, WarningResult, ErrorResult, ListAPIResult, APIInfo, ValidateResult, ParseOptions, AdaptiveCard, ProjectType, InvalidAPIInfo, } from "./interfaces";
|
|
4
4
|
export { ConstantString } from "./constants";
|
|
5
5
|
export { Utils } from "./utils";
|
|
6
6
|
export { AdaptiveCardGenerator } from "./adaptiveCardGenerator";
|
package/dist/src/interfaces.d.ts
CHANGED
|
@@ -17,6 +17,16 @@ export interface ValidateResult {
|
|
|
17
17
|
*/
|
|
18
18
|
errors: ErrorResult[];
|
|
19
19
|
}
|
|
20
|
+
export interface SpecValidationResult {
|
|
21
|
+
/**
|
|
22
|
+
* An array of warning results generated during validation.
|
|
23
|
+
*/
|
|
24
|
+
warnings: WarningResult[];
|
|
25
|
+
/**
|
|
26
|
+
* An array of error results generated during validation.
|
|
27
|
+
*/
|
|
28
|
+
errors: ErrorResult[];
|
|
29
|
+
}
|
|
20
30
|
/**
|
|
21
31
|
* An interface that represents a warning result generated during validation.
|
|
22
32
|
*/
|
|
@@ -78,6 +88,21 @@ export declare enum ErrorType {
|
|
|
78
88
|
GenerateFailed = "generate-failed",
|
|
79
89
|
ValidateFailed = "validate-failed",
|
|
80
90
|
GetSpecFailed = "get-spec-failed",
|
|
91
|
+
AuthTypeIsNotSupported = "auth-type-is-not-supported",
|
|
92
|
+
MissingOperationId = "missing-operation-id",
|
|
93
|
+
PostBodyContainMultipleMediaTypes = "post-body-contain-multiple-media-types",
|
|
94
|
+
ResponseContainMultipleMediaTypes = "response-contain-multiple-media-types",
|
|
95
|
+
ResponseJsonIsEmpty = "response-json-is-empty",
|
|
96
|
+
PostBodySchemaIsNotJson = "post-body-schema-is-not-json",
|
|
97
|
+
PostBodyContainsRequiredUnsupportedSchema = "post-body-contains-required-unsupported-schema",
|
|
98
|
+
ParamsContainRequiredUnsupportedSchema = "params-contain-required-unsupported-schema",
|
|
99
|
+
ParamsContainsNestedObject = "params-contains-nested-object",
|
|
100
|
+
RequestBodyContainsNestedObject = "request-body-contains-nested-object",
|
|
101
|
+
ExceededRequiredParamsLimit = "exceeded-required-params-limit",
|
|
102
|
+
NoParameter = "no-parameter",
|
|
103
|
+
NoAPIInfo = "no-api-info",
|
|
104
|
+
MethodNotAllowed = "method-not-allowed",
|
|
105
|
+
UrlPathNotExist = "url-path-not-exist",
|
|
81
106
|
Cancelled = "cancelled",
|
|
82
107
|
Unknown = "unknown"
|
|
83
108
|
}
|
|
@@ -141,6 +166,7 @@ export interface CheckParamResult {
|
|
|
141
166
|
requiredNum: number;
|
|
142
167
|
optionalNum: number;
|
|
143
168
|
isValid: boolean;
|
|
169
|
+
reason: ErrorType[];
|
|
144
170
|
}
|
|
145
171
|
export interface ParseOptions {
|
|
146
172
|
/**
|
|
@@ -171,11 +197,27 @@ export interface ParseOptions {
|
|
|
171
197
|
* An array of HTTP methods that the parser will allow in the spec file.
|
|
172
198
|
*/
|
|
173
199
|
allowMethods?: string[];
|
|
200
|
+
/**
|
|
201
|
+
* If true, the parser will allow conversation starters in plugin file. Only take effect in Copilot project
|
|
202
|
+
*/
|
|
203
|
+
allowConversationStarters?: boolean;
|
|
204
|
+
/**
|
|
205
|
+
* If true, the parser will allow response semantics in plugin file. Only take effect in Copilot project
|
|
206
|
+
*/
|
|
207
|
+
allowResponseSemantics?: boolean;
|
|
208
|
+
/**
|
|
209
|
+
* If true, the paser will allow confirmation in plugin file. Only take effect in Copilot project
|
|
210
|
+
*/
|
|
211
|
+
allowConfirmation?: boolean;
|
|
174
212
|
/**
|
|
175
213
|
* The type of project that the parser is being used for.
|
|
176
214
|
* Project can be SME/Copilot/TeamsAi
|
|
177
215
|
*/
|
|
178
216
|
projectType?: ProjectType;
|
|
217
|
+
/**
|
|
218
|
+
* 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.
|
|
219
|
+
*/
|
|
220
|
+
isGptPlugin?: boolean;
|
|
179
221
|
}
|
|
180
222
|
export declare enum ProjectType {
|
|
181
223
|
Copilot = 0,
|
|
@@ -195,14 +237,36 @@ export interface ListAPIInfo {
|
|
|
195
237
|
api: string;
|
|
196
238
|
server: string;
|
|
197
239
|
operationId: string;
|
|
240
|
+
isValid: boolean;
|
|
241
|
+
reason: ErrorType[];
|
|
198
242
|
auth?: AuthInfo;
|
|
199
243
|
}
|
|
244
|
+
export interface APIMap {
|
|
245
|
+
[key: string]: {
|
|
246
|
+
operation: OpenAPIV3.OperationObject;
|
|
247
|
+
isValid: boolean;
|
|
248
|
+
reason: ErrorType[];
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
export interface APIValidationResult {
|
|
252
|
+
isValid: boolean;
|
|
253
|
+
reason: ErrorType[];
|
|
254
|
+
}
|
|
200
255
|
export interface ListAPIResult {
|
|
201
256
|
allAPICount: number;
|
|
202
257
|
validAPICount: number;
|
|
203
|
-
|
|
258
|
+
APIs: ListAPIInfo[];
|
|
204
259
|
}
|
|
205
260
|
export interface AuthInfo {
|
|
206
261
|
authScheme: OpenAPIV3.SecuritySchemeObject;
|
|
207
262
|
name: string;
|
|
208
263
|
}
|
|
264
|
+
export interface InvalidAPIInfo {
|
|
265
|
+
api: string;
|
|
266
|
+
reason: ErrorType[];
|
|
267
|
+
}
|
|
268
|
+
export interface InferredProperties {
|
|
269
|
+
title?: string;
|
|
270
|
+
subtitle?: string;
|
|
271
|
+
imageUrl?: string;
|
|
272
|
+
}
|
|
@@ -2,11 +2,14 @@ import { OpenAPIV3 } from "openapi-types";
|
|
|
2
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, options: ParseOptions): Promise<[TeamsAppManifest, PluginManifestSchema]>;
|
|
5
|
+
static updateManifestWithAiPlugin(manifestPath: string, outputSpecPath: string, apiPluginFilePath: string, spec: OpenAPIV3.Document, options: ParseOptions, authInfo?: AuthInfo): 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, options: ParseOptions): PluginManifestSchema
|
|
8
|
+
static generatePluginManifestSchema(spec: OpenAPIV3.Document, specRelativePath: string, apiPluginFilePath: string, appName: string, authInfo: AuthInfo | undefined, options: ParseOptions): Promise<PluginManifestSchema>;
|
|
9
9
|
static updateManifest(manifestPath: string, outputSpecPath: string, spec: OpenAPIV3.Document, options: ParseOptions, adaptiveCardFolder?: string, authInfo?: AuthInfo): Promise<[TeamsAppManifest, WarningResult[]]>;
|
|
10
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
|
+
static removeEnvs(str: string): string;
|
|
13
|
+
static removeAllSpecialCharacters(str: string): string;
|
|
14
|
+
static getConfirmationBodyItem(paramName: string): string;
|
|
12
15
|
}
|
|
@@ -8,8 +8,8 @@ export declare class SpecParser {
|
|
|
8
8
|
readonly pathOrSpec: string | OpenAPIV3.Document;
|
|
9
9
|
readonly parser: SwaggerParser;
|
|
10
10
|
readonly options: Required<ParseOptions>;
|
|
11
|
-
private apiMap;
|
|
12
11
|
private spec;
|
|
12
|
+
private validator;
|
|
13
13
|
private unResolveSpec;
|
|
14
14
|
private isSwaggerFile;
|
|
15
15
|
private defaultOptions;
|
|
@@ -55,5 +55,6 @@ export declare class SpecParser {
|
|
|
55
55
|
*/
|
|
56
56
|
generate(manifestPath: string, filter: string[], outputSpecPath: string, adaptiveCardFolder?: string, signal?: AbortSignal): Promise<GenerateResult>;
|
|
57
57
|
private loadSpec;
|
|
58
|
-
private
|
|
58
|
+
private getAPIs;
|
|
59
|
+
private getValidator;
|
|
59
60
|
}
|
package/dist/src/specParser.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export declare class SpecParser {
|
|
|
8
8
|
readonly pathOrSpec: string | OpenAPIV3.Document;
|
|
9
9
|
readonly parser: SwaggerParser;
|
|
10
10
|
readonly options: Required<ParseOptions>;
|
|
11
|
-
private
|
|
11
|
+
private validator;
|
|
12
12
|
private spec;
|
|
13
13
|
private unResolveSpec;
|
|
14
14
|
private isSwaggerFile;
|
|
@@ -54,5 +54,7 @@ export declare class SpecParser {
|
|
|
54
54
|
*/
|
|
55
55
|
generate(manifestPath: string, filter: string[], outputSpecPath: string, adaptiveCardFolder?: string, signal?: AbortSignal): Promise<GenerateResult>;
|
|
56
56
|
private loadSpec;
|
|
57
|
-
private
|
|
57
|
+
private getAPIs;
|
|
58
|
+
private getValidator;
|
|
59
|
+
private saveFilterSpec;
|
|
58
60
|
}
|
package/dist/src/utils.d.ts
CHANGED
|
@@ -1,48 +1,29 @@
|
|
|
1
1
|
import { OpenAPIV3 } from "openapi-types";
|
|
2
|
-
import
|
|
3
|
-
import { AuthInfo, CheckParamResult, ErrorResult, ParseOptions, ValidateResult, WarningResult } from "./interfaces";
|
|
2
|
+
import { AuthInfo, ErrorResult, ParseOptions } from "./interfaces";
|
|
4
3
|
import { IMessagingExtensionCommand, IParameter } from "@microsoft/teams-manifest";
|
|
5
4
|
export declare class Utils {
|
|
6
5
|
static hasNestedObjectInSchema(schema: OpenAPIV3.SchemaObject): boolean;
|
|
7
|
-
static checkParameters(paramObject: OpenAPIV3.ParameterObject[], isCopilot: boolean): CheckParamResult;
|
|
8
|
-
static checkPostBody(schema: OpenAPIV3.SchemaObject, isRequired?: boolean, isCopilot?: boolean): CheckParamResult;
|
|
9
6
|
static containMultipleMediaTypes(bodyObject: OpenAPIV3.RequestBodyObject | OpenAPIV3.ResponseObject): boolean;
|
|
10
|
-
/**
|
|
11
|
-
* Checks if the given API is supported.
|
|
12
|
-
* @param {string} method - The HTTP method of the API.
|
|
13
|
-
* @param {string} path - The path of the API.
|
|
14
|
-
* @param {OpenAPIV3.Document} spec - The OpenAPI specification document.
|
|
15
|
-
* @returns {boolean} - Returns true if the API is supported, false otherwise.
|
|
16
|
-
* @description The following APIs are supported:
|
|
17
|
-
* 1. only support Get/Post operation without auth property
|
|
18
|
-
* 2. parameter inside query or path only support string, number, boolean and integer
|
|
19
|
-
* 3. parameter inside post body only support string, number, boolean, integer and object
|
|
20
|
-
* 4. request body + required parameters <= 1
|
|
21
|
-
* 5. response body should be “application/json” and not empty, and response code should be 20X
|
|
22
|
-
* 6. only support request body with “application/json” content type
|
|
23
|
-
*/
|
|
24
|
-
static isSupportedApi(method: string, path: string, spec: OpenAPIV3.Document, options: ParseOptions): boolean;
|
|
25
|
-
static isSupportedAuth(authSchemeArray: AuthInfo[][], options: ParseOptions): boolean;
|
|
26
7
|
static isBearerTokenAuth(authScheme: OpenAPIV3.SecuritySchemeObject): boolean;
|
|
27
8
|
static isAPIKeyAuth(authScheme: OpenAPIV3.SecuritySchemeObject): boolean;
|
|
28
9
|
static isOAuthWithAuthCodeFlow(authScheme: OpenAPIV3.SecuritySchemeObject): boolean;
|
|
29
10
|
static getAuthArray(securities: OpenAPIV3.SecurityRequirementObject[] | undefined, spec: OpenAPIV3.Document): AuthInfo[][];
|
|
11
|
+
static getAuthInfo(spec: OpenAPIV3.Document): AuthInfo | undefined;
|
|
30
12
|
static updateFirstLetter(str: string): string;
|
|
31
|
-
static getResponseJson(operationObject: OpenAPIV3.OperationObject | undefined
|
|
13
|
+
static getResponseJson(operationObject: OpenAPIV3.OperationObject | undefined): {
|
|
14
|
+
json: OpenAPIV3.MediaTypeObject;
|
|
15
|
+
multipleMediaType: boolean;
|
|
16
|
+
};
|
|
32
17
|
static convertPathToCamelCase(path: string): string;
|
|
33
18
|
static getUrlProtocol(urlString: string): string | undefined;
|
|
34
|
-
static
|
|
19
|
+
static resolveEnv(str: string): string;
|
|
35
20
|
static checkServerUrl(servers: OpenAPIV3.ServerObject[]): ErrorResult[];
|
|
36
21
|
static validateServer(spec: OpenAPIV3.Document, options: ParseOptions): ErrorResult[];
|
|
37
22
|
static isWellKnownName(name: string, wellknownNameList: string[]): boolean;
|
|
38
23
|
static generateParametersFromSchema(schema: OpenAPIV3.SchemaObject, name: string, allowMultipleParameters: boolean, isRequired?: boolean): [IParameter[], IParameter[]];
|
|
39
24
|
static updateParameterWithInputType(schema: OpenAPIV3.SchemaObject, param: IParameter): void;
|
|
40
|
-
static parseApiInfo(operationItem: OpenAPIV3.OperationObject, options: ParseOptions):
|
|
41
|
-
static listSupportedAPIs(spec: OpenAPIV3.Document, options: ParseOptions): {
|
|
42
|
-
[key: string]: OpenAPIV3.OperationObject;
|
|
43
|
-
};
|
|
44
|
-
static validateSpec(spec: OpenAPIV3.Document, parser: SwaggerParser, isSwaggerFile: boolean, options: ParseOptions): ValidateResult;
|
|
25
|
+
static parseApiInfo(operationItem: OpenAPIV3.OperationObject, options: ParseOptions): IMessagingExtensionCommand;
|
|
45
26
|
static format(str: string, ...args: string[]): string;
|
|
46
27
|
static getSafeRegistrationIdEnvName(authName: string): string;
|
|
47
|
-
static
|
|
28
|
+
static getServerObject(spec: OpenAPIV3.Document, method: string, path: string): OpenAPIV3.ServerObject | undefined;
|
|
48
29
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@microsoft/m365-spec-parser",
|
|
3
|
-
"version": "0.1.1-alpha.
|
|
3
|
+
"version": "0.1.1-alpha.ad8f60cf1.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.
|
|
42
|
+
"@microsoft/teams-manifest": "0.1.4-alpha.ad8f60cf1.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": "
|
|
151
|
+
"gitHead": "036c87268180b3ea086c2e56aa5c04c8763d1a04"
|
|
152
152
|
}
|