From fd20898d6d87cf30ce4dc3e7a78434aac531929b Mon Sep 17 00:00:00 2001 From: Mario Doiron <5252025+doiron@users.noreply.github.com> Date: Fri, 21 Apr 2023 17:43:27 -0700 Subject: [PATCH 1/5] feat: add proxy support for smapi commands #434 --- .prettierignore | 2 + lib/clients/http-client.js | 180 +- lib/clients/lwa-auth-code-client/index.js | 16 +- lib/clients/smapi-client/index.ts | 14 +- lib/clients/smapi-client/smapiApiClient.ts | 83 + lib/commands/abstract-command.ts | 8 +- lib/commands/dialog/index.ts | 2 +- lib/commands/init/index.ts | 2 +- lib/commands/new/template-helper.ts | 9 +- lib/commands/skill/add-locales/helper.js | 17 +- .../appended-commands/export-package/index.ts | 16 +- lib/commands/smapi/smapi-command-handler.js | 34 +- .../skill-metadata-controller/index.js | 33 +- lib/utils/logger-utility.js | 24 +- package-lock.json | 3558 +- package.json | 5 +- .../commands/smapi-commands-test.js | 14 +- .../fixtures/account-linking-request.json | 2 +- .../create-in-skill-product-request.json | 2 +- test/integration/fixtures/lwa-swagger.json | 4 +- test/integration/fixtures/smapi_spec.json | 28554 ++++++++++++++++ test/test-utils.js | 2 +- test/unit/clients/http-client-test.js | 239 +- .../unit/clients/lwa-auth-code-client-test.js | 1 + .../clients/smapi-client-test/index.test.ts | 4 +- .../smapi-client-test/smapiApiClient-test.ts | 96 + test/unit/commands/abstract-command-test.ts | 6 +- test/unit/commands/dialog/index.spec.ts | 57 +- test/unit/commands/init/index-test.ts | 14 +- .../unit/commands/new/template-helper-test.ts | 8 +- .../commands/skill/add-locales/helper-test.js | 13 +- .../commands/skill/skill-commander-test.ts | 3 +- .../export-package/index-test.ts | 10 +- .../appended-commands/get-task/index-test.ts | 8 +- .../search-task/index-test.ts | 8 +- .../smapi/smapi-command-handler-test.js | 45 +- .../util/git-credentials-helper/index-test.ts | 8 +- .../unit/commands/util/util-commander-test.ts | 2 +- .../skill-metadata-controller-test.js | 47 +- 39 files changed, 31273 insertions(+), 1877 deletions(-) create mode 100644 lib/clients/smapi-client/smapiApiClient.ts create mode 100644 test/integration/fixtures/smapi_spec.json create mode 100644 test/unit/clients/smapi-client-test/smapiApiClient-test.ts diff --git a/.prettierignore b/.prettierignore index 945997df..a268fb00 100644 --- a/.prettierignore +++ b/.prettierignore @@ -5,3 +5,5 @@ node_modules docs scripts *.md +coverage +.nyc_output/ diff --git a/lib/clients/http-client.js b/lib/clients/http-client.js index f9c51e0a..52cf3dd8 100644 --- a/lib/clients/http-client.js +++ b/lib/clients/http-client.js @@ -1,70 +1,82 @@ -const R = require("ramda"); -const requestLib = require("request"); +"use strict"; +import axios from "axios"; +import {Url, parse} from "url"; -const DynamicConfig = require("../utils/dynamic-config"); -const logger = require("../utils/logger-utility"); -const urlUtils = require("../utils/url-utils"); -const stringUtils = require("../utils/string-utils"); -const CONSTANTS = require("../utils/constants"); - -module.exports = { - request, - putByUrl, -}; +import {userAgent} from "../utils/dynamic-config"; +import {getInstance as loggerInstance} from "../utils/logger-utility"; +import {isValidUrl} from "../utils/url-utils"; +import {isNonBlankString} from "../utils/string-utils"; +import {HTTP_REQUEST} from "../utils/constants"; /** - * Core CLI request function with User-Agent setting. + * Core CLI request function with User-Agent setting and proxy support. * * @param {object} options request options object * @param {string} operation operation name for the request * @param {boolean} doDebug define if debug info is needed * @param {function} callback */ -function request(options, operation, doDebug, callback) { +export function request(options, operation, doDebug, callback) { // Validation of input parameters - const requestOptions = R.clone(options); if (typeof operation !== "string" || !operation.trim()) { process.nextTick(() => { callback("[Fatal]: CLI request must have a non-empty operation name."); }); return; } - if (!urlUtils.isValidUrl(requestOptions.url)) { + if (!isValidUrl(options.url)) { process.nextTick(() => { - callback(`[Fatal]: Invalid URL:${requestOptions.url}. CLI request must call with valid url.`); + callback(`[Fatal]: Invalid URL:${options.url}. CLI request must call with valid url.`); }); return; } - const proxyUrl = process.env.ASK_CLI_PROXY; - if (stringUtils.isNonBlankString(proxyUrl)) { - requestOptions.proxy = proxyUrl; + let proxyConfig = {}; + try { + proxyConfig = getProxyConfigurations(); + } catch (err) { + return callback(err.message); } + const requestOptions = { + method: options.method || "GET", + url: options.url, + headers: options.headers || {}, + data: options.body, + ...proxyConfig, + }; + // Set user-agent for each CLI request - if (!requestOptions.headers) { - requestOptions.headers = {}; - } - requestOptions.headers["User-Agent"] = DynamicConfig.userAgent; + requestOptions.headers["User-Agent"] = userAgent; // Make request - requestLib(requestOptions, (error, response) => { - if (doDebug) { - logger.getInstance().debug(debugContentForResponse(operation, error, response)); - } - if (error) { - return callback(`Failed to make request to ${operation}.\nError response: ${error}`); - } - if (!response) { - return callback(`Failed to make request to ${operation}.\nPlease make sure "${requestOptions.url}" is responding.`); - } - if (!response.statusCode) { - return callback(`Failed to access the statusCode from the request to ${operation}.`); - } - return callback(null, response); - }); -} + return axios.request(requestOptions) + .then((response) => { + if (doDebug) { + loggerInstance().debug(debugContentForResponse(operation, null, response)); + } + if (!response) { + return callback(`The request to ${operation}, failed.\nPlease make sure "${requestOptions.url}" is responding.`); + } + if (!response.status) { + return callback(`Failed to access the statusCode from the request to ${operation}.`); + } + return callback(null, { + statusCode: response.status, + ...(response.data ? {body: response.data} : {}), + ...(response.headers ? {headers: response.headers} : {}), + }); + }) + .catch((error) => { + const response = error ? error.response || {} : {}; + error.statusCode ||= response.status; + if (doDebug) { + loggerInstance().debug(debugContentForResponse(operation, error, response)); + } + return callback(`The request to ${requestOptions.url} failed. Client Error: ${error}`, response); + }); +} /** * HTTP client's upload method * @param {String} url @@ -73,10 +85,10 @@ function request(options, operation, doDebug, callback) { * @param {Boolean} doDebug * @param {Function} callback */ -function putByUrl(url, payload, operation, doDebug, callback) { +export function putByUrl(url, payload, operation, doDebug, callback) { const options = { url, - method: CONSTANTS.HTTP_REQUEST.VERB.PUT, + method: HTTP_REQUEST.VERB.PUT, headers: {}, body: payload, }; @@ -92,21 +104,77 @@ function putByUrl(url, payload, operation, doDebug, callback) { * @param {object} response */ function debugContentForResponse(operation, error, response) { - return { + const debugContent = { activity: operation, error, - "request-id": response.headers["x-amzn-requestid"] || null, - request: { - method: response.request.method, - url: response.request.href, - headers: response.request.headers, - body: response.request.body, - }, - response: { - statusCode: response.statusCode, - statusMessage: response.statusMessage, - headers: response.headers, - }, - body: response.body, }; + if (response) { + debugContent["response"] = { + ...(response.status ? { statusCode: response.status } : {}), + ...(response.statusText ? { statusMessage: response.statusText } : {}), + ...(response.headers ? { headers: response.headers } : {}), + }; + debugContent["request-id"] = response.headers ? (debugContent["request-id"] = response.headers["x-amzn-requestid"] || null) : null; + const requestConfig = response.config || {}; + if (response.request) { + debugContent["request"] = { + method: requestConfig.method, + url: requestConfig.url, + headers: response.request._headers || requestConfig.headers, + body: requestConfig.data, + }; + } + if (response.data) { + debugContent["body"] = response.data; + } + } + return debugContent; +} + +/** + * If the env variable ASK_CLI_PROXY is set, returns the axios proxy object to append to the requestOptions + * as defined here https://www.npmjs.com/package/axios#request-config + * Otherwise returns an empty object {} + * @returns {Record} axios proxy configurations + * @throws {Error} if the ASK_CLI_PROXY is not a valid URL + */ +function getProxyConfigurations() { + const proxyEnv = process.env.ASK_CLI_PROXY; + const configuration = {}; + if (proxyEnv && isNonBlankString(proxyEnv)) { + if (!isValidUrl(proxyEnv)) { + throw new Error(`[Fatal]: Invalid Proxy setting URL: ${proxyEnv}. Reset ASK_CLI_PROXY env variable with a valid proxy url.`); + } + const proxyUrl = parse(proxyEnv); + configuration.proxy = { + protocol: proxyUrl.protocol.replace(":", ""), + host: proxyUrl.hostname, + ...(proxyUrl.port ? {port: proxyUrl.port} : {}), + ...getAuthFromUrlObject(proxyUrl), + }; + } + return configuration; +} + +/** + * Gets the auth part of the specified Url and returns an axios auth object to append to the proxy / request object + * as defined here https://www.npmjs.com/package/axios#request-config + * Otherwise returns an empty object {} + * @param {Url} url + * @returns {Record} axios proxy auth configurations + */ +function getAuthFromUrlObject(url) { + const auth = {}; + if (url.auth) { + const authSplit = url.auth.split(":"); + const authBody = {}; + if (authSplit.length > 0) { + authBody.username = authSplit[0]; + } + if (authSplit.length > 1) { + authBody.password = authSplit[1]; + } + auth.auth = authBody; + } + return auth; } diff --git a/lib/clients/lwa-auth-code-client/index.js b/lib/clients/lwa-auth-code-client/index.js index 6753f0cc..788dd583 100644 --- a/lib/clients/lwa-auth-code-client/index.js +++ b/lib/clients/lwa-auth-code-client/index.js @@ -57,17 +57,17 @@ module.exports = class LWAAuthCodeClient { */ refreshToken(token, callback) { const url = new URL(this.config.tokenPath, this.config.tokenHost); - const body = { - grant_type: "refresh_token", - refresh_token: token.refresh_token, - client_id: this.config.clientId, - client_secret: this.config.clientConfirmation, - }; const options = { url: `${url}`, + headers: {"content-type": "application/json"}, method: "POST", - body, - json: !!body, + body: { + grant_type: "refresh_token", + refresh_token: token.refresh_token, + client_id: this.config.clientId, + client_secret: this.config.clientConfirmation, + }, + json: true, }; httpClient.request(options, "GET_ACCESS_TOKEN_USING_REFRESH_TOKEN", this.config.doDebug, (err, response) => { if (err) { diff --git a/lib/clients/smapi-client/index.ts b/lib/clients/smapi-client/index.ts index ed7f9578..a77343dc 100644 --- a/lib/clients/smapi-client/index.ts +++ b/lib/clients/smapi-client/index.ts @@ -1,7 +1,7 @@ import querystring from "querystring"; import AuthorizationController from "../../controllers/authorization-controller"; import DynamicConfig from "../../utils/dynamic-config"; -import httpClient from "../http-client"; +import * as httpClient from "../http-client"; import accountLinkingApi from "./resources/account-linking"; import catalogApi from "./resources/catalog"; @@ -163,11 +163,16 @@ export class SmapiClientLateBound { json: !!payload, }; httpClient.request(requestOptions, apiName, configuration.doDebug, (reqErr: any, reqResponse: SmapiResponse) => { + if (reqErr && reqErr.statusCode ) { + return _normalizeSmapiResponse(reqErr, (normalizeErr, smapiResponse) => { + return callback(normalizeErr || smapiResponse, smapiResponse || null); + }); + } if (reqErr) { return callback(reqErr); } - _normalizeSmapiResponse(reqResponse, (normalizeErr, smapiResponse) => { - callback(normalizeErr, normalizeErr ? null : smapiResponse); + return _normalizeSmapiResponse(reqResponse, (normalizeErr, smapiResponse) => { + return callback(normalizeErr, normalizeErr ? null : smapiResponse); }); }); }); @@ -235,12 +240,14 @@ export interface SmapiResponseObject> { statusCode: number; body: T; headers: any[]; + message?: string; } export interface SmapiResponseError { statusCode: number; body: E & {message: string}; headers: any[]; + message?: string; } export function isSmapiError(response: SmapiResponse): response is SmapiResponseError { @@ -264,6 +271,7 @@ function _normalizeSmapiResponse(reqResponse: SmapiResponse, callback: (er statusCode: reqResponse.statusCode, body: parsedResponseBody, headers: reqResponse.headers, + ...(reqResponse.message? {message: reqResponse.message} : {}) }); } diff --git a/lib/clients/smapi-client/smapiApiClient.ts b/lib/clients/smapi-client/smapiApiClient.ts new file mode 100644 index 00000000..4a9e5792 --- /dev/null +++ b/lib/clients/smapi-client/smapiApiClient.ts @@ -0,0 +1,83 @@ +import {ApiClient, ApiClientRequest, ApiClientResponse} from "ask-sdk-model-runtime"; + +import {SmapiResponse} from "."; +import * as httpClient from "../http-client"; + +/** + * Implementation of {@link ApiClient} that leverages the httpclient class which supports setting Proxies and publishing telemetry metrics. + * This is use while building a CustomSmapiClientBuilder instead of using the DefaultApiClient + */ +export class SmapiApiClient implements ApiClient { + doDebug: boolean; + profile: string; + fullResponse: boolean; + + /** + * Builds an instance of the SmapiApiClient class + * @param doDebug Set to true to tell the httpClient to print request information to the terminal + * @param profile The configured ask profile to use for authorization + * @param fullResponse Set to true to tell the httpClient to print the full response from the service + */ + constructor(doDebug: boolean, profile: string, fullResponse: boolean) { + this.doDebug = doDebug; + this.profile = profile; + this.fullResponse = fullResponse; + } + + /** + * Dispatches a request to an API endpoint described in the request. + * @param {ApiClientRequest} request request to dispatch to the ApiClient + * @returns {Promise} response from the ApiClient + */ + public invoke(request: ApiClientRequest): Promise { + return new Promise(async (resolve, reject) => { + const headers: {[key: string]: string} = {}; + let data: any = request.body; + request.headers?.forEach(header => { + if (header.key.toLowerCase() === "content-type" && + header.value.toLowerCase() === "application/x-www-form-urlencoded") { + data = this.convertUrlEncodedToJson(request.body); + headers[header.key] = "application/json"; + } else { + headers[header.key] = header.value; + } + }); + + const requestOptions = { + url: request.url, + method: request.method, + headers: headers, + body: data, + }; + + httpClient.request(requestOptions, "SMAPI_API_CLIENT", this.doDebug, (reqErr: any, reqResponse: SmapiResponse) => { + if (reqErr) { + return reject(new Error(reqErr)); + } + const dataContent = reqResponse?.body || {}; + + resolve({ + statusCode: reqResponse?.statusCode!, + body: this.sanitizeDataContent(dataContent), + headers: reqResponse?.headers!, + }); + }); + }); + } + + private convertUrlEncodedToJson(urlEncoded: string | undefined): {[key: string]: string} { + var result: {[key: string]: string} = {}; + urlEncoded?.split('&').forEach(function(entry) { + const keyValueSplit = entry.split('='); + if (keyValueSplit && keyValueSplit.length > 1) { + result[keyValueSplit[0]] = decodeURIComponent(keyValueSplit[1] || ''); + } + }); + return result; + } + + private sanitizeDataContent(dataContent: object): string { + return JSON.stringify(dataContent, (k, v) => { if (k !== "_links") return v; }); + } + +} diff --git a/lib/commands/abstract-command.ts b/lib/commands/abstract-command.ts index 375d571a..c05b5e6a 100644 --- a/lib/commands/abstract-command.ts +++ b/lib/commands/abstract-command.ts @@ -2,7 +2,7 @@ import {OptionModel, OptionModelEntry} from "./option-validator"; import semver from "semver"; -import httpClient from "../clients/http-client"; +import * as httpClient from "../clients/http-client"; import {validateRequiredOption, validateOptionString, validateOptionRules} from "./option-validator"; import AppConfig from "../model/app-config"; import CONSTANTS from "../utils/constants"; @@ -196,13 +196,13 @@ export abstract class AbstractCommand = Record { - if (err || response.statusCode > 300) { - const error = err || `Http Status Code: ${response.statusCode}.`; + if (err) { + const error = err.statusCode ? `Http Status Code: ${err.statusCode}.`: err; Messenger.getInstance().error( `Failed to get the latest version for ${CONSTANTS.APPLICATION_NAME} from NPM registry.\n${error}\n`, ); } else { - const latestVersion = JSON.parse(response.body).version; + const latestVersion = response.body?.version; if (packageJson.version !== latestVersion) { if (semver.major(packageJson.version) < semver.major(latestVersion)) { Messenger.getInstance().warn(`\ diff --git a/lib/commands/dialog/index.ts b/lib/commands/dialog/index.ts index f0ac9d6e..d1c027e0 100644 --- a/lib/commands/dialog/index.ts +++ b/lib/commands/dialog/index.ts @@ -81,7 +81,7 @@ export class DialogCommand extends AbstractCommand { const manifestResult = await smapiClient.skill.manifest.getManifest(skillId, stage); if (isSmapiError(manifestResult)) { - throw jsonView.toString(manifestResult.body); + throw new Error(jsonView.toString(manifestResult.body)); } const [firstLocaleFromManifest] = Object.keys(manifestResult.body.manifest?.publishingInformation?.locales || {}); if (!locale && !process.env.ASK_DEFAULT_DEVICE_LOCALE && firstLocaleFromManifest) { diff --git a/lib/commands/init/index.ts b/lib/commands/init/index.ts index d9bdd2c1..4585c4e0 100644 --- a/lib/commands/init/index.ts +++ b/lib/commands/init/index.ts @@ -75,7 +75,7 @@ async function initAlexaHostedSkill(rootPath: string, cmd: Record, return reject(hooksErr); } Messenger.getInstance().info(`\n${skillName} successfully initialized.\n`); - resolve(); + return resolve(); }); }); }); diff --git a/lib/commands/new/template-helper.ts b/lib/commands/new/template-helper.ts index 359d6000..ee856a6c 100644 --- a/lib/commands/new/template-helper.ts +++ b/lib/commands/new/template-helper.ts @@ -1,5 +1,4 @@ -import httpClient from "../../clients/http-client"; -import R from "ramda"; +import * as httpClient from "../../clients/http-client"; import {TEMPLATES, HTTP_REQUEST, DEPLOYER_TYPE} from "../../utils/constants"; import {SampleTemplate, SampleTemplateFilterValues} from "../../model/sample-template"; import {CODE_LANGUAGE_JAVA, CODE_LANGUAGE_NODEJS, CODE_LANGUAGE_PYTHON, MODELING_STACK_AC, MODELING_STACK_IM} from "."; @@ -10,14 +9,14 @@ export function getSampleTemplatesFromS3(doDebug: boolean): Promise { - if (error || !response.statusCode || response.statusCode !== 200) { + httpClient.request(params, "TEMPLATE_S3_SOURCE_URL", doDebug, (error: any | null, response: any) => { + if (error || (error?.statusCode && error?.statusCode !== 200)) { const msg = doDebug ? "Failed to retrieve the skill sample templates." : "Failed to retrieve the skill sample templates. Please run again with --debug to see the details."; return reject(new Error(msg)); } - resolve(R.view(R.lensPath(["templates"]), JSON.parse(response?.body))); + resolve(response?.body?.templates); }); }); } diff --git a/lib/commands/skill/add-locales/helper.js b/lib/commands/skill/add-locales/helper.js index a1c598d8..0d3b856a 100644 --- a/lib/commands/skill/add-locales/helper.js +++ b/lib/commands/skill/add-locales/helper.js @@ -110,13 +110,9 @@ function _getNewLocaleModelUri(selectedLocales, profile, doDebug, callback) { doDebug, (error, templateMapResponse) => { if (error) { - return callback(`Failed to retrieve the template list.\nError: ${error}`); + return callback(`Failed to retrieve the interaction model map template list.\nError: ${JSON.stringify(error, null, 2)}`); } - if (templateMapResponse.statusCode !== 200) { - return callback(`Failed to retrieve the template list, please see the details from the error response. -${JSON.stringify(templateMapResponse, null, 2)}`); - } - const templateIndexMap = JSON.parse(templateMapResponse.body); + const templateIndexMap = templateMapResponse.body; // assign for each locale for (const locale of selectedLocales) { if (R.keys(localIModelByLocale).includes(locale)) { @@ -161,12 +157,13 @@ function _retrieveTemplatesByLanguage(templateSet, doDebug, callback) { doDebug, (error, response) => { if (error) { + if (error.statusCode > 300) { + return loopCallback(`Failed to retrieve the template list, please see the details from the error response.\n${JSON.stringify(error, null, 2)}`); + } + return loopCallback(`Failed to retrieve the template list.\n${error}`); } - if (response.statusCode > 300) { - return loopCallback(`Failed to retrieve the template list, please see the details from the error response. -${JSON.stringify(response, null, 2)}`); - } + result.set(templateUrl, response.body); loopCallback(); }, diff --git a/lib/commands/smapi/appended-commands/export-package/index.ts b/lib/commands/smapi/appended-commands/export-package/index.ts index 5725cae2..b44132d9 100644 --- a/lib/commands/smapi/appended-commands/export-package/index.ts +++ b/lib/commands/smapi/appended-commands/export-package/index.ts @@ -2,11 +2,11 @@ import fs from "fs"; import path from "path"; import {AbstractCommand} from "../../../abstract-command"; import CONSTANTS from "../../../../utils/constants"; -import jsonView from "../../../../view/json-view"; +import * as jsonView from "../../../../view/json-view"; import Messenger from "../../../../view/messenger"; import optionModel from "../../../option-model.json"; import profileHelper from "../../../../utils/profile-helper"; -import SmapiClient, {isSmapiError} from "../../../../clients/smapi-client"; +import SmapiClient from "../../../../clients/smapi-client"; import zipUtils from "../../../../utils/zip-utils"; import helper from "./helper.js"; import {OptionModel} from "../../../option-validator"; @@ -34,7 +34,7 @@ export default class ExportPackageCommand extends AbstractCommand { profile = profileHelper.runtimeProfile(cmd.profile); // 0.check if a skill-package file exists if (fs.existsSync(CONSTANTS.FILE_PATH.SKILL_PACKAGE.PACKAGE)) { - throw new Error(`A ${CONSTANTS.FILE_PATH.SKILL_PACKAGE.PACKAGE} fold already exists in the current working directory.`); + throw new Error(`A ${CONSTANTS.FILE_PATH.SKILL_PACKAGE.PACKAGE} folder already exists in the current working directory.`); } } catch (err) { Messenger.getInstance().error(err); @@ -49,14 +49,10 @@ export default class ExportPackageCommand extends AbstractCommand { return new Promise((resolve, reject) => { smapiClient.skillPackage.exportPackage(cmd.skillId, cmd.stage, (exportErr: any, exportResponse: any) => { if (exportErr) { - Messenger.getInstance().error(exportErr); - return reject(exportErr); - } - if (isSmapiError(exportResponse)) { - const error = jsonView.toString(exportResponse.body); - Messenger.getInstance().error(error); - return reject(error); + Messenger.getInstance().error(jsonView.toString(exportErr)); + return reject(new Error(jsonView.toString(exportErr))); } + const exportId = path.basename(exportResponse?.headers?.location); // 2.poll for the skill package export status diff --git a/lib/commands/smapi/smapi-command-handler.js b/lib/commands/smapi/smapi-command-handler.js index 3fdd328a..41adf9f1 100644 --- a/lib/commands/smapi/smapi-command-handler.js +++ b/lib/commands/smapi/smapi-command-handler.js @@ -11,12 +11,14 @@ const DynamicConfig = require("../../utils/dynamic-config"); const jsonView = require("../../view/json-view"); const Messenger = require("../../view/messenger"); const profileHelper = require("../../utils/profile-helper"); +const { SmapiApiClient } = require("../../clients/smapi-client/smapiApiClient"); const unflatten = require("../../utils/unflatten"); const {getParamNames, standardize, canParseAsJson, kebabCase} = require("../../utils/string-utils"); const BeforeSendProcessor = require("./before-send-processor"); const {BODY_PATH_DELIMITER, ARRAY_SPLIT_DELIMITER, CliCustomizationProcessor} = require("./cli-customization-processor"); + const _mapToArgs = (params, paramsObject) => { const res = []; params.forEach((param) => { @@ -101,8 +103,7 @@ const _matchSwaggerPattern = (url, swaggerPatternUrl) => { }; const _showCheckStatusHint = (locationHeader, profile) => { - const {value} = locationHeader; - const [baseUrl, queryStringPart] = value.split("?"); + const [baseUrl, queryStringPart] = locationHeader.split("?"); const modelIntrospector = new ModelIntrospector(); const paths = Object.keys(modelIntrospector.modelJson.paths); let swaggerMatch; @@ -134,7 +135,7 @@ const _showCheckStatusHint = (locationHeader, profile) => { `This is an asynchronous operation. Check the progress using the following command: ${statusCheckHintCommand}`, ); } else { - Messenger.getInstance().warn(`This is an asynchronous operation. Check the progress using the following url: ${value}`); + Messenger.getInstance().warn(`This is an asynchronous operation. Check the progress using the following url: ${locationHeader}`); } }; @@ -145,10 +146,10 @@ const _showCheckStatusHint = (locationHeader, profile) => { const parseSmapiResponse = (response, profile) => { let result = ""; const {body, headers, statusCode} = response; - const contentType = headers.find((h) => h.key === "content-type"); - const locationHeader = headers.find((h) => h.key === "location"); + const contentType = headers["content-type"]; + const locationHeader = headers["location"]; // json if no content type or content type is application/json - const isJson = !contentType || contentType.value.includes("application/json"); + const isJson = !contentType || contentType.includes("application/json"); if (statusCode === CONSTANTS.HTTP_REQUEST.STATUS_CODE.ACCEPTED && locationHeader) { _showCheckStatusHint(locationHeader, profile); } @@ -170,7 +171,7 @@ const parseSmapiResponse = (response, profile) => { * @param {Boolean} doDebug * @param {Object} cmdObj Commander object with passed values. */ -const smapiCommandHandler = (swaggerApiOperationName, flatParamsMap, commanderToApiCustomizationMap, inputCmdObj, modelIntrospector) => { +const smapiCommandHandler = async (swaggerApiOperationName, flatParamsMap, commanderToApiCustomizationMap, inputCmdObj, modelIntrospector) => { new AppConfig(); const inputOpts = inputCmdObj.opts(); const authorizationController = new AuthorizationController({ @@ -185,11 +186,18 @@ const smapiCommandHandler = (swaggerApiOperationName, flatParamsMap, commanderTo }; const authEndpoint = DynamicConfig.lwaTokenHost; const smapiEndpoint = DynamicConfig.smapiBaseUrl; + const smapiApiClient = new SmapiApiClient(inputOpts.debug, profile); + const accessTokenConfig = { + clientId: authorizationController.oauthClient.config.clientId, + clientSecret: authorizationController.oauthClient.config.clientConfirmation, + accessToken: await getAuthToken(authorizationController, profile), + } const client = new CustomSmapiClientBuilder() - .withAuthEndpoint(authEndpoint) - .withApiEndpoint(smapiEndpoint) + .withAccessTokenConfig(accessTokenConfig) .withRefreshTokenConfig(refreshTokenConfig) + .withApiEndpoint(smapiEndpoint) + .withApiClient(smapiApiClient) .withCustomUserAgent(DynamicConfig.userAgent) .client(); @@ -227,4 +235,12 @@ const smapiCommandHandler = (swaggerApiOperationName, flatParamsMap, commanderTo }); }; +const getAuthToken = async (authorizationController, profile) => { + return new Promise((resolve, reject) => { + authorizationController.tokenRefreshAndRead(profile, (tokenErr, authToken) => { + (tokenErr)? reject(tokenErr) : resolve(authToken); + }); + }); +}; + module.exports = {smapiCommandHandler, parseSmapiResponse}; diff --git a/lib/controllers/skill-metadata-controller/index.js b/lib/controllers/skill-metadata-controller/index.js index 065c0a61..051abf87 100644 --- a/lib/controllers/skill-metadata-controller/index.js +++ b/lib/controllers/skill-metadata-controller/index.js @@ -138,27 +138,30 @@ module.exports = class SkillMetadataController { } this.smapiClient.skill.getSkillEnablement(skillId, CONSTANTS.SKILL.STAGE.DEVELOPMENT, (err, response) => { - if (err) { - return callback(err); - } - if (response.statusCode === CONSTANTS.HTTP_REQUEST.STATUS_CODE.NOT_FOUND) { + if (err && err.statusCode === CONSTANTS.HTTP_REQUEST.STATUS_CODE.NOT_FOUND) { + // When the skill is not yet enabled, the SMAPI getSkillEnablement status API returns a 404 not found. + // therefore we need to call SMAPI enableSkill API to enable it. this.smapiClient.skill.enableSkill(skillId, CONSTANTS.SKILL.STAGE.DEVELOPMENT, (enableErr, enableResponse) => { + if (enableErr && enableErr.statusCode >= 300) { + return callback(jsonView.toString(enableErr.body || {})); + } if (enableErr) { return callback(enableErr); } - if (enableResponse.statusCode >= 300) { - return callback(jsonView.toString(enableResponse.body)); - } - Messenger.getInstance().info("Skill is enabled successfully.\n"); - - callback(); + Messenger.getInstance().info("The skill has been enabled.\n"); + return callback(); }); - } else if (response.statusCode >= 300) { - callback(jsonView.toString(response.body)); - } else { - Messenger.getInstance().info("Skill is already enabled, skipping the enable process.\n"); - callback(); + return; + } + if (err && err.statusCode >= 300) { + return callback(jsonView.toString(err.body)); + } + if (err) { + return callback(err); } + + Messenger.getInstance().info("The skill is already enabled, skipping skill enablement.\n"); + return callback(); }); } diff --git a/lib/utils/logger-utility.js b/lib/utils/logger-utility.js index f521475a..adbad97d 100644 --- a/lib/utils/logger-utility.js +++ b/lib/utils/logger-utility.js @@ -27,7 +27,7 @@ module.exports = (function () { for (let item of logBuffer) { // display separators for each item before-hand except the first time if (item !== logBuffer[0]) { - console.warn("----------------------------------------"); + console.warn("\n----------------------------------------"); } item = JSON.parse(item); @@ -35,16 +35,24 @@ module.exports = (function () { if (item["request-id"]) { console.warn("request-id: " + item["request-id"]); } - console.warn(item.request.method + " " + item.request.url); - console.warn("status code: " + item.response.statusCode + " " + item.response.statusMessage); + if (item.request) { + console.warn(item.request.method + " " + item.request.url); + } + if (item.response) { + console.warn("status code: " + item.response.statusCode + " " + item.response.statusMessage); + } if (item.error) { - console.warn("error: " + item.error); + console.warn("\nerror: " + JSON.stringify(item.error)); + } + if (item.request) { + console.warn("\nRequest headers: " + JSON.stringify(item.request.headers)); + if (item.request.body) { + console.warn("\nRequest body: " + item.request.body); + } } - console.warn("\nRequest headers: " + JSON.stringify(item.request.headers)); - if (item.request.body) { - console.warn("\nRequest body: " + item.request.body); + if (item.response) { + console.warn("\nResponse headers: " + JSON.stringify(item.response.headers)); } - console.warn("\nResponse headers: " + JSON.stringify(item.response.headers)); if (item.body) { console.warn("\nResponse body: " + JSON.stringify(item.body)); } diff --git a/package-lock.json b/package-lock.json index f4e13299..b33f9fd3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "license": "Apache 2.0", "dependencies": { - "@alexa/acdl": "^0.3.0", + "@alexa/acdl": "^0.3.1", "@aws-sdk/client-cloudformation": "^3.306.0", "@aws-sdk/client-iam": "^3.306.0", "@aws-sdk/client-lambda": "^3.306.0", @@ -43,7 +43,6 @@ "portscanner": "^2.2.0", "pretty-bytes": "^5.6.0", "ramda": "^0.28.0", - "request": "^2.88.2", "rxjs": "^7.5.5", "semver": "^7.3.6", "tmp": "^0.2.1", @@ -57,7 +56,7 @@ "@commitlint/cli": "^16.2.3", "@commitlint/config-conventional": "^16.2.1", "@istanbuljs/nyc-config-typescript": "^1.0.2", - "@stoplight/prism-cli": "^4.8.0", + "@stoplight/prism-cli": "4.8.0", "@types/chai": "^4.3.0", "@types/chai-as-promised": "^7.1.5", "@types/chai-json-schema": "^1.4.6", @@ -102,9 +101,9 @@ } }, "node_modules/@alexa/acdl": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@alexa/acdl/-/acdl-0.3.0.tgz", - "integrity": "sha512-sd4+HMCHEas1swyXctr0JlzyYS7nBy2kPEUsWHqQ5IpizJQeuDIEaIQ0SRYz8tvl3peCuvxNgFuOExhwtdu4zg==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@alexa/acdl/-/acdl-0.3.1.tgz", + "integrity": "sha512-9oCb11qZO5F1h4sVbeIqj7W2Ds2cYGAS+oc5TufvM4yZz2Sio9r8eo6ZmilG3T9GyhtDsYvJv7WNB0tQGkohdg==", "dependencies": { "@alexa/ask-expressions-spec": "^0.0.2", "@types/fs-extra": "^9.0.13", @@ -116,10 +115,13 @@ "ask-smapi-model": "^1.20.1", "ask-smapi-sdk": "^1.3.0", "aws-sdk": "^2.1010.0", + "axios": "^0.26.1", "fs-extra": "^10.0.0", "immutable": "4.0.0", "resolve": "^1.20.0", + "semver": "^7.3.8", "source-map-support": "^0.5.20", + "uuid": "^8.3.2", "yargs": "^17.1.1" }, "bin": { @@ -132,12 +134,12 @@ "integrity": "sha512-/yk3yp6HCCtAlzujRByxY9JqHt/h1LVQE0KUKM16TlVD318gWHBH50zuSpAse5K+doCDWQYLrgxHc5etE0AKAw==" }, "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { @@ -290,15 +292,15 @@ } }, "node_modules/@aws-sdk/client-cloudformation": { - "version": "3.315.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudformation/-/client-cloudformation-3.315.0.tgz", - "integrity": "sha512-WXjs1Mo/ZxoG9uo87ubniCdka7Heo9z4KGflI+mdlEnVxMdZ3DNtVxWIGKqPcXw5OeMXXzNez8gWnyEWYNyduQ==", + "version": "3.321.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudformation/-/client-cloudformation-3.321.1.tgz", + "integrity": "sha512-B81WA9X1gGKtny3d+pS9Pe1faxSWQsMDq0CoBRmrz4/cF8kYVuxVn814PtGEKe11BL9tgFrnDzOR9pB4PYliMg==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.315.0", + "@aws-sdk/client-sts": "3.321.1", "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/credential-provider-node": "3.315.0", + "@aws-sdk/credential-provider-node": "3.321.1", "@aws-sdk/fetch-http-handler": "3.310.0", "@aws-sdk/hash-node": "3.310.0", "@aws-sdk/invalid-dependency": "3.310.0", @@ -311,19 +313,19 @@ "@aws-sdk/middleware-serde": "3.310.0", "@aws-sdk/middleware-signing": "3.310.0", "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.310.0", + "@aws-sdk/middleware-user-agent": "3.319.0", "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.310.0", + "@aws-sdk/node-http-handler": "3.321.1", "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.315.0", + "@aws-sdk/smithy-client": "3.316.0", "@aws-sdk/types": "3.310.0", "@aws-sdk/url-parser": "3.310.0", "@aws-sdk/util-base64": "3.310.0", "@aws-sdk/util-body-length-browser": "3.310.0", "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.315.0", - "@aws-sdk/util-defaults-mode-node": "3.315.0", - "@aws-sdk/util-endpoints": "3.310.0", + "@aws-sdk/util-defaults-mode-browser": "3.316.0", + "@aws-sdk/util-defaults-mode-node": "3.316.0", + "@aws-sdk/util-endpoints": "3.319.0", "@aws-sdk/util-retry": "3.310.0", "@aws-sdk/util-user-agent-browser": "3.310.0", "@aws-sdk/util-user-agent-node": "3.310.0", @@ -337,31 +339,16 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cloudformation/node_modules/fast-xml-parser": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz", - "integrity": "sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==", - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.315.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.315.0.tgz", - "integrity": "sha512-aI0qdd6KVwjbqr2aoJCmFzJ/GJBOmhfKDR73s3XUL7VReAkXB9Wht6cU4IaaSYXh4OacQWGonYF0Jg8z7JwV3A==", + "version": "3.321.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.321.1.tgz", + "integrity": "sha512-6XuGHbGjKmwmBP9fxVtHtgYsSUZEDJZAdBa9jD3+//6OG9Qh4/mxRUZJFImMT8DOrmNLHU2q2W/4HjsbDql6VA==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.315.0", + "@aws-sdk/client-sts": "3.321.1", "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/credential-provider-node": "3.315.0", + "@aws-sdk/credential-provider-node": "3.321.1", "@aws-sdk/fetch-http-handler": "3.310.0", "@aws-sdk/hash-node": "3.310.0", "@aws-sdk/invalid-dependency": "3.310.0", @@ -374,19 +361,19 @@ "@aws-sdk/middleware-serde": "3.310.0", "@aws-sdk/middleware-signing": "3.310.0", "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.310.0", + "@aws-sdk/middleware-user-agent": "3.319.0", "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.310.0", + "@aws-sdk/node-http-handler": "3.321.1", "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.315.0", + "@aws-sdk/smithy-client": "3.316.0", "@aws-sdk/types": "3.310.0", "@aws-sdk/url-parser": "3.310.0", "@aws-sdk/util-base64": "3.310.0", "@aws-sdk/util-body-length-browser": "3.310.0", "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.315.0", - "@aws-sdk/util-defaults-mode-node": "3.315.0", - "@aws-sdk/util-endpoints": "3.310.0", + "@aws-sdk/util-defaults-mode-browser": "3.316.0", + "@aws-sdk/util-defaults-mode-node": "3.316.0", + "@aws-sdk/util-endpoints": "3.319.0", "@aws-sdk/util-retry": "3.310.0", "@aws-sdk/util-user-agent-browser": "3.310.0", "@aws-sdk/util-user-agent-node": "3.310.0", @@ -398,15 +385,15 @@ } }, "node_modules/@aws-sdk/client-iam": { - "version": "3.315.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-iam/-/client-iam-3.315.0.tgz", - "integrity": "sha512-f9hkUOy83fhAhj73PeXNSsrVqkxLLpbVGyGCajiEMJH0VKpvHAQNv7Y5QB716zSXELkp3VBZ4LHnPXue88fbiw==", + "version": "3.321.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-iam/-/client-iam-3.321.1.tgz", + "integrity": "sha512-XUoXLyVcMJu8qgRhzegNvZCSDgRGoqMdAAz9+NIzwgrH9k4U+e+Uws36wfRmCHoR4Nv1vBeTiLRnM/XkKpvavg==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.315.0", + "@aws-sdk/client-sts": "3.321.1", "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/credential-provider-node": "3.315.0", + "@aws-sdk/credential-provider-node": "3.321.1", "@aws-sdk/fetch-http-handler": "3.310.0", "@aws-sdk/hash-node": "3.310.0", "@aws-sdk/invalid-dependency": "3.310.0", @@ -419,19 +406,19 @@ "@aws-sdk/middleware-serde": "3.310.0", "@aws-sdk/middleware-signing": "3.310.0", "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.310.0", + "@aws-sdk/middleware-user-agent": "3.319.0", "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.310.0", + "@aws-sdk/node-http-handler": "3.321.1", "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.315.0", + "@aws-sdk/smithy-client": "3.316.0", "@aws-sdk/types": "3.310.0", "@aws-sdk/url-parser": "3.310.0", "@aws-sdk/util-base64": "3.310.0", "@aws-sdk/util-body-length-browser": "3.310.0", "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.315.0", - "@aws-sdk/util-defaults-mode-node": "3.315.0", - "@aws-sdk/util-endpoints": "3.310.0", + "@aws-sdk/util-defaults-mode-browser": "3.316.0", + "@aws-sdk/util-defaults-mode-node": "3.316.0", + "@aws-sdk/util-endpoints": "3.319.0", "@aws-sdk/util-retry": "3.310.0", "@aws-sdk/util-user-agent-browser": "3.310.0", "@aws-sdk/util-user-agent-node": "3.310.0", @@ -444,31 +431,16 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-iam/node_modules/fast-xml-parser": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz", - "integrity": "sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==", - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - }, "node_modules/@aws-sdk/client-lambda": { - "version": "3.315.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.315.0.tgz", - "integrity": "sha512-WHVSjtrYP/Kz5DhxzxZTjBFKHwvUZ3e0zpJqHxE1aIo5ia8+0qg5DrLnUoKjFO+l4nKTaaKP8KHB3pqJsGgZgg==", + "version": "3.322.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.322.0.tgz", + "integrity": "sha512-nNyARMIxYDCWQIi/Az+/ZPEyxoECPafM8//GmcYDBBBl5CYcAetKN5vM1e3p9efr2njgP5vBTGU9EBaO45fYRQ==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.315.0", + "@aws-sdk/client-sts": "3.321.1", "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/credential-provider-node": "3.315.0", + "@aws-sdk/credential-provider-node": "3.321.1", "@aws-sdk/eventstream-serde-browser": "3.310.0", "@aws-sdk/eventstream-serde-config-resolver": "3.310.0", "@aws-sdk/eventstream-serde-node": "3.310.0", @@ -484,19 +456,19 @@ "@aws-sdk/middleware-serde": "3.310.0", "@aws-sdk/middleware-signing": "3.310.0", "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.310.0", + "@aws-sdk/middleware-user-agent": "3.319.0", "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.310.0", + "@aws-sdk/node-http-handler": "3.321.1", "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.315.0", + "@aws-sdk/smithy-client": "3.316.0", "@aws-sdk/types": "3.310.0", "@aws-sdk/url-parser": "3.310.0", "@aws-sdk/util-base64": "3.310.0", "@aws-sdk/util-body-length-browser": "3.310.0", "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.315.0", - "@aws-sdk/util-defaults-mode-node": "3.315.0", - "@aws-sdk/util-endpoints": "3.310.0", + "@aws-sdk/util-defaults-mode-browser": "3.316.0", + "@aws-sdk/util-defaults-mode-node": "3.316.0", + "@aws-sdk/util-endpoints": "3.319.0", "@aws-sdk/util-retry": "3.310.0", "@aws-sdk/util-user-agent-browser": "3.310.0", "@aws-sdk/util-user-agent-node": "3.310.0", @@ -509,16 +481,16 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.315.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.315.0.tgz", - "integrity": "sha512-sE2pCFNrhkn1XdqkHx1GEd4eKg/kITk2zHETpkQCUMAVZ1MDuY/uUZzRjbAn9sm9EsJ03Z/vOuK4DkxlLFY+8g==", + "version": "3.321.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.321.1.tgz", + "integrity": "sha512-SndPRdeofP2j1kPDLoPbJL8DzzjSciFb1S+Tda3UljOy9gQl68OAruwKloXHJE8GRkLJnYowlwLu36H1MvADJg==", "dependencies": { "@aws-crypto/sha1-browser": "3.0.0", "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.315.0", + "@aws-sdk/client-sts": "3.321.1", "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/credential-provider-node": "3.315.0", + "@aws-sdk/credential-provider-node": "3.321.1", "@aws-sdk/eventstream-serde-browser": "3.310.0", "@aws-sdk/eventstream-serde-config-resolver": "3.310.0", "@aws-sdk/eventstream-serde-node": "3.310.0", @@ -543,23 +515,23 @@ "@aws-sdk/middleware-signing": "3.310.0", "@aws-sdk/middleware-ssec": "3.310.0", "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.310.0", + "@aws-sdk/middleware-user-agent": "3.319.0", "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.310.0", + "@aws-sdk/node-http-handler": "3.321.1", "@aws-sdk/protocol-http": "3.310.0", "@aws-sdk/signature-v4-multi-region": "3.310.0", - "@aws-sdk/smithy-client": "3.315.0", + "@aws-sdk/smithy-client": "3.316.0", "@aws-sdk/types": "3.310.0", "@aws-sdk/url-parser": "3.310.0", "@aws-sdk/util-base64": "3.310.0", "@aws-sdk/util-body-length-browser": "3.310.0", "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.315.0", - "@aws-sdk/util-defaults-mode-node": "3.315.0", - "@aws-sdk/util-endpoints": "3.310.0", + "@aws-sdk/util-defaults-mode-browser": "3.316.0", + "@aws-sdk/util-defaults-mode-node": "3.316.0", + "@aws-sdk/util-endpoints": "3.319.0", "@aws-sdk/util-retry": "3.310.0", "@aws-sdk/util-stream-browser": "3.310.0", - "@aws-sdk/util-stream-node": "3.310.0", + "@aws-sdk/util-stream-node": "3.321.1", "@aws-sdk/util-user-agent-browser": "3.310.0", "@aws-sdk/util-user-agent-node": "3.310.0", "@aws-sdk/util-utf8": "3.310.0", @@ -572,25 +544,10 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/fast-xml-parser": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz", - "integrity": "sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==", - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - }, "node_modules/@aws-sdk/client-sso": { - "version": "3.315.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.315.0.tgz", - "integrity": "sha512-P3QOOyHQER7EDVCzXOsAaJE2p/qfdsSFsYv8k2S8LqEKGH0fViQ4Ph540uKlmaOt1kEhwH1wI6cLRMJJX9XV4Q==", + "version": "3.321.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.321.1.tgz", + "integrity": "sha512-ecoT4tBGtRJR5G7oLBTMXZmgZZlff1amhSdKPEtkWxv6kWc8VPb5rRuRgVPsDR9HuesI6ZVlODptvGtnfkIJwA==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -606,19 +563,19 @@ "@aws-sdk/middleware-retry": "3.310.0", "@aws-sdk/middleware-serde": "3.310.0", "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.310.0", + "@aws-sdk/middleware-user-agent": "3.319.0", "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.310.0", + "@aws-sdk/node-http-handler": "3.321.1", "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.315.0", + "@aws-sdk/smithy-client": "3.316.0", "@aws-sdk/types": "3.310.0", "@aws-sdk/url-parser": "3.310.0", "@aws-sdk/util-base64": "3.310.0", "@aws-sdk/util-body-length-browser": "3.310.0", "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.315.0", - "@aws-sdk/util-defaults-mode-node": "3.315.0", - "@aws-sdk/util-endpoints": "3.310.0", + "@aws-sdk/util-defaults-mode-browser": "3.316.0", + "@aws-sdk/util-defaults-mode-node": "3.316.0", + "@aws-sdk/util-endpoints": "3.319.0", "@aws-sdk/util-retry": "3.310.0", "@aws-sdk/util-user-agent-browser": "3.310.0", "@aws-sdk/util-user-agent-node": "3.310.0", @@ -630,9 +587,9 @@ } }, "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.315.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.315.0.tgz", - "integrity": "sha512-OJgtmx6SpCWHBDCxBBi36Ro44uCqZBufGkThP/PVYrgVnRVnJ4V18d2wNGKmS37zKmCHHJPnhMPlGOgE2qyVPQ==", + "version": "3.321.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.321.1.tgz", + "integrity": "sha512-PBVfHQbyrsfzbnO6u9d9Sik8JlXGLhHj3zLd87iBkYXBdHwD5NuvwWu7OtjUtrHjP4SfzodVwfjmTbDAFqbtzw==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -648,19 +605,19 @@ "@aws-sdk/middleware-retry": "3.310.0", "@aws-sdk/middleware-serde": "3.310.0", "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.310.0", + "@aws-sdk/middleware-user-agent": "3.319.0", "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.310.0", + "@aws-sdk/node-http-handler": "3.321.1", "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.315.0", + "@aws-sdk/smithy-client": "3.316.0", "@aws-sdk/types": "3.310.0", "@aws-sdk/url-parser": "3.310.0", "@aws-sdk/util-base64": "3.310.0", "@aws-sdk/util-body-length-browser": "3.310.0", "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.315.0", - "@aws-sdk/util-defaults-mode-node": "3.315.0", - "@aws-sdk/util-endpoints": "3.310.0", + "@aws-sdk/util-defaults-mode-browser": "3.316.0", + "@aws-sdk/util-defaults-mode-node": "3.316.0", + "@aws-sdk/util-endpoints": "3.319.0", "@aws-sdk/util-retry": "3.310.0", "@aws-sdk/util-user-agent-browser": "3.310.0", "@aws-sdk/util-user-agent-node": "3.310.0", @@ -672,14 +629,14 @@ } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.315.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.315.0.tgz", - "integrity": "sha512-e34plg6m0hScADIPiu5kCKoiJVXRLRiAuens+iwMse0oPUmrv41hdjgufwWGA/pcNkEGzMdVS88Z4khxB3LHBw==", + "version": "3.321.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.321.1.tgz", + "integrity": "sha512-AB+N4a1TVEKl9Sd5O2TxTprEZp7Va6zPZLMraFAYMdmJVBmCmmwyBs7ygju685DpQ1dos5PRsKCRcossyY5pDQ==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/credential-provider-node": "3.315.0", + "@aws-sdk/credential-provider-node": "3.321.1", "@aws-sdk/fetch-http-handler": "3.310.0", "@aws-sdk/hash-node": "3.310.0", "@aws-sdk/invalid-dependency": "3.310.0", @@ -693,19 +650,19 @@ "@aws-sdk/middleware-serde": "3.310.0", "@aws-sdk/middleware-signing": "3.310.0", "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.310.0", + "@aws-sdk/middleware-user-agent": "3.319.0", "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.310.0", + "@aws-sdk/node-http-handler": "3.321.1", "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.315.0", + "@aws-sdk/smithy-client": "3.316.0", "@aws-sdk/types": "3.310.0", "@aws-sdk/url-parser": "3.310.0", "@aws-sdk/util-base64": "3.310.0", "@aws-sdk/util-body-length-browser": "3.310.0", "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.315.0", - "@aws-sdk/util-defaults-mode-node": "3.315.0", - "@aws-sdk/util-endpoints": "3.310.0", + "@aws-sdk/util-defaults-mode-browser": "3.316.0", + "@aws-sdk/util-defaults-mode-node": "3.316.0", + "@aws-sdk/util-endpoints": "3.319.0", "@aws-sdk/util-retry": "3.310.0", "@aws-sdk/util-user-agent-browser": "3.310.0", "@aws-sdk/util-user-agent-node": "3.310.0", @@ -717,21 +674,6 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/fast-xml-parser": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz", - "integrity": "sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==", - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - }, "node_modules/@aws-sdk/config-resolver": { "version": "3.310.0", "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.310.0.tgz", @@ -747,11 +689,11 @@ } }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.315.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.315.0.tgz", - "integrity": "sha512-/uZ0IRAAKJM67glKkHuMsJgkYhQ8elzPEZe4i28Vh4NRibDW71uVUY5qqKG+ehuVIhASkOHatQAGY5exiSUFew==", + "version": "3.321.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.321.1.tgz", + "integrity": "sha512-g+3MQcwhpw1WqQ27BJLCCS90aUExH8kT9o2WM2tYjGATfTQ8+tpAqao2JxChtfzQbq6m69M175bZ3o09EaKobQ==", "dependencies": { - "@aws-sdk/client-cognito-identity": "3.315.0", + "@aws-sdk/client-cognito-identity": "3.321.1", "@aws-sdk/property-provider": "3.310.0", "@aws-sdk/types": "3.310.0", "tslib": "^2.5.0" @@ -789,14 +731,14 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.315.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.315.0.tgz", - "integrity": "sha512-TZbYNbQkNgANx3KsWmJEyBsnfUBq/XKqYYc/VQf1L4eI+GMUw2eKpNV0MTsyviViy2st7W4SiSgtsvXyeVp9xg==", + "version": "3.321.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.321.1.tgz", + "integrity": "sha512-prndSVQhiikNaI40bYnM2Q8PkC35FCwhbQnBk6KXNvdtfo9RqatMC639F+6oryb3BuMy++Ij4Yoi8WnPBs5Sww==", "dependencies": { "@aws-sdk/credential-provider-env": "3.310.0", "@aws-sdk/credential-provider-imds": "3.310.0", "@aws-sdk/credential-provider-process": "3.310.0", - "@aws-sdk/credential-provider-sso": "3.315.0", + "@aws-sdk/credential-provider-sso": "3.321.1", "@aws-sdk/credential-provider-web-identity": "3.310.0", "@aws-sdk/property-provider": "3.310.0", "@aws-sdk/shared-ini-file-loader": "3.310.0", @@ -808,15 +750,15 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.315.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.315.0.tgz", - "integrity": "sha512-OuzKAIg+xPAzBrb/Big5VKDpJmBhVR+N0Hfflrjj2BunQGWO7zxtkKFCz921MtP9ZunDV+UxzTpar8U5TAPtzA==", + "version": "3.321.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.321.1.tgz", + "integrity": "sha512-5B1waOwSvY2JMLGRebo7IUqnTaGoCnby9cRbG/dhi7Ke97M3V8380S9THDJ/bktjL8zHEVfBVZy7HhXHzhSjEg==", "dependencies": { "@aws-sdk/credential-provider-env": "3.310.0", "@aws-sdk/credential-provider-imds": "3.310.0", - "@aws-sdk/credential-provider-ini": "3.315.0", + "@aws-sdk/credential-provider-ini": "3.321.1", "@aws-sdk/credential-provider-process": "3.310.0", - "@aws-sdk/credential-provider-sso": "3.315.0", + "@aws-sdk/credential-provider-sso": "3.321.1", "@aws-sdk/credential-provider-web-identity": "3.310.0", "@aws-sdk/property-provider": "3.310.0", "@aws-sdk/shared-ini-file-loader": "3.310.0", @@ -842,14 +784,14 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.315.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.315.0.tgz", - "integrity": "sha512-oMDGwT67cLgLiLEj5UwAiOVo7mb0l4vi2nk+5pgPMpC3cBlAfA0y1IJe4FHp+Vz52F0nvURZZbdWhX6RgMMaqQ==", + "version": "3.321.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.321.1.tgz", + "integrity": "sha512-kg0rc1OacJFgAvmZj0TOu+BSc+yRdnC5dO/RAag3XU6+hlQI5/C080RQp9Qj6V7ga0HtAJMRwJcUlCPA3RJPug==", "dependencies": { - "@aws-sdk/client-sso": "3.315.0", + "@aws-sdk/client-sso": "3.321.1", "@aws-sdk/property-provider": "3.310.0", "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/token-providers": "3.315.0", + "@aws-sdk/token-providers": "3.321.1", "@aws-sdk/types": "3.310.0", "tslib": "^2.5.0" }, @@ -871,20 +813,20 @@ } }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.315.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.315.0.tgz", - "integrity": "sha512-zAChVtxAADhnNFTVA7uRijisSZEJQi10LQ4tsznzset4D6nC+FrZfqZBzO4EkfcyesqOaRbrV4VU6+gm4nzHTQ==", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.315.0", - "@aws-sdk/client-sso": "3.315.0", - "@aws-sdk/client-sts": "3.315.0", - "@aws-sdk/credential-provider-cognito-identity": "3.315.0", + "version": "3.321.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.321.1.tgz", + "integrity": "sha512-z7uPo5B/pW8k2IHT2Nu2SFAWEzBnR/NnjUVOTwf93bxNbc7IxRODiCMggmK2wpjiRSBAc8zKKbZ4dHCcb4MyZg==", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.321.1", + "@aws-sdk/client-sso": "3.321.1", + "@aws-sdk/client-sts": "3.321.1", + "@aws-sdk/credential-provider-cognito-identity": "3.321.1", "@aws-sdk/credential-provider-env": "3.310.0", "@aws-sdk/credential-provider-imds": "3.310.0", - "@aws-sdk/credential-provider-ini": "3.315.0", - "@aws-sdk/credential-provider-node": "3.315.0", + "@aws-sdk/credential-provider-ini": "3.321.1", + "@aws-sdk/credential-provider-node": "3.321.1", "@aws-sdk/credential-provider-process": "3.310.0", - "@aws-sdk/credential-provider-sso": "3.315.0", + "@aws-sdk/credential-provider-sso": "3.321.1", "@aws-sdk/credential-provider-web-identity": "3.310.0", "@aws-sdk/property-provider": "3.310.0", "@aws-sdk/types": "3.310.0", @@ -1254,13 +1196,13 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.310.0.tgz", - "integrity": "sha512-x3IOwSwSbwKidlxRk3CNVHVUb06SRuaELxggCaR++QVI8NU6qD/l4VHXKVRvbTHiC/cYxXE/GaBDgQVpDR7V/g==", + "version": "3.319.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.319.0.tgz", + "integrity": "sha512-ytaLx2dlR5AdMSne6FuDCISVg8hjyKj+cHU20b2CRA/E/z+XXrLrssp4JrCgizRKPPUep0psMIa22Zd6osTT5Q==", "dependencies": { "@aws-sdk/protocol-http": "3.310.0", "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-endpoints": "3.310.0", + "@aws-sdk/util-endpoints": "3.319.0", "tslib": "^2.5.0" }, "engines": { @@ -1282,9 +1224,9 @@ } }, "node_modules/@aws-sdk/node-http-handler": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.310.0.tgz", - "integrity": "sha512-irv9mbcM9xC2xYjArQF5SYmHBMu4ciMWtGsoHII1nRuFOl9FoT4ffTvEPuLlfC6pznzvKt9zvnm6xXj7gDChKg==", + "version": "3.321.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.321.1.tgz", + "integrity": "sha512-DdQBrtFFDNtzphJIN3s93Vf+qd9LHSzH6WTQRrWoXhTDMHDzSI2Cn+c5KWfk89Nggp/n3+OTwUPQeCiBT5EBuw==", "dependencies": { "@aws-sdk/abort-controller": "3.310.0", "@aws-sdk/protocol-http": "3.310.0", @@ -1405,9 +1347,9 @@ } }, "node_modules/@aws-sdk/smithy-client": { - "version": "3.315.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.315.0.tgz", - "integrity": "sha512-qTm0lwTh6IZMiWs3U9k2veoF6gV9yE0B9Z34yMxagOfQFQgxMih0aiH25MD25eRigjJ3sfUeZ+B0mRycmJZdkQ==", + "version": "3.316.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.316.0.tgz", + "integrity": "sha512-6YXOKbRnXeS8r8RWzuL6JMBolDYM5Wa4fD/VY6x/wK78i2xErHOvqzHgyyeLI1MMw4uqyd4wRNJNWC9TMPduXw==", "dependencies": { "@aws-sdk/middleware-stack": "3.310.0", "@aws-sdk/types": "3.310.0", @@ -1418,11 +1360,11 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.315.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.315.0.tgz", - "integrity": "sha512-EjLUQ9JLqU3eJfJyzpcVjFnuJ1MCCodZaVJmuX/a/as4TK41bKMvkVojjsU7pDSYzl+tuXE+ceivcWK4H0HQdQ==", + "version": "3.321.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.321.1.tgz", + "integrity": "sha512-I1sXS4qXirSvgvrOIPf+e1D7GvC83DdeyMxHZvuhHgeMCqDAzToS8OLxOX0enN9xZRHWAQYja8xyeGbDL2I0Zw==", "dependencies": { - "@aws-sdk/client-sso-oidc": "3.315.0", + "@aws-sdk/client-sso-oidc": "3.321.1", "@aws-sdk/property-provider": "3.310.0", "@aws-sdk/shared-ini-file-loader": "3.310.0", "@aws-sdk/types": "3.310.0", @@ -1519,9 +1461,9 @@ } }, "node_modules/@aws-sdk/util-defaults-mode-browser": { - "version": "3.315.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.315.0.tgz", - "integrity": "sha512-5cqNvfGos3FB/MHNl+g2fr+tPY7s3k3+96V3wOPWLOksdACth10OxPpHfboXXZDHHkR0hmyJwJcfgA4uQrUcGg==", + "version": "3.316.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.316.0.tgz", + "integrity": "sha512-6FSqLhYmaihtH2n1s4b2rlLW0ABU8N6VZIfzLfe2ING4PF0MzfaMMhnTFUHVXfKCVGoR8yP6iyFTRCyHGVEL1w==", "dependencies": { "@aws-sdk/property-provider": "3.310.0", "@aws-sdk/types": "3.310.0", @@ -1533,9 +1475,9 @@ } }, "node_modules/@aws-sdk/util-defaults-mode-node": { - "version": "3.315.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.315.0.tgz", - "integrity": "sha512-vSPIGpzh6NJIMLoh31p7CczSatN46kJdJBrHfODHaIGe4t156x+LfkkcxGQhtifqxglhL7l+fmn5D1fM5exHuA==", + "version": "3.316.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.316.0.tgz", + "integrity": "sha512-dkYy10hdjPSScXXvnjGpZpnJxllkb6ICHgLMwZ4JczLHhPM12T/4PQ758YN8HS+muiYDGX1Bl2z1jd/bMcewBQ==", "dependencies": { "@aws-sdk/config-resolver": "3.310.0", "@aws-sdk/credential-provider-imds": "3.310.0", @@ -1549,9 +1491,9 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.310.0.tgz", - "integrity": "sha512-zG+/d/O5KPmAaeOMPd6bW1abifdT0H03f42keLjYEoRZzYtHPC5DuPE0UayiWGckI6BCDgy0sRKXCYS49UNFaQ==", + "version": "3.319.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.319.0.tgz", + "integrity": "sha512-3I64UMoYA2e2++oOUJXRcFtYLpLylnZFRltWfPo1B3dLlf+MIWat9djT+mMus+hW1ntLsvAIVu1hLVePJC0gvw==", "dependencies": { "@aws-sdk/types": "3.310.0", "tslib": "^2.5.0" @@ -1619,11 +1561,11 @@ } }, "node_modules/@aws-sdk/util-stream-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-node/-/util-stream-node-3.310.0.tgz", - "integrity": "sha512-hueAXFK0GVvnfYFgqbF7587xZfMZff5jlIFZOHqx7XVU7bl7qrRUCnphHk8H6yZ7RoQbDPcfmHJgtEoAJg1T1Q==", + "version": "3.321.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-node/-/util-stream-node-3.321.1.tgz", + "integrity": "sha512-jvfff1zeA8q16hQWSC0BGwcHJPCwoh+bwiuAjihfl9q1tFLYuqaTzJzzkL1bntUsbW+y/ac5DO7fWcYPq0jWkw==", "dependencies": { - "@aws-sdk/node-http-handler": "3.310.0", + "@aws-sdk/node-http-handler": "3.321.1", "@aws-sdk/types": "3.310.0", "@aws-sdk/util-buffer-from": "3.310.0", "tslib": "^2.5.0" @@ -1731,30 +1673,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", - "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", + "version": "7.21.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz", + "integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", - "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.5.tgz", + "integrity": "sha512-9M398B/QH5DlfCOTKDZT1ozXr0x8uBEeFd+dJraGUZGiaNpGCDVGCc14hZexsMblw3XxltJ+6kSvogp9J+5a9g==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-compilation-targets": "^7.21.4", - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.5", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.4", - "@babel/types": "^7.21.4", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -1779,12 +1721,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", - "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", + "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", "dev": true, "dependencies": { - "@babel/types": "^7.21.4", + "@babel/types": "^7.21.5", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -1793,37 +1735,13 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", - "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz", + "integrity": "sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.21.4", + "@babel/compat-data": "^7.21.5", "@babel/helper-validator-option": "^7.21.0", "browserslist": "^4.21.3", "lru-cache": "^5.1.1", @@ -1836,15 +1754,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -1854,16 +1763,10 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz", + "integrity": "sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -1907,40 +1810,40 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz", + "integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-environment-visitor": "^7.21.5", + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-simple-access": "^7.21.5", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", + "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", + "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", "dev": true, "dependencies": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.21.5" }, "engines": { "node": ">=6.9.0" @@ -1959,9 +1862,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", + "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", "dev": true, "engines": { "node": ">=6.9.0" @@ -1986,14 +1889,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", - "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz", + "integrity": "sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==", "dev": true, "dependencies": { "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5" }, "engines": { "node": ">=6.9.0" @@ -2076,9 +1979,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", - "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.5.tgz", + "integrity": "sha512-J+IxH2IsxV4HbnTrSWgMAQj0UEo61hDA4Ny8h8PCX0MLXiibqHbqIOVneqdocemSBc22VpBKxt4J6FQzy9HarQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -2249,6 +2152,17 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/runtime": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", + "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", @@ -2264,19 +2178,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", - "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", + "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-environment-visitor": "^7.18.9", + "@babel/generator": "^7.21.5", + "@babel/helper-environment-visitor": "^7.21.5", "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.4", - "@babel/types": "^7.21.4", + "@babel/parser": "^7.21.5", + "@babel/types": "^7.21.5", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2285,12 +2199,12 @@ } }, "node_modules/@babel/types": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", - "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", + "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-string-parser": "^7.21.5", "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, @@ -2426,6 +2340,18 @@ "node": ">=v12" } }, + "node_modules/@commitlint/is-ignored/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@commitlint/is-ignored/node_modules/semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -2441,6 +2367,12 @@ "node": ">=10" } }, + "node_modules/@commitlint/is-ignored/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@commitlint/lint": { "version": "16.2.4", "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-16.2.4.tgz", @@ -2570,67 +2502,6 @@ "node": ">=v12" } }, - "node_modules/@commitlint/top-level/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/top-level/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/top-level/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/top-level/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@commitlint/types": { "version": "16.2.1", "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-16.2.1.tgz", @@ -2655,6 +2526,16 @@ "node": ">=12" } }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@faker-js/faker": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-6.3.1.tgz", @@ -2705,6 +2586,19 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -2718,6 +2612,45 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@istanbuljs/nyc-config-typescript": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@istanbuljs/nyc-config-typescript/-/nyc-config-typescript-1.0.2.tgz", @@ -2824,16 +2757,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/transform/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, "node_modules/@jest/types": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", @@ -2852,13 +2775,14 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" @@ -2883,21 +2807,27 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, "node_modules/@jsdevtools/ono": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", @@ -2980,9 +2910,9 @@ } }, "node_modules/@npmcli/git/node_modules/which": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", - "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "dependencies": { "isexe": "^2.0.0" @@ -3036,21 +2966,6 @@ "node": ">=10" } }, - "node_modules/@npmcli/move-file/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@npmcli/node-gyp": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", @@ -3073,9 +2988,9 @@ } }, "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", - "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "dependencies": { "isexe": "^2.0.0" @@ -3088,9 +3003,9 @@ } }, "node_modules/@npmcli/run-script": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.0.tgz", - "integrity": "sha512-ql+AbRur1TeOdl1FY+RAwGW9fcr4ZwiVKabdvm93mujGREVuVLbdkXRJDrkTXSdCjaxYydr1wlA2v67jxWG5BQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.1.tgz", + "integrity": "sha512-Yi04ZSold8jcbBJD/ahKMJSQCQifH8DAbMwkBvoLaTpGFxzHC3B/5ZyoVR69q/4xedz84tvi9DJOJjNe17h+LA==", "dev": true, "dependencies": { "@npmcli/node-gyp": "^3.0.0", @@ -3104,9 +3019,9 @@ } }, "node_modules/@npmcli/run-script/node_modules/which": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", - "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "dependencies": { "isexe": "^2.0.0" @@ -3118,6 +3033,16 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@pnpm/config.env-replace": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", @@ -3241,28 +3166,40 @@ "dev": true }, "node_modules/@stoplight/http-spec": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@stoplight/http-spec/-/http-spec-5.6.2.tgz", - "integrity": "sha512-r071B/7u2qbJhHoJF0vnlZ4oghDvuW8OKuSrubSRP9pAoqiOD89HUNNUhlB1j6aO27lAHoz/qwxSUM7KS54HMw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@stoplight/http-spec/-/http-spec-4.3.1.tgz", + "integrity": "sha512-uuZPdmU30fQnBcR/H8IDqB0wMSDRw8ue8LH7gQGNOkxpXxHVGHi4oFx3hFrPr61fIMBiFXBnuw06Da+qe7LsXQ==", "dev": true, "dependencies": { - "@stoplight/json": "^3.18.1", - "@stoplight/json-schema-generator": "1.0.2", - "@stoplight/types": "^13.6.0", - "@types/json-schema": "7.0.11", - "@types/swagger-schema-official": "~2.0.22", + "@stoplight/json": "^3.10.2", + "@stoplight/types": "^12.4.0", + "@types/swagger-schema-official": "~2.0.21", + "@types/to-json-schema": "^0.2.0", "@types/type-is": "^1.6.3", - "fnv-plus": "^1.3.1", - "lodash.isequalwith": "^4.4.0", - "lodash.pick": "^4.4.0", - "lodash.pickby": "^4.6.0", - "openapi3-ts": "^2.0.2", - "postman-collection": "^4.1.2", - "tslib": "^2.3.1", - "type-is": "^1.6.18" + "@types/urijs": "~1.19.9", + "json-schema": "^0.4.0", + "json-schema-generator": "^2.0.6", + "lodash": "^4.17.15", + "openapi3-ts": "^2.0.1", + "postman-collection": "^4.1.0", + "type-is": "^1.6.18", + "urijs": "~1.19.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@stoplight/http-spec/node_modules/@stoplight/types": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-12.5.0.tgz", + "integrity": "sha512-dwqYcDrGmEyUv5TWrDam5TGOxU72ufyQ7hnOIIDdmW5ezOwZaBFoR5XQ9AsH49w7wgvOqB2Bmo799pJPWnpCbg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" }, "engines": { - "node": ">=14.13" + "node": ">=8" } }, "node_modules/@stoplight/json": { @@ -3282,28 +3219,6 @@ "node": ">=8.3.0" } }, - "node_modules/@stoplight/json-schema-generator": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stoplight/json-schema-generator/-/json-schema-generator-1.0.2.tgz", - "integrity": "sha512-FzSLFoIZc6Lmw3oRE7kU6YUrl5gBmUs//rY59jdFipBoSyTPv5NyqeyTg5mvT6rY1F3qTLU3xgzRi/9Pb9eZpA==", - "dev": true, - "dependencies": { - "cross-fetch": "^3.1.5", - "json-promise": "1.1.x", - "minimist": "1.2.6", - "mkdirp": "0.5.x", - "pretty-data": "0.40.x" - }, - "bin": { - "json-schema-generator": "bin/cli.js" - } - }, - "node_modules/@stoplight/json-schema-generator/node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, "node_modules/@stoplight/json-schema-merge-allof": { "version": "0.7.8", "resolved": "https://registry.npmjs.org/@stoplight/json-schema-merge-allof/-/json-schema-merge-allof-0.7.8.tgz", @@ -3359,18 +3274,18 @@ } }, "node_modules/@stoplight/prism-cli": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@stoplight/prism-cli/-/prism-cli-4.11.1.tgz", - "integrity": "sha512-GtRvBSOXD0XjN2ZUZ7H4Q7wmL7gF5eI8kesOv2MQl/WPbQr0skrArLjfe81g4XUv2Nic50mJGelz/w8scKbZ7w==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@stoplight/prism-cli/-/prism-cli-4.8.0.tgz", + "integrity": "sha512-R2Qn+yX/GI13o19vW3y8doqtnTzE1rNNNrO5vspkCD9t1sSu33og2ZJaq/xSc2GshdtE2EWjj4YF7F1Xwr9PPQ==", "dev": true, "dependencies": { - "@stoplight/http-spec": "^5.5.2", - "@stoplight/json": "^3.18.1", + "@stoplight/http-spec": "^4.2.0", + "@stoplight/json": "^3.17.0", "@stoplight/json-schema-ref-parser": "9.2.1", - "@stoplight/prism-core": "^4.11.1", - "@stoplight/prism-http": "^4.11.1", - "@stoplight/prism-http-server": "^4.11.1", - "@stoplight/types": "^13.6.0", + "@stoplight/prism-core": "^4.8.0", + "@stoplight/prism-http": "^4.8.0", + "@stoplight/prism-http-server": "^4.8.0", + "@stoplight/types": "^12.2.0", "chalk": "^4.1.2", "chokidar": "^3.5.2", "fp-ts": "^2.11.5", @@ -3381,15 +3296,28 @@ "signale": "^1.4.0", "split2": "^3.2.2", "tslib": "^2.3.1", - "uri-template-lite": "^22.9.0", - "urijs": "^1.19.11", + "uri-template-lite": "^20.5.0", + "urijs": "^1.19.7", "yargs": "^16.2.0" }, "bin": { "prism": "dist/index.js" }, "engines": { - "node": ">=16" + "node": ">=12" + } + }, + "node_modules/@stoplight/prism-cli/node_modules/@stoplight/types": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-12.5.0.tgz", + "integrity": "sha512-dwqYcDrGmEyUv5TWrDam5TGOxU72ufyQ7hnOIIDdmW5ezOwZaBFoR5XQ9AsH49w7wgvOqB2Bmo799pJPWnpCbg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/@stoplight/prism-cli/node_modules/chalk": { @@ -3419,6 +3347,12 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/@stoplight/prism-cli/node_modules/uri-template-lite": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/uri-template-lite/-/uri-template-lite-20.5.0.tgz", + "integrity": "sha512-RL6Pnz0DO4XH9WZhZTX6u0SP6afNM9z+u7lXYHO+RkVGzpNcgKc1Y2tcAX/KVIEi2ctfzf+iLcofkwKoYiGH4Q==", + "dev": true + }, "node_modules/@stoplight/prism-cli/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -3437,19 +3371,10 @@ "node": ">=10" } }, - "node_modules/@stoplight/prism-cli/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/@stoplight/prism-core": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@stoplight/prism-core/-/prism-core-4.11.1.tgz", - "integrity": "sha512-iqWQk0g9qLsNNBnWXOuQ4CxRHYRiPGRxE3cR2As3SpxGjJWsX1BSEwsld2wjSGRpLG7V6VsKt4dWTkaC9aJicA==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@stoplight/prism-core/-/prism-core-4.13.0.tgz", + "integrity": "sha512-tMwDbv1j21Y/92VRmXsbvtE8/5Rns2C8PzIaq/TN02dZm95pXxuRDokk3o0muMZAJGQRee5MJ1X80gY+aPCJjg==", "dev": true, "dependencies": { "fp-ts": "^2.11.5", @@ -3462,16 +3387,16 @@ } }, "node_modules/@stoplight/prism-http": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@stoplight/prism-http/-/prism-http-4.11.1.tgz", - "integrity": "sha512-IwPzPGQX/bF7u+mMtWyALI9ulucCTBQCma7hvWLrg4YMOij8ieB+6KR+PqQ5p/0kBnj/g9JhPBAouL1L10LUSQ==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@stoplight/prism-http/-/prism-http-4.13.0.tgz", + "integrity": "sha512-+85Ck3K2fvTN7kC+KGY7jFI603AcKkocR13ljiHDNWIcQTn+3b0WwSys2udmz0VndpX70mBDLO9jtewxC0tgkQ==", "dev": true, "dependencies": { "@faker-js/faker": "^6.0.0", "@stoplight/json": "^3.18.1", "@stoplight/json-schema-merge-allof": "0.7.8", "@stoplight/json-schema-sampler": "0.2.2", - "@stoplight/prism-core": "^4.11.1", + "@stoplight/prism-core": "^4.13.0", "@stoplight/types": "^13.0.0", "@stoplight/yaml": "^4.2.3", "abstract-logging": "^2.0.1", @@ -3479,6 +3404,7 @@ "ajv": "^8.4.0", "ajv-formats": "^2.1.1", "caseless": "^0.12.0", + "chalk": "^4.1.2", "content-type": "^1.0.4", "fp-ts": "^2.11.5", "http-proxy-agent": "^5.0.0", @@ -3496,15 +3422,15 @@ } }, "node_modules/@stoplight/prism-http-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@stoplight/prism-http-server/-/prism-http-server-4.11.1.tgz", - "integrity": "sha512-IjWkEB/kPwEy/uBsKHu4uihcK9l4cARE44WYgZ/CMXAdwqHeK5ZT/W0wIAKGxguWQOTuAOye05CzkNTKK0Eokg==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@stoplight/prism-http-server/-/prism-http-server-4.13.0.tgz", + "integrity": "sha512-ebEbNDKzXJzrzfE0LjnRPGw6sMHM/UCp65q69oSgdM7UIm4JFnEO2PwI/meSCxsugPtAfpG+y3FrJz5xvS9tPA==", "dev": true, "dependencies": { - "@stoplight/prism-core": "^4.11.1", - "@stoplight/prism-http": "^4.11.1", + "@stoplight/prism-core": "^4.13.0", + "@stoplight/prism-http": "^4.13.0", "@stoplight/types": "^13.0.0", - "fast-xml-parser": "^3.20.3", + "fast-xml-parser": "^4.2.0", "fp-ts": "^2.11.5", "io-ts": "^2.2.16", "lodash": "^4.17.21", @@ -3518,10 +3444,48 @@ "node": ">=16" } }, + "node_modules/@stoplight/prism-http-server/node_modules/fast-xml-parser": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.2.tgz", + "integrity": "sha512-DLzIPtQqmvmdq3VUKR7T6omPK/VCRNqgFlGtbESfyhcH2R4I8EzK1/K6E8PkRCK2EabWrUHK32NjYRbEFnnz0Q==", + "dev": true, + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/@stoplight/prism-http/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/@stoplight/types": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.10.0.tgz", - "integrity": "sha512-clCXabaqDZQxtTnmeH2ZHdUeZsQtQkebLo+tPywqr8tgcrNbkKUBiBQRFW/CfU3DGN3OM+jCquN0O6u/4a0qbQ==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.13.0.tgz", + "integrity": "sha512-QzkWObMieLyhDWYR5nXpRe2BoQ+u7jT8TLiYe/xjCllIDIVEFLE7F9vrnm1CPxIIWA3vYdQSePv76CzNCjds0Q==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.4", @@ -3607,13 +3571,13 @@ } }, "node_modules/@tufjs/models": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.2.tgz", - "integrity": "sha512-uxarDtxTIK3f8hJS4yFhW/lvTa3tsiQU5iDCRut+NCnOXvNtEul0Ct58NIIcIx9Rkt7OFEK31Ndpqsd663nsew==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.3.tgz", + "integrity": "sha512-mkFEqqRisi13DmR5pX4x+Zk97EiU8djTtpNW1GeuX410y/raAsq/T3ZCjwoRIZ8/cIBfW0olK/sywlAiWevDVw==", "dev": true, "dependencies": { "@tufjs/canonical-json": "1.0.0", - "minimatch": "^8.0.3" + "minimatch": "^7.4.6" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -3629,33 +3593,33 @@ } }, "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.5.tgz", + "integrity": "sha512-enCvTL8m/EHS/zIvJno9nE+ndYPh1/oNFzRYRmtUqJICG2VnCSBzMLW5VN2KCQU91f23tsNKR8v7VJJQMatl7Q==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" } }, "node_modules/@types/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", + "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", "dev": true }, "node_modules/@types/chai-as-promised": { @@ -3799,9 +3763,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" + "version": "18.16.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz", + "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -3834,9 +3798,9 @@ "dev": true }, "node_modules/@types/ramda": { - "version": "0.28.23", - "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.28.23.tgz", - "integrity": "sha512-9TYWiwkew+mCMsL7jZ+kkzy6QXn8PL5/SKmBPmjgUlTpkokZWTBr+OhiIUDztpAEbslWyt24NNfEmZUBFmnXig==", + "version": "0.28.25", + "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.28.25.tgz", + "integrity": "sha512-HrQNqQAGcITpn9HAJFamDxm7iZeeXiP/95pN5OMbNniDjzCCeOHbBKNGmUy8NRi0fhYS+/cXeo91MFC+06gbow==", "dev": true, "dependencies": { "ts-toolbelt": "^6.15.1" @@ -3849,9 +3813,9 @@ "dev": true }, "node_modules/@types/sinon": { - "version": "10.0.13", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", - "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", + "version": "10.0.14", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.14.tgz", + "integrity": "sha512-mn72up6cjaMyMuaPaa/AwKf6WtsSRysQC7wxFkCm1XcOKXPM1z+5Y4H5wjIVBz4gdAkjvZxVVfjA6ba1nHr5WQ==", "dev": true, "dependencies": { "@types/sinonjs__fake-timers": "*" @@ -3894,6 +3858,15 @@ "@types/node": "*" } }, + "node_modules/@types/to-json-schema": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@types/to-json-schema/-/to-json-schema-0.2.1.tgz", + "integrity": "sha512-DlvjodmdSrih054SrUqgS3bIZ93allrfbzjFUFmUhAtC60O+B/doLfgB8stafkEFyrU/zXWtPlX/V1H94iKv/A==", + "dev": true, + "dependencies": { + "@types/json-schema": "*" + } + }, "node_modules/@types/tv4": { "version": "1.2.31", "resolved": "https://registry.npmjs.org/@types/tv4/-/tv4-1.2.31.tgz", @@ -3909,6 +3882,12 @@ "@types/node": "*" } }, + "node_modules/@types/urijs": { + "version": "1.19.19", + "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.19.tgz", + "integrity": "sha512-FDJNkyhmKLw7uEvTxx5tSXfPeQpO0iy73Ry+PmYZJvQy0QIWX8a7kJ4kLWRf+EbTPJEPDSgPXHaM7pzr5lmvCg==", + "dev": true + }, "node_modules/@types/uuid": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", @@ -3974,37 +3953,6 @@ "node": ">= 6" } }, - "node_modules/@vscode/test-electron/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -4114,6 +4062,14 @@ "node": ">=8" } }, + "node_modules/aggregate-error/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, "node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -4293,6 +4249,19 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/archiver/node_modules/async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", @@ -4377,6 +4346,7 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, "dependencies": { "safer-buffer": "~2.1.0" } @@ -4385,6 +4355,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, "engines": { "node": ">=0.8" } @@ -4417,7 +4388,8 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true }, "node_modules/atomic-sleep": { "version": "1.0.0", @@ -4445,9 +4417,9 @@ "integrity": "sha512-CDArk54zuHtbB13OKXgiwaCGyyH8TJlh+24lI3vw8dD3DpRQtg7uJDjIDZplqIOQqQ6/qdynHf0EjkXdrV1GuA==" }, "node_modules/aws-sdk": { - "version": "2.1360.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1360.0.tgz", - "integrity": "sha512-wW1CviH1s6bl5+wO+KM7aSc3yy6cQPJT85Fd4rQgrn0uwfjg9fx7KJ0FRhv+eU4DabkRjcSMlKo1IGhARmT6Tw==", + "version": "2.1369.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1369.0.tgz", + "integrity": "sha512-DdCQjlhQDi9w8J4moqECrrp9ARWCay0UI38adPSS0GG43gh3bl3OoMlgKJ8aZxi4jUvzE48K9yhFHz4y/mazZw==", "dependencies": { "buffer": "4.9.2", "events": "1.1.1", @@ -4464,21 +4436,6 @@ "node": ">= 10.0.0" } }, - "node_modules/aws-sdk/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/aws-sdk/node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, "node_modules/aws-sdk/node_modules/uuid": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", @@ -4491,6 +4448,7 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, "engines": { "node": "*" } @@ -4498,7 +4456,8 @@ "node_modules/aws4": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true }, "node_modules/axios": { "version": "0.26.1", @@ -4575,6 +4534,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, "dependencies": { "tweetnacl": "^0.14.3" } @@ -4619,10 +4579,33 @@ "readable-stream": "^3.4.0" } }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, "node_modules/bowser": { @@ -4831,26 +4814,13 @@ } }, "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "node_modules/buffer-crc32": { @@ -4911,21 +4881,20 @@ } }, "node_modules/cacache": { - "version": "17.0.5", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.5.tgz", - "integrity": "sha512-Y/PRQevNSsjAPWykl9aeGz8Pr+OI6BYM9fYDNMvOkuUiG9IhG4LEmaYrZZZvioMUEQ+cBCxT0v8wrnCURccyKA==", + "version": "17.0.7", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.7.tgz", + "integrity": "sha512-2GdqQs7hl20V50cB+JEuGeR6YtcNsf1Y9+SP8YXjmGlZz4hM5Ds9s6mKo7e27r6sfF/6MhN4DKRrGldidJJWow==", "dev": true, "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", - "glob": "^9.3.1", + "glob": "^10.2.2", "lru-cache": "^7.7.1", - "minipass": "^4.0.0", + "minipass": "^5.0.0", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", "ssri": "^10.0.0", "tar": "^6.1.11", "unique-filename": "^3.0.0" @@ -4943,16 +4912,36 @@ "balanced-match": "^1.0.0" } }, + "node_modules/cacache/node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/cacache/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.2.tgz", + "integrity": "sha512-Xsa0BcxIC6th9UwNjZkhrMtNo/MnyRL8jGCP+uEwhA5oFOCY1f2s1/oNKY47xQ0Bg5nkjsfAEIej1VeH62bDDQ==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.0", + "minipass": "^5.0.0", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -4971,9 +4960,9 @@ } }, "node_modules/cacache/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", + "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -4985,6 +4974,42 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/cacache/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacache/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacache/node_modules/signal-exit": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz", + "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", @@ -4995,9 +5020,9 @@ } }, "node_modules/cacheable-request": { - "version": "10.2.9", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.9.tgz", - "integrity": "sha512-CaAMr53AS1Tb9evO1BIWFnZjSr8A4pbXofpsNVWPMDZZj3ZQKHwsQG9BrTqQ4x5ZYJXz1T2b8LLtTZODxSpzbg==", + "version": "10.2.10", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.10.tgz", + "integrity": "sha512-v6WB+Epm/qO4Hdlio/sfUn69r5Shgh39SsE9DSd4bIezP0mblOlObI+I0kUEM7J0JFc+I7pSeMeYaOYtX1N/VQ==", "dev": true, "dependencies": { "@types/http-cache-semantics": "^4.0.1", @@ -5093,9 +5118,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001473", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001473.tgz", - "integrity": "sha512-ewDad7+D2vlyy+E4UJuVfiBsU69IL+8oVmTuZnH5Q6CIUbxNfI50uVpRHbUPDD6SUaN2o0Lh4DhTrvLG/Tn1yg==", + "version": "1.0.30001482", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001482.tgz", + "integrity": "sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ==", "dev": true, "funding": [ { @@ -5115,7 +5140,8 @@ "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true }, "node_modules/chai": { "version": "4.3.7", @@ -5301,9 +5327,9 @@ } }, "node_modules/cli-spinners": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", - "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.8.0.tgz", + "integrity": "sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ==", "engines": { "node": ">=6" }, @@ -5456,14 +5482,15 @@ } }, "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -5562,6 +5589,12 @@ "proto-list": "~1.2.1" } }, + "node_modules/config-chain/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "node_modules/configstore": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", @@ -5981,8 +6014,8 @@ "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, "dependencies": { - "JSONStream": "^1.0.4", "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", "lodash": "^4.17.15", "meow": "^8.0.0", "split2": "^3.0.0", @@ -6080,6 +6113,21 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/copyfiles/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/copyfiles/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/copyfiles/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -6108,15 +6156,6 @@ "node": ">=10" } }, - "node_modules/copyfiles/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -6186,35 +6225,6 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-fetch/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -6268,6 +6278,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, "dependencies": { "assert-plus": "^1.0.0" }, @@ -6276,9 +6287,12 @@ } }, "node_modules/date-fns": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", - "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, "engines": { "node": ">=0.11" }, @@ -6409,15 +6423,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/default-require-extensions/node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", @@ -6450,6 +6455,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, "engines": { "node": ">=0.4.0" } @@ -6488,9 +6494,9 @@ } }, "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, "engines": { "node": ">=0.3.1" @@ -6567,6 +6573,21 @@ "node": ">=6" } }, + "node_modules/dotgitignore/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/dotgitignore/node_modules/p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", @@ -6625,6 +6646,21 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -6634,15 +6670,16 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, "node_modules/electron-to-chromium": { - "version": "1.4.348", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.348.tgz", - "integrity": "sha512-gM7TdwuG3amns/1rlgxMbeeyNoBFPa+4Uu0c7FeROWh4qWmvSOnvcslKmWy51ggLKZ2n/F/4i2HJ+PVNxH9uCQ==", + "version": "1.4.378", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.378.tgz", + "integrity": "sha512-RfCD26kGStl6+XalfX3DGgt3z2DNwJS5DKRHCpkPq5T/PqpZMPB1moSRXuK9xhkt/sF57LlpzJgNoYl7mO7Z6w==", "dev": true }, "node_modules/elegant-spinner": { @@ -6818,7 +6855,8 @@ "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, "node_modules/external-editor": { "version": "3.1.0", @@ -6848,6 +6886,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, "engines": [ "node >=0.6.0" ] @@ -6876,7 +6915,8 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-memoize": { "version": "2.5.2", @@ -6900,15 +6940,14 @@ "dev": true }, "node_modules/fast-xml-parser": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz", - "integrity": "sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==", - "dev": true, + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz", + "integrity": "sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==", "dependencies": { - "strnum": "^1.0.4" + "strnum": "^1.0.5" }, "bin": { - "xml2js": "cli.js" + "fxparser": "src/cli/cli.js" }, "funding": { "type": "paypal", @@ -7010,16 +7049,19 @@ "dev": true }, "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/flat": { @@ -7037,12 +7079,6 @@ "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==", "dev": true }, - "node_modules/fnv-plus": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/fnv-plus/-/fnv-plus-1.3.1.tgz", - "integrity": "sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw==", - "dev": true - }, "node_modules/folder-hash": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/folder-hash/-/folder-hash-4.0.4.tgz", @@ -7127,6 +7163,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, "engines": { "node": "*" } @@ -7135,6 +7172,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -7169,9 +7207,9 @@ } }, "node_modules/fp-ts": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.13.1.tgz", - "integrity": "sha512-0eu5ULPS2c/jsa1lGFneEFFEdTbembJv8e4QKXeVJ3lm/5hyve06dlKZrpxmMwJt6rYen7sxmHHK2CLaXvWuWQ==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.14.0.tgz", + "integrity": "sha512-QLagLSYAgMA00pZzUzeksH/78Sd14y7+Gc2A8Yaja3/IpGOFMdm/gYBuDMxYqLsJ58iT5lz+bJb953RAeFfp1A==", "dev": true }, "node_modules/fromentries": { @@ -7213,17 +7251,26 @@ } }, "node_modules/fs-minipass": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.1.tgz", - "integrity": "sha512-MhaJDcFRTuLidHrIttu0RDGyyXs/IYHVmlcxfLAEFIWjc1vdLAkdwT7Ace2u7DbitWC0toKMl5eJZRYNVreIMw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", + "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", "dev": true, "dependencies": { - "minipass": "^4.0.0" + "minipass": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -7257,6 +7304,18 @@ "node": ">=0.6" } }, + "node_modules/fstream/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -7373,6 +7432,21 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/get-pkg-repo/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/get-pkg-repo/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/get-pkg-repo/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -7401,15 +7475,6 @@ "node": ">=10" } }, - "node_modules/get-pkg-repo/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/get-stdin": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", @@ -7437,6 +7502,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, "dependencies": { "assert-plus": "^1.0.0" } @@ -7516,6 +7582,12 @@ "ini": "^1.3.2" } }, + "node_modules/gitconfiglocal/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -7558,6 +7630,12 @@ "node": ">=4" } }, + "node_modules/global-dirs/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -7659,6 +7737,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true, "engines": { "node": ">=4" } @@ -7668,6 +7747,7 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "deprecated": "this library is no longer supported", + "dev": true, "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -7680,6 +7760,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -7694,7 +7775,8 @@ "node_modules/har-validator/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/hard-rejection": { "version": "2.1.0", @@ -7832,6 +7914,24 @@ "node": ">=10" } }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -7868,6 +7968,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -7960,23 +8061,9 @@ } }, "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, "node_modules/ignore": { "version": "5.2.4", @@ -7993,12 +8080,12 @@ "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" }, "node_modules/ignore-walk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.2.tgz", - "integrity": "sha512-ezmQ1Dg2b3jVZh2Dh+ar6Eu2MqNSTkyb32HU2MAQQQX9tKM3q/UQ/9lf03lQ5hW+fOeoMnwxwkleZ0xcNp0/qg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", "dev": true, "dependencies": { - "minimatch": "^7.4.2" + "minimatch": "^9.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -8014,15 +8101,15 @@ } }, "node_modules/ignore-walk/node_modules/minimatch": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", - "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", + "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -8077,11 +8164,11 @@ } }, "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/infer-owner": { @@ -8105,10 +8192,13 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.0.tgz", + "integrity": "sha512-HLR38RSF2iulAzc3I/sma4CoYxQP844rPYCNfzGDOHqa/YqVlwuuZgBx6M50/X8dKgzk0cm1qRg3+47mK2N+cQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/inquirer": { "version": "8.2.5", @@ -8150,6 +8240,21 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/inquirer/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/inquirer/node_modules/ora": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", @@ -8249,9 +8354,9 @@ } }, "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", + "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", "dependencies": { "has": "^1.0.3" }, @@ -8282,11 +8387,14 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-generator-function": { @@ -8492,7 +8600,8 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true }, "node_modules/is-unicode-supported": { "version": "0.1.0", @@ -8557,7 +8666,8 @@ "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", @@ -8634,21 +8744,6 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", @@ -8690,6 +8785,120 @@ "node": ">=8" } }, + "node_modules/jackspeak": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.1.4.tgz", + "integrity": "sha512-7CGd4ZQu5M/FgQLlcgcsY858wf+ukg1ma5M95FACSfC54+88vm594Nv6C3NqWfk8wyK1u+E3SzvVsxr7bwONmg==", + "dev": true, + "dependencies": { + "cliui": "github:isaacs/cliui#isaacs/esm-cjs-consistency" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jackspeak/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/jackspeak/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jackspeak/node_modules/cliui": { + "version": "8.0.1", + "resolved": "git+ssh://git@github.com/isaacs/cliui.git#9f97090165675fdda63a79c29bc36bb1033506b0", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jackspeak/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/jackspeak/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jackspeak/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/jackspeak/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/jest-diff": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", @@ -8897,7 +9106,8 @@ "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true }, "node_modules/jsesc": { "version": "2.5.2", @@ -8959,7 +9169,8 @@ "node_modules/json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true }, "node_modules/json-schema-compare": { "version": "0.2.2", @@ -8983,6 +9194,22 @@ "jsf": "bin/gen.js" } }, + "node_modules/json-schema-generator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/json-schema-generator/-/json-schema-generator-2.0.6.tgz", + "integrity": "sha512-WyWDTK3jnv/OBI43uWw7pTGoDQ62PfccySZCHTBsOfS6D9QhsQr+95Wcwq5lqjzkiDQkTNkWzXEqHOhswfufmw==", + "dev": true, + "dependencies": { + "json-promise": "^1.1.8", + "mkdirp": "^0.5.0", + "optimist": "^0.6.1", + "pretty-data": "^0.40.0", + "request": "^2.81.0" + }, + "bin": { + "json-schema-generator": "bin/cli.js" + } + }, "node_modules/json-schema-ref-parser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-6.1.0.tgz", @@ -9025,7 +9252,8 @@ "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true }, "node_modules/json5": { "version": "2.2.3", @@ -9086,10 +9314,27 @@ "integrity": "sha512-2bf/1crAmPpsmj1I6rDT6W0SOErkrNBpb555xNWcMVWYrX6VnXpG0GRMQ2shvOHwafpfse8q0gnzPFYVH6Tqdg==", "dev": true }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, "node_modules/jsprim": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -9173,6 +9418,19 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/lilconfig": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", @@ -9299,14 +9557,6 @@ "listr": "^0.14.2" } }, - "node_modules/listr-update-renderer/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "engines": { - "node": ">=4" - } - }, "node_modules/listr-update-renderer/node_modules/ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -9338,17 +9588,6 @@ "node": ">=0.10.0" } }, - "node_modules/listr-update-renderer/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/listr-update-renderer/node_modules/cli-truncate": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", @@ -9373,14 +9612,6 @@ "node": ">=0.10.0" } }, - "node_modules/listr-update-renderer/node_modules/indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", - "engines": { - "node": ">=4" - } - }, "node_modules/listr-update-renderer/node_modules/is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -9392,65 +9623,10 @@ "node": ">=0.10.0" } }, - "node_modules/listr-update-renderer/node_modules/log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==", - "dependencies": { - "chalk": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/listr-update-renderer/node_modules/log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", - "dependencies": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-update-renderer/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-update-renderer/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-update-renderer/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-update-renderer/node_modules/slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==", + "node_modules/listr-update-renderer/node_modules/slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==", "engines": { "node": ">=0.10.0" } @@ -9487,57 +9663,6 @@ "node": ">=0.8.0" } }, - "node_modules/listr-update-renderer/node_modules/wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", - "dependencies": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-update-renderer/node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-update-renderer/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-update-renderer/node_modules/wrap-ansi/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-update-renderer/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/listr-verbose-renderer": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", @@ -9674,14 +9799,6 @@ "node": ">=0.10.0" } }, - "node_modules/listr/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "engines": { - "node": ">=6" - } - }, "node_modules/listr/node_modules/rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", @@ -9739,6 +9856,74 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/listr2/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/listr2/node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/listr2/node_modules/slice-ansi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", @@ -9780,16 +9965,28 @@ "node": ">=4" } }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { @@ -9830,12 +10027,6 @@ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, - "node_modules/lodash.isequalwith": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isequalwith/-/lodash.isequalwith-4.4.0.tgz", - "integrity": "sha512-dcZON0IalGBpRmJBmMkaoV7d3I80R2O+FrzsZyHdNSFrANq/cgDqKQNmAHE8UEj4+QYWwwhkQOVdLHiAopzlsQ==", - "dev": true - }, "node_modules/lodash.isfinite": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", @@ -9852,97 +10043,184 @@ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", - "dev": true - }, - "node_modules/lodash.pickby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", - "integrity": "sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==", - "dev": true - }, "node_modules/lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==" }, "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "chalk": "^1.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" + } + }, + "node_modules/log-symbols/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "engines": { + "node": ">=0.10.0" } }, "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" + } + }, + "node_modules/log-symbols/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dependencies": { + "ansi-regex": "^2.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "engines": { + "node": ">=0.8.0" } }, "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" }, "engines": { - "node": ">=10" + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dependencies": { + "restore-cursor": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "mimic-fn": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/loupe": { @@ -9967,14 +10245,12 @@ } }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "yallist": "^3.0.2" } }, "node_modules/make-dir": { @@ -10161,61 +10437,19 @@ "node": ">=10" } }, - "node_modules/make-fetch-happen/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/make-fetch-happen/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "aggregate-error": "^3.0.0" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/make-fetch-happen/node_modules/ssri": { @@ -10254,6 +10488,12 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/make-fetch-happen/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -10321,15 +10561,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/meow/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -10378,6 +10609,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, "engines": { "node": ">= 0.6" } @@ -10395,6 +10627,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "dependencies": { "mime-db": "1.52.0" }, @@ -10443,13 +10676,10 @@ } }, "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "devOptional": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "devOptional": true }, "node_modules/minimist-options": { "version": "4.1.0", @@ -10498,6 +10728,12 @@ "node": ">=8" } }, + "node_modules/minipass-collect/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/minipass-fetch": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", @@ -10527,6 +10763,12 @@ "node": ">=8" } }, + "node_modules/minipass-fetch/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", @@ -10551,6 +10793,12 @@ "node": ">=8" } }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/minipass-json-stream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", @@ -10573,6 +10821,12 @@ "node": ">=8" } }, + "node_modules/minipass-json-stream/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", @@ -10597,6 +10851,12 @@ "node": ">=8" } }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/minipass-sized": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", @@ -10621,6 +10881,12 @@ "node": ">=8" } }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", @@ -10646,6 +10912,12 @@ "node": ">=8" } }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -10751,6 +11023,34 @@ "integrity": "sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==", "dev": true }, + "node_modules/mocha/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/mocha/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/mocha/node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -10762,15 +11062,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/mocha/node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -10783,22 +11074,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mocha/node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -10831,13 +11106,14 @@ "node": "*" } }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/mocha/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "dependencies": { - "p-locate": "^5.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { "node": ">=10" @@ -10873,36 +11149,6 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -11001,6 +11247,34 @@ "node": ">=0.8.0" } }, + "node_modules/mv/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "optional": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mv/node_modules/rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "optional": true, + "dependencies": { + "glob": "^6.0.1" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/nan": { "version": "2.17.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", @@ -11124,36 +11398,6 @@ "node": "^12.13 || ^14.13 || >=16" } }, - "node_modules/node-gyp/node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -11275,17 +11519,18 @@ "dev": true }, "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, "dependencies": { - "abbrev": "1" + "abbrev": "^1.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "*" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/normalize-package-data": { @@ -11355,6 +11600,38 @@ "node": "*" } }, + "node_modules/npm-bundle/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/npm-bundle/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/npm-bundled": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", @@ -11368,9 +11645,9 @@ } }, "node_modules/npm-check-updates": { - "version": "16.10.8", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.10.8.tgz", - "integrity": "sha512-e+p3rUCvaU0iKOvi+/Xiyx+mLe9/aRTu9Zrc7+TR6H2q+uFgmXEwqbXYN9Ngqsta8gdTjpn751UD5MEOogO5cA==", + "version": "16.10.9", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.10.9.tgz", + "integrity": "sha512-J3ggasYJIFB+XqAT9qQcAAOKehpCXGRoZWlK4/u5YAOZB6hmM4CxdrxCA7A34hBK5zaPIEBnMqWBSV7mU6nixg==", "dev": true, "dependencies": { "chalk": "^5.2.0", @@ -11442,22 +11719,6 @@ "node": ">=14" } }, - "node_modules/npm-check-updates/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npm-check-updates/node_modules/glob": { "version": "9.3.5", "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", @@ -11488,30 +11749,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm-check-updates/node_modules/ini": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.0.tgz", - "integrity": "sha512-HLR38RSF2iulAzc3I/sma4CoYxQP844rPYCNfzGDOHqa/YqVlwuuZgBx6M50/X8dKgzk0cm1qRg3+47mK2N+cQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-check-updates/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npm-check-updates/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -11536,28 +11773,13 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm-check-updates/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-check-updates/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/npm-check-updates/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "dependencies": { - "p-limit": "^3.0.2" + "aggregate-error": "^3.0.0" }, "engines": { "node": ">=10" @@ -11681,13 +11903,13 @@ } }, "node_modules/npm-registry-fetch": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.4.tgz", - "integrity": "sha512-pMS2DRkwg+M44ct65zrN/Cr9IHK1+n6weuefAo6Er4lc+/8YBCU0Czq04H3ZiSigluh7pb2rMM5JpgcytctB+Q==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", "dev": true, "dependencies": { "make-fetch-happen": "^11.0.0", - "minipass": "^4.0.0", + "minipass": "^5.0.0", "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", @@ -11708,9 +11930,9 @@ } }, "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.0.tgz", - "integrity": "sha512-7ChuOzCb1LzdQZrTy0ky6RsCoMYeM+Fh4cY0+4zsJVhNcH5Q3OJojLY1mGkD0xAhWB29lskECVb6ZopofwjldA==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", @@ -11720,7 +11942,7 @@ "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^7.7.1", - "minipass": "^4.0.0", + "minipass": "^5.0.0", "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", @@ -11733,13 +11955,22 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/npm-registry-fetch/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.2.tgz", - "integrity": "sha512-/ZpF1CQaWYqjbhfFgKNt3azxztEpc/JUPuMkqOgrnMQqcU8CbE409AUdJYTIWryl3PP5CBaTJZT71N49MXP/YA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", "dev": true, "dependencies": { - "minipass": "^4.0.0", + "minipass": "^5.0.0", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, @@ -11836,6 +12067,19 @@ "wrap-ansi": "^6.2.0" } }, + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/nyc/node_modules/istanbul-lib-instrument": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", @@ -11851,31 +12095,55 @@ "node": ">=8" } }, - "node_modules/nyc/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "aggregate-error": "^3.0.0" + "p-locate": "^4.1.0" }, "engines": { "node": ">=8" } }, - "node_modules/nyc/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/nyc/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "p-try": "^2.0.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/nyc/node_modules/semver": { @@ -11946,6 +12214,7 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, "engines": { "node": "*" } @@ -12022,6 +12291,31 @@ "yaml": "^1.10.2" } }, + "node_modules/optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==", + "dev": true, + "dependencies": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "node_modules/optimist/node_modules/minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==", + "dev": true + }, + "node_modules/optimist/node_modules/wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/ora": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", @@ -12184,38 +12478,27 @@ } }, "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" + "p-limit": "^3.0.2" }, "engines": { "node": ">=10" @@ -12224,6 +12507,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "engines": { + "node": ">=6" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -12396,9 +12687,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.0.tgz", - "integrity": "sha512-qFXQEwchrZcMVen2uIDceR8Tii6kCJak5rzDStfEM0qA3YLMswaxIEZO0DhIbJ3aqaJiDjt+3crlplOb0tDtKQ==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.1.tgz", + "integrity": "sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==", "dev": true, "engines": { "node": "14 || >=16.14" @@ -12449,7 +12740,8 @@ "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true }, "node_modules/picocolors": { "version": "1.0.0", @@ -12592,22 +12884,74 @@ "node": ">=4" } }, - "node_modules/pkg-conf/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "node_modules/pkg-conf/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "find-up": "^4.0.0" + "p-limit": "^2.2.0" }, "engines": { "node": ">=8" @@ -12660,6 +13004,18 @@ "node": ">=0.10.0" } }, + "node_modules/postman-collection/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/postman-collection/node_modules/semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -12675,6 +13031,12 @@ "node": ">=10" } }, + "node_modules/postman-collection/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/postman-url-encoder": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.5.tgz", @@ -12688,9 +13050,9 @@ } }, "node_modules/prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -12842,7 +13204,8 @@ "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true }, "node_modules/pstree.remy": { "version": "1.1.8", @@ -12886,6 +13249,7 @@ "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, "engines": { "node": ">=0.6" } @@ -12979,6 +13343,12 @@ "require-from-string": "^2.0.2" } }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -12995,12 +13365,12 @@ "dev": true }, "node_modules/read-package-json": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.1.tgz", - "integrity": "sha512-AaHqXxfAVa+fNL07x8iAghfKOds/XXsu7zoouIVsbm7PEbQ3nMWXlvjcbrNLjElnUHWQtAo4QEa0RXuvD4XlpA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.2.tgz", + "integrity": "sha512-Ismd3km1d/FGzcjm8fBf/4ktkyd0t6pbkjYqu1gvRzOzN+aTxi1eigdZp7441TlszQ+GsdYezgS+g9cgy8QK9w==", "dev": true, "dependencies": { - "glob": "^9.3.0", + "glob": "^10.2.2", "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^5.0.0", "npm-normalize-package-bin": "^3.0.0" @@ -13040,16 +13410,36 @@ "balanced-match": "^1.0.0" } }, + "node_modules/read-package-json/node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/read-package-json/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.2.tgz", + "integrity": "sha512-Xsa0BcxIC6th9UwNjZkhrMtNo/MnyRL8jGCP+uEwhA5oFOCY1f2s1/oNKY47xQ0Bg5nkjsfAEIej1VeH62bDDQ==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.0", + "minipass": "^5.0.0", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -13089,9 +13479,9 @@ } }, "node_modules/read-package-json/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", + "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -13103,6 +13493,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/read-package-json/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/read-package-json/node_modules/normalize-package-data": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", @@ -13118,6 +13517,18 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/read-package-json/node_modules/signal-exit": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz", + "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -13150,6 +13561,58 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -13209,9 +13672,9 @@ } }, "node_modules/readdir-glob": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.2.tgz", - "integrity": "sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "dependencies": { "minimatch": "^5.1.0" } @@ -13259,6 +13722,20 @@ "node": ">=8" } }, + "node_modules/redent/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, "node_modules/registry-auth-token": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", @@ -13312,6 +13789,7 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -13343,6 +13821,7 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, "bin": { "uuid": "bin/uuid" } @@ -13370,11 +13849,11 @@ "dev": true }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.11.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -13464,31 +13943,17 @@ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" }, "node_modules/rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "devOptional": true, + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dependencies": { - "glob": "^6.0.1" + "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "devOptional": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" }, - "engines": { - "node": "*" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/run-async": { @@ -13523,17 +13988,31 @@ } }, "node_modules/rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/safe-json-stringify": { "version": "1.2.0", @@ -13567,9 +14046,9 @@ } }, "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -13601,6 +14080,22 @@ "integrity": "sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA==", "dev": true }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -13735,14 +14230,14 @@ } }, "node_modules/sigstore": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.2.0.tgz", - "integrity": "sha512-Fr9+W1nkBSIZCkJQR7jDn/zI0UXNsVpp+7mDQkCnZOIxG9p6yNXBx9xntHsfUyYHE55XDkkVV3+rYbrkzAeesA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.4.0.tgz", + "integrity": "sha512-N7TRpSbFjY/TrFDg6yGAQSYBrQ5s6qmPiq4pD6fkv1LoyfMsLG0NwZWG2s5q+uttLHgyVyTa0Rogx2P78rN8kQ==", "dev": true, "dependencies": { "@sigstore/protobuf-specs": "^0.1.0", "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.0.0" + "tuf-js": "^1.1.3" }, "bin": { "sigstore": "bin/sigstore.js" @@ -13761,9 +14256,9 @@ } }, "node_modules/sigstore/node_modules/make-fetch-happen": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.0.tgz", - "integrity": "sha512-7ChuOzCb1LzdQZrTy0ky6RsCoMYeM+Fh4cY0+4zsJVhNcH5Q3OJojLY1mGkD0xAhWB29lskECVb6ZopofwjldA==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", @@ -13773,7 +14268,7 @@ "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^7.7.1", - "minipass": "^4.0.0", + "minipass": "^5.0.0", "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", @@ -13786,13 +14281,22 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/sigstore/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/sigstore/node_modules/minipass-fetch": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.2.tgz", - "integrity": "sha512-/ZpF1CQaWYqjbhfFgKNt3azxztEpc/JUPuMkqOgrnMQqcU8CbE409AUdJYTIWryl3PP5CBaTJZT71N49MXP/YA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", "dev": true, "dependencies": { - "minipass": "^4.0.0", + "minipass": "^5.0.0", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, @@ -13850,15 +14354,6 @@ "sinon": ">=4.0.0" } }, - "node_modules/sinon/node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -13900,17 +14395,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -13997,27 +14481,12 @@ "foreground-child": "^2.0.0", "is-windows": "^1.0.2", "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/spawn-wrap/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=8" } }, "node_modules/spdx-correct": { @@ -14083,6 +14552,7 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -14104,17 +14574,26 @@ } }, "node_modules/ssri": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.3.tgz", - "integrity": "sha512-lJtX/BFPI/VEtxZmLfeh7pzisIs6micwZ3eruD3+ds9aPsXKlYpwDS2Q7omD6WC42WO9+bnUSzlMmfv8uK8meg==", + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", + "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", "dev": true, "dependencies": { - "minipass": "^4.0.0" + "minipass": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/ssri/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -14216,22 +14695,6 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/standard-version/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/standard-version/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -14241,51 +14704,6 @@ "node": ">=4" } }, - "node_modules/standard-version/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/standard-version/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/standard-version/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/standard-version/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -14316,19 +14734,18 @@ "node": ">=10" } }, - "node_modules/standard-version/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" } }, "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "engines": { "node": ">=0.6.19" } @@ -14346,12 +14763,36 @@ "node": ">=8" } }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" } }, "node_modules/stringify-package": { @@ -14372,13 +14813,26 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/strip-final-newline": { @@ -14516,6 +14970,12 @@ "node": ">=10" } }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -14564,20 +15024,6 @@ "node": ">=8.17.0" } }, - "node_modules/tmp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -14615,10 +15061,25 @@ "nodetouch": "bin/nodetouch.js" } }, + "node_modules/touch/node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, "node_modules/tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -14694,6 +15155,15 @@ } } }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/ts-toolbelt": { "version": "6.15.5", "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.5.tgz", @@ -14706,12 +15176,12 @@ "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" }, "node_modules/tuf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.3.tgz", - "integrity": "sha512-jGYi5nG/kqgfTFQSdoN6PW9eIn+XRZqdXku+fSwNk6UpWIsWaV7pzAqPgFr85edOPhoyJDyBqCS+DCnHroMvrw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.4.tgz", + "integrity": "sha512-Lw2JRM3HTYhEtQJM2Th3aNCPbnXirtWMl065BawwmM2pX6XStH/ZO9e8T2hh0zk/HUa+1i6j+Lv6eDitKTau6A==", "dev": true, "dependencies": { - "@tufjs/models": "1.0.2", + "@tufjs/models": "1.0.3", "make-fetch-happen": "^11.0.1" }, "engines": { @@ -14728,9 +15198,9 @@ } }, "node_modules/tuf-js/node_modules/make-fetch-happen": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.0.tgz", - "integrity": "sha512-7ChuOzCb1LzdQZrTy0ky6RsCoMYeM+Fh4cY0+4zsJVhNcH5Q3OJojLY1mGkD0xAhWB29lskECVb6ZopofwjldA==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", @@ -14740,7 +15210,7 @@ "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^7.7.1", - "minipass": "^4.0.0", + "minipass": "^5.0.0", "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", @@ -14753,13 +15223,22 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/tuf-js/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/tuf-js/node_modules/minipass-fetch": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.2.tgz", - "integrity": "sha512-/ZpF1CQaWYqjbhfFgKNt3azxztEpc/JUPuMkqOgrnMQqcU8CbE409AUdJYTIWryl3PP5CBaTJZT71N49MXP/YA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", "dev": true, "dependencies": { - "minipass": "^4.0.0", + "minipass": "^5.0.0", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, @@ -14774,6 +15253,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, "dependencies": { "safe-buffer": "^5.0.1" }, @@ -14793,7 +15273,8 @@ "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true }, "node_modules/type-detect": { "version": "4.0.8", @@ -14948,6 +15429,12 @@ "setimmediate": "~1.0.4" } }, + "node_modules/unzipper/node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "dev": true + }, "node_modules/unzipper/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -14963,10 +15450,25 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/unzipper/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/unzipper/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "dev": true, "funding": [ { @@ -14976,6 +15478,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { @@ -14983,7 +15489,7 @@ "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -15171,6 +15677,7 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, "engines": [ "node >=0.6.0" ], @@ -15183,7 +15690,8 @@ "node_modules/verror/node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true }, "node_modules/walker": { "version": "1.0.8", @@ -15239,9 +15747,9 @@ } }, "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true }, "node_modules/which-typed-array": { @@ -15365,6 +15873,24 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -15433,9 +15959,10 @@ } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/yaml": { "version": "1.10.2", @@ -15446,9 +15973,9 @@ } }, "node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -15463,11 +15990,12 @@ } }, "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=10" } }, "node_modules/yargs-unparser": { @@ -15518,6 +16046,14 @@ "node": ">=8" } }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", diff --git a/package.json b/package.json index 45d8a36a..44ef0962 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "watch": "tsc --watch" }, "dependencies": { - "@alexa/acdl": "^0.3.0", + "@alexa/acdl": "^0.3.1", "@aws-sdk/client-cloudformation": "^3.306.0", "@aws-sdk/client-iam": "^3.306.0", "@aws-sdk/client-lambda": "^3.306.0", @@ -78,7 +78,6 @@ "portscanner": "^2.2.0", "pretty-bytes": "^5.6.0", "ramda": "^0.28.0", - "request": "^2.88.2", "rxjs": "^7.5.5", "semver": "^7.3.6", "tmp": "^0.2.1", @@ -94,7 +93,7 @@ "@commitlint/cli": "^16.2.3", "@commitlint/config-conventional": "^16.2.1", "@istanbuljs/nyc-config-typescript": "^1.0.2", - "@stoplight/prism-cli": "^4.8.0", + "@stoplight/prism-cli": "4.8.0", "@types/chai": "^4.3.0", "@types/chai-as-promised": "^7.1.5", "@types/chai-json-schema": "^1.4.6", diff --git a/test/integration/commands/smapi-commands-test.js b/test/integration/commands/smapi-commands-test.js index 00e9ff28..b28e346f 100644 --- a/test/integration/commands/smapi-commands-test.js +++ b/test/integration/commands/smapi-commands-test.js @@ -43,7 +43,7 @@ describe('smapi command test', () => { const productId = 'someProductId'; const stage = 'development'; const locale = 'en-US'; - const location = 'US'; + const location = 'https://some.url.com/location/us'; const sourceLocale = 'en-US'; const targetLocales = 'en-GB'; const acceptLanguage = 'en-GB'; @@ -53,7 +53,7 @@ describe('smapi command test', () => { const subscriptionId = 'someSubscriptionId'; const updateRequestId = 'someUpdateRequestId'; const imJobId = 'someIMJobId'; - const imJobStatus = 'imJobStatus'; + const imJobStatus = 'ENALBED'; const imExecutionId = 'imExecutionId'; const version = '2.0.0'; const targetVersion = '7'; @@ -67,7 +67,7 @@ describe('smapi command test', () => { const contentType = 'application/json'; const annotationSetId = 'someAnnotationSetId'; const experimentId = '1'; - const treatmentId = '2'; + const treatmentId = 'T1'; const metricSnapShotId = '3'; const experimentName = 'experimentName'; const experimentDescription = 'experimentDescription'; @@ -510,7 +510,7 @@ describe('smapi command test', () => { "--name", "someName", "--events", - "AlexaDevelopmentEvent.ManifestUpdat", + "AlexaDevelopmentEvent.ManifestUpdate", "--subscriber-id", subscriberId, ]; @@ -535,7 +535,7 @@ describe('smapi command test', () => { "--name", "someName", "--events", - "AlexaDevelopmentEvent.ManifestUpdated,AlexaDevelopmentEvent.ManifestCreated", + "AlexaDevelopmentEvent.ManifestUpdate,AlexaDevelopmentEvent.SkillCertification", ]; addCoveredCommand(args); const result = await run(askCmd, args, {...options, parse: false}); @@ -1000,7 +1000,7 @@ describe('smapi command test', () => { }); it("| should invoke skill end point", async () => { - const args = [subCmd, "invoke-skill", "-s", skillId, "--endpoint-region", "someRegion", "--skill-request-body", JSON.stringify({})]; + const args = [subCmd, "invoke-skill", "-s", skillId, "--endpoint-region", "NA", "--skill-request-body", JSON.stringify({})]; addCoveredCommand(args); const result = await run(askCmd, args, options); expect(result).be.an("object"); @@ -1015,7 +1015,7 @@ describe('smapi command test', () => { "-g", stage, "--endpoint-region", - "someRegion", + "NA", "--skill-request-body", JSON.stringify({}), ]; diff --git a/test/integration/fixtures/account-linking-request.json b/test/integration/fixtures/account-linking-request.json index 59607785..276eb230 100644 --- a/test/integration/fixtures/account-linking-request.json +++ b/test/integration/fixtures/account-linking-request.json @@ -1,6 +1,6 @@ { "accountLinkingRequest": { - "skipOnEnablement": "true", + "skipOnEnablement": true, "type": "AUTH_CODE", "authorizationUrl": "https://www.example.com/auth_url", "domains": ["example.com"], diff --git a/test/integration/fixtures/create-in-skill-product-request.json b/test/integration/fixtures/create-in-skill-product-request.json index e700ed64..9048cac1 100644 --- a/test/integration/fixtures/create-in-skill-product-request.json +++ b/test/integration/fixtures/create-in-skill-product-request.json @@ -27,7 +27,7 @@ "distributionCountries": ["US"], "pricing": { "amazon.com": { - "releaseDate": "2099-04-13", + "releaseDate": "2099-04-13T00:00:00Z", "defaultPriceListing": { "price": 0.99, "currency": "USD" diff --git a/test/integration/fixtures/lwa-swagger.json b/test/integration/fixtures/lwa-swagger.json index 4b8ff960..60f0dcd5 100644 --- a/test/integration/fixtures/lwa-swagger.json +++ b/test/integration/fixtures/lwa-swagger.json @@ -6,9 +6,9 @@ }, "produces": ["application/json"], "paths": { - "/auth/O2/token": { + "/auth/o2/token": { "post": { - "consumes": ["application/x-www-form-urlencoded"], + "consumes": ["application/json"], "parameters": [ { "in": "body", diff --git a/test/integration/fixtures/smapi_spec.json b/test/integration/fixtures/smapi_spec.json new file mode 100644 index 00000000..ccb132d4 --- /dev/null +++ b/test/integration/fixtures/smapi_spec.json @@ -0,0 +1,28554 @@ +{ + "swagger": "2.0", + "info": { + "version": "1.0", + "title": "Skill Management API SDK" + }, + "consumes":[ + "application/json" + ], + "produces": [ + "application/json" + ], + "security": [ + { + "skillManagement": [] + } + ], + "paths": { + "/v0/catalogs": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Lists catalogs associated with a vendor.", + "parameters": [ + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "required": false, + "type": "integer" + }, + { + "name": "vendorId", + "in": "query", + "description": "The vendor ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Successful operation.", + "schema": { + "$ref": "#/definitions/v0.catalog.ListCatalogsResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "listCatalogsForVendorV0" + }, + "post": { + "tags": [ + "skillManagement" + ], + "description": "Creates a new catalog based on information provided in the request.", + "parameters": [ + { + "in": "body", + "name": "CreateCatalogRequest", + "description": "Defines the request body for createCatalog API.", + "required": true, + "schema": { + "$ref": "#/definitions/v0.catalog.CreateCatalogRequest" + } + } + ], + "responses": { + "201": { + "description": "Catalog created.", + "schema": { + "$ref": "#/definitions/v0.catalog.CatalogDetails" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "createCatalogV0" + } + }, + "/v0/catalogs/{catalogId}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Returns information about a particular catalog.", + "parameters": [ + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + } + ], + "responses": { + "200": { + "description": "Successful operation.", + "schema": { + "$ref": "#/definitions/v0.catalog.CatalogDetails" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "getCatalogV0" + } + }, + "/v0/skills/{skillId}/catalogs": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Lists all the catalogs associated with a skill.", + "parameters": [ + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "required": false, + "type": "integer" + }, + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Successful operation.", + "schema": { + "$ref": "#/definitions/v0.catalog.ListCatalogsResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "listCatalogsForSkillV0" + } + }, + "/v0/skills/{skillId}/catalogs/{catalogId}": { + "put": { + "tags": [ + "skillManagement" + ], + "description": "Associate skill with catalog.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + } + ], + "responses": { + "201": { + "description": "Successful operation." + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "associateCatalogWithSkillV0" + } + }, + "/v0/catalogs/{catalogId}/uploads": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Lists all the uploads for a particular catalog.", + "parameters": [ + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + } + ], + "responses": { + "200": { + "description": "Successful operation.", + "schema": { + "$ref": "#/definitions/v0.catalog.upload.ListUploadsResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "listUploadsForCatalogV0" + }, + "post": { + "tags": [ + "skillManagement" + ], + "description": "Creates a new upload for a catalog and returns presigned upload parts for uploading the file.", + "parameters": [ + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + }, + { + "in": "body", + "name": "CreateContentUploadRequest", + "description": "Defines the request body for updateCatalog API.", + "required": true, + "schema": { + "$ref": "#/definitions/v0.catalog.upload.CreateContentUploadRequest" + } + } + ], + "responses": { + "201": { + "description": "Content upload created.", + "schema": { + "$ref": "#/definitions/v0.catalog.upload.CreateContentUploadResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "createContentUploadV0" + } + }, + "/v0/catalogs/{catalogId}/uploads/{uploadId}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Gets detailed information about an upload which was created for a specific catalog. Includes the upload's ingestion steps and a presigned url for downloading the file.", + "parameters": [ + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + }, + { + "name": "uploadId", + "in": "path", + "description": "Unique identifier of the upload.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Successful operation.", + "schema": { + "$ref": "#/definitions/v0.catalog.upload.GetContentUploadResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "getContentUploadByIdV0" + }, + "post": { + "tags": [ + "skillManagement" + ], + "description": "Completes an upload. To be called after the file is uploaded to the backend data store using presigned url(s).", + "parameters": [ + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + }, + { + "name": "uploadId", + "in": "path", + "description": "Unique identifier of the upload.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "CompleteUploadRequestPayload", + "description": "Request payload to complete an upload.", + "required": true, + "schema": { + "$ref": "#/definitions/v0.catalog.upload.CompleteUploadRequest" + } + } + ], + "responses": { + "202": { + "description": "Accepted." + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "completeCatalogUploadV0" + } + }, + "/v0/developmentEvents/subscribers": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Lists the subscribers for a particular vendor.", + "parameters": [ + { + "name": "vendorId", + "in": "query", + "description": "The vendor ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + } + ], + "responses": { + "200": { + "description": "Successful operation.", + "schema": { + "$ref": "#/definitions/v0.developmentEvents.subscriber.ListSubscribersResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "listSubscribersForDevelopmentEventsV0" + }, + "post": { + "tags": [ + "skillManagement" + ], + "description": "Creates a new subscriber resource for a vendor.", + "parameters": [ + { + "in": "body", + "name": "CreateSubscriberRequest", + "description": "Defines the request body for createSubscriber API.", + "required": true, + "schema": { + "$ref": "#/definitions/v0.developmentEvents.subscriber.CreateSubscriberRequest" + } + } + ], + "responses": { + "201": { + "description": "Created. Returns a URL to retrieve the subscriber in 'Location' header.", + "headers": { + "Location": { + "type": "string", + "description": "Relative URL to retrieve the subscriber." + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "createSubscriberForDevelopmentEventsV0" + } + }, + "/v0/developmentEvents/subscribers/{subscriberId}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Returns information about specified subscriber.", + "parameters": [ + { + "name": "subscriberId", + "in": "path", + "description": "Unique identifier of the subscriber.", + "required": true, + "type": "string", + "format": "Amazon Common Identifier" + } + ], + "responses": { + "200": { + "description": "Successful operation.", + "schema": { + "$ref": "#/definitions/v0.developmentEvents.subscriber.SubscriberInfo" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "getSubscriberForDevelopmentEventsV0" + }, + "put": { + "tags": [ + "skillManagement" + ], + "description": "Updates the properties of a subscriber.", + "parameters": [ + { + "name": "subscriberId", + "in": "path", + "description": "Unique identifier of the subscriber.", + "required": true, + "type": "string", + "format": "Amazon Common Identifier" + }, + { + "in": "body", + "name": "UpdateSubscriberRequest", + "description": "Defines the request body for updateSubscriber API.", + "required": true, + "schema": { + "$ref": "#/definitions/v0.developmentEvents.subscriber.UpdateSubscriberRequest" + } + } + ], + "responses": { + "204": { + "description": "Success." + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "setSubscriberForDevelopmentEventsV0" + }, + "delete": { + "tags": [ + "skillManagement" + ], + "description": "Deletes a specified subscriber.", + "parameters": [ + { + "name": "subscriberId", + "in": "path", + "description": "Unique identifier of the subscriber.", + "required": true, + "type": "string", + "format": "Amazon Common Identifier" + } + ], + "responses": { + "204": { + "description": "Successful operation." + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "deleteSubscriberForDevelopmentEventsV0" + } + }, + "/v0/developmentEvents/subscribers/{subscriberId}/test": {}, + "/v0/developmentEvents/subscriptions": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Lists all the subscriptions for a vendor/subscriber depending on the query parameter.", + "parameters": [ + { + "name": "vendorId", + "in": "query", + "description": "The vendor ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + { + "name": "subscriberId", + "in": "query", + "description": "Unique identifier of the subscriber. If this query parameter is provided, the list would be filtered by the owning subscriberId.", + "required": false, + "type": "string", + "format": "Amazon Common Identifier" + } + ], + "responses": { + "200": { + "description": "Successful operation.", + "schema": { + "$ref": "#/definitions/v0.developmentEvents.subscription.ListSubscriptionsResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "listSubscriptionsForDevelopmentEventsV0" + }, + "post": { + "tags": [ + "skillManagement" + ], + "consumes": [ + "application/json" + ], + "description": "Creates a new subscription for a subscriber. This needs to be authorized by the client/vendor who created the subscriber and the vendor who publishes the event.", + "parameters": [ + { + "in": "body", + "name": "CreateSubscriptionRequest", + "description": "Request body for createSubscription API.", + "required": false, + "schema": { + "$ref": "#/definitions/v0.developmentEvents.subscription.CreateSubscriptionRequest" + } + } + ], + "responses": { + "201": { + "description": "Created; Returns a URL to retrieve the subscription in 'Location' header.", + "headers": { + "Location": { + "type": "string", + "description": "Relative URL to retrieve the subscription." + }, + "Content-Type":{ + "type": "string", + "description": "empty content", + "enum":[ + "text/plain" + ] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "createSubscriptionForDevelopmentEventsV0" + } + }, + "/v0/developmentEvents/subscriptions/{subscriptionId}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Returns information about a particular subscription. Both, the vendor who created the subscriber and the vendor who publishes the event can retrieve this resource with appropriate authorization.", + "parameters": [ + { + "name": "subscriptionId", + "in": "path", + "description": "Unique identifier of the subscription.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + } + ], + "responses": { + "200": { + "description": "Successful operation.", + "schema": { + "$ref": "#/definitions/v0.developmentEvents.subscription.SubscriptionInfo" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "getSubscriptionForDevelopmentEventsV0" + }, + "put": { + "tags": [ + "skillManagement" + ], + "description": "Updates the mutable properties of a subscription. This needs to be authorized by the client/vendor who created the subscriber and the vendor who publishes the event. The subscriberId cannot be updated.", + "parameters": [ + { + "name": "subscriptionId", + "in": "path", + "description": "Unique identifier of the subscription.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + }, + { + "in": "body", + "name": "UpdateSubscriptionRequest", + "description": "Request body for updateSubscription API.", + "required": false, + "schema": { + "$ref": "#/definitions/v0.developmentEvents.subscription.UpdateSubscriptionRequest" + } + } + ], + "responses": { + "204": { + "description": "No content." + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "setSubscriptionForDevelopmentEventsV0" + }, + "delete": { + "tags": [ + "skillManagement" + ], + "description": "Deletes a particular subscription. Both, the vendor who created the subscriber and the vendor who publishes the event can delete this resource with appropriate authorization.", + "parameters": [ + { + "name": "subscriptionId", + "in": "path", + "description": "Unique identifier of the subscription.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + } + ], + "responses": { + "204": { + "description": "Successful operation." + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v0.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "x-operation-name": "deleteSubscriptionForDevelopmentEventsV0" + } + }, + "/v0/skills/{skillId}/experiments": {}, + "/v0/skills/{skillId}/experiments/{experimentId}/properties": {}, + "/v0/skills/{skillId}/experiments/{experimentId}": {}, + "/v0/skills/{skillId}/experiments/{experimentId}/exposurePercentage": {}, + "/v0/skills/{skillId}/experiments/{experimentId}/treatmentOverrides/~current": {}, + "/v0/skills/{skillId}/experiments/{experimentId}/state": {}, + "/v0/skills/{skillId}/experiments/{experimentId}/metricSnapshots": {}, + "/v0/skills/{skillId}/experiments/{experimentId}/metricSnapshots/{metricSnapshotId}": {}, + "/v0/skills/{skillId}/_internationalize": {}, + "/v0/skills/{skillId}/_internationalizations/{internationalizationId}": {}, + "/v0/_burnerDeveloperAccounts": {}, + "/v0/_burnerDeveloperAccounts/{vendorId}": {}, + "/v1/catalogs/{catalogId}/urls": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "Generates preSigned urls to upload data", + "parameters": [ + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + }, + { + "in": "body", + "name": "GenerateCatalogUploadUrlRequestBody", + "description": "Request body to generate catalog upload url", + "required": true, + "schema": { + "$ref": "#/definitions/v1.catalog.CreateContentUploadUrlRequest" + } + } + ], + "responses": { + "201": { + "description": "Successful operation.", + "schema": { + "$ref": "#/definitions/v1.catalog.CreateContentUploadUrlResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "generateCatalogUploadUrlV1" + } + }, + "/v1/catalogs/{catalogId}/uploads": { + "post": { + "tags": [ + "skillManagement" + ], + "summary": "Create new upload", + "description": "Creates a new upload for a catalog and returns location to track the upload process.", + "parameters": [ + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + }, + { + "in": "body", + "name": "CatalogUploadRequestBody", + "description": "Provides the request body for create content upload", + "required": true, + "schema": { + "$ref": "#/definitions/v1.catalog.upload.CatalogUploadBase" + } + } + ], + "responses": { + "202": { + "description": "Accepted", + "headers": { + "Location": { + "type": "string", + "description": "Contains relative URL to track upload." + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes\ntotal requests, per API, ClientId, and CustomerId.\n", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "createCatalogUploadV1" + } + }, + "/v1/catalogs/{catalogId}/uploads/{uploadId}": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "Get upload", + "description": "Gets detailed information about an upload which was created for a specific catalog. Includes the upload's ingestion steps and a url for downloading the file.", + "parameters": [ + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + }, + { + "name": "uploadId", + "in": "path", + "description": "Unique identifier of the upload.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Successful operation.", + "schema": { + "$ref": "#/definitions/v1.catalog.upload.GetContentUploadResponse" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes\ntotal requests, per API, ClientId, and CustomerId.\n", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getContentUploadByIdV1" + } + }, + "/v1/inSkillProducts": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get the list of in-skill products for the vendor.", + "parameters": [ + { + "name": "vendorId", + "in": "query", + "description": "The vendor ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 100, + "minimum": 1 + }, + { + "name": "productId", + "in": "query", + "description": "The list of in-skill product IDs that you wish to get the summary for. A maximum of 50 in-skill product IDs can be specified in a single listInSkillProducts call. Please note that this parameter must not be used with 'nextToken' and/or 'maxResults' parameter.", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "stage", + "in": "query", + "description": "Filter in-skill products by specified stage.", + "required": false, + "type": "string", + "maxLength": 63, + "minLength": 1 + }, + { + "name": "type", + "in": "query", + "description": "Type of in-skill product to filter on.", + "required": false, + "type": "string", + "enum": [ + "SUBSCRIPTION", + "ENTITLEMENT", + "CONSUMABLE" + ] + }, + { + "name": "referenceName", + "in": "query", + "description": "Filter in-skill products by reference name.", + "required": false, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "status", + "in": "query", + "description": "Status of in-skill product.", + "required": false, + "type": "string", + "enum": [ + "INCOMPLETE", + "COMPLETE", + "CERTIFICATION", + "PUBLISHED", + "SUPPRESSED" + ] + }, + { + "name": "isAssociatedWithSkill", + "in": "query", + "description": "Filter in-skill products by whether or not they are associated to a skill.", + "required": false, + "type": "string", + "enum": [ + "ASSOCIATED_WITH_SKILL", + "NO_SKILL_ASSOCIATIONS", + "NOT_ASSOCIATED_WITH_SKILL" + ] + } + ], + "responses": { + "200": { + "description": "Response contains list of in-skill products for the specified vendor and stage.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body.", + "enum": [ + "application/json" + ] + } + }, + "schema": { + "$ref": "#/definitions/v1.isp.ListInSkillProductResponse" + } + }, + "400": { + "description": "Bad request. Returned when a required parameter is not present, badly formatted.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Too many requests received.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getIspListForVendorV1" + }, + "post": { + "tags": [ + "skillManagement" + ], + "description": "Creates a new in-skill product for given vendorId.", + "parameters": [ + { + "in": "body", + "name": "createInSkillProductRequest", + "description": "defines the request body for createInSkillProduct API.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.isp.createInSkillProductRequest" + } + } + ], + "responses": { + "201": { + "description": "Success.", + "headers": {}, + "schema": { + "$ref": "#/definitions/v1.isp.ProductResponse" + } + }, + "400": { + "description": "Bad request. Returned when a required parameter is not present, badly formatted.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Too many requests received.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "createIspForVendorV1" + } + }, + "/v1/skills/{skillId}/stages/{stage}/inSkillProducts": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get the list of in-skill products for the skillId.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 100, + "minimum": 1 + } + ], + "responses": { + "200": { + "description": "Response contains list of in-skill products for the specified skillId and stage.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body.", + "enum": [ + "application/json" + ] + } + }, + "schema": { + "$ref": "#/definitions/v1.isp.ListInSkillProductResponse" + } + }, + "400": { + "description": "Bad request. Returned when a required parameter is not present, badly formatted.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "404": { + "description": "Requested resource not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Too many requests received.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getIspListForSkillIdV1" + } + }, + "/v1/inSkillProducts/{productId}/stages/{stage}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Returns the in-skill product definition for given productId.", + "parameters": [ + { + "name": "productId", + "in": "path", + "description": "The in-skill product ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Response contains the latest version of an in-skill product for the specified stage.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body.", + "enum": [ + "application/json" + ] + }, + "ETag": { + "type": "string", + "description": "Identifier for the version of the resource, can be used for conditional updates." + } + }, + "schema": { + "$ref": "#/definitions/v1.isp.InSkillProductDefinitionResponse" + } + }, + "400": { + "description": "Bad request. Returned when a required parameter is not present, badly formatted.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "404": { + "description": "Requested resource not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Too many requests received.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getIspDefinitionV1" + }, + "put": { + "tags": [ + "skillManagement" + ], + "description": "Updates in-skill product definition for given productId. Only development stage supported.", + "parameters": [ + { + "name": "If-Match", + "in": "header", + "description": "Request header that specified an entity tag. The server will update the resource only if the eTag matches with the resource's current eTag.", + "required": false, + "type": "string" + }, + { + "name": "productId", + "in": "path", + "description": "The in-skill product ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + }, + { + "in": "body", + "name": "updateInSkillProductRequest", + "description": "defines the request body for updateInSkillProduct API.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.isp.updateInSkillProductRequest" + } + } + ], + "responses": { + "204": { + "description": "Success.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body.", + "enum": [ + "application/json" + ] + } + } + }, + "400": { + "description": "Bad request. Returned when a required parameter is not present, badly formatted.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "Request is forbidden.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "Requested resource not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "412": { + "description": "Precondition failed.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Too many requests received.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "updateIspForProductV1" + }, + "delete": { + "tags": [ + "skillManagement" + ], + "description": "Deletes the in-skill product for given productId. Only development stage supported. Live in-skill products or in-skill products associated with a skill cannot be deleted by this API.", + "parameters": [ + { + "name": "productId", + "in": "path", + "description": "The in-skill product ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + }, + { + "name": "If-Match", + "in": "header", + "description": "Request header that specified an entity tag. The server will update the resource only if the eTag matches with the resource's current eTag.", + "required": false, + "type": "string" + } + ], + "responses": { + "204": { + "description": "Success. No content.", + "headers": {} + }, + "400": { + "description": "Bad request. Returned when a required parameter is not present, badly formatted.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "Request is forbidden.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "Requested resource not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "412": { + "description": "Precondition failed.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Too many requests received.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "deleteIspForProductV1" + } + }, + "/v1/inSkillProducts/{productId}/stages/{stage}/summary": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get the summary information for an in-skill product.", + "parameters": [ + { + "name": "productId", + "in": "path", + "description": "The in-skill product ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Returns current in-skill product summary for productId.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body.", + "enum": [ + "application/json" + ] + }, + "ETag": { + "type": "string", + "description": "Identifier for the version of the resource, can be used for conditional updates." + } + }, + "schema": { + "$ref": "#/definitions/v1.isp.InSkillProductSummaryResponse" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "404": { + "description": "Requested resource not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Too many requests received.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getIspSummaryV1" + } + }, + "/v1/inSkillProducts/{productId}/stages/{stage}/skills": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get the associated skills for the in-skill product.", + "parameters": [ + { + "name": "productId", + "in": "path", + "description": "The in-skill product ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 100, + "minimum": 1 + } + ], + "responses": { + "200": { + "description": "Returns skills associated with the in-skill product.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body.", + "enum": [ + "application/json" + ] + } + }, + "schema": { + "$ref": "#/definitions/v1.isp.AssociatedSkillResponse" + } + }, + "400": { + "description": "Bad request. Returned when a required parameter is not present, badly formatted.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "404": { + "description": "Requested resource not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Too many requests received.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getIspAssociatedSkillsV1" + } + }, + "/v1/inSkillProducts/{productId}/skills/{skillId}": { + "put": { + "tags": [ + "skillManagement" + ], + "description": "Associates an in-skill product with a skill.", + "parameters": [ + { + "name": "productId", + "in": "path", + "description": "The in-skill product ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "204": { + "description": "Success. No content.", + "headers": {} + }, + "400": { + "description": "Bad request. Returned when a required parameter is not present, badly formatted.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "Request is forbidden.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "Requested resource not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Too many requests received.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "associateIspWithSkillV1" + }, + "delete": { + "tags": [ + "skillManagement" + ], + "description": "Disassociates an in-skill product from a skill.", + "parameters": [ + { + "name": "productId", + "in": "path", + "description": "The in-skill product ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "204": { + "description": "Success. No content.", + "headers": {} + }, + "400": { + "description": "Bad request. Returned when a required parameter is not present, badly formatted.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "Request is forbidden.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "Requested resource not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Too many requests received.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "disassociateIspWithSkillV1" + } + }, + "/v1/inSkillProducts/{productId}/stages/{stage}/entitlement": { + "delete": { + "tags": [ + "skillManagement" + ], + "description": "Resets the entitlement(s) of the Product for the current user.", + "parameters": [ + { + "name": "productId", + "in": "path", + "description": "The in-skill product ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + } + ], + "responses": { + "204": { + "description": "Success. No content.", + "headers": {} + }, + "400": { + "description": "Bad request. Returned when a required parameter is not present, badly formatted.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "Request is forbidden.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "Requested resource not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "412": { + "description": "Precondition failed.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Too many requests received.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "resetEntitlementForProductV1" + } + }, + "/v1/skills/{skillId}/stages/{stageV2}/accountLinkingClient": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get AccountLinking information for the skill.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stageV2", + "in": "path", + "description": "Stages of a skill including the new certified stage.\n* `development` - skills which are currently in development corresponds to this stage.\n* `certified` - skills which have completed certification and ready for publishing corresponds to this stage.\n* `live` - skills which are currently live corresponds to this stage.\n", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Returns AccountLinking response of the skill.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + }, + "ETag": { + "type": "string", + "description": "Identifer for the version of the resource, can be used for conditional updates." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.accountLinking.AccountLinkingResponse" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getAccountLinkingInfoV1" + }, + "put": { + "tags": [ + "skillManagement" + ], + "description": "Create AccountLinking information for the skill.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stageV2", + "in": "path", + "description": "Stages of a skill including the new certified stage.\n* `development` - skills which are currently in development corresponds to this stage.\n* `certified` - skills which have completed certification and ready for publishing corresponds to this stage.\n* `live` - skills which are currently live corresponds to this stage.\n", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "accountLinkingRequest", + "description": "The fields required to create accountLinking partner.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.accountLinking.AccountLinkingRequest" + } + }, + { + "name": "If-Match", + "in": "header", + "description": "Request header that specified an entity tag. The server will update the resource only if the eTag matches with the resource's current eTag.", + "required": false, + "type": "string" + } + ], + "responses": { + "204": { + "description": "Success", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only 'application/json' supported.", + "enum": ["text/plain"] + }, + "ETag": { + "type": "string", + "description": "Identifer for the updated version of the resource, can be used for conditional updates." + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error e.g. Authorization Url is invalid.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "412": { + "description": "Precondition failed.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "updateAccountLinkingInfoV1" + }, + "delete": { + "tags": [ + "skillManagement" + ], + "description": "Delete AccountLinking information of a skill for the given stage.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stageV2", + "in": "path", + "description": "Stages of a skill including the new certified stage.\n* `development` - skills which are currently in development corresponds to this stage.\n* `certified` - skills which have completed certification and ready for publishing corresponds to this stage.\n* `live` - skills which are currently live corresponds to this stage.\n", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "Success. No content.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only \"application/json\" supported", + "enum":["text/plain"] + } + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified skill/stage/accountLinkingClient doesn't exist.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "deleteAccountLinkingInfoV1" + } + }, + "/v1/skills/{skillId}/alexaHosted/repository/credentials/generate": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "Generates hosted skill repository credentials to access the hosted skill repository.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "hostedSkillRepositoryCredentialsRequest", + "description": "defines the request body for hosted skill repository credentials", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.AlexaHosted.HostedSkillRepositoryCredentialsRequest" + } + } + ], + "responses": { + "200": { + "description": "Response contains the hosted skill repository credentials", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only \"application/json\" supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.AlexaHosted.HostedSkillRepositoryCredentialsList" + } + }, + "400": { + "description": "Server cannot process the request due to a client error e.g. Authorization Url is invalid", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "generateCredentialsForAlexaHostedSkillV1" + } + }, + "/v1/skills/{skillId}/alexaHosted": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get Alexa hosted skill's metadata", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "response contains the Alexa hosted skill's metadata", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only \"application/json\" supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.AlexaHosted.HostedSkillMetadata" + } + }, + "400": { + "description": "Server cannot process the request due to a client error e.g. Authorization Url is invalid", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getAlexaHostedSkillMetadataV1" + } + }, + "/v1/vendors/{vendorId}/alexaHosted/permissions/{hostedSkillPermissionType}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get the current user permissions about Alexa hosted skill features.", + "parameters": [ + { + "name": "vendorId", + "in": "path", + "description": "vendorId", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "hostedSkillPermissionType", + "in": "path", + "description": "The permission of a hosted skill feature that customer needs to check.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "response contains the user's permission of hosted skill features", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only \"application/json\" supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.AlexaHosted.HostedSkillPermission" + } + }, + "400": { + "description": "Server cannot process the request due to a client error e.g. Authorization Url is invalid", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getAlexaHostedSkillUserPermissionsV1" + } + }, + "/v1/skills/{skillId}/betaTest": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "Get beta test.", + "description": "Get beta test for a given Alexa skill.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Success.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Content type of the response; only application/json supported.", + "enum":["text/plain"] + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.betaTest.BetaTest" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "409": { + "description": "Thrown if user tries to request a new simulation while the old simulation is in progress.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getBetaTestV1" + }, + "post": { + "tags": [ + "skillManagement" + ], + "summary": "Create beta test.", + "description": "Create a beta test for a given Alexa skill.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "createTestBody", + "description": "JSON object containing the details of a beta test used to create the test.", + "required": false, + "schema": { + "$ref": "#/definitions/v1.skill.betaTest.TestBody" + } + } + ], + "responses": { + "201": { + "description": "Success. Return a URL to track the resource in 'Location' header.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Content type of the response; only application/json supported.", + "enum": ["text/plain"] + }, + "Location": { + "type": "string", + "description": "Relative URL to get the resource." + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "createBetaTestV1" + }, + "put": { + "tags": [ + "skillManagement" + ], + "summary": "Update beta test.", + "description": "Update a beta test for a given Alexa skill.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "createTestBody", + "description": "JSON object containing the details of a beta test used to create the test.", + "required": false, + "schema": { + "$ref": "#/definitions/v1.skill.betaTest.TestBody" + } + } + ], + "responses": { + "204": { + "description": "Success. No content.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Content type of the response; only application/json supported.", + "enum": ["text/plain"] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "409": { + "description": "Thrown if user tries to request a new simulation while the old simulation is in progress.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "updateBetaTestV1" + } + }, + "/v1/skills/{skillId}/betaTest/start": { + "post": { + "tags": [ + "skillManagement" + ], + "summary": "Start beta test", + "description": "Start a beta test for a given Alexa skill. System will send invitation emails to each tester in the test, and add entitlement on the acceptance.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "202": { + "description": "Accept. Return a URL to track the resource in 'Location' header.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Content type of the response; only application/json supported.", + "enum":["text/plain"] + }, + "Location": { + "type": "string", + "description": "Relative URL to get the resource." + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "startBetaTestV1" + } + }, + "/v1/skills/{skillId}/betaTest/end": { + "post": { + "tags": [ + "skillManagement" + ], + "summary": "End beta test.", + "description": "End a beta test for a given Alexa skill. System will revoke the entitlement of each tester and send access-end notification email to them.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "202": { + "description": "Accept. Return a URL to track the resource in 'Location' header.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Content type of the response; only application/json supported.", + "enum":["text/plain"] + }, + "Location": { + "type": "string", + "description": "Relative URL to get the resource." + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "endBetaTestV1" + } + }, + "/v1/skills/{skillId}/betaTest/testers": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "List testers.", + "description": "List all testers in a beta test for the given Alexa skill.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 500 results, you can add this parameter to your request. The response might contain fewer results than maxResults, but it will never contain more.", + "required": false, + "type": "integer", + "maximum": 500, + "minimum": 1 + } + ], + "responses": { + "200": { + "description": "Success.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Content type of the response; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.betaTest.testers.ListTestersResponse" + } + }, + "400": { + "description": "Bad request.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getListOfTestersV1" + } + }, + "/v1/skills/{skillId}/betaTest/testers/add": { + "post": { + "tags": [ + "skillManagement" + ], + "summary": "Add testers to an existing beta test.", + "description": "Add testers to a beta test for the given Alexa skill. System will send invitation email to each tester and add entitlement on the acceptance.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "TestersRequest", + "description": "JSON object containing the email address of beta testers.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.betaTest.testers.TestersList" + } + } + ], + "responses": { + "204": { + "description": "Success. No content.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Content type of the response; only application/json supported.", + "enum":["text/plain"] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "addTestersToBetaTestV1" + } + }, + "/v1/skills/{skillId}/betaTest/testers/remove": { + "post": { + "tags": [ + "skillManagement" + ], + "summary": "Remove testers from an existing beta test.", + "description": "Remove testers from a beta test for the given Alexa skill. System will send access end email to each tester and remove entitlement for them.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "TestersRequest", + "description": "JSON object containing the email address of beta testers.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.betaTest.testers.TestersList" + } + } + ], + "responses": { + "204": { + "description": "Success. No content.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Content type of the response; only application/json supported.", + "enum": ["text/plain"] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "removeTestersFromBetaTestV1" + } + }, + "/v1/skills/{skillId}/betaTest/testers/sendReminder": { + "post": { + "tags": [ + "skillManagement" + ], + "summary": "Send reminder to testers in a beta test.", + "description": "Send reminder to the testers in a beta test for the given Alexa skill. System will send invitation email to each tester and add entitlement on the acceptance.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "TestersRequest", + "description": "JSON object containing the email address of beta testers.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.betaTest.testers.TestersList" + } + } + ], + "responses": { + "204": { + "description": "Success. No content.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Content type of the response; only application/json supported.", + "enum": ["text/plain"] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "sendReminderToTestersV1" + } + }, + "/v1/skills/{skillId}/betaTest/testers/requestFeedback": { + "post": { + "tags": [ + "skillManagement" + ], + "summary": "Request feedback from testers.", + "description": "Request feedback from the testers in a beta test for the given Alexa skill. System will send notification emails to testers to request feedback.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "TestersRequest", + "description": "JSON object containing the email address of beta testers.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.betaTest.testers.TestersList" + } + } + ], + "responses": { + "204": { + "description": "Success. No content.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Content type of the response; only application/json supported.", + "enum": [ + "text/plain" + ] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "requestFeedbackFromTestersV1" + } + }, + "/v1/skills/{skillId}/stages/{stageV2}/blueprint/details": {}, + "/v1/skills/{skillId}/stages/{stageV2}/blueprint/data/locales/{locale}": {}, + "/v1/blueprints/{blueprintId}/versions/{blueprintVersion}/skills": {}, + "/v1/skills/{skillId}/certifications": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get list of all certifications available for a skill, including information about past certifications and any ongoing certification. The default sort order is descending on skillSubmissionTimestamp for Certifications.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + } + ], + "responses": { + "200": { + "description": "Returns list of certifications for the skillId.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body. only application/hal+json supported.", + "enum": [ + "application/hal+json", + "text/plain" + ] + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.certification.ListCertificationsResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error e.g. if any request parameter is invalid like certification Id or pagination token etc. If the maxResults is not in the range of 1 to 50, it also qualifies for this error.\n", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body. Only application/json supported.", + "enum": [ + "application/json" + ] + }, + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. Only en-US, ja-JP supported for this API currently.\n" + } + }, + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body. Only application/json supported.", + "enum": [ + "application/json" + ] + }, + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. Only en-US, ja-JP supported for this API currently.\n" + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "404": { + "description": "The resource being requested is not found.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body. Only application/json supported.", + "enum": [ + "application/json" + ] + }, + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. Only en-US, ja-JP supported for this API currently.\n" + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceeded the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.\n", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body. Only application/json supported.", + "enum": [ + "application/json" + ] + }, + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. Only en-US, ja-JP supported for this API currently.\n" + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body. Only application/json supported.", + "enum": [ + "application/json" + ] + }, + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. Only en-US, ja-JP supported for this API currently.\n" + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getCertificationsListV1" + } + }, + "/v1/skills/{skillId}/certifications/{certificationId}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Gets a specific certification resource. The response contains the review tracking information for a skill to show how much time the skill is expected to remain under review by Amazon. Once the review is complete, the response also contains the outcome of the review. Old certifications may not be available, however any ongoing certification would always give a response. If the certification is unavailable the result will return a 404 HTTP status code.\n", + "parameters": [ + { + "name": "Accept-Language", + "in": "header", + "description": "User's locale/language in context.", + "required": false, + "type": "string" + }, + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "certificationId", + "in": "path", + "description": "Id of the certification. Reserved word identifier of mostRecent can be used to get the most recent certification for the skill. Note that the behavior of the API in this case would be the same as when the actual certification id of the most recent certification is used in the request.\n", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Successfully retrieved skill certification information.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body. Only application/json supported.", + "enum": [ + "application/json" + ] + }, + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. Only en-US, ja-JP supported for this API currently.\n" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.certification.CertificationResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error e.g. if any request parameter is invalid like certification Id or pagination token etc. If the maxResults is not in the range of 1 to 50, it also qualifies for this error.\n", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body. Only application/json supported.", + "enum": [ + "application/json" + ] + }, + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. Only en-US, ja-JP supported for this API currently.\n" + } + }, + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body. Only application/json supported.", + "enum": [ + "application/json" + ] + }, + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. Only en-US, ja-JP supported for this API currently.\n" + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "404": { + "description": "The resource being requested is not found.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body. Only application/json supported.", + "enum": [ + "application/json" + ] + }, + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. Only en-US, ja-JP supported for this API currently.\n" + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceeded the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.\n", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body. only application/json supported", + "enum": [ + "application/json" + ] + }, + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. Only en-US, ja-JP supported for this API currently.\n" + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body. Only application/json supported.", + "enum": [ + "application/json" + ] + }, + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. Only en-US, ja-JP supported for this API currently.\n" + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getCertificationReviewV1" + } + }, + "/v1/skills/{skillId}/stages/{stage}/enablement": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Checks whether an enablement exist for given skillId/stage and customerId (retrieved from Auth token)", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + } + ], + "responses": { + "204": { + "description": "No Content; Confirms that enablement resource exists for given skillId & stage.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Contains content type of the response; only application/json supported.", + "enum": ["text/plain"] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getSkillEnablementStatusV1" + }, + "put": { + "tags": [ + "skillManagement" + ], + "description": "Creates/Updates the enablement for given skillId/stage and customerId (retrieved from Auth token)", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + } + ], + "responses": { + "204": { + "description": "No Content; Confirms that enablement is successfully created/updated.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Contains content type of the response; only application/json supported.", + "enum": ["text/plain"] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "setSkillEnablementV1" + }, + "delete": { + "tags": [ + "skillManagement" + ], + "description": "Deletes the enablement for given skillId/stage and customerId (retrieved from Auth token).", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + } + ], + "responses": { + "204": { + "description": "No Content; Confirms that enablement is successfully deleted.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Contains content type of the response; only application/json supported.", + "enum": ["text/plain"] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "deleteSkillEnablementV1" + } + }, + "/v1/skills/{skillId}/stages/{stage}/interactionModel/locales/{locale}/profileNlu": { + "post": { + "tags": [ + "skillManagement" + ], + "summary": "Profile a test utterance.", + "description": "This is a synchronous API that profiles an utterance against interaction model.", + "parameters": [ + { + "in": "body", + "name": "profileNluRequest", + "description": "Payload sent to the profile nlu API.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.evaluations.ProfileNluRequest" + } + }, + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + }, + { + "name": "locale", + "in": "path", + "description": "The locale for the model requested e.g. en-GB, en-US, de-DE.", + "required": true, + "type": "string", + "format": "languager-region; same as BCP-47 language tag format" + } + ], + "responses": { + "200": { + "description": "Profiled utterance against interaction model and returned nlu response successfully.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.evaluations.ProfileNluResponse" + } + }, + "400": { + "description": "Bad request due to invalid or missing data.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "409": { + "description": "This requests conflicts with another one currently being processed.\n", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "API user has exceeded the permitted request rate.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal service error.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + } + } + }, + "x-operation-name": "profileNluV1" + } + }, + "/v1/skills/{skillId}/experiments": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Gets a list of all experiments associated with this skill id.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + } + ], + "responses": { + "200": { + "description": "Returned skill experiments.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only 'application/json' supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.experiment.ListExperimentsResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "listExperimentsV1" + }, + "post": { + "tags": [ + "skillManagement" + ], + "description": "Create a new experiment for a skill.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "createExperimentRequest", + "description": "Defines the request body for creating an experiment.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.experiment.CreateExperimentRequest" + } + } + ], + "responses": { + "201": { + "description": "Experiment created. Returns the generated experiment identifier in 'Location' header.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Content type of the response; only application/json supported.", + "enum": ["text/plain"] + }, + "Location": { + "type": "string", + "description": "Relative url to get experiment details." + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "createExperimentV1" + } + }, + "/v1/skills/{skillId}/experiments/{experimentId}/properties": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "Updates an existing experiment for a skill.\nCan only be called while the experiment is in CREATED state.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "experimentId", + "in": "path", + "description": "Identifies the experiment in a skill.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "updateExperimentRequest", + "description": "Defines the request body for updating an experiment.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.experiment.UpdateExperimentRequest" + } + } + ], + "responses": { + "204": { + "description": "Success. No content.", + "headers": {} + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "updateExperimentV1" + } + }, + "/v1/skills/{skillId}/experiments/{experimentId}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Retrieves an existing experiment for a skill.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "experimentId", + "in": "path", + "description": "Identifies the experiment in a skill.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Returned skill experiment.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only 'application/json' supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.experiment.GetExperimentResponse" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getExperimentV1" + }, + "delete": { + "tags": [ + "skillManagement" + ], + "description": "Deletes an existing experiment for a skill.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "experimentId", + "in": "path", + "description": "Identifies the experiment in a skill.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "204": { + "description": "Success. No content.", + "headers": {} + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "deleteExperimentV1" + } + }, + "/v1/skills/{skillId}/experiments/{experimentId}/exposurePercentage": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "Updates the exposure of an experiment that is in CREATED or RUNNING state.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "experimentId", + "in": "path", + "description": "Identifies the experiment in a skill.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "updateExposureRequest", + "description": "Defines the request body for updating the exposure percentage of a running experiment.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.experiment.UpdateExposureRequest" + } + } + ], + "responses": { + "204": { + "description": "Success. No content.", + "headers": {} + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "updateExposureV1" + } + }, + "/v1/skills/{skillId}/experiments/{experimentId}/treatmentOverrides/~current": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Retrieves the current user's customer treatment override for an existing A/B Test experiment.\nThe current user must be under the same skill vendor of the requested skill id to have access to the resource.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "experimentId", + "in": "path", + "description": "Identifies the experiment in a skill.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Returned customer treatment override details.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only 'application/json' supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.experiment.GetCustomerTreatmentOverrideResponse" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getCustomerTreatmentOverrideV1" + }, + "put": { + "tags": [ + "skillManagement" + ], + "description": "Adds the requesting user's customer treatment override to an existing experiment.\nThe current user must be under the same skill vendor of the requested skill id to have access to the resource.\nOnly the current user can attempt to add the override of their own customer account to an experiment.\nCan only be called before the experiment is enabled.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "experimentId", + "in": "path", + "description": "Identifies the experiment in a skill.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "setCustomerTreatmentOverrideRequest", + "description": "Defines the request body for adding this customer's treatment override to an experiment.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.experiment.SetCustomerTreatmentOverrideRequest" + } + } + ], + "responses": { + "204": { + "description": "Success. No content.", + "headers": {} + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "setCustomerTreatmentOverrideV1" + } + }, + "/v1/skills/{skillId}/experiments/{experimentId}/state": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Retrieves the current state of the experiment.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "experimentId", + "in": "path", + "description": "Identifies the experiment in a skill.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Returned skill experiment state.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only 'application/json' supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.experiment.GetExperimentStateResponse" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getExperimentStateV1" + }, + "post": { + "tags": [ + "skillManagement" + ], + "description": "Requests an action on the experiment to move it to the targetState.\nAcceptable targetState values are:\n* `ENABLED`: Experiment configurations are deployed and customer overrides are enabled. Actual experiment has not started yet but customers with overrides set to T1 will see the T1 behavior. Initial state must be CREATED.\n* `RUNNING`: Starts the experiment with the configured exposure. Skill customers selected to be in the experiment will start contributing to the metric data. Initial state must be CREATED or ENABLED.\n* `STOPPED`: Stops the experiment by removing the experiment configurations. All customer treatment overrides are removed. Initial state must be ENABLED or RUNNING.\n Final state for ENDPOINT_BASED experiments, no further action is taken by ASK. It is expected that the skill builder updates their endpoint code to make T1 the default live behavior.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "experimentId", + "in": "path", + "description": "Identifies the experiment in a skill.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "manageExperimentStateRequest", + "description": "Defines the request body for performing an experiment action to move it to a target state.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.experiment.ManageExperimentStateRequest" + } + } + ], + "responses": { + "202": { + "description": "Accepted; Returns a URL to track the experiment state in 'Location' header.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Contains content type of the response; only application/json supported.", + "enum":["text/plain"] + }, + "Location": { + "type": "string", + "description": "Contains relative URL to get experiment state." + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "manageExperimentStateV1" + } + }, + "/v1/skills/{skillId}/experiments/{experimentId}/metricSnapshots": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Gets a list of all metric snapshots associated with this experiment id. The metric snapshots\nrepresent the metric data available for a time range.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "experimentId", + "in": "path", + "description": "Identifies the experiment in a skill.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + } + ], + "responses": { + "200": { + "description": "Returned experiment metric snapshots.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only 'application/json' supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.experiment.ListExperimentMetricSnapshotsResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "listExperimentMetricSnapshotsV1" + } + }, + "/v1/skills/{skillId}/experiments/{experimentId}/metricSnapshots/{metricSnapshotId}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Gets a list of all metric data associated with this experiment's metric snapshot.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "experimentId", + "in": "path", + "description": "Identifies the experiment in a skill.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "metricSnapshotId", + "in": "path", + "description": "Identifies the experiment metric snapshot in a skill experiment. The metric snapshot\nrepresents metric data for a date range.\n", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Returned experiment metric data.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only 'application/json' supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.experiment.GetExperimentMetricSnapshotResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getExperimentMetricSnapshotV1" + } + }, + "/v1/skills/{skillId}/history/intentRequests": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "The Intent Request History API provides customers with the aggregated and anonymized transcription of user speech data and intent request details for their skills.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + { + "name": "sortDirection", + "in": "query", + "description": "Sets the sorting direction of the result items. When set to 'asc' these items are returned in ascending order of sortField value and when set to 'desc' these items are returned in descending order of sortField value.", + "required": false, + "type": "string" + }, + { + "name": "sortField", + "in": "query", + "description": "Sets the field on which the sorting would be applied.", + "required": false, + "type": "string" + }, + { + "name": "stage", + "in": "query", + "description": "The stage of the skill to be used for evaluation. An error will be returned if this skill stage is not enabled on the account used for evaluation.", + "required": true, + "type": "string", + "enum": [ + "development", + "live" + ] + }, + { + "name": "locale", + "in": "query", + "required": false, + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.history.localeInQuery" + } + }, + { + "name": "dialogAct.name", + "in": "query", + "description": "A filter used to retrieve items where the dialogAct name is equal to the given value.\n* `Dialog.ElicitSlot`: Alexa asked the user for the value of a specific slot. (https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#elicitslot)\n* `Dialog.ConfirmSlot`: Alexa confirmed the value of a specific slot before continuing with the dialog. (https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#confirmslot)\n* `Dialog.ConfirmIntent`: Alexa confirmed the all the information the user has provided for the intent before the skill took action. (https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#confirmintent)\n", + "required": false, + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.history.DialogActName" + } + }, + { + "name": "intent.confidence.bin", + "in": "query", + "required": false, + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.history.IntentConfidenceBin" + } + }, + { + "name": "intent.name", + "in": "query", + "description": "A filter used to retrieve items where the intent name is equal to the given value.", + "required": false, + "type": "array", + "items": { + "type": "string" + } + }, + { + "name": "intent.slots.name", + "in": "query", + "description": "A filter used to retrieve items where the one of the slot names is equal to the given value.", + "required": false, + "type": "array", + "items": { + "type": "string" + } + }, + { + "name": "interactionType", + "in": "query", + "required": false, + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.history.InteractionType" + } + }, + { + "name": "publicationStatus", + "in": "query", + "required": false, + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.history.PublicationStatus" + } + }, + { + "name": "utteranceText", + "in": "query", + "description": "A filter used to retrieve items where the utterance text contains the given phrase. Each filter value can be at-least 1 character and at-most 100 characters long.", + "required": false, + "type": "array", + "items": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns a list of utterance items for the given skill.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/json+hal supported" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.history.IntentRequests" + } + }, + "400": { + "description": "Bad Request.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "Unauthorized.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "404": { + "description": "Skill Not Found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getUtteranceDataV1" + } + }, + "/v1/skills/{skillId}/stages/{stageV2}/interactionModel/locales/{locale}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Gets the `InteractionModel` for the skill in the given stage.\nThe path params **skillId**, **stage** and **locale** are required.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stageV2", + "in": "path", + "description": "Stages of a skill including the new certified stage.\n* `development` - skills which are currently in development corresponds to this stage.\n* `certified` - skills which have completed certification and ready for publishing corresponds to this stage.\n* `live` - skills which are currently live corresponds to this stage.\n", + "required": true, + "type": "string" + }, + { + "name": "locale", + "in": "path", + "description": "The locale for the model requested e.g. en-GB, en-US, de-DE.", + "required": true, + "type": "string", + "format": "languager-region; same as BCP-47 language tag format" + } + ], + "responses": { + "200": { + "description": "Returns interaction model object on success.", + "headers": { + "ETag": { + "type": "string", + "description": "Identifer for the version of the resource, can be used for conditional updates." + }, + "Content-Type": { + "type": "string", + "description": "Returned content type, only 'application/json' supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.InteractionModelData" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified skill doesn't exist or there is no model defined for the locale.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getInteractionModelV1" + }, + "head": { + "tags": [ + "skillManagement" + ], + "description": "Get the latest metadata for the interaction model resource for the given stage.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stageV2", + "in": "path", + "description": "Stages of a skill including the new certified stage.\n* `development` - skills which are currently in development corresponds to this stage.\n* `certified` - skills which have completed certification and ready for publishing corresponds to this stage.\n* `live` - skills which are currently live corresponds to this stage.\n", + "required": true, + "type": "string" + }, + { + "name": "locale", + "in": "path", + "description": "The locale for the model requested e.g. en-GB, en-US, de-DE.", + "required": true, + "type": "string", + "format": "languager-region; same as BCP-47 language tag format" + } + ], + "responses": { + "204": { + "description": "Success. There is no content but returns etag.", + "headers": { + "ETag": { + "type": "string", + "description": "Identifer for the version of the resource, can be used for conditional updates" + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified skill or stage or locale does not exist", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getInteractionModelMetadataV1" + }, + "put": { + "tags": [ + "skillManagement" + ], + "description": "Creates an `InteractionModel` for the skill.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stageV2", + "in": "path", + "description": "Stages of a skill including the new certified stage.\n* `development` - skills which are currently in development corresponds to this stage.\n* `certified` - skills which have completed certification and ready for publishing corresponds to this stage.\n* `live` - skills which are currently live corresponds to this stage.\n", + "required": true, + "type": "string" + }, + { + "name": "locale", + "in": "path", + "description": "The locale for the model requested e.g. en-GB, en-US, de-DE.", + "required": true, + "type": "string", + "format": "languager-region; same as BCP-47 language tag format" + }, + { + "in": "body", + "name": "interactionModel", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.InteractionModelData" + } + }, + { + "name": "If-Match", + "in": "header", + "description": "Request header that specified an entity tag. The server will update the resource only if the eTag matches with the resource's current eTag.", + "required": false, + "type": "string" + } + ], + "responses": { + "202": { + "description": "Returns build status location link on success.", + "headers": { + "Location": { + "type": "string", + "description": "Build status URL." + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error e.g. the input interaction model is invalid.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified skill or stage or locale does not exist.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "412": { + "description": "Precondition failed.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "setInteractionModelV1" + } + }, + "/v1/skills/api/custom/interactionModel/catalogs": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "List all catalogs for the vendor.\n", + "parameters": [ + { + "name": "vendorId", + "in": "query", + "description": "The vendor ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "sortDirection", + "in": "query", + "description": "Sets the sorting direction of the result items. When set to 'asc' these items are returned in ascending order of sortField value and when set to 'desc' these items are returned in descending order of sortField value.", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Returns list of catalogs for the vendor.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.catalog.ListCatalogResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "There is no catalog defined for the catalogId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "listInteractionModelCatalogsV1" + }, + "post": { + "tags": [ + "skillManagement" + ], + "description": "Create a new version of catalog within the given catalogId.\n", + "parameters": [ + { + "in": "body", + "name": "catalog", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.catalog.DefinitionData" + } + } + ], + "responses": { + "200": { + "description": "Returns the generated catalogId.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.catalog.CatalogResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error e.g. the catalog definition is invalid.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "412": { + "description": "Precondition failed.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "createInteractionModelCatalogV1" + } + }, + "/v1/skills/api/custom/interactionModel/catalogs/{catalogId}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "get the catalog definition\n", + "parameters": [ + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + } + ], + "responses": { + "200": { + "description": "the catalog definition", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.catalog.CatalogDefinitionOutput" + } + }, + "400": { + "description": "The catalog cannot be retrieved due to errors listed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "There is no catalog defined for the catalogId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getInteractionModelCatalogDefinitionV1" + }, + "delete": { + "tags": [ + "skillManagement" + ], + "description": "Delete the catalog.\n", + "parameters": [ + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + } + ], + "responses": { + "204": { + "description": "No content; just confirm the catalog is deleted.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported.", + "enum": ["text/plain"] + } + } + }, + "400": { + "description": "The catalog cannot be deleted from reasons due to in-use by other entities.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "There is no catalog defined for the catalogId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "deleteInteractionModelCatalogV1" + } + }, + "/v1/skills/api/custom/interactionModel/catalogs/{catalogId}/updateRequest/{updateRequestId}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get the status of catalog resource and its sub-resources for a given catalogId.\n", + "parameters": [ + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + }, + { + "name": "updateRequestId", + "in": "path", + "description": "The identifier for slotType version creation process", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Returns the build status and error codes for the given catalogId", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.catalog.CatalogStatus" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "There is no catalog defined for the catalogId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getInteractionModelCatalogUpdateStatusV1" + } + }, + "/v1/skills/api/custom/interactionModel/catalogs/{catalogId}/update": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "update description and vendorGuidance string for certain version of a catalog.\n", + "parameters": [ + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + }, + { + "in": "body", + "name": "updateRequest", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.catalog.UpdateRequest" + } + } + ], + "responses": { + "204": { + "description": "No content, indicates the fields were successfully updated." + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "There is no catalog defined for the catalogId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "updateInteractionModelCatalogV1" + } + }, + "/v1/skills/{skillId}/stages/{stage}/interactionModel/locales/{locale}/versions/{version}/conflictDetectionJobStatus": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "Retrieve conflict detection job status for skill.", + "description": "This API returns the job status of conflict detection job for a specified interaction model.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "locale", + "in": "path", + "description": "The locale for the model requested e.g. en-GB, en-US, de-DE.", + "required": true, + "type": "string", + "format": "languager-region; same as BCP-47 language tag format" + }, + { + "name": "stage", + "in": "path", + "description": "Stage of the interaction model.", + "required": true, + "type": "string", + "enum": [ + "development" + ] + }, + { + "name": "version", + "in": "path", + "description": "Version of interaction model. Use \"~current\" to get the model of the current version.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Get conflict detection results successfully.", + "headers": { + "Content-Type": { + "type": "string", + "description": "returned content type, only application/json supported" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.conflictDetection.GetConflictDetectionJobStatusResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "There is no catalog defined for the catalogId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getConflictDetectionJobStatusForInteractionModelV1" + } + }, + "/v1/skills/{skillId}/stages/{stage}/interactionModel/locales/{locale}/versions/{version}/conflicts": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "Retrieve conflict detection results for a specified interaction model.", + "description": "This is a paginated API that retrieves results of conflict detection job for a specified interaction model.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "locale", + "in": "path", + "description": "The locale for the model requested e.g. en-GB, en-US, de-DE.", + "required": true, + "type": "string", + "format": "languager-region; same as BCP-47 language tag format" + }, + { + "name": "stage", + "in": "path", + "description": "Stage of the interaction model.", + "required": true, + "type": "string", + "enum": [ + "development" + ] + }, + { + "name": "version", + "in": "path", + "description": "Version of interaction model. Use \"~current\" to get the model of the current version.", + "required": true, + "type": "string" + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. Defaults to 100. If more results are present, the response will contain a nextToken and a _link.next href.", + "required": false, + "type": "number", + "default": 100, + "maximum": 1000, + "minimum": 1 + } + ], + "responses": { + "200": { + "description": "Get conflict detection results sucessfully.", + "headers": { + "Content-Type": { + "type": "string", + "description": "returned content type, only application/json supported" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.conflictDetection.GetConflictsResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "There is no catalog defined for the catalogId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getConflictsForInteractionModelV1" + } + }, + "/v1/skills/api/custom/interactionModel/catalogs/{catalogId}/versions": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "List all the historical versions of the given catalogId.", + "parameters": [ + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "sortDirection", + "in": "query", + "description": "Sets the sorting direction of the result items. When set to 'asc' these items are returned in ascending order of sortField value and when set to 'desc' these items are returned in descending order of sortField value.", + "required": false, + "type": "string" + }, + { + "name": "sortField", + "in": "query", + "description": "Sets the field on which the sorting would be applied.", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Returns list of catalogs for the vendor.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.version.ListCatalogEntityVersionsResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error e.g. the catalog definition is invalid.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified catalog does not exist.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "listInteractionModelCatalogVersionsV1" + }, + "post": { + "tags": [ + "skillManagement" + ], + "description": "Create a new version of catalog entity for the given catalogId.\n", + "parameters": [ + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + }, + { + "in": "body", + "name": "catalog", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.version.VersionData" + } + } + ], + "responses": { + "202": { + "description": "Returns update status location link on success.", + "headers": { + "Location": { + "type": "string", + "description": "The location of the catalog status to track." + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error e.g. the catalog definition is invalid.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified catalog does not exist.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "createInteractionModelCatalogVersionV1" + } + }, + "/v1/skills/api/custom/interactionModel/catalogs/{catalogId}/versions/{version}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get catalog version data of given catalog version.\n", + "parameters": [ + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + }, + { + "name": "version", + "in": "path", + "description": "Version for interaction model.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Returns the catalog version metadata for the given catalogId and version.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.version.CatalogVersionData" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "There is no catalog defined for the catalogId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getInteractionModelCatalogVersionV1" + }, + "delete": { + "tags": [ + "skillManagement" + ], + "description": "Delete catalog version.\n", + "parameters": [ + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + }, + { + "name": "version", + "in": "path", + "description": "Version for interaction model.", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "No Content; Confirms that version is successfully deleted." + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "There is no catalog version for this catalogId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "deleteInteractionModelCatalogVersionV1" + } + }, + "/v1/skills/api/custom/interactionModel/catalogs/{catalogId}/versions/{version}/update": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "Update description and vendorGuidance string for certain version of a catalog.\n", + "parameters": [ + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + }, + { + "name": "version", + "in": "path", + "description": "Version for interaction model.", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "catalogUpdate", + "required": false, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.version.catalogUpdate" + } + } + ], + "responses": { + "204": { + "description": "No Content; Confirms that version is successfully updated." + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "There is no catalog defined for the catalogId", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "updateInteractionModelCatalogVersionV1" + } + }, + "/v1/skills/api/custom/interactionModel/catalogs/{catalogId}/versions/{version}/values": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get catalog values from the given catalogId & version.\n", + "parameters": [ + { + "name": "catalogId", + "in": "path", + "description": "Provides a unique identifier of the catalog.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1, + "format": "Amazon Common Identifier" + }, + { + "name": "version", + "in": "path", + "description": "Version for interaction model.", + "required": true, + "type": "string" + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Returns list of catalog values for the given catalogId and version.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.version.CatalogValues" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "There is no catalog defined for the catalogId", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getInteractionModelCatalogValuesV1" + } + }, + "/v1/skills/{skillId}/stages/{stageV2}/interactionModel/locales/{locale}/versions/{version}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Gets the specified version `InteractionModel` of a skill for the vendor. Use `~current` as version parameter to get the current version model.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stageV2", + "in": "path", + "description": "Stages of a skill including the new certified stage.\n* `development` - skills which are currently in development corresponds to this stage.\n* `certified` - skills which have completed certification and ready for publishing corresponds to this stage.\n* `live` - skills which are currently live corresponds to this stage.\n", + "required": true, + "type": "string" + }, + { + "name": "locale", + "in": "path", + "description": "The locale for the model requested e.g. en-GB, en-US, de-DE.", + "required": true, + "type": "string", + "format": "languager-region; same as BCP-47 language tag format" + }, + { + "name": "version", + "in": "path", + "description": "Version for interaction model.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Returns interaction model object on success.", + "headers": { + "ETag": { + "type": "string", + "description": "Identifer for the version of the resource, can be used for conditional updates." + }, + "Content-Type": { + "type": "string", + "description": "Returned content type, only 'application/json' supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.InteractionModelData" + } + }, + "400": { + "description": "Server cannot process the request due to a client error e.g. the input interaction model is invalid.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified skill doesn't exist or there is no model defined for the locale or version.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getInteractionModelVersionV1" + } + }, + "/v1/skills/{skillId}/stages/{stageV2}/interactionModel/locales/{locale}/versions": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get the list of interactionModel versions of a skill for the vendor.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stageV2", + "in": "path", + "description": "Stages of a skill including the new certified stage.\n* `development` - skills which are currently in development corresponds to this stage.\n* `certified` - skills which have completed certification and ready for publishing corresponds to this stage.\n* `live` - skills which are currently live corresponds to this stage.\n", + "required": true, + "type": "string" + }, + { + "name": "locale", + "in": "path", + "description": "The locale for the model requested e.g. en-GB, en-US, de-DE.", + "required": true, + "type": "string", + "format": "languager-region; same as BCP-47 language tag format" + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + { + "name": "sortDirection", + "in": "query", + "description": "Sets the sorting direction of the result items. When set to 'asc' these items are returned in ascending order of sortField value and when set to 'desc' these items are returned in descending order of sortField value.", + "required": false, + "type": "string" + }, + { + "name": "sortField", + "in": "query", + "description": "Sets the field on which the sorting would be applied.", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Returns list of interactionModel versions of a skill for the vendor.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.version.ListResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error e.g. the input interaction model is invalid.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified skill doesn't exist or there is no model defined for the locale.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "listInteractionModelVersionsV1" + } + }, + "/v1/skills/api/custom/interactionModel/slotTypes": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "List all slot types for the vendor.\n", + "parameters": [ + { + "name": "vendorId", + "in": "query", + "description": "The vendor ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "sortDirection", + "in": "query", + "description": "Sets the sorting direction of the result items. When set to 'asc' these items are returned in ascending order of sortField value and when set to 'desc' these items are returned in descending order of sortField value.", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Returns list of slot types for the vendor.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.type.ListSlotTypeResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "listInteractionModelSlotTypesV1" + }, + "post": { + "tags": [ + "skillManagement" + ], + "description": "Create a new version of slot type within the given slotTypeId.\n", + "parameters": [ + { + "in": "body", + "name": "slotType", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.type.DefinitionData" + } + } + ], + "responses": { + "200": { + "description": "Returns the generated slotTypeId.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.type.SlotTypeResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error e.g. the slot type definition is invalid.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "createInteractionModelSlotTypeV1" + } + }, + "/v1/skills/api/custom/interactionModel/slotTypes/{slotTypeId}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get the slot type definition.\n", + "parameters": [ + { + "name": "slotTypeId", + "in": "path", + "description": "The identifier for a slot type.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "The slot type definition.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.type.SlotTypeDefinitionOutput" + } + }, + "400": { + "description": "The slot type cannot be retrieved due to errors listed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "There is no slot type defined for the slotTypeId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getInteractionModelSlotTypeDefinitionV1" + }, + "delete": { + "tags": [ + "skillManagement" + ], + "description": "Delete the slot type.\n", + "parameters": [ + { + "name": "slotTypeId", + "in": "path", + "description": "The identifier for a slot type.", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "No content; just confirm the slot type is deleted.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported.", + "enum": ["text/plain"] + } + } + }, + "400": { + "description": "The slot type cannot be deleted from reasons due to in-use by other entities.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "There is no slot type defined for the slotTypeId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "deleteInteractionModelSlotTypeV1" + } + }, + "/v1/skills/api/custom/interactionModel/slotTypes/{slotTypeId}/updateRequest/{updateRequestId}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get the status of slot type resource and its sub-resources for a given slotTypeId.\n", + "parameters": [ + { + "name": "slotTypeId", + "in": "path", + "description": "The identifier for a slot type.", + "required": true, + "type": "string" + }, + { + "name": "updateRequestId", + "in": "path", + "description": "The identifier for slotType version creation process", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Returns the build status and error codes for the given slotTypeId.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.type.SlotTypeStatus" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "There is no slot type defined for the slotTypeId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getInteractionModelSlotTypeBuildStatusV1" + } + }, + "/v1/skills/api/custom/interactionModel/slotTypes/{slotTypeId}/update": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "Update description and vendorGuidance string for certain version of a slot type.\n", + "parameters": [ + { + "name": "slotTypeId", + "in": "path", + "description": "The identifier for a slot type.", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "updateRequest", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.type.UpdateRequest" + } + } + ], + "responses": { + "204": { + "description": "No content, indicates the fields were successfully updated." + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "There is no slot type defined for the slotTypeId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "updateInteractionModelSlotTypeV1" + } + }, + "/v1/skills/api/custom/interactionModel/jobs": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Retrieve a list of jobs associated with the vendor.", + "parameters": [ + { + "name": "vendorId", + "in": "query", + "description": "The vendor ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "List of all jobs associated with the vendor.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Contains content type of the response; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.ListJobDefinitionsResponse" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "listJobDefinitionsForInteractionModelV1" + }, + "post": { + "tags": [ + "skillManagement" + ], + "description": "Creates a new Job Definition from the Job Definition request provided. This can be either a CatalogAutoRefresh, which supports time-based configurations for catalogs, or a ReferencedResourceVersionUpdate, which is used for slotTypes and Interaction models to be automatically updated on the dynamic update of their referenced catalog.\n", + "parameters": [ + { + "in": "body", + "name": "createJobDefinitionRequest", + "description": "Request to create a new Job Definition.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.CreateJobDefinitionRequest" + } + } + ], + "responses": { + "201": { + "description": "Returns the generated jobId.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.CreateJobDefinitionResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.ValidationErrors" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "createJobDefinitionForInteractionModelV1" + } + }, + "/v1/skills/api/custom/interactionModel/jobs/{jobId}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get the job definition for a given jobId.\n", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The identifier for dynamic jobs.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "The job definition for a given jobId.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.JobDefinition" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getJobDefinitionForInteractionModelV1" + }, + "delete": { + "tags": [ + "skillManagement" + ], + "description": "Delete the job definition for a given jobId.", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The identifier for dynamic jobs.", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "No content, confirms the resource is updated.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type", + "enum": ["text/plain"] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.ValidationErrors" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "deleteJobDefinitionForInteractionModelV1" + } + }, + "/v1/skills/api/custom/interactionModel/jobs/{jobId}/status": { + "put": { + "tags": [ + "skillManagement" + ], + "description": "Update the JobStatus to Enable or Disable a job.", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The identifier for dynamic jobs.", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "updateJobStatusRequest", + "description": "Request to update Job Definition status.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.UpdateJobStatusRequest" + } + } + ], + "responses": { + "204": { + "description": "No content; Confirms that the fields are updated.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported.", + "enum": ["text/plain"] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Contains content type of the response; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.ValidationErrors" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "setJobStatusForInteractionModelV1" + } + }, + "/v1/skills/api/custom/interactionModel/jobs/{jobId}/executions": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "List the execution history associated with the job definition, with default sortField to be the executions' timestamp.", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The identifier for dynamic jobs.", + "required": true, + "type": "string" + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "sortDirection", + "in": "query", + "description": "Sets the sorting direction of the result items. When set to 'asc' these items are returned in ascending order of sortField value and when set to 'desc' these items are returned in descending order of sortField value.", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Retrun list of executions associated with the job definition.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Contains content type of the response; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.GetExecutionsResponse" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "listJobExecutionsForInteractionModelV1" + } + }, + "/v1/skills/api/custom/interactionModel/jobs/{jobId}/executions/{executionId}": { + "delete": { + "tags": [ + "skillManagement" + ], + "description": "Cancel the next execution for the given job.", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The identifier for dynamic jobs.", + "required": true, + "type": "string" + }, + { + "name": "executionId", + "in": "path", + "description": "The identifier for dynamic job executions. Currently only allowed for scheduled executions.", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "No Content; Confirms that the next execution is canceled.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported.", + "enum": ["text/plain"] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.ValidationErrors" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "cancelNextJobExecutionForInteractionModelV1" + } + }, + "/v1/skills/api/custom/interactionModel/slotTypes/{slotTypeId}/versions": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "List all slot type versions for the slot type id.\n", + "parameters": [ + { + "name": "slotTypeId", + "in": "path", + "description": "The identifier for a slot type.", + "required": true, + "type": "string" + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "sortDirection", + "in": "query", + "description": "Sets the sorting direction of the result items. When set to 'asc' these items are returned in ascending order of sortField value and when set to 'desc' these items are returned in descending order of sortField value.", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Returns list of slot type version for the slot type id.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.typeVersion.ListSlotTypeVersionResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "listInteractionModelSlotTypeVersionsV1" + }, + "post": { + "tags": [ + "skillManagement" + ], + "description": "Create a new version of slot type entity for the given slotTypeId.\n", + "parameters": [ + { + "name": "slotTypeId", + "in": "path", + "description": "The identifier for a slot type.", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "slotType", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.typeVersion.VersionData" + } + } + ], + "responses": { + "202": { + "description": "Returns update status location link on success.", + "headers": { + "Location": { + "type": "string", + "description": "The location of the slot type status to track." + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error e.g. the slot type definition is invalid.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified slot type does not exist.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "createInteractionModelSlotTypeVersionV1" + } + }, + "/v1/skills/api/custom/interactionModel/slotTypes/{slotTypeId}/versions/{version}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get slot type version data of given slot type version.\n", + "parameters": [ + { + "name": "slotTypeId", + "in": "path", + "description": "The identifier for a slot type.", + "required": true, + "type": "string" + }, + { + "name": "version", + "in": "path", + "description": "Version for interaction model.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Returns the slot type version metadata for the given slotTypeId and version.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/hal+json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.typeVersion.SlotTypeVersionData" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "There is no slot type defined for the slotTypeId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getInteractionModelSlotTypeVersionV1" + }, + "delete": { + "tags": [ + "skillManagement" + ], + "description": "Delete slot type version.\n", + "parameters": [ + { + "name": "slotTypeId", + "in": "path", + "description": "The identifier for a slot type.", + "required": true, + "type": "string" + }, + { + "name": "version", + "in": "path", + "description": "Version for interaction model.", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "No Content; Confirms that version is successfully deleted." + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "There is no slot type version for this slotTypeId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "deleteInteractionModelSlotTypeVersionV1" + } + }, + "/v1/skills/api/custom/interactionModel/slotTypes/{slotTypeId}/versions/{version}/update": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "Update description and vendorGuidance string for certain version of a slot type.\n", + "parameters": [ + { + "name": "slotTypeId", + "in": "path", + "description": "The identifier for a slot type.", + "required": true, + "type": "string" + }, + { + "name": "version", + "in": "path", + "description": "Version for interaction model.", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "slotTypeUpdate", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.interactionModel.typeVersion.slotTypeUpdate" + } + } + ], + "responses": { + "204": { + "description": "No Content; Confirms that version is successfully updated." + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "There is no slot type defined for the slotTypeId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "updateInteractionModelSlotTypeVersionV1" + } + }, + "/v1/skills/{skillId}/invocations": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "This is a synchronous API that invokes the Lambda or third party HTTPS endpoint for a given skill. A successful response will contain information related to what endpoint was called, payload sent to and received from the endpoint. In cases where requests to this API results in an error, the response will contain an error code and a description of the problem. In cases where invoking the skill endpoint specifically fails, the response will contain a status attribute indicating that a failure occurred and details about what was sent to the endpoint. The skill must belong to and be enabled by the user of this API. Also, note that calls to the skill endpoint will timeout after 10 seconds.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "invokeSkillRequest", + "description": "Payload sent to the skill invocation API.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.invocations.InvokeSkillRequest" + } + } + ], + "responses": { + "200": { + "description": "Skill was invoked.", + "headers": {}, + "schema": { + "$ref": "#/definitions/v1.skill.invocations.InvokeSkillResponse" + } + }, + "400": { + "description": "Bad request due to invalid or missing data.", + "headers": {}, + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": {}, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "API user does not have permission to call this API or is currently in a state that does not allow invocation of this skill.\n", + "headers": {}, + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified skill does not exist.", + "headers": {}, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "API user has exceeded the permitted request rate.", + "headers": {}, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "invokeSkillV1" + } + }, + "/v1/skills/{skillId}/stages/{stageV2}/manifest": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Returns the skill manifest for given skillId and stage.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stageV2", + "in": "path", + "description": "Stages of a skill including the new certified stage.\n* `development` - skills which are currently in development corresponds to this stage.\n* `certified` - skills which have completed certification and ready for publishing corresponds to this stage.\n* `live` - skills which are currently live corresponds to this stage.\n", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Response contains the latest version of skill manifest.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Contains content type of the response; only application/json supported." + }, + "ETag": { + "type": "string", + "description": "Identifer for the version of the resource can be used for conditional updates" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.Manifest.SkillManifestEnvelope" + } + }, + "303": { + "description": "See Other", + "headers": { + "Location": { + "type": "string", + "description": "Contains relative URL to get skill status." + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getSkillManifestV1" + }, + "put": { + "tags": [ + "skillManagement" + ], + "description": "Updates skill manifest for given skillId and stage.", + "parameters": [ + { + "name": "If-Match", + "in": "header", + "description": "Request header that specified an entity tag. The server will update the resource only if the eTag matches with the resource's current eTag.", + "required": false, + "type": "string" + }, + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stageV2", + "in": "path", + "description": "Stages of a skill including the new certified stage.\n* `development` - skills which are currently in development corresponds to this stage.\n* `certified` - skills which have completed certification and ready for publishing corresponds to this stage.\n* `live` - skills which are currently live corresponds to this stage.\n", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "updateSkillRequest", + "description": "Defines the request body for updateSkill API.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.Manifest.SkillManifestEnvelope" + } + } + ], + "responses": { + "202": { + "description": "Accepted; Returns a URL to track the status in 'Location' header.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Contains content type of the response; only application/json supported.", + "enum": ["text/plain", "application/json"] + }, + "Location": { + "type": "string", + "description": "Contains relative URL to get skill status." + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "412": { + "description": "Precondition failed.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "updateSkillManifestV1" + } + }, + "/v1/skills/{skillId}/metrics": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get analytic metrics report of skill usage.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "startTime", + "in": "query", + "description": "The start time of query.", + "required": true, + "type": "string", + "format": "date-time" + }, + { + "name": "endTime", + "in": "query", + "description": "The end time of query (The maximum time duration is 1 week)", + "required": true, + "type": "string", + "format": "date-time" + }, + { + "name": "period", + "in": "query", + "description": "The aggregation period to use when retrieving the metric, follows ISO_8601#Durations format.", + "required": true, + "type": "string" + }, + { + "name": "metric", + "in": "query", + "description": "A distinct set of logic which predictably returns a set of data.", + "required": true, + "type": "string" + }, + { + "name": "stage", + "in": "query", + "description": "The stage of the skill (live, development).", + "required": true, + "type": "string" + }, + { + "name": "skillType", + "in": "query", + "description": "The type of the skill (custom, smartHome and flashBriefing).", + "required": true, + "type": "string" + }, + { + "name": "intent", + "in": "query", + "description": "The intent of the skill.", + "required": false, + "type": "string" + }, + { + "name": "locale", + "in": "query", + "description": "The locale for the skill. e.g. en-GB, en-US, de-DE and etc.", + "required": false, + "type": "string" + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Get analytic metrics report successfully.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.metrics.GetMetricDataResponse" + } + }, + "400": { + "description": "Bad request due to invalid or missing data.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getSkillMetricsV1" + } + }, + "/v1/skills/{skillId}/stages/{stage}/privateDistributionAccounts/{id}": { + "put": { + "tags": [ + "skillManagement" + ], + "description": "Add an id to the private distribution accounts.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + }, + { + "name": "id", + "in": "path", + "description": "ARN that a skill can be privately distributed to.", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "Success.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only \"application/json\" supported.", + "enum": ["text/plain", "application/json"] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "setPrivateDistributionAccountIdV1" + }, + "delete": { + "tags": [ + "skillManagement" + ], + "description": "Remove an id from the private distribution accounts.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + }, + { + "name": "id", + "in": "path", + "description": "ARN that a skill can be privately distributed to.", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "Success.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only \"application/json\" supported", + "enum": ["text/plain", "application/json"] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "deletePrivateDistributionAccountIdV1" + } + }, + "/v1/skills/{skillId}/stages/{stage}/privateDistributionAccounts": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "List private distribution accounts.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + } + ], + "responses": { + "200": { + "description": "Returns list of private distribution accounts on success.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/json supported" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.Private.ListPrivateDistributionAccountsResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "listPrivateDistributionAccountsV1" + } + }, + "/v1/skills/{skillId}/publications": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "If the skill is in certified stage, initiate publishing immediately or set a date at which the skill can publish at.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "Accept-Language", + "in": "header", + "description": "User's locale/language in context.", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "publishSkillRequest", + "description": "Defines the request body for publish skill API.", + "required": false, + "schema": { + "$ref": "#/definitions/v1.skill.publication.PublishSkillRequest" + } + } + ], + "responses": { + "202": { + "description": "Successfully processed skill publication request.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body. only application/json supported.", + "enum": [ + "application/json" + ] + }, + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. Only en-US, ja-JP supported for this API currently.\n" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.publication.SkillPublicationResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "publishSkillV1" + } + }, + "/v1/skills/{skillId}/publications/~latest": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Retrieves the latest skill publishing details of the certified stage of the skill. The publishesAtDate and\nstatus of skill publishing.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "Accept-Language", + "in": "header", + "description": "User's locale/language in context.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Successfully retrieved latest skill publication information.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body. only application/json supported.", + "enum": [ + "application/json" + ] + }, + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. Only en-US, ja-JP supported for this API currently.\n" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.publication.SkillPublicationResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getSkillPublicationsV1" + } + }, + "/v1/skills/{skillId}/simulations": { + "post": { + "tags": [ + "skillManagement" + ], + "summary": "Simulate executing a skill with the given id.", + "description": "This is an asynchronous API that simulates a skill execution in the Alexa eco-system given an utterance text of what a customer would say to Alexa. A successful response will contain a header with the location of the simulation resource. In cases where requests to this API results in an error, the response will contain an error code and a description of the problem. The skill being simulated must be in development stage, and it must also belong to and be enabled by the user of this API. Concurrent requests per user is currently not supported.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "simulationsApiRequest", + "description": "Payload sent to the skill simulation API.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.simulations.SimulationsApiRequest" + } + } + ], + "responses": { + "200": { + "description": "Skill simulation has successfully began.", + "headers": { + "Location": { + "type": "string", + "description": "Path to simulation resource." + }, + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.simulations.SimulationsApiResponse" + } + }, + "400": { + "description": "Bad request due to invalid or missing data.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": {}, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "API user does not have permission to call this API or is currently in a state that does not allow simulation of this skill.\n", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified skill does not exist.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "409": { + "description": "This requests conflicts with another one currently being processed.\n", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "API user has exceeded the permitted request rate.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal service error.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "simulateSkillV1" + } + }, + "/v1/skills/{skillId}/simulations/{simulationId}": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "Get the result of a previously executed simulation.", + "description": "This API gets the result of a previously executed simulation. A successful response will contain the status of the executed simulation. If the simulation successfully completed, the response will also contain information related to skill invocation. In cases where requests to this API results in an error, the response will contain an error code and a description of the problem. In cases where the simulation failed, the response will contain a status attribute indicating that a failure occurred and details about what was sent to the skill endpoint. Note that simulation results are stored for 10 minutes. A request for an expired simulation result will return a 404 HTTP status code.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "simulationId", + "in": "path", + "description": "Id of the simulation.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Successfully retrieved skill simulation information.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.simulations.SimulationsApiResponse" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": {}, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "API user does not have permission or is currently in a state that does not allow calls to this API.\n", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified skill or simulation does not exist. The error response will contain a description that indicates the specific resource type that was not found.\n", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "API user has exceeded the permitted request rate.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal service error.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "headers": {}, + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getSkillSimulationV1" + } + }, + "/v1/skills/{skillId}/stages/{stage}/validations": { + "post": { + "tags": [ + "skillManagement" + ], + "summary": "Validate a skill.", + "description": "This is an asynchronous API which allows a skill developer to execute various validations against their skill.\n", + "parameters": [ + { + "in": "body", + "name": "validationsApiRequest", + "description": "Payload sent to the skill validation API.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.validations.ValidationsApiRequest" + } + }, + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + } + ], + "responses": { + "202": { + "description": "Skill validation has successfully begun.", + "headers": { + "Location": { + "type": "string", + "description": "Path to validation resource." + }, + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.validations.ValidationsApiResponse" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "API user does not have permission or is currently in a state that does not allow calls to this API.\n", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified skill, stage or validation does not exist. The error response will contain a description that indicates the specific resource type that was not found.\n", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "409": { + "description": "This requests conflicts with another one currently being processed.\n", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "API user has exceeded the permitted request rate.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal service error.", + "headers": { + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. It falls back to en-US if the locale in the request is not supported.\n" + }, + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "submitSkillValidationV1" + } + }, + "/v1/skills/{skillId}/stages/{stage}/validations/{validationId}": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "Get the result of a previously executed validation.", + "description": "This API gets the result of a previously executed validation. A successful response will contain the status of the executed validation. If the validation successfully completed, the response will also contain information related to executed validations. In cases where requests to this API results in an error, the response will contain a description of the problem. In cases where the validation failed, the response will contain a status attribute indicating that a failure occurred. Note that validation results are stored for 60 minutes. A request for an expired validation result will return a 404 HTTP status code.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "validationId", + "in": "path", + "description": "Id of the validation. Reserved word identifier of mostRecent can be used to get the most recent validation for the skill and stage. Note that the behavior of the API in this case would be the same as when the actual validation id of the most recent validation is used in the request.\n", + "required": true, + "type": "string" + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + }, + { + "name": "Accept-Language", + "in": "header", + "description": "User's locale/language in context.", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Successfully retrieved skill validation information.", + "headers": { + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. It falls back to en-US if the locale in the request is not supported.\n" + }, + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.validations.ValidationsApiResponse" + } + }, + "403": { + "description": "API user does not have permission or is currently in a state that does not allow calls to this API.\n", + "headers": { + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. It falls back to en-US if the locale in the request is not supported.\n" + }, + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified skill, stage, or validation does not exist. The error response will contain a description that indicates the specific resource type that was not found.\n", + "headers": { + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. It falls back to en-US if the locale in the request is not supported.\n" + }, + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "409": { + "description": "This requests conflicts with another one currently being processed.\n", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "API user has exceeded the permitted request rate.", + "headers": { + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. It falls back to en-US if the locale in the request is not supported.\n" + }, + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal service error.", + "headers": { + "Content-Language": { + "type": "string", + "description": "Standard HTTP header for language for which the content of the response is intended. It falls back to en-US if the locale in the request is not supported.\n" + }, + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + } + } + }, + "x-operation-name": "getSkillValidationsV1" + } + }, + "/v1/skills": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get the list of skills for the vendor.", + "parameters": [ + { + "name": "vendorId", + "in": "query", + "description": "The vendor ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + { + "name": "skillId", + "in": "query", + "description": "The list of skillIds that you wish to get the summary for. A maximum of 10 skillIds can be specified to get the skill summary in single listSkills call. Please note that this parameter must not be used with 'nextToken' or/and 'maxResults' parameter.", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + } + ], + "responses": { + "200": { + "description": "Returns list of skills for the vendor.", + "headers": { + "Content-Type": { + "type": "string", + "description": "returned content type; only application/json+hal supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.ListSkillResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "listSkillsForVendorV1" + }, + "post": { + "tags": [ + "skillManagement" + ], + "description": "Creates a new skill for given vendorId.", + "parameters": [ + { + "in": "body", + "name": "createSkillRequest", + "description": "Defines the request body for createSkill API.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.createSkillRequest" + } + } + ], + "responses": { + "202": { + "description": "Accepted; Returns a URL to track the status in 'Location' header.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Contains content type of the response; only application/json supported." + }, + "Location": { + "type": "string", + "description": "Contains relative URL to get skill status." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.CreateSkillResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "createSkillForVendorV1" + } + }, + "/v1/skills/{skillId}": { + "delete": { + "tags": [ + "skillManagement" + ], + "description": "Delete the skill and model for given skillId.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "204": { + "description": "Success. No content." + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "deleteSkillV1" + } + }, + "/v1/skills/{skillId}/status": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get the status of skill resource and its sub-resources for a given skillId.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "resource", + "in": "query", + "description": "Resource name for which status information is desired.\nIt is an optional, filtering parameter and can be used more than once, to retrieve status for all the desired (sub)resources only, in single API call.\nIf this parameter is not specified, status for all the resources/sub-resources will be returned.\n", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Returns status for skill resource and sub-resources.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.SkillStatus" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getSkillStatusV1" + } + }, + "/v1/skills/{skillId}/credentials": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get the client credentials for the skill.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Response contains the skill credentials.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.SkillCredentials" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getSkillCredentialsV1" + } + }, + "/v1/skills/{skillId}/sslCertificateSets/~latest": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Returns the ssl certificate sets currently associated with this skill. Sets consist of one ssl certificate blob associated with a region as well as the default certificate for the skill.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Response contains the latest version of the ssl certificates.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Contains content type of the response; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.SSLCertificatePayload" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getSSLCertificatesV1" + }, + "put": { + "tags": [ + "skillManagement" + ], + "description": "Updates the ssl certificates associated with this skill.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "sslCertificatePayload", + "description": "Defines the input/output of the ssl certificates api for a skill.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.SSLCertificatePayload" + } + } + ], + "responses": { + "204": { + "description": "Accepted; Request was successful and get will now result in the new values.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Contains content type of the response; only application/json supported.", + "enum": ["text/plain"] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "setSSLCertificatesV1" + } + }, + "/v1/skills/{skillId}/submit": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "Submit the skill for certification.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "submitSkillForCertificationRequest", + "description": "Defines the request body for submitSkillForCertification API.", + "required": false, + "schema": { + "$ref": "#/definitions/v1.skill.SubmitSkillForCertificationRequest" + } + } + ], + "responses": { + "202": { + "description": "Success. There is no content but returns Location in the header.", + "headers": { + "Location": { + "type": "string", + "description": "Certification resource URL." + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "submitSkillForCertificationV1" + } + }, + "/v1/skills/{skillId}/withdraw": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "Withdraws the skill from certification.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "withdrawRequest", + "description": "The reason and message (in case of OTHER) to withdraw a skill.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.WithdrawRequest" + } + } + ], + "responses": { + "204": { + "description": "Success.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported.", + "enum": ["text/plain"] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "withdrawSkillFromCertificationV1" + } + }, + "/v1/skills/{skillId}/versions": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Retrieve a list of all skill versions associated with this skill id", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + } + ], + "responses": { + "200": { + "description": "Successfully retrieved skill versions", + "schema": { + "$ref": "#/definitions/v1.skill.ListSkillVersionsResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "listVersionsForSkillV1" + } + }, + "/v1/skills/{skillId}/rollbacks": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "Submit a target skill version to rollback to. Only one rollback or publish operation can be outstanding for a given skillId.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "createRollbackRequest", + "description": "defines the request body to create a rollback request", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.CreateRollbackRequest" + } + } + ], + "responses": { + "201": { + "description": "Rollback request created; Returns the generated identifier to track the rollback request and returns a URL to track the status in Location header.", + "headers": { + "Content-Type": { + "type": "string", + "description": "contains content type of the response; only application/json supported." + }, + "Location": { + "type": "string", + "description": "Relative url to track rollback status" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.CreateRollbackResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "rollbackSkillV1" + } + }, + "/v1/skills/{skillId}/rollbacks/{rollbackRequestId}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get the rollback status of a skill given an associated rollbackRequestId. Use ~latest in place of rollbackRequestId to get the latest rollback status.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "rollbackRequestId", + "in": "path", + "description": "Defines the identifier for a rollback request. If set to ~latest, request returns the status of the latest rollback request.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Returns the rollback status for a given skillId and rollbackRequestId. Returns the latest rollback status if ~latest is used in place of rollbackRequestId.", + "headers": { + "Content-Type": { + "type": "string", + "description": "contains content type of the response; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.RollbackRequestStatus" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getRollbackForSkillV1" + } + }, + "/v1/skills/{skillId}/stages/{stage}/exports": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "Creates a new export for a skill with given skillId and stage.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + } + ], + "responses": { + "202": { + "description": "Accepted.", + "headers": { + "Location": { + "type": "string", + "description": "Contains relative URL to track export." + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "createExportRequestForSkillV1" + } + }, + "/v1/skills/exports/{exportId}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get status for given exportId\n", + "parameters": [ + { + "name": "exportId", + "in": "path", + "description": "The Export ID.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.ExportResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getStatusOfExportRequestV1" + } + }, + "/v1/skills/imports": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "Creates a new import for a skill.\n", + "parameters": [ + { + "in": "body", + "name": "createSkillWithPackageRequest", + "description": "Defines the request body for createPackage API.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.createSkillWithPackageRequest" + } + } + ], + "responses": { + "202": { + "description": "Accepted.", + "headers": { + "Location": { + "type": "string", + "description": "Contains relative URL to track import." + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "413": { + "description": "Payload too large.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "createSkillPackageV1" + } + }, + "/v1/skills/{skillId}/imports": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "Creates a new import for a skill with given skillId.\n", + "parameters": [ + { + "in": "body", + "name": "updateSkillWithPackageRequest", + "description": "Defines the request body for updatePackage API.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.updateSkillWithPackageRequest" + } + }, + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "If-Match", + "in": "header", + "description": "Request header that specified an entity tag. The server will update the resource only if the eTag matches with the resource's current eTag.", + "required": false, + "type": "string" + } + ], + "responses": { + "202": { + "description": "Accepted.", + "headers": { + "Location": { + "type": "string", + "description": "Contains relative URL to track import." + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "412": { + "description": "Precondition failed.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "413": { + "description": "Payload too large.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "importSkillPackageV1" + } + }, + "/v1/skills/imports/{importId}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get status for given importId.\n", + "parameters": [ + { + "name": "importId", + "in": "path", + "description": "The Import ID.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.ImportResponse" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getImportStatusV1" + } + }, + "/v1/skills/uploads": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "Creates a new uploadUrl.\n", + "parameters": [], + "responses": { + "201": { + "description": "Created.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.UploadResponse" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "createUploadUrlV1" + } + }, + "/v1/skill/definitions/apis/custom/interfaces/{interfaceType}": {}, + "/v1/skills/{skillId}/stages/{stageV2}/cloneLocale": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "Creates a new clone locale workflow for a skill with given skillId, source locale, and target locales. In a single workflow, a locale can be cloned to multiple target locales. However, only one such workflow can be started at any time.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stageV2", + "in": "path", + "description": "Stages of a skill on which locales can be cloned. Currently only `development` stage is supported.\n* `development` - skills which are currently in development corresponds to this stage.\n", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "cloneLocaleRequest", + "description": "Defines the request body for the cloneLocale API.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.CloneLocaleRequest" + } + } + ], + "responses": { + "202": { + "description": "Accepted.", + "headers": { + "Location": { + "type": "string", + "description": "Returns relative URL to track the progress of the workflow." + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "cloneLocaleV1" + } + }, + "/v1/skills/{skillId}/stages/{stageV2}/cloneLocaleRequests/{cloneLocaleRequestId}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Returns the status of a clone locale workflow associated with the unique identifier of cloneLocaleRequestId.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stageV2", + "in": "path", + "description": "Stages of a skill on which locales can be cloned. Currently only `development` stage is supported.\n* `development` - skills which are currently in development corresponds to this stage.\n", + "required": true, + "type": "string" + }, + { + "name": "cloneLocaleRequestId", + "in": "path", + "description": "Defines the identifier for a clone locale workflow.\nIf set to ~latest, request returns the status of the latest clone locale workflow.\n", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only \"application/json\" supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.CloneLocaleStatusResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "429": { + "description": "Exceeds the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "x-operation-name": "getCloneLocaleStatusV1" + } + }, + "/v1/vendors": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "Get the list of Vendor information.\n", + "parameters": [], + "responses": { + "200": { + "description": "Return vendor information on success.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.vendorManagement.Vendors" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Defines the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getVendorListV1" + } + }, + "/v1/developmentAuditLogs/query": { + "post": { + "tags": [ + "skillManagement" + ], + "description": "The SMAPI Audit Logs API provides customers with an audit history of all SMAPI calls made by a developer or developers with permissions on that account.", + "parameters": [ + { + "in": "body", + "name": "getAuditLogsRequest", + "description": "Request object encompassing vendorId, optional request filters and optional pagination context.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.auditLogs.AuditLogsRequest" + } + } + ], + "responses": { + "200": { + "description": "Returns a list of audit logs for the given vendor.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.auditLogs.AuditLogsResponse" + } + }, + "400": { + "description": "Invalid request", + "headers": { + "Content-Type": { + "type": "string", + "description": "returned content type; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "Unauthorized", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "Forbidden", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "404": { + "description": "Not Found", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Too Many Requests", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "queryDevelopmentAuditLogsV1" + } + }, + "/v1/skills/{skillId}/stages/{stage}/locales/{locale}/conversations/turnPredictions": {}, + "/v1/skills/resourceSchema/{resource}": { + "get": { + "tags": [ + "skillManagement" + ], + "description": "GetResourceSchema API provides schema for skill related resources. The schema returned by this API will be specific to vendor because it considers public beta features allowed for the vendor.", + "parameters": [ + { + "name": "resource", + "in": "path", + "description": "Name of the ASK resource for which schema is requested.", + "required": true, + "type": "string", + "enum": [ + "manifest", + "skillPackageStructure" + ] + }, + { + "name": "vendorId", + "in": "query", + "description": "The vendor ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "operation", + "in": "query", + "description": "This parameter is required when resource is manifest because skill manifest schema differs based on operation. For example, submit for certification schema has more validations than create skill schema.", + "required": false, + "type": "string", + "enum": [ + "CREATE_SKILL", + "UPDATE_SKILL", + "SUBMIT_SKILL", + "ENABLE_SKILL" + ] + } + ], + "responses": { + "200": { + "description": "Returns a S3 presigned URL to location of schema", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.resourceSchema.getResourceSchemaResponse" + } + }, + "400": { + "description": "Invalid request", + "headers": { + "Content-Type": { + "type": "string", + "description": "returned content type; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "Unauthorized", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "Forbidden", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Too Many Requests", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type; only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getResourceSchemaV1" + } + }, + "/v1/skills/{skillId}/testSetGenerations": {}, + "/v1/skills/{skillId}/testSetGenerations/{testSetGenerationId}": {}, + "/v1/skills/{skillId}/testSets": {}, + "/v1/skills/{skillId}/testSets/{testSetId}/properties": {}, + "/v1/skills/{skillId}/testSets/{testSetId}": {}, + "/v1/skills/{skillId}/testSetExecutions": {}, + "/v1/skills/{skillId}/testSetExecutions/{testSetExecutionId}": {}, + "/v1/skills/{skillId}/testSetExecutions/{testSetExecutionId}/results": {}, + "/v1/skills/{skillId}/nluEvaluations": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "List nlu evaluations run for a skill.", + "description": "API which requests recently run nlu evaluations started by a vendor for a skill. Returns the evaluation id and some of the parameters used to start the evaluation. Developers can filter the results using locale and stage. Supports paging of results.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "locale", + "in": "query", + "description": "filter to evaluations started using this locale", + "required": false, + "type": "string" + }, + { + "name": "stage", + "in": "query", + "description": "filter to evaluations started using this stage", + "required": false, + "type": "string" + }, + { + "name": "annotationId", + "in": "query", + "description": "filter to evaluations started using this annotationId", + "required": false, + "type": "string" + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. Defaults to 10. If more results are present, the response will contain a nextToken and a _link.next href.\n", + "required": false, + "type": "number", + "default": 10, + "maximum": 100, + "minimum": 1 + } + ], + "responses": { + "200": { + "description": "Evaluations are returned.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, application/hal+json or application/json supported" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.ListNLUEvaluationsResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "listNLUEvaluationsV1" + }, + "post": { + "tags": [ + "skillManagement" + ], + "summary": "Start an evaluation against the NLU model built by the skill's interaction model.", + "description": "This is an asynchronous API that starts an evaluation against the NLU model built by the skill's interaction model.\nThe operation outputs an evaluationId which allows the retrieval of the current status of the operation and the results upon completion. This operation is unified, meaning both internal and external skill developers may use it evaluate NLU models.\n", + "parameters": [ + { + "in": "body", + "name": "evaluateNLURequest", + "description": "Payload sent to the evaluate NLU API.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.EvaluateNLURequest" + } + }, + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Evaluation has successfully begun.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, - application/json or application/hal+json supported" + }, + "Location": { + "type": "string", + "description": "GET Location of the started evaluation.\n" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.EvaluateResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "createNLUEvaluationsV1" + } + }, + "/v1/skills/{skillId}/nluEvaluations/{evaluationId}": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "Get top level information and status of a nlu evaluation.", + "description": "API which requests top level information about the evaluation like the current state of the job, status of the evaluation (if complete). Also returns data used to start the job, like the number of test cases, stage, locale, and start time. This should be considered the 'cheap' operation while getResultForNLUEvaluations is 'expensive'.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "evaluationId", + "in": "path", + "description": "Identifier of the evaluation.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Evaluation exists and its status is queryable.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, - application/json or application/hal+json supported" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.GetNLUEvaluationResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getNLUEvaluationV1" + } + }, + "/v1/skills/{skillId}/nluEvaluations/{evaluationId}/results": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "Get test case results for a completed Evaluation.", + "description": "Paginated API which returns the test case results of an evaluation. This should be considered the 'expensive' operation while getNluEvaluation is 'cheap'.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "evaluationId", + "in": "path", + "description": "Identifier of the evaluation.", + "required": true, + "type": "string" + }, + { + "name": "sort.field", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "STATUS", + "ACTUAL_INTENT", + "EXPECTED_INTENT" + ] + }, + { + "name": "testCaseStatus", + "in": "query", + "description": "only returns test cases with this status", + "required": false, + "type": "string", + "enum": [ + "PASSED", + "FAILED" + ] + }, + { + "name": "actualIntentName", + "in": "query", + "description": "only returns test cases with intents which resolve to this intent", + "required": false, + "type": "string" + }, + { + "name": "expectedIntentName", + "in": "query", + "description": "only returns test cases with intents which are expected to be this intent", + "required": false, + "type": "string" + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. Defaults to 1000. If more results are present, the response will contain a nextToken and a _link.next href.\n", + "required": false, + "type": "number", + "default": 1000, + "maximum": 1000, + "minimum": 1 + } + ], + "responses": { + "200": { + "description": "Evaluation exists and its status is queryable.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, - application/json or application/hal+json supported" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.GetNLUEvaluationResultsResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getResultForNLUEvaluationsV1" + } + }, + "/v1/skills/{skillId}/nluAnnotationSets": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "List NLU annotation sets for a given skill.", + "description": "API which requests all the NLU annotation sets for a skill. Returns the annotationId and properties for each NLU annotation set. Developers can filter the results using locale. Supports paging of results.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "locale", + "in": "query", + "description": "filter to NLU annotation set created using this locale", + "required": false, + "type": "string" + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. Defaults to 10. If more results are present, the response will contain a nextToken and a _link.next href.\n", + "required": false, + "type": "number", + "default": 10, + "maximum": 100, + "minimum": 1 + } + ], + "responses": { + "200": { + "description": "NLU annotation sets are returned.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, application/hal+json or application/json supported" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.nlu.annotationSets.ListNLUAnnotationSetsResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "listNLUAnnotationSetsV1" + }, + "post": { + "tags": [ + "skillManagement" + ], + "summary": "Create a new NLU annotation set for a skill which will generate a new annotationId.", + "description": "This is an API that creates a new NLU annotation set with properties and returns the annotationId.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "CreateNLUAnnotationSetRequest", + "description": "Payload sent to the create NLU annotation set API.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.nlu.annotationSets.CreateNLUAnnotationSetRequest" + } + } + ], + "responses": { + "201": { + "description": "NLU annotation set created successfully.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported", + "enum": [ + "application/json" + ] + }, + "Location": { + "type": "string", + "description": "GET Location of the created NLU annotation set.\n" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.nlu.annotationSets.CreateNLUAnnotationSetResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "createNLUAnnotationSetV1" + } + }, + "/v1/skills/{skillId}/nluAnnotationSets/{annotationId}/properties": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "Get the properties of an NLU annotation set", + "description": "Return the properties for an NLU annotation set.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "annotationId", + "in": "path", + "description": "Identifier of the NLU annotation set.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "The NLU annotation set exists.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, application/hal+json or application/json supported" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.nlu.annotationSets.GetNLUAnnotationSetPropertiesResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getPropertiesForNLUAnnotationSetsV1" + }, + "put": { + "tags": [ + "skillManagement" + ], + "summary": "update the NLU annotation set properties.", + "description": "API which updates the NLU annotation set properties. Currently, the only data can be updated is annotation set name.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "annotationId", + "in": "path", + "description": "Identifier of the NLU annotation set.", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "UpdateNLUAnnotationSetPropertiesRequest", + "description": "Payload sent to the update NLU annotation set properties API.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.nlu.annotationSets.UpdateNLUAnnotationSetPropertiesRequest" + } + } + ], + "responses": { + "201": { + "description": "NLU annotation set exists and properties are updated successfully.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, application/hal+json or application/json supported", + "enum": ["text/plain"] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "updatePropertiesForNLUAnnotationSetsV1" + } + }, + "/v1/skills/{skillId}/nluAnnotationSets/{annotationId}": { + "delete": { + "tags": [ + "skillManagement" + ], + "summary": "Delete the NLU annotation set", + "description": "API which deletes the NLU annotation set. Developers cannot get/list the deleted annotation set.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "annotationId", + "in": "path", + "description": "Identifier of the NLU annotation set.", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "NLU annotation set exists and is deleted successfully.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, application/hal+json or application/json supported", + "enum": ["text/plain"] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "deletePropertiesForNLUAnnotationSetsV1" + } + }, + "/v1/skills/{skillId}/nluAnnotationSets/{annotationId}/annotations": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "Get the annotations of an NLU annotation set", + "produces": [ + "application/json", + "text/csv" + ], + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "annotationId", + "in": "path", + "description": "Identifier of the NLU annotation set.", + "required": true, + "type": "string" + }, + { + "name": "Accept", + "in": "header", + "description": "Standard HTTP. Pass `application/json` or `test/csv` for GET calls.\n", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "The specific version of a NLU annotation set has the content.", + "examples": { + "application/json": { + "data": [ + { + "inputs": { + "utterance": "i want to travel from seattle", + "referenceTimestamp": "2018-10-25T23:50:02.135Z" + }, + "expected": [ + { + "intent": { + "name": "TravelIntent", + "slots": { + "fromCity": { + "value": "seattle" + } + } + } + } + ] + } + ] + }, + "text/csv": "utterance,referenceTimestamp,intent,slot[fromCity] i want to travel from seattle,2018-10-25T23:50:02.135Z,TravelIntent,seattle\n" + }, + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, application/json supported" + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getAnnotationsForNLUAnnotationSetsV1" + }, + "post": { + "tags": [ + "skillManagement" + ], + "summary": "Replace the annotations in NLU annotation set.", + "description": "API which replaces the annotations in NLU annotation set.\n", + "consumes": [ + "application/json", + "text/csv" + ], + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "annotationId", + "in": "path", + "description": "Identifier of the NLU annotation set.", + "required": true, + "type": "string" + }, + { + "name": "Content-Type", + "in": "header", + "description": "Standard HTTP. Pass `application/json` or `test/csv` for POST calls with a json/csv body.\n", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "UpdateNLUAnnotationSetAnnotationsRequest", + "description": "Payload sent to the update NLU annotation set API.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.nlu.annotationSets.UpdateNLUAnnotationSetAnnotationsRequest" + } + } + ], + "responses": { + "200": { + "description": "NLU annotation set exists and starts the update.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, application/hal+json or application/json supported", + "enum": ["text/plain"] + } + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "500": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "updateAnnotationsForNLUAnnotationSetsV1" + } + }, + "/v1/skills/{skillId}/asrAnnotationSets": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "List ASR annotation sets metadata for a given skill.", + "description": "API which requests all the ASR annotation sets for a skill. Returns the annotation set id and properties for each ASR annotation set. Supports paging of results.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. Defaults to 1000. If more results are present, the response will contain a paginationContext.\n", + "required": false, + "type": "number", + "default": 1000, + "maximum": 1000, + "minimum": 1 + } + ], + "responses": { + "200": { + "description": "ASR annotation sets metadata are returned.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, application/hal+json or application/json supported", + "enum": [ + "application/json" + ] + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.asr.annotationSets.ListASRAnnotationSetsResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "default": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "listASRAnnotationSetsV1" + }, + "post": { + "tags": [ + "skillManagement" + ], + "summary": "Create a new ASR annotation set for a skill", + "description": "This is an API that creates a new ASR annotation set with a name and returns the annotationSetId which can later be used to retrieve or reference the annotation set\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "CreateAsrAnnotationSetRequest", + "description": "Payload sent to the create ASR annotation set API.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.asr.annotationSets.CreateAsrAnnotationSetRequestObject" + } + } + ], + "responses": { + "200": { + "description": "ASR annotation set created successfully.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported", + "enum": [ + "application/json" + ] + }, + "Location": { + "type": "string", + "description": "Location of the created ASR annotation set.\n" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.asr.annotationSets.CreateAsrAnnotationSetResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "default": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "createASRAnnotationSetV1" + } + }, + "/v1/skills/{skillId}/asrAnnotationSets/{annotationSetId}": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "Get the metadata of an ASR annotation set", + "description": "Return the metadata for an ASR annotation set.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "annotationSetId", + "in": "path", + "description": "Identifier of the ASR annotation set.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "The ASR annotation set exists.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, application/json supported", + "enum": [ + "application/json" + ] + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.asr.annotationSets.GetASRAnnotationSetsPropertiesResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "default": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getASRAnnotationSetV1" + }, + "put": { + "tags": [ + "skillManagement" + ], + "summary": "update the ASR annotation set properties.", + "description": "API which updates the ASR annotation set properties. Currently, the only data can be updated is annotation set name.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "annotationSetId", + "in": "path", + "description": "Identifier of the ASR annotation set.", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "UpdateAsrAnnotationSetPropertiesRequestV1", + "description": "Payload sent to the update ASR annotation set properties API.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.asr.annotationSets.UpdateAsrAnnotationSetPropertiesRequestObject" + } + } + ], + "responses": { + "204": { + "description": "ASR annotation set exists and properties are updated successfully." + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "default": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "setASRAnnotationSetV1" + }, + "delete": { + "tags": [ + "skillManagement" + ], + "summary": "Delete the ASR annotation set", + "description": "API which deletes the ASR annotation set. Developers cannot get/list the deleted annotation set.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "annotationSetId", + "in": "path", + "description": "Identifier of the ASR annotation set.", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "ASR annotation set exists and is deleted successfully." + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "default": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "deleteASRAnnotationSetV1" + } + }, + "/v1/skills/{skillId}/asrAnnotationSets/{annotationSetId}/annotations": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "Download the annotation set contents.", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. Defaults to 1000. If more results are present, the response will contain a paginationContext.\n", + "required": false, + "type": "number", + "default": 1000, + "maximum": 1000, + "minimum": 1 + }, + { + "name": "annotationSetId", + "in": "path", + "description": "Identifier of the ASR annotation set.", + "required": true, + "type": "string" + }, + { + "name": "Accept", + "in": "header", + "description": "- `application/json`: indicate to download annotation set contents in JSON format - `text/csv`: indicate to download annotation set contents in CSV format\n", + "required": true, + "type": "string", + "enum": [ + "application/json", + "text/csv" + ] + } + ], + "responses": { + "200": { + "description": "The annotation set contents payload in specified format. This API also supports pagination for annotation set contents requested in `application/json` content type. Paginaiton for requested content type `text/csv` is not supported. In this case, the nextToken and maxResults query parameters would be ignored even if they are specified as query parameters.\n", + "headers": { + "Content-Type": { + "type": "string", + "description": "- `text/csv`: indicate the annotation set contents in CSV format. The first \n row of the csv contents defines the attribute names of annotation\n properties. Attribute names are delimited by comma. The subsequent rows\n define the annotations. Each row represents an annotation content. The\n annotation properties in each row follow the strict ordering of the attribute\n property names defined in the first row.\n- `application/json`: indicate the annotation set contents in JSON format\n", + "enum": [ + "text/csv", + "application/json" + ] + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.asr.annotationSets.GetAsrAnnotationSetAnnotationsResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "default": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getAnnotationsForASRAnnotationSetV1" + }, + "put": { + "tags": [ + "skillManagement" + ], + "summary": "Update the annotations in the annotation set", + "description": "API that updates the annotaions in the annotation set\n", + "consumes": [ + "application/json", + "text/csv" + ], + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "annotationSetId", + "in": "path", + "description": "Identifier of the ASR annotation set.", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "UpdateAsrAnnotationSetContentsRequest", + "description": "Payload containing annotation set contents. Two formats are accepted here: - `application/json`: Annotation set payload in JSON format. - `text/csv`: Annotation set payload in CSV format. Note that for CSV format, the first row should describe the column attributes. Columns should be delimited by comma. The subsequent rows should describe annotation data and each annotation attributes has to follow the strict ordering defined in the first row. Each annotation fields should be delimited by comma.\n", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.asr.annotationSets.UpdateAsrAnnotationSetContentsPayload" + } + } + ], + "responses": { + "204": { + "description": "ASR annotation set contents have been updated successfully." + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "default": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "setAnnotationsForASRAnnotationSetV1" + } + }, + "/v1/skills/{skillId}/asrEvaluations": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "List asr evaluations run for a skill.", + "description": "API that allows developers to get historical ASR evaluations they run before.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "locale", + "in": "query", + "description": "locale in bcp 47 format. Used to filter results with the specified locale. If omitted, the response would include all evaluations regardless of what locale was used in the evaluation", + "required": false, + "type": "string", + "format": "locale" + }, + { + "name": "stage", + "in": "query", + "description": "Query parameter used to filter evaluations with specified skill stage.\n * `development` - skill in `development` stage\n * `live` - skill in `live` stage\n", + "required": false, + "type": "string", + "enum": [ + "development", + "live" + ] + }, + { + "name": "annotationSetId", + "in": "query", + "description": "filter to evaluations started using this annotationSetId", + "required": false, + "type": "string" + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. Defaults to 1000. If more results are present, the response will contain a nextToken.\n", + "required": false, + "type": "number", + "default": 1000, + "maximum": 1000, + "minimum": 1 + } + ], + "responses": { + "200": { + "description": "Evaluations are returned.", + "headers": { + "Content-Type": { + "type": "string", + "description": "returned content type or application/json supported", + "enum": [ + "application/json" + ] + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.asr.evaluations.ListAsrEvaluationsResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "default": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "listASREvaluationsV1" + }, + "post": { + "tags": [ + "skillManagement" + ], + "summary": "Start an evaluation against the ASR model built by the skill's interaction model.", + "description": "This is an asynchronous API that starts an evaluation against the ASR model built by the skill's interaction model. The operation outputs an evaluationId which allows the retrieval of the current status of the operation and the results upon completion. This operation is unified, meaning both internal and external skill developers may use it to evaluate ASR models.\n", + "parameters": [ + { + "in": "body", + "name": "PostAsrEvaluationsRequest", + "description": "Payload sent to trigger evaluation run.", + "required": true, + "schema": { + "$ref": "#/definitions/v1.skill.asr.evaluations.PostAsrEvaluationsRequestObject" + } + }, + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Evaluation has successfully begun.", + "headers": { + "Content-Type": { + "type": "string", + "description": "returned content type, - application/json supported", + "enum": [ + "application/json" + ] + }, + "Location": { + "type": "string", + "description": "URI indicating where to poll the status of the evaluation.\n" + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.asr.evaluations.PostAsrEvaluationsResponseObject" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the target resource.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "default": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "createASREvaluationV1" + } + }, + "/v1/skills/{skillId}/asrEvaluations/{evaluationId}/status": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "Get high level information and status of a asr evaluation.", + "description": "API which requests high level information about the evaluation like the current state of the job, status of the evaluation (if complete). Also returns the request used to start the job, like the number of total evaluations, number of completed evaluations, and start time. This should be considered the \"cheap\" operation while GetAsrEvaluationsResults is \"expensive\".\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "evaluationId", + "in": "path", + "description": "Identifier of the evaluation.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Evaluation exists and its status is queryable.", + "headers": { + "Content-Type": { + "type": "string", + "description": "returned content type, - application/json supported", + "enum": [ + "application/json" + ] + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.asr.evaluations.GetAsrEvaluationStatusResponseObject" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "default": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getASREvaluationStatusV1" + } + }, + "/v1/skills/{skillId}/asrEvaluations/{evaluationId}": { + "delete": { + "tags": [ + "skillManagement" + ], + "summary": "Delete an evaluation.", + "description": "API which enables the deletion of an evaluation. \n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "evaluationId", + "in": "path", + "description": "Identifier of the evaluation.", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "ASR evaluation exists and is deleted successfully." + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "default": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "deleteASREvaluationV1" + } + }, + "/v1/skills/{skillId}/asrEvaluations/{evaluationId}/results": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "List results for a completed Evaluation.", + "description": "Paginated API which returns the test case results of an evaluation. This should be considered the \"expensive\" operation while GetAsrEvaluationsStatus is \"cheap\".\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "evaluationId", + "in": "path", + "description": "Identifier of the evaluation.", + "required": true, + "type": "string" + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. Defaults to 1000. If more results are present, the response will contain a nextToken.\n", + "required": false, + "type": "number", + "default": 1000, + "maximum": 1000, + "minimum": 1 + }, + { + "name": "status", + "in": "query", + "description": "query parameter used to filter evaluation result status.\n * `PASSED` - filter evaluation result status of `PASSED`\n * `FAILED` - filter evaluation result status of `FAILED`\n", + "required": false, + "type": "string", + "enum": [ + "PASSED", + "FAILED" + ] + } + ], + "responses": { + "200": { + "description": "Evaluation exists and its status is queryable.", + "headers": { + "Content-Type": { + "type": "string", + "description": "returned content type, - application/json supported", + "enum": [ + "application/json" + ] + } + }, + "schema": { + "$ref": "#/definitions/v1.skill.asr.evaluations.GetAsrEvaluationsResultsResponse" + } + }, + "400": { + "description": "Server cannot process the request due to a client error.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Define the authentication method that should be used to gain access to a resource." + } + }, + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "403": { + "description": "The operation being requested is not allowed.", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The resource being requested is not found.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceed the permitted request limit. Throttling criteria includes total requests, per API, ClientId, and CustomerId.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "default": { + "description": "Internal Server Error.", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "listASREvaluationsResultsV1" + } + }, + "/v1/skills/{skillId}/smartHome/testing/capabilityTestPlans": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "List all the test plan names and ids for a given skill ID.", + "description": "List all the test plan names and ids for a given skill ID.", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Successfully got the list of test plans.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body." + } + }, + "schema": { + "$ref": "#/definitions/v1.smartHomeEvaluation.ListSHCapabilityTestPlansResponse" + } + }, + "400": { + "description": "Bad Request. Returned when the request payload is malformed or when, at least, one required property is missing or invalid.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "403": { + "description": "API user does not have permission or is currently in a state that does not allow calls to this API.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified skill, test plan, or evaluation does not exist. The error response will contain a description that indicates the specific resource type that was not found.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "429": { + "description": "Exceeded the permitted request limit. Throttling criteria includes total requests, per API and CustomerId.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "default": { + "description": "Internal server error.\n", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "listSmarthomeCapabilityTestPlansV1" + } + }, + "/v1/skills/{skillId}/smartHome/testing/capabilityEvaluations/{evaluationId}/results": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "Get test case results for an evaluation run.", + "description": "Get test case results for an evaluation run.", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + }, + { + "name": "evaluationId", + "in": "path", + "description": "A unique ID to identify each Smart Home capability evaluation.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the evaluation result content.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body." + } + }, + "schema": { + "$ref": "#/definitions/v1.smartHomeEvaluation.GetSHCapabilityEvaluationResultsResponse" + } + }, + "400": { + "description": "Bad Request. Returned when the request payload is malformed or when, at least, one required property is missing or invalid.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "403": { + "description": "API user does not have permission or is currently in a state that does not allow calls to this API.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified skill, test plan, or evaluation does not exist. The error response will contain a description that indicates the specific resource type that was not found.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "429": { + "description": "Exceeded the permitted request limit. Throttling criteria includes total requests, per API and CustomerId.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "default": { + "description": "Internal server error.\n", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getSmarthomeCapablityEvaluationResultsV1" + } + }, + "/v1/skills/{skillId}/smartHome/testing/capabilityEvaluations/{evaluationId}": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "Get top level information and status of a Smart Home capability evaluation.", + "description": "Get top level information and status of a Smart Home capability evaluation.", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "evaluationId", + "in": "path", + "description": "A unique ID to identify each Smart Home capability evaluation.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the evaluation status.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body." + } + }, + "schema": { + "$ref": "#/definitions/v1.smartHomeEvaluation.GetSHCapabilityEvaluationResponse" + } + }, + "400": { + "description": "Bad Request. Returned when the request payload is malformed or when, at least, one required property is missing or invalid.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "403": { + "description": "API user does not have permission or is currently in a state that does not allow calls to this API.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified skill, test plan, or evaluation does not exist. The error response will contain a description that indicates the specific resource type that was not found.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "429": { + "description": "Exceeded the permitted request limit. Throttling criteria includes total requests, per API and CustomerId.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "default": { + "description": "Internal server error.\n", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "getSmartHomeCapabilityEvaluationV1" + } + }, + "/v1/skills/{skillId}/smartHome/testing/capabilityEvaluations": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "List Smart Home capability evaluation runs for a skill.", + "description": "List Smart Home capability evaluation runs for a skill.", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "query", + "description": "The stage of the skill to be used for evaluation. An error will be returned if this skill stage is not enabled on the account used for evaluation.", + "required": true, + "type": "string", + "enum": [ + "development", + "live" + ] + }, + { + "name": "startTimestampFrom", + "in": "query", + "description": "The begnning of the start time to query evaluation result.", + "required": false, + "type": "string", + "format": "date-time" + }, + { + "name": "startTimestampTo", + "in": "query", + "description": "The end of the start time to query evaluation result.", + "required": false, + "type": "string", + "format": "date-time" + }, + { + "name": "maxResults", + "in": "query", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve fewer than upper limit of 50 results, you can add this parameter to your request. maxResults should not exceed the upper limit. The response might contain fewer results than maxResults, but it will never contain more. If there are additional results that satisfy the search criteria, but these results were not returned, the response contains isTruncated = true.", + "required": false, + "type": "integer", + "maximum": 50, + "minimum": 1 + }, + { + "name": "nextToken", + "in": "query", + "description": "When response to this API call is truncated (that is, isTruncated response element value is true), the response also includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that Skill Management API understands. Token has expiry of 24 hours.", + "required": false, + "type": "string", + "maxLength": 2047, + "minLength": 1 + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the evaluation infomation.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body." + } + }, + "schema": { + "$ref": "#/definitions/v1.smartHomeEvaluation.ListSHCapabilityEvaluationsResponse" + } + }, + "400": { + "description": "Bad Request. Returned when the request payload is malformed or when, at least, one required property is missing or invalid.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "403": { + "description": "API user does not have permission or is currently in a state that does not allow calls to this API.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified skill, test plan, or evaluation does not exist. The error response will contain a description that indicates the specific resource type that was not found.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "429": { + "description": "Exceeded the permitted request limit. Throttling criteria includes total requests, per API and CustomerId.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "default": { + "description": "Internal server error.\n", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "listSmarthomeCapabilityEvaluationsV1" + }, + "post": { + "tags": [ + "skillManagement" + ], + "summary": "Start a capability evaluation against a Smart Home skill.", + "description": "Start a capability evaluation against a Smart Home skill.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "in": "body", + "name": "EvaluateSHCapabilityPayload", + "description": "Payload sent to start a capability evaluation against a Smart Home skill.", + "required": false, + "schema": { + "$ref": "#/definitions/v1.smartHomeEvaluation.EvaluateSHCapabilityRequest" + } + } + ], + "responses": { + "200": { + "description": "Evaluation has successfully begun.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The content type of the response body." + }, + "Location": { + "type": "string", + "description": "Get location of the capability evaluaiton." + } + }, + "schema": { + "$ref": "#/definitions/v1.smartHomeEvaluation.EvaluateSHCapabilityResponse" + } + }, + "400": { + "description": "Bad Request. Returned when the request payload is malformed or when, at least, one required property is missing or invalid.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "403": { + "description": "API user does not have permission or is currently in a state that does not allow calls to this API.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "404": { + "description": "The specified skill, test plan, or evaluation does not exist. The error response will contain a description that indicates the specific resource type that was not found.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "409": { + "description": "A test run is already in progress for the specified endpoint. Please retry after some time.\n", + "schema": { + "$ref": "#/definitions/v1.Error" + } + }, + "429": { + "description": "Exceeded the permitted request limit. Throttling criteria includes total requests, per API and CustomerId.\n", + "schema": { + "$ref": "#/definitions/v1.BadRequestError" + } + }, + "default": { + "description": "Internal server error.\n", + "schema": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "x-operation-name": "createSmarthomeCapabilityEvaluationV1" + } + }, + "/v2/skills/{skillId}/stages/{stage}/simulations": { + "post": { + "tags": [ + "skillManagement" + ], + "summary": "Simulate executing a skill with the given id against a given stage.", + "description": "This is an asynchronous API that simulates a skill execution in the Alexa eco-system given an utterance text of what a customer would say to Alexa. A successful response will contain a header with the location of the simulation resource. In cases where requests to this API results in an error, the response will contain an error code and a description of the problem. The skill being simulated must belong to and be enabled by the user of this API. Concurrent requests per user is currently not supported.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + }, + { + "in": "body", + "name": "simulationsApiRequest", + "description": "Payload sent to the skill simulation API.", + "required": true, + "schema": { + "$ref": "#/definitions/v2.skill.simulations.SimulationsApiRequest" + } + } + ], + "responses": { + "200": { + "description": "Skill simulation has successfully began.", + "headers": { + "Location": { + "type": "string", + "description": "Path to simulation resource." + }, + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v2.skill.simulations.SimulationsApiResponse" + } + }, + "400": { + "description": "Bad request due to invalid or missing data.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v2.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": {}, + "schema": { + "$ref": "#/definitions/v2.Error" + } + }, + "403": { + "description": "API user does not have permission to call this API or is currently in a state that does not allow simulation of this skill.\n", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v2.BadRequestError" + } + }, + "404": { + "description": "The specified skill does not exist.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v2.Error" + } + }, + "409": { + "description": "This requests conflicts with another one currently being processed.\n", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v2.Error" + } + }, + "429": { + "description": "API user has exceeded the permitted request rate.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v2.Error" + } + }, + "500": { + "description": "Internal service error.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v2.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v2.Error" + } + } + }, + "x-operation-name": "simulateSkillV2" + } + }, + "/v2/skills/{skillId}/stages/{stage}/simulations/{simulationId}": { + "get": { + "tags": [ + "skillManagement" + ], + "summary": "Get the result of a previously executed simulation.", + "description": "This API gets the result of a previously executed simulation. A successful response will contain the status of the executed simulation. If the simulation successfully completed, the response will also contain information related to skill invocation. In cases where requests to this API results in an error, the response will contain an error code and a description of the problem. In cases where the simulation failed, the response will contain a status attribute indicating that a failure occurred and details about what was sent to the skill endpoint. Note that simulation results are stored for 10 minutes. A request for an expired simulation result will return a 404 HTTP status code.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + }, + { + "name": "simulationId", + "in": "path", + "description": "Id of the simulation.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Successfully retrieved skill simulation information.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v2.skill.simulations.SimulationsApiResponse" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": {}, + "schema": { + "$ref": "#/definitions/v2.Error" + } + }, + "403": { + "description": "API user does not have permission or is currently in a state that does not allow calls to this API.\n", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v2.BadRequestError" + } + }, + "404": { + "description": "The specified skill or simulation does not exist. The error response will contain a description that indicates the specific resource type that was not found.\n", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v2.Error" + } + }, + "429": { + "description": "API user has exceeded the permitted request rate.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v2.Error" + } + }, + "500": { + "description": "Internal service error.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v2.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "headers": {}, + "schema": { + "$ref": "#/definitions/v2.Error" + } + } + }, + "x-operation-name": "getSkillSimulationV2" + } + }, + "/v2/skills/{skillId}/stages/{stage}/invocations": { + "post": { + "tags": [ + "skillManagement" + ], + "summary": "Invokes the Lambda or third party HTTPS endpoint for the given skill against a given stage.", + "description": "This is a synchronous API that invokes the Lambda or third party HTTPS endpoint for a given skill. A successful response will contain information related to what endpoint was called, payload sent to and received from the endpoint. In cases where requests to this API results in an error, the response will contain an error code and a description of the problem. In cases where invoking the skill endpoint specifically fails, the response will contain a status attribute indicating that a failure occurred and details about what was sent to the endpoint. The skill must belong to and be enabled by the user of this API. Also, note that calls to the skill endpoint will timeout after 10 seconds. This API is currently designed in a way that allows extension to an asynchronous API if a significantly bigger timeout is required.\n", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "name": "stage", + "in": "path", + "description": "Stage for skill.", + "required": true, + "type": "string", + "maxLength": 63, + "minLength": 1 + }, + { + "in": "body", + "name": "invocationsApiRequest", + "description": "Payload sent to the skill invocation API.", + "required": false, + "schema": { + "$ref": "#/definitions/v2.skill.invocations.invocationsApiRequest" + } + } + ], + "responses": { + "200": { + "description": "Skill was invoked.", + "headers": {}, + "schema": { + "$ref": "#/definitions/v2.skill.invocations.InvocationsApiResponse" + } + }, + "400": { + "description": "Bad request due to invalid or missing data.", + "headers": {}, + "schema": { + "$ref": "#/definitions/v2.BadRequestError" + } + }, + "401": { + "description": "The auth token is invalid/expired or doesn't have access to the resource.", + "headers": {}, + "schema": { + "$ref": "#/definitions/v2.Error" + } + }, + "403": { + "description": "API user does not have permission to call this API or is currently in a state that does not allow invocation of this skill.\n", + "headers": {}, + "schema": { + "$ref": "#/definitions/v2.BadRequestError" + } + }, + "404": { + "description": "The specified skill does not exist.", + "headers": {}, + "schema": { + "$ref": "#/definitions/v2.Error" + } + }, + "429": { + "description": "API user has exceeded the permitted request rate.", + "headers": {}, + "schema": { + "$ref": "#/definitions/v2.Error" + } + }, + "500": { + "description": "Internal service error.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v2.Error" + } + }, + "503": { + "description": "Service Unavailable.", + "headers": { + "Content-Type": { + "type": "string", + "description": "Returned content type, only application/json supported." + } + }, + "schema": { + "$ref": "#/definitions/v2.Error" + } + } + }, + "x-operation-name": "invokeSkillEndPointV2" + } + }, + "/v2/skills/{skillId}/metrics": {}, + "/v2/skills/metrics": {} + }, + "securityDefinitions": { + "skillManagement": { + "type": "oauth2", + "authorizationUrl": "api.amazon.com/ap/oa", + "tokenUrl": "https://api.amazon.com/auth/o2/token", + "flow": "accessCode", + "x-use-refresh-grant": true + } + }, + "definitions": { + "v1.BadRequestError": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "Human readable description of error." + }, + "violations": { + "type": "array", + "description": "An array of violation messages.", + "items": { + "$ref": "#/definitions/v1.Error" + } + } + } + }, + "v1.Error": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "code": { + "type": "string", + "description": "Error code that maps to an error message. Developers with different locales should be able to lookup the error description based on this code.\n" + }, + "message": { + "type": "string", + "description": "Readable description of error. If standardized, this is generated from the error code and validation details." + } + }, + "x-baseType": true, + "x-concreteType": true + }, + "v2.BadRequestError": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "Human readable description of error." + }, + "violations": { + "type": "array", + "description": "An array of violation messages.", + "items": { + "$ref": "#/definitions/v2.Error" + } + } + } + }, + "v2.Error": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "code": { + "type": "string", + "description": "Error code that maps to an error message. Developers with different locales should be able to lookup the error description based on this code.\n" + }, + "message": { + "type": "string", + "description": "Readable description of error." + } + } + }, + "v1.Links": { + "type": "object", + "properties": { + "self": { + "$ref": "#/definitions/v1.Link" + }, + "next": { + "$ref": "#/definitions/v1.Link" + } + }, + "description": "Links for the API navigation." + }, + "v1.Link": { + "type": "object", + "properties": { + "href": { + "type": "string" + } + } + }, + "v1.StageV2Type": { + "type": "string", + "enum": [ + "live", + "certified", + "development" + ] + }, + "v1.StageType": { + "type": "string", + "enum": [ + "development", + "live" + ] + }, + "v0.BadRequestError": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "Human readable description of error." + }, + "violations": { + "type": "array", + "description": "An array of violation messages.", + "items": { + "$ref": "#/definitions/v0.Error" + } + } + } + }, + "v0.Error": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "code": { + "type": "string", + "description": "Error code that maps to an error message. Developers with different locales should be able to lookup the error description based on this code.\n" + }, + "message": { + "type": "string", + "description": "Readable description of error." + } + } + }, + "v0.catalog.CreateCatalogRequest": { + "type": "object", + "required": [ + "title", + "type", + "usage", + "vendorId" + ], + "properties": { + "title": { + "type": "string", + "description": "Title of the catalog." + }, + "type": { + "$ref": "#/definitions/v0.catalog.CatalogType", + "x-isEnum": true + }, + "usage": { + "$ref": "#/definitions/v0.catalog.CatalogUsage", + "x-isEnum": true + }, + "vendorId": { + "type": "string", + "description": "ID of the vendor owning the catalog.", + "minLength": 1, + "maxLength": 255 + } + } + }, + "v0.catalog.ListCatalogsResponse": { + "type": "object", + "properties": { + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "catalogs": { + "type": "array", + "description": "List of catalog summaries.\n", + "items": { + "$ref": "#/definitions/v0.catalog.CatalogSummary" + } + }, + "isTruncated": { + "type": "boolean" + }, + "nextToken": { + "type": "string" + } + }, + "description": "Information about catalogs." + }, + "v0.catalog.CatalogDetails": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of the added catalog object." + }, + "title": { + "type": "string", + "description": "Title of the catalog." + }, + "type": { + "$ref": "#/definitions/v0.catalog.CatalogType", + "x-isEnum": true + }, + "usage": { + "$ref": "#/definitions/v0.catalog.CatalogUsage", + "x-isEnum": true + }, + "lastUpdatedDate": { + "type": "string", + "format": "date-time", + "description": "The date time when the catalog was last updated." + }, + "createdDate": { + "type": "string", + "format": "date-time", + "description": "The date time when the catalog was created." + }, + "associatedSkillIds": { + "type": "array", + "description": "The list of skill Ids associated with the catalog.", + "items": { + "type": "string" + } + } + } + }, + "v0.catalog.CatalogSummary": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of the added catalog object." + }, + "title": { + "type": "string", + "description": "Title of the catalog." + }, + "type": { + "$ref": "#/definitions/v0.catalog.CatalogType", + "x-isEnum": true + }, + "usage": { + "$ref": "#/definitions/v0.catalog.CatalogUsage", + "x-isEnum": true + }, + "lastUpdatedDate": { + "type": "string", + "format": "date-time", + "description": "The date time when the catalog was last updated." + }, + "createdDate": { + "type": "string", + "format": "date-time", + "description": "The date time when the catalog was created." + }, + "associatedSkillIds": { + "type": "array", + "description": "The list of skill Ids associated with the catalog.", + "items": { + "type": "string" + } + } + } + }, + "v0.catalog.CatalogType": { + "type": "string", + "description": "Type of catalog.", + "enum": [ + "AMAZON.BroadcastChannel", + "AMAZON.Genre", + "AMAZON.MusicAlbum", + "AMAZON.MusicGroup", + "AMAZON.MusicPlaylist", + "AMAZON.MusicRecording", + "AMAZON.TerrestrialRadioChannel", + "AMAZON.AudioRecording" + ] + }, + "v0.catalog.CatalogUsage": { + "type": "string", + "description": "Usage of the catalog.", + "enum": [ + "AlexaMusic.Catalog.BroadcastChannel", + "AlexaMusic.Catalog.Genre", + "AlexaMusic.Catalog.MusicAlbum", + "AlexaMusic.Catalog.MusicGroup", + "AlexaMusic.Catalog.MusicPlaylist", + "AlexaMusic.Catalog.MusicRecording", + "AlexaMusic.Catalog.TerrestrialRadioChannel", + "AlexaTest.Catalog.AudioRecording" + ] + }, + "v0.catalog.upload.CompleteUploadRequest": { + "type": "object", + "properties": { + "partETags": { + "type": "array", + "description": "List of (eTag, part number) pairs for each part of the file uploaded.", + "items": { + "$ref": "#/definitions/v0.catalog.upload.PreSignedUrlItem" + }, + "maxItems": 1000, + "minItems": 1 + } + } + }, + "v0.catalog.upload.CreateContentUploadRequest": { + "type": "object", + "properties": { + "numberOfUploadParts": { + "type": "integer", + "description": "Provides the number of parts the file will be split into. An equal number of presigned upload urls are generated in response to facilitate each part's upload." + } + } + }, + "v0.catalog.upload.UploadStatus": { + "type": "string", + "description": "Status of the entire upload.", + "enum": [ + "PENDING", + "PROCESSING", + "FAILED", + "SUCCEEDED" + ] + }, + "v0.catalog.upload.IngestionStepName": { + "type": "string", + "enum": [ + "UPLOAD", + "SCHEMA_VALIDATION" + ] + }, + "v0.catalog.upload.IngestionStatus": { + "type": "string", + "enum": [ + "PENDING", + "IN_PROGRESS", + "FAILED", + "SUCCEEDED", + "CANCELLED" + ] + }, + "v0.catalog.upload.UploadIngestionStep": { + "type": "object", + "required": [ + "errors", + "name", + "status" + ], + "properties": { + "name": { + "$ref": "#/definitions/v0.catalog.upload.IngestionStepName", + "x-isEnum": true + }, + "status": { + "$ref": "#/definitions/v0.catalog.upload.IngestionStatus", + "x-isEnum": true + }, + "logUrl": { + "type": "string", + "description": "Represents the url for the file containing logs of ingestion step." + }, + "errors": { + "type": "array", + "description": "This array will contain the errors occurred during the execution of step. Will be empty, if execution succeeded.", + "items": { + "$ref": "#/definitions/v0.Error" + } + } + }, + "description": "Represents a single step in the ingestion process of a new upload." + }, + "v0.catalog.upload.ListUploadsResponse": { + "type": "object", + "properties": { + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "isTruncated": { + "type": "boolean" + }, + "nextToken": { + "type": "string" + }, + "uploads": { + "type": "array", + "description": "List of upload summaries.", + "items": { + "$ref": "#/definitions/v0.catalog.upload.ContentUploadSummary" + } + } + } + }, + "v0.catalog.upload.ContentUploadSummary": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of the upload." + }, + "catalogId": { + "type": "string", + "description": "Provides a unique identifier of the catalog." + }, + "status": { + "$ref": "#/definitions/v0.catalog.upload.UploadStatus", + "x-isEnum": true + }, + "createdDate": { + "type": "string", + "format": "date-time" + }, + "lastUpdatedDate": { + "type": "string", + "format": "date-time" + } + } + }, + "v0.catalog.upload.ContentUploadFileSummary": { + "type": "object", + "properties": { + "presignedDownloadUrl": { + "type": "string", + "description": "If the file is available for download, presigned download URL can be used to download the file." + }, + "status": { + "$ref": "#/definitions/v0.catalog.upload.FileUploadStatus", + "x-isEnum": true + } + } + }, + "v0.catalog.upload.CreateContentUploadResponse": { + "allOf": [ + { + "$ref": "#/definitions/v0.catalog.upload.ContentUploadSummary" + }, + { + "type": "object", + "properties": { + "ingestionSteps": { + "type": "array", + "items": { + "$ref": "#/definitions/v0.catalog.upload.UploadIngestionStep" + } + }, + "presignedUploadParts": { + "type": "array", + "description": "Ordered list of presigned upload parts to perform a partitioned (multipart) file upload.", + "items": { + "$ref": "#/definitions/v0.catalog.upload.PresignedUploadPart" + } + } + } + } + ], + "description": "Request body for self-hosted catalog uploads." + }, + "v0.catalog.upload.GetContentUploadResponse": { + "allOf": [ + { + "$ref": "#/definitions/v0.catalog.upload.ContentUploadSummary" + }, + { + "type": "object", + "properties": { + "file": { + "$ref": "#/definitions/v0.catalog.upload.ContentUploadFileSummary" + }, + "ingestionSteps": { + "type": "array", + "items": { + "$ref": "#/definitions/v0.catalog.upload.UploadIngestionStep" + } + } + } + } + ], + "description": "Response object for get content upload request." + }, + "v0.catalog.upload.FileUploadStatus": { + "type": "string", + "description": "Value of status depends on if file is available for download or not.", + "enum": [ + "PENDING", + "AVAILABLE", + "PURGED", + "UNAVAILABLE" + ] + }, + "v0.catalog.upload.PresignedUploadPart": { + "type": "object", + "properties": { + "url": { + "type": "string" + }, + "partNumber": { + "type": "integer" + } + }, + "description": "Single upload part to perform a partitioned (multipart) file upload." + }, + "v0.catalog.upload.PreSignedUrlItem": { + "type": "object", + "required": [ + "eTag", + "partNumber" + ], + "properties": { + "eTag": { + "type": "string" + }, + "partNumber": { + "type": "integer", + "minimum": 1, + "maximum": 1000 + } + } + }, + "v0.developmentEvents.subscriber.Endpoint": { + "type": "object", + "properties": { + "uri": { + "type": "string", + "description": "Uri of the endpoint that receives the notification." + }, + "authorization": { + "$ref": "#/definitions/v0.developmentEvents.subscriber.EndpointAuthorization" + } + } + }, + "v0.developmentEvents.subscriber.EndpointAuthorization": { + "type": "object", + "required": [ + "type" + ], + "discriminator": "type", + "properties": { + "type": { + "type": "string", + "x-isDiscriminator": true + } + }, + "description": "Authorization information to be able to publish notification to specified endpoint." + }, + "v0.developmentEvents.subscriber.EndpointAwsAuthorization": { + "allOf": [ + { + "$ref": "#/definitions/v0.developmentEvents.subscriber.EndpointAuthorization" + }, + { + "type": "object", + "properties": { + "arn": { + "type": "string", + "description": "IAM Role arn to use/assumeRole for authorization." + } + } + } + ], + "description": "Authorization for accessing AWS SNS endpoint.", + "x-discriminator-value": "AWS_IAM" + }, + "v0.developmentEvents.subscriber.EndpointAuthorizationType": { + "type": "string", + "description": "Type of authorization (e.g. AWS IAM, OAuth).", + "enum": [ + "AWS_IAM" + ] + }, + "v0.developmentEvents.subscriber.SubscriberInfo": { + "type": "object", + "properties": { + "subscriberId": { + "type": "string", + "description": "Unique identifier of the subscriber resource." + }, + "name": { + "type": "string", + "description": "Name of the subscriber." + }, + "endpoint": { + "$ref": "#/definitions/v0.developmentEvents.subscriber.Endpoint" + } + }, + "description": "Information about the subscriber." + }, + "v0.developmentEvents.subscriber.SubscriberSummary": { + "type": "object", + "properties": { + "subscriberId": { + "type": "string", + "description": "Unique identifier of the subscriber resource." + }, + "name": { + "type": "string", + "description": "Name of the subscriber." + }, + "status": { + "$ref": "#/definitions/v0.developmentEvents.subscriber.SubscriberStatus", + "x-isEnum": true + }, + "clientId": { + "type": "string", + "description": "Client Id of the subscriber resource." + }, + "endpoint": { + "$ref": "#/definitions/v0.developmentEvents.subscriber.Endpoint" + } + } + }, + "v0.developmentEvents.subscriber.SubscriberStatus": { + "type": "string", + "description": "Status of the subscriber. This enum may get extended with new values in future. Clients are expected to gracefully handle any unknown values.", + "enum": [ + "ACTIVE", + "INACTIVE" + ] + }, + "v0.developmentEvents.subscriber.ListSubscribersResponse": { + "type": "object", + "properties": { + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "nextToken": { + "type": "string" + }, + "subscribers": { + "type": "array", + "description": "List containing subscriber summary.", + "items": { + "$ref": "#/definitions/v0.developmentEvents.subscriber.SubscriberSummary" + } + } + } + }, + "v0.developmentEvents.subscriber.CreateSubscriberRequest": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the subscriber." + }, + "vendorId": { + "type": "string", + "description": "The Vendor ID." + }, + "endpoint": { + "$ref": "#/definitions/v0.developmentEvents.subscriber.Endpoint" + } + } + }, + "v0.developmentEvents.subscriber.UpdateSubscriberRequest": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the subscriber." + }, + "endpoint": { + "$ref": "#/definitions/v0.developmentEvents.subscriber.Endpoint" + } + } + }, + "v0.developmentEvents.subscription.Event": { + "type": "string", + "description": "Represents an event that the subscriber is interested in. The event is of the format EventCategory.OPERATION. You can use wildcard event 'AlexaDevelopmentEvent.All' for recieving all AlexaDevelopmentEvent notifications listed below. We do not support 'AlexaCustomerFeedbackEvent.All' at this point as we only have one event in this category.\n * 'AlexaDevelopmentEvent.ManifestUpdate' - The event representing the status of the update request on the Manifest.\n * 'AlexaDevelopmentEvent.SkillPublish' - The event representing the status of the skill publish process.\n * 'AlexaDevelopmentEvent.SkillCertification' - The event represents if a skill has been certified or not.\n * 'AlexaDevelopmentEvent.InteractionModelUpdate' - The event represents the status of an Interaction Model build for a particular locale.\n * 'AlexaDevelopmentEvent.All' - A wildcard event name that allows subscription to all the existing events. While using this, you must not specify any other event name. AlexaDevelopmentEvent.All avoids the need of specifying every development event name in order to receive all events pertaining to a vendor account. Similarly, it avoids the need of updating an existing subscription to be able to receive new events, whenever supproted by notification service. Test Subscriber API cannot use this wildcard. Please make sure that your code can gracefully handle new/previously unknown events, if you are using this wildcard.\n * 'AlexaCustomerFeedbackEvent.SkillReviewPublish' - The event represents the publishing of a new/updated customer review for a skill on the skill store.\n", + "enum": [ + "AlexaDevelopmentEvent.ManifestUpdate", + "AlexaDevelopmentEvent.SkillPublish", + "AlexaDevelopmentEvent.SkillCertification", + "AlexaDevelopmentEvent.InteractionModelUpdate", + "AlexaDevelopmentEvent.All", + "AlexaCustomerFeedbackEvent.SkillReviewPublish" + ] + }, + "v0.developmentEvents.subscription.SubscriptionInfo": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the subscription." + }, + "subscriptionId": { + "type": "string", + "description": "Unique identifier of the subscription resource." + }, + "subscriberId": { + "type": "string", + "description": "Subscriber Id of the event-receiver." + }, + "vendorId": { + "type": "string", + "description": "Vendor Id of the event-publisher." + }, + "events": { + "type": "array", + "description": "The list of events that the subscriber should be notified for.", + "items": { + "$ref": "#/definitions/v0.developmentEvents.subscription.Event" + } + } + } + }, + "v0.developmentEvents.subscription.SubscriptionSummary": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the subscription." + }, + "subscriptionId": { + "type": "string", + "description": "Unique identifier of the subscription resource." + }, + "subscriberId": { + "type": "string", + "description": "Subscriber Id of the event-reciever." + }, + "vendorId": { + "type": "string", + "description": "VendorId of the event-publisher." + }, + "events": { + "type": "array", + "description": "The list of events that the subscriber should be notified for.", + "items": { + "$ref": "#/definitions/v0.developmentEvents.subscription.Event" + } + } + } + }, + "v0.developmentEvents.subscription.ListSubscriptionsResponse": { + "type": "object", + "properties": { + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "nextToken": { + "type": "string" + }, + "subscriptions": { + "type": "array", + "description": "List of subscription summaries.", + "items": { + "$ref": "#/definitions/v0.developmentEvents.subscription.SubscriptionSummary" + } + } + } + }, + "v0.developmentEvents.subscription.CreateSubscriptionRequest": { + "type": "object", + "required": [ + "events", + "name", + "subscriberId" + ], + "properties": { + "name": { + "type": "string", + "description": "Name of the subscription." + }, + "events": { + "type": "array", + "description": "The list of events that the subscriber should be notified for.", + "items": { + "$ref": "#/definitions/v0.developmentEvents.subscription.Event" + } + }, + "vendorId": { + "type": "string", + "description": "The vendorId of the event publisher." + }, + "subscriberId": { + "type": "string", + "description": "The id of the subscriber that would receive the events." + } + } + }, + "v0.developmentEvents.subscription.UpdateSubscriptionRequest": { + "type": "object", + "required": [ + "events", + "name" + ], + "properties": { + "name": { + "type": "string", + "description": "Name of the subscription.", + "minLength": 1, + "maxLength": 255 + }, + "events": { + "type": "array", + "description": "The list of events that the subscriber should be notified for.", + "items": { + "$ref": "#/definitions/v0.developmentEvents.subscription.Event" + } + } + } + }, + "v0.eventSchema.AlexaDevelopmentEvent.ManifestUpdate": { + "allOf": [ + { + "$ref": "#/definitions/v0.eventSchema.BaseSchema" + }, + { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "A development notification includes a unique identifier that identifies the original request that resulted in the development notification. The requestId for original request is returned by Amazon APIs in response's 'X-Amzn-RequestId' header.\n" + }, + "payload": { + "$ref": "#/definitions/v0.eventSchema.SkillEventAttributes" + } + } + } + ], + "description": "'AlexaDevelopmentEvent.ManifestUpdate' event represents the status of the update request on the Manifest. This event is generated when request to create a skill or update an existing skill is completed. The request may complete either with `SUCCEEDED` or `FAILED` status.", + "x-discriminator-value": "AlexaDevelopmentEvent.ManifestUpdate" + }, + "v0.eventSchema.AlexaDevelopmentEvent.SkillPublish": { + "allOf": [ + { + "$ref": "#/definitions/v0.eventSchema.BaseSchema" + }, + { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "A development notification includes a unique identifier that identifies the original request that resulted in the development notification. The requestId for original request is returned by Amazon APIs in response's 'X-Amzn-RequestId' header.\n" + }, + "payload": { + "$ref": "#/definitions/v0.eventSchema.SkillEventAttributes" + } + } + } + ], + "description": "'AlexaDevelopmentEvent.SkillPublish' event represents the status of publish to live operation. When a developer submits a skill for certification, it goes through `certification workflow` followed by publish to live workflow. This event is generated in publish workflow and may complete either with `SUCCEEDED` or `FAILED` status. If 'SUCCEEDED', users can see and enable latest version of the skill via Alexa Skill Store.", + "x-discriminator-value": "AlexaDevelopmentEvent.SkillPublish" + }, + "v0.eventSchema.AlexaDevelopmentEvent.SkillCertification": { + "allOf": [ + { + "$ref": "#/definitions/v0.eventSchema.BaseSchema" + }, + { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "A development notification includes a unique identifier that identifies the original request that resulted in the development notification. The requestId for original request is returned by Amazon APIs in response's 'X-Amzn-RequestId' header.\n" + }, + "payload": { + "$ref": "#/definitions/v0.eventSchema.SkillEventAttributes" + } + } + } + ], + "description": "'AlexaDevelopmentEvent.SkillCertification' event represents the status of various validations of\n`certification workflow`. This step may complete either with `SUCCEEDED` or `FAILED` status.\n", + "x-discriminator-value": "AlexaDevelopmentEvent.SkillCertification" + }, + "v0.eventSchema.AlexaDevelopmentEvent.InteractionModelUpdate": { + "allOf": [ + { + "$ref": "#/definitions/v0.eventSchema.BaseSchema" + }, + { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "A development notification includes a unique identifier that identifies the original request that resulted in the development notification. The requestId for original request is returned by Amazon APIs in response's 'X-Amzn-RequestId' header.\n" + }, + "payload": { + "$ref": "#/definitions/v0.eventSchema.InteractionModelEventAttributes" + } + } + } + ], + "description": "'AlexaDevelopmentEvent.InteractionModelUpdate' event represents the status of set/update interaction model\nrequest. The update request may complete either with `SUCCEEDED` or `FAILED` status.\n", + "x-discriminator-value": "AlexaDevelopmentEvent.InteractionModelUpdate" + }, + "v0.eventSchema.AlexaCustomerFeedbackEvent.SkillReviewPublish": { + "allOf": [ + { + "$ref": "#/definitions/v0.eventSchema.BaseSchema" + }, + { + "type": "object", + "properties": { + "payload": { + "$ref": "#/definitions/v0.eventSchema.SkillReviewEventAttributes" + } + } + } + ], + "description": "'AlexaCustomerFeedbackEvent.SkillReviewPublish' event represents the publishing of a new/updated customer review for a skill.\n", + "x-discriminator-value": "AlexaCustomerFeedbackEvent.SkillReviewPublish" + }, + "v0.eventSchema.SkillEventAttributes": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v0.eventSchema.RequestStatus", + "x-isEnum": true + }, + "actor": { + "$ref": "#/definitions/v0.eventSchema.ActorAttributes" + }, + "skill": { + "$ref": "#/definitions/v0.eventSchema.SkillAttributes" + }, + "subscription": { + "$ref": "#/definitions/v0.eventSchema.SubscriptionAttributes" + } + }, + "description": "Skill event specific attributes.\n" + }, + "v0.eventSchema.SkillReviewEventAttributes": { + "type": "object", + "properties": { + "skill": { + "$ref": "#/definitions/v0.eventSchema.SkillAttributes" + }, + "subscription": { + "$ref": "#/definitions/v0.eventSchema.SubscriptionAttributes" + }, + "review": { + "$ref": "#/definitions/v0.eventSchema.SkillReviewAttributes" + } + }, + "description": "Skill Review by customer event specific attributes.\n" + }, + "v0.eventSchema.InteractionModelEventAttributes": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v0.eventSchema.RequestStatus", + "x-isEnum": true + }, + "actor": { + "$ref": "#/definitions/v0.eventSchema.ActorAttributes" + }, + "interactionModel": { + "$ref": "#/definitions/v0.eventSchema.InteractionModelAttributes" + }, + "subscription": { + "$ref": "#/definitions/v0.eventSchema.SubscriptionAttributes" + } + }, + "description": "Interaction model event specific attributes.\n" + }, + "v0.eventSchema.BaseSchema": { + "type": "object", + "required": [ + "eventName" + ], + "discriminator": "eventName", + "properties": { + "timestamp": { + "type": "string", + "format": "date-time", + "description": "ISO 8601 timestamp for the instant when event was created.\n" + }, + "eventName": { + "type": "string", + "x-isDiscriminator": true + } + }, + "description": "Represents attributes common to all development notifications.\n" + }, + "v0.eventSchema.SkillAttributes": { + "type": "object", + "properties": { + "skillId": { + "type": "string", + "format": "Amazon Common Identifier", + "description": "Unique identifier of an Alexa skill.\n" + }, + "vendorId": { + "type": "string", + "description": "Unique identifier of vendor account to which this skill belongs.\n" + } + }, + "description": "Represents a set of attributes specific to an Alexa Skill.\n" + }, + "v0.eventSchema.InteractionModelAttributes": { + "allOf": [ + { + "$ref": "#/definitions/v0.eventSchema.SkillAttributes" + }, + { + "type": "object", + "properties": { + "locale": { + "type": "string", + "format": "languager-region; same as BCP-47 language tag format", + "description": "Locale of interaction model.\n" + } + } + } + ], + "description": "Represents a set of attributes specific to interaction model of an Alexa Skill.\n" + }, + "v0.eventSchema.SubscriptionAttributes": { + "type": "object", + "properties": { + "subscriptionId": { + "type": "string", + "format": "Amazon Common Identifier", + "description": "Unique subscription id that triggered the development notification event.\n" + } + }, + "description": "Represents attributes of a subscription for development notification.\n" + }, + "v0.eventSchema.ActorAttributes": { + "type": "object", + "properties": { + "customerId": { + "type": "string", + "description": "Identifies an Amazon Customer who submitted a request corresponding to the generated event.\n" + } + }, + "description": "Represents an actor that submitted a request causing development notification event.\n" + }, + "v0.eventSchema.SkillReviewAttributes": { + "type": "object", + "properties": { + "reviewId": { + "type": "string", + "description": "Unique review id associated with a customer review for a skill.\n" + }, + "url": { + "type": "string", + "description": "Link to the customer review on Amazon retail website.\n" + }, + "starRating": { + "type": "string", + "description": "StarRating provided by the customer in the review. It is always a natural number from 1 to 5 (inclusive of 1 and 5).\n" + } + }, + "description": "Represents attributes of a customer review for a skill.\n" + }, + "v0.eventSchema.RequestStatus": { + "type": "string", + "description": "Represents the completion status of the request.\n", + "enum": [ + "SUCCEEDED", + "FAILED" + ] + }, + "v1.catalog.CreateContentUploadUrlRequest": { + "type": "object", + "required": [ + "numberOfUploadParts" + ], + "properties": { + "numberOfUploadParts": { + "type": "integer", + "example": 1, + "description": "Provides the number of parts the file will be split into. An equal number of presigned upload urls are generated in response to facilitate each part's upload.", + "minimum": 1, + "maximum": 1000 + } + } + }, + "v1.catalog.CreateContentUploadUrlResponse": { + "type": "object", + "required": [ + "urlId" + ], + "properties": { + "urlId": { + "type": "string", + "description": "Unique identifier for collection of generated urls." + }, + "presignedUploadParts": { + "type": "array", + "description": "Ordered list of presigned upload parts to perform a partitioned (multipart) file upload", + "items": { + "$ref": "#/definitions/v1.catalog.PresignedUploadPartItems" + } + } + } + }, + "v1.catalog.PresignedUploadPartItems": { + "type": "object", + "required": [ + "expiresAt", + "partNumber", + "url" + ], + "properties": { + "url": { + "type": "string" + }, + "partNumber": { + "type": "integer" + }, + "expiresAt": { + "type": "string", + "format": "date-time" + } + } + }, + "v1.catalog.upload.CatalogUploadBase": { + "type": "object", + "x-baseType": true + }, + "v1.catalog.upload.Location": { + "allOf": [ + { + "$ref": "#/definitions/v1.catalog.upload.CatalogUploadBase" + }, + { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "self hosted url location." + } + } + } + ], + "description": "Request body for self-hosted catalog uploads", + "x-inheritsFrom": "v1.catalog.upload.CatalogUploadBase" + }, + "v1.catalog.upload.PreSignedUrl": { + "allOf": [ + { + "$ref": "#/definitions/v1.catalog.upload.CatalogUploadBase" + }, + { + "type": "object", + "required": [ + "urlId" + ], + "properties": { + "urlId": { + "type": "string", + "description": "Unique identifier for urls" + }, + "partETags": { + "type": "array", + "description": "List of (eTag, part number) pairs for each part of the file uploaded", + "items": { + "$ref": "#/definitions/v1.catalog.upload.PreSignedUrlItem" + }, + "maxItems": 1000, + "minItems": 1 + } + } + } + ], + "description": "Request body for self-hosted catalog uploads", + "x-inheritsFrom": "v1.catalog.upload.CatalogUploadBase" + }, + "v1.catalog.upload.PreSignedUrlItem": { + "type": "object", + "properties": { + "eTag": { + "type": "string" + }, + "partNumber": { + "type": "integer" + } + } + }, + "v1.catalog.upload.GetContentUploadResponse": { + "type": "object", + "required": [ + "catalogId", + "createdDate", + "file", + "id", + "ingestionSteps", + "lastUpdatedDate", + "status" + ], + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of the upload" + }, + "catalogId": { + "type": "string", + "description": "Unique identifier of the added catalog object" + }, + "status": { + "$ref": "#/definitions/v1.catalog.upload.UploadStatus", + "x-isEnum": true + }, + "createdDate": { + "type": "string", + "format": "date-time" + }, + "lastUpdatedDate": { + "type": "string", + "format": "date-time" + }, + "file": { + "$ref": "#/definitions/v1.catalog.upload.ContentUploadFileSummary" + }, + "ingestionSteps": { + "type": "array", + "description": "List of different steps performed on the upload.", + "items": { + "$ref": "#/definitions/v1.catalog.upload.UploadIngestionStep" + } + } + } + }, + "v1.catalog.upload.UploadStatus": { + "type": "string", + "description": "Status of the entire upload.", + "enum": [ + "PENDING", + "IN_PROGRESS", + "FAILED", + "SUCCEEDED" + ] + }, + "v1.catalog.upload.ContentUploadFileSummary": { + "type": "object", + "required": [ + "downloadUrl", + "expiresAt", + "status" + ], + "properties": { + "downloadUrl": { + "type": "string", + "format": "uri", + "description": "If the file is available for download, downloadUrl can be used to download the file." + }, + "expiresAt": { + "type": "string", + "format": "date-time" + }, + "status": { + "$ref": "#/definitions/v1.catalog.upload.FileUploadStatus", + "x-isEnum": true + } + } + }, + "v1.catalog.upload.FileUploadStatus": { + "type": "string", + "description": "Value of status depends on if file is available for download or not.", + "enum": [ + "PENDING", + "AVAILABLE", + "PURGED", + "UNAVAILABLE" + ] + }, + "v1.catalog.upload.UploadIngestionStep": { + "type": "object", + "required": [ + "name", + "status", + "violations" + ], + "properties": { + "name": { + "$ref": "#/definitions/v1.catalog.upload.IngestionStepName", + "x-isEnum": true + }, + "status": { + "$ref": "#/definitions/v1.catalog.upload.IngestionStatus", + "x-isEnum": true + }, + "logUrl": { + "type": "string", + "format": "uri", + "description": "Url for the file containing logs of ingestion step." + }, + "violations": { + "type": "array", + "description": "This array will contain the violations occurred during the execution of step. Will be empty, if execution succeeded.", + "items": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "description": "Represents a single step in the multi-step ingestion process of a new upload." + }, + "v1.catalog.upload.IngestionStepName": { + "type": "string", + "enum": [ + "UPLOAD", + "SCHEMA_VALIDATION" + ] + }, + "v1.catalog.upload.IngestionStatus": { + "type": "string", + "enum": [ + "PENDING", + "IN_PROGRESS", + "FAILED", + "SUCCEEDED", + "CANCELLED" + ] + }, + "v1.isp.ProductType": { + "type": "string", + "description": "Type of in-skill product.", + "enum": [ + "SUBSCRIPTION", + "ENTITLEMENT", + "CONSUMABLE" + ] + }, + "v1.isp.ListInSkillProductResponse": { + "type": "object", + "properties": { + "inSkillProductSummaryList": { + "$ref": "#/definitions/v1.isp.ListInSkillProduct" + } + }, + "description": "List of in-skill product response." + }, + "v1.isp.ListInSkillProduct": { + "type": "object", + "properties": { + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "inSkillProducts": { + "type": "array", + "description": "Information for each in-skill product.", + "items": { + "$ref": "#/definitions/v1.isp.InSkillProductSummary" + } + }, + "isTruncated": { + "type": "boolean" + }, + "nextToken": { + "type": "string" + } + }, + "description": "List of in-skill products." + }, + "v1.isp.PurchasableState": { + "type": "string", + "description": "Whether or not the in-skill product is purchasable by customers. A product that is not purchasable will prevent new customers from being prompted to purchase the product. Customers who already own the product will see no effect and continue to have access to the product features.", + "enum": [ + "PURCHASABLE", + "NOT_PURCHASABLE" + ] + }, + "v1.isp.PromotableState": { + "type": "string", + "description": "Promote this ISP on Amazon channels such as Amazon.com. Enabling this setting will allow customers to view ISP detail pages and purchase the ISP on Amazon.com.", + "enum": [ + "IN_SKILL_ONLY", + "ALL_AMAZON_CHANNELS" + ] + }, + "v1.isp.InSkillProductSummaryResponse": { + "type": "object", + "properties": { + "inSkillProductSummary": { + "$ref": "#/definitions/v1.isp.InSkillProductSummary" + } + }, + "description": "In-skill product summary response." + }, + "v1.isp.InSkillProductSummary": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/v1.isp.ProductType", + "x-isEnum": true + }, + "productId": { + "type": "string", + "description": "primary identifier of in-skill product." + }, + "referenceName": { + "type": "string", + "description": "Developer selected in-skill product name. This is for developer reference only, it can be used to filter query results to identify a matching in-skill product." + }, + "lastUpdated": { + "type": "string", + "format": "date-time", + "description": "Date of last update." + }, + "nameByLocale": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "status": { + "$ref": "#/definitions/v1.isp.Status", + "x-isEnum": true + }, + "stage": { + "$ref": "#/definitions/v1.StageType", + "x-isEnum": true + }, + "editableState": { + "$ref": "#/definitions/v1.isp.EditableState", + "x-isEnum": true + }, + "purchasableState": { + "$ref": "#/definitions/v1.isp.PurchasableState", + "x-isEnum": true + }, + "promotableState": { + "$ref": "#/definitions/v1.isp.PromotableState", + "x-isEnum": true + }, + "_links": { + "$ref": "#/definitions/v1.isp.IspSummaryLinks" + }, + "pricing": { + "type": "object", + "description": "In-skill product pricing information.", + "additionalProperties": { + "$ref": "#/definitions/v1.isp.SummaryMarketplacePricing" + } + } + }, + "description": "Information about the in-skill product that is not editable." + }, + "v1.isp.Status": { + "type": "string", + "description": "Current status of in-skill product.", + "enum": [ + "INCOMPLETE", + "COMPLETE", + "CERTIFICATION", + "PUBLISHED", + "SUPPRESSED" + ] + }, + "v1.isp.EditableState": { + "type": "string", + "description": "Whether or not the in-skill product is editable.", + "enum": [ + "EDITABLE", + "NOT_EDITABLE" + ] + }, + "v1.isp.IspSummaryLinks": { + "type": "object", + "properties": { + "self": { + "$ref": "#/definitions/v1.Link" + } + } + }, + "v1.isp.SummaryMarketplacePricing": { + "type": "object", + "properties": { + "releaseDate": { + "type": "string", + "format": "date-time", + "description": "Date when in-skill product is available to customers for both purchase and use. Prior to this date the in-skill product will appear unavailable to customers and will not be purchasable." + }, + "defaultPriceListing": { + "$ref": "#/definitions/v1.isp.SummaryPriceListing" + } + }, + "description": "Localized in-skill product pricing information." + }, + "v1.isp.SummaryPriceListing": { + "type": "object", + "properties": { + "price": { + "type": "number", + "description": "The price of an in-skill product." + }, + "primeMemberPrice": { + "type": "number", + "description": "The prime price of an in-skill product." + }, + "currency": { + "$ref": "#/definitions/v1.isp.Currency", + "x-isEnum": true + } + }, + "description": "Price listing information for in-skill product." + }, + "v1.isp.Currency": { + "type": "string", + "format": "ISO 4217 format", + "description": "Currency to use for in-skill product.", + "enum": [ + "USD", + "GBP", + "EUR", + "JPY" + ] + }, + "v1.isp.createInSkillProductRequest": { + "type": "object", + "properties": { + "vendorId": { + "type": "string", + "description": "ID of the vendor owning the in-skill product." + }, + "inSkillProductDefinition": { + "$ref": "#/definitions/v1.isp.InSkillProductDefinition" + } + } + }, + "v1.isp.InSkillProductDefinitionResponse": { + "type": "object", + "properties": { + "inSkillProductDefinition": { + "$ref": "#/definitions/v1.isp.InSkillProductDefinition" + } + }, + "description": "Defines In-skill product response." + }, + "v1.isp.InSkillProductDefinition": { + "type": "object", + "properties": { + "version": { + "type": "string", + "description": "Version of in-skill product definition." + }, + "type": { + "$ref": "#/definitions/v1.isp.ProductType", + "x-isEnum": true + }, + "referenceName": { + "type": "string", + "description": "Developer selected in-skill product name. This is for developer reference only, it can be used to filter query results to identify a matching in-skill product." + }, + "purchasableState": { + "$ref": "#/definitions/v1.isp.PurchasableState", + "x-isEnum": true + }, + "promotableState": { + "$ref": "#/definitions/v1.isp.PromotableState", + "x-isEnum": true + }, + "subscriptionInformation": { + "$ref": "#/definitions/v1.isp.SubscriptionInformation" + }, + "publishingInformation": { + "$ref": "#/definitions/v1.isp.PublishingInformation" + }, + "privacyAndCompliance": { + "$ref": "#/definitions/v1.isp.PrivacyAndCompliance" + }, + "testingInstructions": { + "type": "string", + "description": "Special instructions provided by the developer to test the in-skill product." + } + }, + "description": "Defines the structure for an in-skill product." + }, + "v1.isp.SubscriptionInformation": { + "type": "object", + "properties": { + "subscriptionPaymentFrequency": { + "$ref": "#/definitions/v1.isp.subscriptionPaymentFrequency", + "x-isEnum": true + }, + "subscriptionTrialPeriodDays": { + "type": "integer", + "description": "Days of free trial period for subscription. Max allowed is 365 days." + } + }, + "description": "Defines the structure for in-skill product subscription information." + }, + "v1.isp.subscriptionPaymentFrequency": { + "type": "string", + "description": "The frequency in which payments are collected for the subscription.", + "enum": [ + "MONTHLY", + "YEARLY" + ] + }, + "v1.isp.PublishingInformation": { + "type": "object", + "properties": { + "locales": { + "type": "object", + "description": "Defines the structure for locale specific publishing information for an in-skill product.", + "additionalProperties": { + "$ref": "#/definitions/v1.isp.LocalizedPublishingInformation" + } + }, + "distributionCountries": { + "type": "array", + "description": "List of countries where the in-skill product is available.", + "items": { + "$ref": "#/definitions/v1.isp.DistributionCountries" + } + }, + "pricing": { + "type": "object", + "description": "Defines the structure for in-skill product pricing.", + "additionalProperties": { + "$ref": "#/definitions/v1.isp.MarketplacePricing" + } + }, + "taxInformation": { + "$ref": "#/definitions/v1.isp.TaxInformation" + } + }, + "description": "Defines the structure for in-skill product publishing information." + }, + "v1.isp.LocalizedPublishingInformation": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the in-skill product that is heard by customers and displayed in the Alexa app." + }, + "smallIconUri": { + "type": "string", + "description": "Uri for the small icon image of the in-skill product." + }, + "largeIconUri": { + "type": "string", + "description": "Uri for the large icon image of the in-skill product." + }, + "summary": { + "type": "string", + "description": "Short description of the in-skill product that displays on the in-skill product list page in the Alexa App." + }, + "description": { + "type": "string", + "description": "Description of the in-skill product's purpose and features, and how it works. Should describe any prerequisites like hardware or account requirements and detailed steps for the customer to get started. This description displays to customers on the in-skill product detail card in the Alexa app." + }, + "examplePhrases": { + "type": "array", + "description": "Example phrases appear on the in-skill product detail page and are the key utterances that customers can say to interact directly with the in-skill product.", + "items": { + "type": "string" + } + }, + "keywords": { + "type": "array", + "description": "Search terms that can be used to describe the in-skill product. This helps customers find an in-skill product.", + "items": { + "type": "string" + } + }, + "customProductPrompts": { + "$ref": "#/definitions/v1.isp.CustomProductPrompts" + } + }, + "description": "Defines the structure for locale specific publishing information in the in-skill product definition." + }, + "v1.isp.CustomProductPrompts": { + "type": "object", + "properties": { + "purchasePromptDescription": { + "type": "string", + "example": "{PREMIUM_CONTENT_TITLE} includes an assortment of fifty questions on a broad range of historical topics.", + "description": "Description of in-skill product heard before customer is prompted for purchase." + }, + "boughtCardDescription": { + "type": "string", + "example": "Enjoy {PREMIUM_CONTENT_TITLE}! Ask for a list of adventures to explore your purchase..", + "description": "A description of the product that displays on the skill card in the Alexa app." + } + }, + "description": "Custom prompts used for in-skill product purchasing options. Supports Speech Synthesis Markup Language (SSML), which can be used to control pronunciation, intonation, timing, and emotion." + }, + "v1.isp.DistributionCountries": { + "type": "string", + "enum": [ + "AF", + "AX", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "KH", + "CM", + "CA", + "CV", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CG", + "CD", + "CK", + "CR", + "HR", + "CY", + "CZ", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IQ", + "IE", + "IM", + "IL", + "IT", + "CI", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MK", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "AN", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "RE", + "RO", + "RU", + "RW", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "ES", + "LK", + "SR", + "SJ", + "SZ", + "SE", + "CH", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "US", + "UM", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW" + ] + }, + "v1.isp.MarketplacePricing": { + "type": "object", + "properties": { + "releaseDate": { + "type": "string", + "format": "date-time", + "description": "Date when in-skill product is available to customers for both purchase and use. Prior to this date the in-skill product will appear unavailable to customers and will not be purchasable." + }, + "defaultPriceListing": { + "$ref": "#/definitions/v1.isp.PriceListing" + } + }, + "description": "In-skill product pricing information for a marketplace." + }, + "v1.isp.PriceListing": { + "type": "object", + "properties": { + "price": { + "type": "number", + "description": "Defines the price of an in-skill product. The list price should be your suggested price, not including any VAT or similar taxes. Taxes are included in the final price to end users." + }, + "currency": { + "$ref": "#/definitions/v1.isp.Currency", + "x-isEnum": true + } + }, + "description": "Price listing information for in-skill product." + }, + "v1.isp.TaxInformation": { + "type": "object", + "properties": { + "category": { + "$ref": "#/definitions/v1.isp.TaxInformationCategory", + "x-isEnum": true + } + }, + "description": "Defines the structure for in-skill product tax information." + }, + "v1.isp.TaxInformationCategory": { + "type": "string", + "description": "Select tax category that best describes in-skill product. Choice will be validated during certification process.", + "enum": [ + "SOFTWARE", + "STREAMING_AUDIO", + "STREAMING_RADIO", + "INFORMATION_SERVICES", + "VIDEO", + "PERIODICALS", + "NEWSPAPERS" + ] + }, + "v1.isp.PrivacyAndCompliance": { + "type": "object", + "properties": { + "locales": { + "type": "object", + "description": "Defines the structure for locale specific privacy and compliance.", + "additionalProperties": { + "$ref": "#/definitions/v1.isp.LocalizedPrivacyAndCompliance" + } + } + }, + "description": "Defines the structure for privacy and compliance." + }, + "v1.isp.LocalizedPrivacyAndCompliance": { + "type": "object", + "properties": { + "privacyPolicyUrl": { + "type": "string", + "description": "Link to the privacy policy that applies to this in-skill product." + } + }, + "description": "Defines the structure for localized privacy and compliance." + }, + "v1.isp.ProductResponse": { + "type": "object", + "properties": { + "productId": { + "type": "string", + "description": "ID of the in-skill product created." + } + }, + "description": "Product ID information." + }, + "v1.isp.updateInSkillProductRequest": { + "type": "object", + "properties": { + "inSkillProductDefinition": { + "$ref": "#/definitions/v1.isp.InSkillProductDefinition" + } + } + }, + "v1.isp.AssociatedSkillResponse": { + "type": "object", + "properties": { + "associatedSkillIds": { + "type": "array", + "description": "List of skill IDs that correspond to the skills associated with the in-skill product. The associations are stage specific. A live association is created through successful skill certification.", + "items": { + "type": "string" + } + }, + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "isTruncated": { + "type": "boolean" + }, + "nextToken": { + "type": "string" + } + }, + "description": "In-skill product skill association details." + }, + "v1.skill.accountLinking.AccountLinkingResponse": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/v1.skill.accountLinking.AccountLinkingType", + "x-isEnum": true + }, + "authorizationUrl": { + "type": "string", + "format": "uri", + "description": "The url where customers will be redirected in the companion app to enter login credentials." + }, + "domains": { + "type": "array", + "description": "The list of domains that the authorization URL will fetch content from.", + "items": { + "type": "string" + } + }, + "clientId": { + "type": "string", + "description": "The unique public string used to identify the client requesting for authentication." + }, + "scopes": { + "type": "array", + "description": "The list of permissions which will be requested from the skill user.", + "items": { + "type": "string" + } + }, + "accessTokenUrl": { + "type": "string", + "description": "The url used for access token and token refresh requests." + }, + "accessTokenScheme": { + "$ref": "#/definitions/v1.skill.accountLinking.AccessTokenSchemeType", + "x-isEnum": true + }, + "defaultTokenExpirationInSeconds": { + "type": "integer", + "description": "The time in seconds for which access token is valid.\nIf OAuth client returns \"expires_in\", it will be overwrite this parameter.\n" + }, + "redirectUrls": { + "type": "array", + "description": "The list of valid urls to redirect back to, when the linking process is initiated from a third party system.", + "items": { + "type": "string" + } + }, + "authorizationUrlsByPlatform": { + "type": "array", + "description": "The list of valid authorization urls for allowed platforms to initiate account linking.", + "items": { + "$ref": "#/definitions/v1.skill.accountLinking.AccountLinkingPlatformAuthorizationUrl" + } + }, + "voiceForwardAccountLinking": { + "$ref": "#/definitions/v1.skill.accountLinking.VoiceForwardAccountLinkingStatus", + "x-isEnum": true + } + }, + "description": "The account linking information of a skill." + }, + "v1.skill.accountLinking.AccountLinkingType": { + "type": "string", + "description": "The type of account linking.", + "enum": [ + "AUTH_CODE", + "IMPLICIT" + ] + }, + "v1.skill.accountLinking.AccessTokenSchemeType": { + "type": "string", + "description": "The type of client authentication scheme.", + "enum": [ + "HTTP_BASIC", + "REQUEST_BODY_CREDENTIALS" + ] + }, + "v1.skill.accountLinking.AccountLinkingPlatformAuthorizationUrl": { + "type": "object", + "required": [ + "platformAuthorizationUrl", + "platformType" + ], + "properties": { + "platformType": { + "$ref": "#/definitions/v1.skill.accountLinking.PlatformType", + "x-isEnum": true + }, + "platformAuthorizationUrl": { + "type": "string", + "description": "Defines the OAuth2 Authorization URL that will be used in this platform to authenticate the customer / person." + } + }, + "description": "A key-value pair object that contains the OAuth2 authorization url to initiate the skill account linking process." + }, + "v1.skill.accountLinking.PlatformType": { + "type": "string", + "description": "Defines the type of platform that will be used by the customer to perform account linking.", + "enum": [ + "iOS", + "Android" + ] + }, + "v1.skill.accountLinking.VoiceForwardAccountLinkingStatus": { + "type": "string", + "description": "Defines the voice forward account linking status of a skill.", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "v1.skill.accountLinking.AccountLinkingRequest": { + "type": "object", + "properties": { + "accountLinkingRequest": { + "$ref": "#/definitions/v1.skill.accountLinking.AccountLinkingRequestPayload" + } + }, + "description": "The request body of AccountLinkingRequest." + }, + "v1.skill.accountLinking.AccountLinkingRequestPayload": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/v1.skill.accountLinking.AccountLinkingType", + "x-isEnum": true + }, + "authorizationUrl": { + "type": "string", + "description": "The url where customers will be redirected in the companion app to enter login credentials." + }, + "domains": { + "type": "array", + "description": "The list of domains that the authorization URL will fetch content from.", + "items": { + "type": "string" + } + }, + "clientId": { + "type": "string", + "description": "The unique public string used to identify the client requesting for authentication." + }, + "scopes": { + "type": "array", + "description": "The list of permissions which will be requested from the skill user.", + "items": { + "type": "string" + } + }, + "accessTokenUrl": { + "type": "string", + "description": "The url used for access token and token refresh requests." + }, + "clientSecret": { + "type": "string", + "description": "The client secret provided by developer." + }, + "accessTokenScheme": { + "$ref": "#/definitions/v1.skill.accountLinking.AccessTokenSchemeType", + "x-isEnum": true + }, + "defaultTokenExpirationInSeconds": { + "type": "integer", + "description": "The time in seconds for which access token is valid.\nIf OAuth client returns \"expires_in\", it will be overwrite this parameter.\n" + }, + "reciprocalAccessTokenUrl": { + "type": "string", + "description": "Optional, if your skill requires reciprocal authorization, provide this additional access token url to handle reciprocal (Alexa) authorization codes that can be exchanged for Alexa access tokens." + }, + "redirectUrls": { + "type": "array", + "description": "The list of valid urls to redirect back to, when the linking process is initiated from a third party system.", + "items": { + "type": "string" + } + }, + "authorizationUrlsByPlatform": { + "type": "array", + "description": "The list of valid authorization urls for allowed platforms to initiate account linking.", + "items": { + "$ref": "#/definitions/v1.skill.accountLinking.AccountLinkingPlatformAuthorizationUrl" + } + }, + "skipOnEnablement": { + "type": "boolean", + "description": "Set to true to let users enable the skill without starting the account linking flow. Set to false to require the normal account linking flow when users enable the skill." + }, + "voiceForwardAccountLinking": { + "$ref": "#/definitions/v1.skill.accountLinking.VoiceForwardAccountLinkingStatus", + "x-isEnum": true + } + }, + "description": "The payload for creating the account linking partner." + }, + "v1.skill.AlexaHosted.HostingConfiguration": { + "type": "object", + "properties": { + "alexaHosted": { + "$ref": "#/definitions/v1.skill.AlexaHosted.AlexaHostedConfig" + } + }, + "description": "Configurations for creating new hosted skill" + }, + "v1.skill.AlexaHosted.HostedSkillRepositoryCredentialsRequest": { + "type": "object", + "required": [ + "repository" + ], + "properties": { + "repository": { + "$ref": "#/definitions/v1.skill.AlexaHosted.HostedSkillRepositoryInfo" + } + } + }, + "v1.skill.AlexaHosted.HostedSkillRepositoryInfo": { + "type": "object", + "required": [ + "type", + "url" + ], + "properties": { + "url": { + "type": "string" + }, + "type": { + "$ref": "#/definitions/v1.skill.AlexaHosted.HostedSkillRepository", + "x-isEnum": true + } + }, + "description": "Alexa Hosted Skill's Repository Information" + }, + "v1.skill.AlexaHosted.HostedSkillRepository": { + "type": "string", + "enum": [ + "GIT" + ] + }, + "v1.skill.AlexaHosted.HostedSkillRepositoryCredentialsList": { + "type": "object", + "properties": { + "repositoryCredentials": { + "$ref": "#/definitions/v1.skill.AlexaHosted.HostedSkillRepositoryCredentials" + } + }, + "description": "defines the structure for the hosted skill repository credentials response" + }, + "v1.skill.AlexaHosted.HostedSkillRepositoryCredentials": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "AWS Access Key ID used to access hosted skill repository" + }, + "password": { + "type": "string", + "description": "signed AWS Credentials used to access hosted skill repository" + }, + "expiresAt": { + "type": "string", + "format": "date-time", + "description": "expiration time for the credentials" + } + } + }, + "v1.skill.AlexaHosted.HostedSkillMetadata": { + "type": "object", + "properties": { + "alexaHosted": { + "$ref": "#/definitions/v1.skill.AlexaHosted.HostedSkillInfo" + } + }, + "description": "Alexa Hosted skill's metadata" + }, + "v1.skill.AlexaHosted.HostedSkillInfo": { + "type": "object", + "properties": { + "repository": { + "$ref": "#/definitions/v1.skill.AlexaHosted.HostedSkillRepositoryInfo" + }, + "runtime": { + "$ref": "#/definitions/v1.skill.AlexaHosted.HostedSkillRuntime", + "x-isEnum": true + } + } + }, + "v1.skill.AlexaHosted.AlexaHostedConfig": { + "type": "object", + "properties": { + "runtime": { + "$ref": "#/definitions/v1.skill.AlexaHosted.HostedSkillRuntime", + "x-isEnum": true + }, + "region": { + "$ref": "#/definitions/v1.skill.AlexaHosted.HostedSkillRegion", + "x-isEnum": true + } + }, + "description": "Alexa hosted skill create configuration" + }, + "v1.skill.AlexaHosted.HostedSkillRuntime": { + "type": "string", + "description": "Hosted skill lambda runtime; Node.js 12.x is deprecated by Hosted Skill service as of October 24, 2022.", + "enum": [ + "NODE_10_X", + "PYTHON_3_7", + "NODE_12_X", + "NODE_16_X" + ] + }, + "v1.skill.AlexaHosted.HostedSkillRegion": { + "type": "string", + "description": "Hosted skill AWS region", + "enum": [ + "US_EAST_1", + "US_WEST_2", + "EU_WEST_1" + ] + }, + "v1.skill.AlexaHosted.HostedSkillPermissionType": { + "type": "string", + "enum": [ + "NEW_SKILL" + ] + }, + "v1.skill.AlexaHosted.HostedSkillPermissionStatus": { + "type": "string", + "enum": [ + "ALLOWED", + "NEW_USER_REGISTRATION_REQUIRED", + "RESOURCE_LIMIT_EXCEEDED", + "RATE_EXCEEDED" + ] + }, + "v1.skill.AlexaHosted.HostedSkillPermission": { + "type": "object", + "properties": { + "permission": { + "$ref": "#/definitions/v1.skill.AlexaHosted.HostedSkillPermissionType", + "x-isEnum": true + }, + "status": { + "$ref": "#/definitions/v1.skill.AlexaHosted.HostedSkillPermissionStatus", + "x-isEnum": true + }, + "actionUrl": { + "type": "string" + } + }, + "description": "Customer's permission about Hosted skill features." + }, + "v1.skill.betaTest.BetaTest": { + "type": "object", + "properties": { + "expiryDate": { + "type": "string", + "format": "date-time", + "description": "Expiry date of the beta test." + }, + "status": { + "$ref": "#/definitions/v1.skill.betaTest.Status", + "x-isEnum": true + }, + "feedbackEmail": { + "type": "string", + "description": "Email address for providing feedback" + }, + "invitationUrl": { + "type": "string", + "description": "Deeplinking for getting authorized to the beta test." + }, + "invitesRemaining": { + "type": "integer", + "description": "Remaining invite count for the beta test." + } + }, + "description": "Beta test for an Alexa skill." + }, + "v1.skill.betaTest.Status": { + "type": "string", + "description": "Status of the beta test.", + "enum": [ + "IN_DRAFT", + "STARTING", + "RUNNING", + "STOPPING", + "ENDED" + ] + }, + "v1.skill.betaTest.TestBody": { + "type": "object", + "properties": { + "feedbackEmail": { + "type": "string", + "description": "Email address for providing feedback." + } + }, + "description": "Beta test meta-data." + }, + "v1.skill.betaTest.testers.ListTestersResponse": { + "type": "object", + "properties": { + "testers": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.betaTest.testers.TesterWithDetails" + } + }, + "isTruncated": { + "type": "boolean" + }, + "nextToken": { + "type": "string" + } + } + }, + "v1.skill.betaTest.testers.TesterWithDetails": { + "type": "object", + "properties": { + "emailId": { + "type": "string", + "description": "Email address of the tester." + }, + "associationDate": { + "type": "string", + "format": "date-time", + "description": "Date and time when the tester is added to the beta test." + }, + "isReminderAllowed": { + "type": "boolean", + "description": "Indicates whether the tester is allowed to be sent reminder." + }, + "invitationStatus": { + "$ref": "#/definitions/v1.skill.betaTest.testers.InvitationStatus", + "x-isEnum": true + } + }, + "description": "Tester information." + }, + "v1.skill.betaTest.testers.InvitationStatus": { + "type": "string", + "description": "Indicates whether the tester has accepted the invitation.", + "enum": [ + "ACCEPTED", + "NOT_ACCEPTED" + ] + }, + "v1.skill.betaTest.testers.TestersList": { + "type": "object", + "properties": { + "testers": { + "type": "array", + "description": "List of the email address of testers.", + "items": { + "$ref": "#/definitions/v1.skill.betaTest.testers.Tester" + } + } + }, + "description": "List of testers." + }, + "v1.skill.betaTest.testers.Tester": { + "type": "object", + "properties": { + "emailId": { + "type": "string", + "description": "Email address of the tester." + } + } + }, + "v1.skill.blueprint.ShoppingKit": { + "type": "object", + "properties": { + "isShoppingActionsEnabled": { + "type": "boolean", + "description": "True if the skill uses Alexa Shopping Actions, false otherwise." + }, + "isAmazonAssociatesOnAlexaEnabled": { + "type": "boolean", + "description": "True if the skill uses Shopping Actions with Amazon Associates, false otherwise." + } + }, + "description": "Defines the structure for Shopping Kit related information in the skill manifest." + }, + "v1.skill.certification.CertificationSummary": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Certification Id for the skill." + }, + "status": { + "$ref": "#/definitions/v1.skill.certification.CertificationStatus", + "x-isEnum": true + }, + "skillSubmissionTimestamp": { + "type": "string", + "format": "date-time", + "description": "Timestamp for when the skill was submitted for certification." + }, + "reviewTrackingInfo": { + "$ref": "#/definitions/v1.skill.certification.ReviewTrackingInfoSummary" + } + }, + "description": "Summary of the certification resource. This is a leaner view of the certification resource for the collections API." + }, + "v1.skill.certification.CertificationResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Certification Id for the skill" + }, + "status": { + "$ref": "#/definitions/v1.skill.certification.CertificationStatus", + "x-isEnum": true + }, + "skillSubmissionTimestamp": { + "type": "string", + "format": "date-time", + "description": "Timestamp for when the skill was submitted for certification." + }, + "reviewTrackingInfo": { + "$ref": "#/definitions/v1.skill.certification.ReviewTrackingInfo" + }, + "result": { + "$ref": "#/definitions/v1.skill.certification.CertificationResult" + } + } + }, + "v1.skill.certification.CertificationStatus": { + "type": "string", + "description": "String that specifies the current status of skill's certification Possible values are \"IN_PROGRESS\", \"SUCCEEDED\", \"FAILED\" and \"CANCELLED\"\n", + "enum": [ + "IN_PROGRESS", + "SUCCEEDED", + "FAILED", + "CANCELLED" + ] + }, + "v1.skill.certification.ReviewTrackingInfoSummary": { + "type": "object", + "properties": { + "estimatedCompletionTimestamp": { + "type": "string", + "format": "date-time", + "description": "Timestamp for estimated completion of certification review for the skill." + }, + "actualCompletionTimestamp": { + "type": "string", + "format": "date-time", + "description": "Timestamp for actual completion of certification review workflow for the skill." + }, + "lastUpdated": { + "type": "string", + "format": "date-time", + "description": "Timestamp for when the last update was made to review tracking info." + } + }, + "description": "Structure for summarised view of review tracking information of the skill. This does not have the estimationUpdates array field." + }, + "v1.skill.certification.ReviewTrackingInfo": { + "type": "object", + "properties": { + "estimatedCompletionTimestamp": { + "type": "string", + "format": "date-time", + "description": "Timestamp for estimated completion of certification review for the skill." + }, + "actualCompletionTimestamp": { + "type": "string", + "format": "date-time", + "description": "Timestamp for actual completion of certification review for the skill." + }, + "lastUpdated": { + "type": "string", + "format": "date-time", + "description": "Timestamp for when the last update was made to review tracking info." + }, + "estimationUpdates": { + "type": "array", + "description": "List of updates to estimation completion time for certification review for the skill.", + "items": { + "$ref": "#/definitions/v1.skill.certification.EstimationUpdate" + } + } + }, + "description": "Structure for review tracking information of the skill." + }, + "v1.skill.certification.EstimationUpdate": { + "type": "object", + "properties": { + "originalEstimatedCompletionTimestamp": { + "type": "string", + "format": "date-time", + "description": "Timestamp for originally estimated completion of certification review for the skill." + }, + "revisedEstimatedCompletionTimestamp": { + "type": "string", + "format": "date-time", + "description": "Timestamp for originally estimated completion of certification review for the skill." + }, + "reason": { + "type": "string", + "description": "Reason for updates to estimates for certification review" + } + }, + "description": "Structure for any updates to estimation completion time for certification review for the skill." + }, + "v1.skill.certification.CertificationResult": { + "type": "object", + "properties": { + "distributionInfo": { + "$ref": "#/definitions/v1.skill.certification.DistributionInfo" + } + }, + "description": "Structure for the result for the outcomes of certification review for the skill. Currently provides the distribution information of a skill if the certification SUCCEEDED.\n" + }, + "v1.skill.certification.DistributionInfo": { + "type": "object", + "properties": { + "publishedCountries": { + "type": "array", + "description": "All countries where the skill was published in by Amazon.", + "items": { + "type": "string", + "description": "Two letter country codes in ISO 3166-1 alpha-2 format." + } + }, + "publicationFailures": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.certification.PublicationFailure" + } + } + }, + "description": "The distribution information for skill where Amazon distributed the skill" + }, + "v1.skill.certification.PublicationFailure": { + "type": "object", + "properties": { + "reason": { + "type": "string", + "description": "Reason why Amazon did not publish the skill in certain countries." + }, + "countries": { + "type": "array", + "description": "List of countries where Amazon did not publish the skill for a specific reason", + "items": { + "type": "string", + "description": "Two letter country codes in ISO 3166-1 alpha-2 format." + } + } + }, + "description": "Information about why the skill was not published in certain countries." + }, + "v1.skill.certification.ListCertificationsResponse": { + "type": "object", + "properties": { + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "isTruncated": { + "type": "boolean", + "description": "boolean value for if the response is truncated. isTruncated = true if more than the assigned maxResults parameter value certification items are available for the skill. The results are then paginated and the remaining results can be retrieved in a similar paginated manner by using 'next' link in the _links or using the nextToken in a following request.\n" + }, + "nextToken": { + "type": "string", + "description": "Encrypted token present when isTruncated is true." + }, + "totalCount": { + "type": "integer", + "description": "Total number of certification results available for the skill." + }, + "items": { + "type": "array", + "description": "List of certifications available for a skill. The list of certifications is sorted in a default descending sort order on id field.\n", + "items": { + "$ref": "#/definitions/v1.skill.certification.CertificationSummary" + } + } + }, + "description": "List of certification summary for a skill." + }, + "v1.skill.evaluations.ProfileNluRequest": { + "type": "object", + "required": [ + "utterance" + ], + "properties": { + "utterance": { + "type": "string", + "description": "Actual representation of user input to Alexa." + }, + "multiTurnToken": { + "type": "string", + "description": "Opaque string which contains multi-turn related context." + } + } + }, + "v1.skill.evaluations.ProfileNluResponse": { + "type": "object", + "properties": { + "sessionEnded": { + "type": "boolean", + "description": "Represents when an utterance results in the skill exiting. It would be true when NLU selects 1P ExitAppIntent or GoHomeIntent, and false otherwise.\n" + }, + "selectedIntent": { + "$ref": "#/definitions/v1.skill.evaluations.ProfileNluSelectedIntent" + }, + "consideredIntents": { + "type": "array", + "description": "All intents that Alexa considered for the utterance in the request, but did not select.", + "items": { + "$ref": "#/definitions/v1.skill.evaluations.Intent" + } + }, + "multiTurn": { + "$ref": "#/definitions/v1.skill.evaluations.MultiTurn" + } + } + }, + "v1.skill.evaluations.ProfileNluSelectedIntent": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.evaluations.Intent" + } + ], + "description": "The intent that Alexa selected for the utterance in the request." + }, + "v1.skill.evaluations.MultiTurn": { + "type": "object", + "properties": { + "dialogAct": { + "$ref": "#/definitions/v1.skill.evaluations.DialogAct" + }, + "token": { + "type": "string", + "description": "Opaque string which contains multi-turn related context." + }, + "prompt": { + "type": "string", + "description": "A sample prompt defined in the dialog model for each DialogAct." + } + }, + "description": "Included when the selected intent has dialog defined and the dialog is not completed. To continue the dialog, provide the value of the token in the multiTurnToken field in the next request.\n" + }, + "v1.skill.evaluations.DialogAct": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/v1.skill.evaluations.DialogActType", + "x-isEnum": true + }, + "targetSlot": { + "type": "string", + "description": "The name of the target slot that needs to be filled or confirmed for a dialogAct" + } + }, + "description": "A representation of question prompts to the user for multi-turn, which requires user to fill a slot value, or confirm a slot value, or confirm an intent.\n" + }, + "v1.skill.evaluations.DialogActType": { + "type": "string", + "enum": [ + "Dialog.ElicitSlot", + "Dialog.ConfirmSlot", + "Dialog.ConfirmIntent" + ] + }, + "v1.skill.evaluations.Intent": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "confirmationStatus": { + "$ref": "#/definitions/v1.skill.evaluations.ConfirmationStatusType", + "x-isEnum": true + }, + "slots": { + "type": "object", + "description": "A map of key-value pairs that further describes what the user meant based on a predefined intent schema. The map can be empty.\n", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.evaluations.Slot" + } + } + } + }, + "v1.skill.evaluations.ConfirmationStatusType": { + "type": "string", + "description": "An enumeration indicating whether the user has explicitly confirmed or denied the entire intent. Possible values: \"NONE\", \"CONFIRMED\", \"DENIED\".\n", + "enum": [ + "NONE", + "CONFIRMED", + "DENIED" + ] + }, + "v1.skill.evaluations.Slot": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + }, + "confirmationStatus": { + "$ref": "#/definitions/v1.skill.evaluations.ConfirmationStatusType", + "x-isEnum": true + }, + "resolutions": { + "$ref": "#/definitions/v1.skill.evaluations.SlotResolutions" + } + } + }, + "v1.skill.evaluations.SlotResolutions": { + "type": "object", + "properties": { + "resolutionsPerAuthority": { + "type": "array", + "description": "An array of objects representing each possible authority for entity resolution. An authority represents the source for the data provided for the slot. For a custom slot type, the authority is the slot type you defined.\n", + "items": { + "$ref": "#/definitions/v1.skill.evaluations.ResolutionsPerAuthorityItems" + } + } + }, + "description": "A resolutions object representing the results of resolving the words captured from the user's utterance.\n" + }, + "v1.skill.evaluations.ResolutionsPerAuthorityItems": { + "type": "object", + "properties": { + "authority": { + "type": "string", + "description": "The name of the authority for the slot values. For custom slot types, this authority label incorporates your skill ID and the slot type name.\n" + }, + "status": { + "$ref": "#/definitions/v1.skill.evaluations.ResolutionsPerAuthorityStatus" + }, + "values": { + "type": "array", + "description": "An array of resolved values for the slot.", + "items": { + "$ref": "#/definitions/v1.skill.evaluations.ResolutionsPerAuthorityValueItems" + } + } + } + }, + "v1.skill.evaluations.ResolutionsPerAuthorityStatus": { + "type": "object", + "properties": { + "code": { + "$ref": "#/definitions/v1.skill.evaluations.ResolutionsPerAuthorityStatusCode", + "x-isEnum": true + } + }, + "description": "An object representing the status of entity resolution for the slot." + }, + "v1.skill.evaluations.ResolutionsPerAuthorityStatusCode": { + "type": "string", + "description": "A code indicating the results of attempting to resolve the user utterance against the defined slot types. This can be one of the following:\nER_SUCCESS_MATCH: The spoken value matched a value or synonym explicitly defined in your custom slot type. ER_SUCCESS_NO_MATCH: The spoken value did not match any values or synonyms explicitly defined in your custom slot type. ER_ERROR_TIMEOUT: An error occurred due to a timeout. ER_ERROR_EXCEPTION: An error occurred due to an exception during processing.\n", + "enum": [ + "ER_SUCCESS_MATCH", + "ER_SUCCESS_NO_MATCH", + "ER_ERROR_TIMEOUT", + "ER_ERROR_EXCEPTION" + ] + }, + "v1.skill.evaluations.ResolutionsPerAuthorityValueItems": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The string for the resolved slot value." + }, + "id": { + "type": "string", + "description": "The unique ID defined for the resolved slot value. This is based on the IDs defined in the slot type definition.\n" + } + }, + "description": "An object representing the resolved value for the slot, based on the user's utterance and the slot type definition.\n" + }, + "v1.skill.experiment.PaginationContext": { + "type": "object", + "properties": { + "nextToken": { + "type": "string", + "description": "Provided by server to retrieve the next set of paginated results." + } + }, + "description": "Defines the body that provides pagination-related properties in the operation response to indicate\nthat additional paginated results are available.\n" + }, + "v1.skill.experiment.CreateExperimentRequest": { + "type": "object", + "required": [ + "experiment" + ], + "properties": { + "experiment": { + "$ref": "#/definitions/v1.skill.experiment.CreateExperimentInput" + } + }, + "description": "Defines the request body for creating an experiment." + }, + "v1.skill.experiment.UpdateExperimentRequest": { + "type": "object", + "required": [ + "experiment" + ], + "properties": { + "experiment": { + "$ref": "#/definitions/v1.skill.experiment.UpdateExperimentInput" + } + }, + "description": "Defines the request body for updating an experiment." + }, + "v1.skill.experiment.UpdateExposureRequest": { + "type": "object", + "required": [ + "exposurePercentage" + ], + "properties": { + "exposurePercentage": { + "type": "integer", + "description": "The percentage of unique customers that will be part of the skill experiment while the experiment is running.", + "minimum": 0, + "maximum": 100 + } + }, + "description": "Defines the request body for updating the exposure of an experiment." + }, + "v1.skill.experiment.SetCustomerTreatmentOverrideRequest": { + "type": "object", + "required": [ + "treatmentId" + ], + "properties": { + "treatmentId": { + "$ref": "#/definitions/v1.skill.experiment.TreatmentId", + "x-isEnum": true + } + }, + "description": "Defines the request body for adding this customer's treatment override to an experiment." + }, + "v1.skill.experiment.GetCustomerTreatmentOverrideResponse": { + "type": "object", + "properties": { + "treatmentId": { + "$ref": "#/definitions/v1.skill.experiment.TreatmentId", + "x-isEnum": true + }, + "treatmentOverrideCount": { + "type": "integer", + "description": "The number of overrides which currently exist for the experiment.\n" + } + }, + "description": "Defines the response body when this customer's treatment override information is requested." + }, + "v1.skill.experiment.ManageExperimentStateRequest": { + "type": "object", + "required": [ + "targetState" + ], + "properties": { + "targetState": { + "$ref": "#/definitions/v1.skill.experiment.TargetState", + "x-isEnum": true + }, + "stoppedReason": { + "$ref": "#/definitions/v1.skill.experiment.ExperimentStoppedReason", + "x-isEnum": true + } + }, + "description": "Defines the request body for performing an experiment action to move it to a target state." + }, + "v1.skill.experiment.GetExperimentStateResponse": { + "type": "object", + "properties": { + "state": { + "$ref": "#/definitions/v1.skill.experiment.State", + "x-isEnum": true + } + }, + "description": "Defines the response body for retrieving the current experiment state." + }, + "v1.skill.experiment.ListExperimentsResponse": { + "type": "object", + "properties": { + "paginationContext": { + "$ref": "#/definitions/v1.skill.experiment.PaginationContext" + }, + "experiments": { + "type": "array", + "description": "List of experiments with select fields returned.", + "items": { + "$ref": "#/definitions/v1.skill.experiment.ExperimentSummary" + } + } + }, + "description": "Defines the response body for retrieving all the experiments of a skill." + }, + "v1.skill.experiment.GetExperimentResponse": { + "type": "object", + "properties": { + "experiment": { + "$ref": "#/definitions/v1.skill.experiment.ExperimentInformation" + }, + "lastStateTransition": { + "$ref": "#/definitions/v1.skill.experiment.ExperimentLastStateTransition" + } + }, + "description": "Defines the response body for retrieving an experiment." + }, + "v1.skill.experiment.ListExperimentMetricSnapshotsResponse": { + "type": "object", + "properties": { + "paginationContext": { + "$ref": "#/definitions/v1.skill.experiment.PaginationContext" + }, + "metricSnapshots": { + "type": "array", + "description": "List of experiment metric snapshots.", + "items": { + "$ref": "#/definitions/v1.skill.experiment.MetricSnapshot" + } + } + }, + "description": "Defines the response body for retrieving the experiment metric snapshots." + }, + "v1.skill.experiment.GetExperimentMetricSnapshotResponse": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.experiment.MetricSnapshotStatus", + "x-isEnum": true + }, + "statusReason": { + "type": "string", + "description": "The reason why the metric snapshot status is unreliable.\n" + }, + "metrics": { + "type": "array", + "description": "List of actual experiment metrics represented by a metric snapshot.", + "items": { + "$ref": "#/definitions/v1.skill.experiment.Metric" + } + } + }, + "description": "Defines the response body for retrieving the experiment results." + }, + "v1.skill.experiment.ExperimentInformation": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name that developer assigns to the experiment for easier identification." + }, + "description": { + "type": "string", + "description": "Hypothesis that developer provides to describe the experiment's purpose." + }, + "type": { + "$ref": "#/definitions/v1.skill.experiment.ExperimentType", + "x-isEnum": true + }, + "plannedDuration": { + "type": "string", + "description": "The number of weeks the skill builder intends to run the experiment.\nUsed for documentation purposes and by metric platform as a reference.\nDoes not impact experiment execution.\nFormat uses ISO-8601 representation of duration. (Example: 4 weeks = \"P4W\")\n" + }, + "exposurePercentage": { + "type": "integer", + "description": "The percentage of unique customers that will be part of the skill experiment while the experiment is running.", + "minimum": 0, + "maximum": 100 + }, + "treatmentOverrideCount": { + "type": "integer", + "description": "The number of overrides which currently exist for the experiment.\n" + }, + "metricConfigurations": { + "type": "array", + "description": "List of metric configurations that determine which metrics are key/guardrail metrics and the expected metric direction.\nThis is required by the system that collects metrics and generates the metric reports.\n", + "items": { + "$ref": "#/definitions/v1.skill.experiment.MetricConfiguration" + } + }, + "state": { + "$ref": "#/definitions/v1.skill.experiment.State", + "x-isEnum": true + }, + "history": { + "$ref": "#/definitions/v1.skill.experiment.ExperimentHistory" + }, + "trigger": { + "$ref": "#/definitions/v1.skill.experiment.ExperimentTrigger" + } + }, + "description": "Defines the full Experiment body which would contain all experiment details.\n" + }, + "v1.skill.experiment.ExperimentLastStateTransition": { + "type": "object", + "properties": { + "sourceState": { + "$ref": "#/definitions/v1.skill.experiment.SourceState", + "x-isEnum": true + }, + "targetState": { + "$ref": "#/definitions/v1.skill.experiment.DestinationState", + "x-isEnum": true + }, + "status": { + "$ref": "#/definitions/v1.skill.experiment.StateTransitionStatus", + "x-isEnum": true + }, + "startTime": { + "type": "string", + "format": "date-time" + }, + "endTime": { + "type": "string", + "format": "date-time" + }, + "errors": { + "type": "array", + "description": "List of error objects which define what errors caused the state transition failure.\n", + "items": { + "$ref": "#/definitions/v1.skill.experiment.StateTransitionError" + } + } + }, + "description": "Defines the last state transition information for the experiment.\n" + }, + "v1.skill.experiment.CreateExperimentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name that developer assigns to the experiment for easier identification.", + "minLength": 1, + "maxLength": 255 + }, + "description": { + "type": "string", + "description": "Hypothesis that developer provides to describe the experiment's purpose.", + "maxLength": 300 + }, + "type": { + "$ref": "#/definitions/v1.skill.experiment.ExperimentType", + "x-isEnum": true + }, + "plannedDuration": { + "type": "string", + "description": "The number of weeks the skill builder intends to run the experiment.\nUsed for documentation purposes and by metric platform as a reference.\nDoes not impact experiment execution.\nFormat uses ISO-8601 representation of duration. (Example: 4 weeks = \"P4W\")\n", + "minLength": 1, + "maxLength": 255 + }, + "exposurePercentage": { + "type": "integer", + "description": "The percentage of unique customers that will be part of the skill experiment while the experiment is running.", + "minimum": 0, + "maximum": 100 + }, + "metricConfigurations": { + "type": "array", + "description": "List of metric configurations that determine which metrics are key/guardrail metrics and the expected metric direction.", + "items": { + "$ref": "#/definitions/v1.skill.experiment.MetricConfiguration" + } + } + }, + "description": "Defines the Experiment body used for requesting an experiment creation.\nOnly includes fields that are editable by the user.\n" + }, + "v1.skill.experiment.UpdateExperimentInput": { + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "Hypothesis that developer provides to describe the experiment's purpose.", + "maxLength": 300 + }, + "plannedDuration": { + "type": "string", + "description": "The number of weeks the skill builder intends to run the experiment.\nUsed for documentation purposes and by metric platform as a reference.\nDoes not impact experiment execution.\nFormat uses ISO-8601 representation of duration. (Example: 4 weeks = \"P4W\")\n", + "minLength": 1, + "maxLength": 255 + }, + "exposurePercentage": { + "type": "integer", + "description": "The percentage of unique customers that will be part of the skill experiment while the experiment is running.", + "minimum": 0, + "maximum": 100 + }, + "metricConfigurations": { + "type": "array", + "description": "List of metric configurations that determine which metrics are key/guardrail metrics and the expected metric direction.", + "items": { + "$ref": "#/definitions/v1.skill.experiment.MetricConfiguration" + } + } + }, + "description": "Defines the Experiment body used for requesting an experiment update.\nOnly includes fields that are editable by the user.\n" + }, + "v1.skill.experiment.ExperimentSummary": { + "type": "object", + "properties": { + "experimentId": { + "type": "string", + "description": "Identifier for experiment within a skill." + }, + "name": { + "type": "string", + "description": "Name that developer assigns to the experiment for easier identification." + }, + "state": { + "$ref": "#/definitions/v1.skill.experiment.State", + "x-isEnum": true + }, + "experimentHistory": { + "$ref": "#/definitions/v1.skill.experiment.ExperimentHistory" + } + }, + "description": "Defines the shortened Experiment body which would contain a summary of experiment information.\n" + }, + "v1.skill.experiment.ExperimentHistory": { + "type": "object", + "properties": { + "creationTime": { + "type": "string", + "format": "date-time" + }, + "startTime": { + "type": "string", + "format": "date-time" + }, + "stoppedReason": { + "type": "string", + "description": "The reason an experiment was stopped if experiment was stopped." + } + }, + "description": "Defines historical properties of a skill experiment." + }, + "v1.skill.experiment.ExperimentTrigger": { + "type": "object", + "properties": { + "scheduledEndTime": { + "type": "string", + "format": "date-time" + } + }, + "description": "Defines trigger properties of a skill experiment." + }, + "v1.skill.experiment.MetricConfiguration": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique name that identifies experiment metric.", + "minLength": 1, + "maxLength": 125 + }, + "metricTypes": { + "type": "array", + "description": "List of types that the metric has been assigned.", + "items": { + "$ref": "#/definitions/v1.skill.experiment.MetricType" + } + }, + "expectedChange": { + "$ref": "#/definitions/v1.skill.experiment.MetricChangeDirection", + "x-isEnum": true + } + }, + "description": "Configures the metrics that will be captured for the skill experiment.\nThis is required by the system that collects metrics and generates the metric reports.\n" + }, + "v1.skill.experiment.MetricSnapshot": { + "type": "object", + "properties": { + "metricSnapshotId": { + "type": "string", + "description": "Identifies the experiment metric snapshot in a skill experiment." + }, + "startDate": { + "type": "string", + "format": "date-time", + "description": "The start date of the metric snapshot." + }, + "endDate": { + "type": "string", + "format": "date-time", + "description": "The end date of the metric snapshot." + } + }, + "description": "Defines the metric snapshot body with supplemental metadata properties." + }, + "v1.skill.experiment.Metric": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique name that identifies experiment metric." + }, + "treatmentId": { + "$ref": "#/definitions/v1.skill.experiment.TreatmentId", + "x-isEnum": true + }, + "values": { + "$ref": "#/definitions/v1.skill.experiment.MetricValues" + } + }, + "description": "Defines the metrics body." + }, + "v1.skill.experiment.MetricValues": { + "type": "object", + "properties": { + "mean": { + "type": "number", + "format": "double", + "description": "The mean (average) of each sample (T1 or C group)." + }, + "percentDiff": { + "type": "number", + "format": "double", + "description": "The relative percent difference between the mean of the T1 group and the mean of the C group." + }, + "confidenceIntervalLower": { + "type": "number", + "format": "double", + "description": "The lower limit number of the confidence interval range.\nConfidence interval measures the probability that the mean falls within a range.\n" + }, + "confidenceIntervalUpper": { + "type": "number", + "format": "double", + "description": "The upper limit number of the confidence interval range." + }, + "pValue": { + "type": "number", + "format": "double", + "description": "The probability that the difference between the two means (from T1 and C) is due to random sampling error." + }, + "userCount": { + "type": "integer", + "format": "int64", + "description": "Count of users in the treatment sample." + } + }, + "description": "Defines the body of the metric result values." + }, + "v1.skill.experiment.MetricType": { + "type": "string", + "description": "The metric types a specific metric can be assigned to.\n* `KEY` - Identified as a metric that should provide clear evidence of expected changes caused by the new treatment experience.\n* `GUARDRAIL` - Identified as a metric that would detect unexpected regressions caused by the new treatment experience.\n", + "enum": [ + "KEY", + "GUARDRAIL" + ] + }, + "v1.skill.experiment.MetricChangeDirection": { + "type": "string", + "description": "The direction that an experiment metric is expected to trend during the experiment.\n* `INCREASE` - An upward change in metric value.\n* `DECREASE` - A downward change in metric value.\n", + "enum": [ + "INCREASE", + "DECREASE" + ] + }, + "v1.skill.experiment.State": { + "type": "string", + "description": "* `CREATED` - The experiment is successfully created but has not been enabled or started.\n* `ENABLING` - The experiment has initiated the transition to becoming \"ENABLED\".\n* `ENABLED` - The experiment configurations have been deployed but only customer treatment overrides set to T1 can view the T1 experience of a skill. No metrics are collected.\n* `RUNNING` - The experiment has started and a percentage of skill customers defined in the exposurePercentage will be entered into the experiment. Customers will randomly get assigned the T1 or C experience. Metric collection will begin.\n* `STOPPING` - The experiment has initated the transition to becoming \"STOPPED\".\n* `STOPPED` - The experiment has ended and all customers will experience the C behavior. Metrics will stop being collected.\n* `FAILED` - The experiment configurations have failed to deploy while enabling or starting the experiment.\n", + "enum": [ + "CREATED", + "ENABLING", + "ENABLED", + "RUNNING", + "STOPPING", + "STOPPED", + "FAILED" + ] + }, + "v1.skill.experiment.TargetState": { + "type": "string", + "description": "These states are used to perform a transition action (Pilot, Start, Stop, Conclude) on the experiment.\n* `ENABLED`: Target state for the 'Pilot' action. Experiment configurations are deployed and customer overrides are activated. Actual experiment has not started yet.\n* `RUNNING`: Target state for the 'Start' action. Experiment has started with the configured exposure. Skill customers selected within the exposure are contributing to the metric data.\n* `STOPPED`: Target state for the 'Stop' action. Experiment has stopped and all experiment configurations have been removed. All customers will see the C behavior by default.\n", + "enum": [ + "ENABLED", + "RUNNING", + "STOPPED" + ] + }, + "v1.skill.experiment.SourceState": { + "type": "string", + "description": "These states are for recording the previous state from a transition action (Created, Pilot, Start, Stop) on the experiment.\n* `CREATED`: Result state for the 'Create' action. Experiment has been created.\n* `ENABLED`: Result state for the 'Pilot' action. Experiment configurations are deployed and customer overrides are activated. Actual experiment has not started yet.\n* `RUNNING`: Result state for the 'Start' action. Experiment has started with the configured exposure. Skill customers selected within the exposure are contributing to the metric data.\n", + "enum": [ + "CREATED", + "ENABLED", + "RUNNING" + ] + }, + "v1.skill.experiment.DestinationState": { + "type": "string", + "description": "These states are for recording the destination state from a transition action (Created, Pilot, Start, Stop) on the experiment.\n* `CREATED`: Result state for the 'Create' action. Experiment has been created.\n* `ENABLED`: Result state for the 'Pilot' action. Experiment configurations are deployed and customer overrides are activated. Actual experiment has not started yet.\n* `RUNNING`: Result state for the 'Start' action. Experiment has started with the configured exposure. Skill customers selected within the exposure are contributing to the metric data.\n* `STOPPED`: Result state for the 'Stop' action. Experiment has stopped and all experiment configurations have been removed. All customers will see the C behavior by default.\n", + "enum": [ + "CREATED", + "ENABLED", + "RUNNING", + "STOPPED" + ] + }, + "v1.skill.experiment.TreatmentId": { + "type": "string", + "description": "Treatment identifier for an experiment.\n* `C` - Control. The treatment that defines the existing skill experience.\n* `T1` - Treatment 1. The threatment that defines the experimental skill experience.\n", + "enum": [ + "C", + "T1" + ] + }, + "v1.skill.experiment.ExperimentType": { + "type": "string", + "description": "Type of the experiment which directly affects the skill version used for T1.\nC will always point to the skill version in the skill's LIVE stage regardless of experiment type.\n", + "enum": [ + "ENDPOINT_BASED" + ] + }, + "v1.skill.experiment.StateTransitionStatus": { + "type": "string", + "description": "Status indiciating whether the state transiton was successful, in progress, or failed.\n", + "enum": [ + "SUCCEEDED", + "IN_PROGRESS", + "FAILED" + ] + }, + "v1.skill.experiment.ExperimentStoppedReason": { + "type": "string", + "description": "The reason indicating why an exerpiment was stopped. If none is chosen then default to DEVELOPER_REQUEST.\nOnly used when putting experiment into STOPPED state.\n", + "enum": [ + "EXPERIMENT_SUCCESS", + "EXPERIMENT_ISSUE" + ] + }, + "v1.skill.experiment.StateTransitionErrorType": { + "type": "string", + "description": "The error type which caused a state transition failure.\n", + "enum": [ + "INELIGIBLITY" + ] + }, + "v1.skill.experiment.MetricSnapshotStatus": { + "type": "string", + "description": "The status of the metric snapshot, whether it's RELIABLE or UNRELIABLE.\n", + "enum": [ + "RELIABLE", + "UNRELIABLE" + ] + }, + "v1.skill.experiment.StateTransitionError": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/v1.skill.experiment.StateTransitionErrorType", + "x-isEnum": true + }, + "message": { + "type": "string", + "description": "The message associated with the state transition error." + } + }, + "description": "The errors which caused a state transition failure.\n" + }, + "v1.skill.history.DialogActName": { + "type": "string", + "description": "Dialog act directive name.\n* `Dialog.ElicitSlot`: Alexa asked the user for the value of a specific slot. (https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#elicitslot)\n* `Dialog.ConfirmSlot`: Alexa confirmed the value of a specific slot before continuing with the dialog. (https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#confirmslot)\n* `Dialog.ConfirmIntent`: Alexa confirmed the all the information the user has provided for the intent before the skill took action. (https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#confirmintent)\n", + "enum": [ + "Dialog.ElicitSlot", + "Dialog.ConfirmSlot", + "Dialog.ConfirmIntent" + ] + }, + "v1.skill.history.Confidence": { + "type": "object", + "properties": { + "bin": { + "$ref": "#/definitions/v1.skill.history.ConfidenceBin", + "x-isEnum": true + } + }, + "description": "The hypothesized confidence for this interaction." + }, + "v1.skill.history.ConfidenceBin": { + "type": "string", + "description": "Intent confidence bin for this utterance.\n* `HIGH`: Intent was recognized with high confidence.\n* `MEDIUM`: Intent was recognized with medium confidence.\n* `LOW`: Intent was recognized with low confidence. Note: Low confidence intents are not sent to the skill.\n", + "enum": [ + "HIGH", + "MEDIUM", + "LOW" + ] + }, + "v1.skill.history.Slot": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the slot that was used in this interaction." + } + } + }, + "v1.skill.history.Intent": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The hypothesized intent for this utterance." + }, + "confidence": { + "$ref": "#/definitions/v1.skill.history.Confidence" + }, + "slots": { + "type": "object", + "description": "The hypothesized slot(s) for this interaction.", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.history.Slot" + } + } + }, + "description": "Provides the intent name, slots and confidence of the intent used in this interaction." + }, + "v1.skill.history.IntentRequest": { + "type": "object", + "properties": { + "dialogAct": { + "$ref": "#/definitions/v1.skill.history.DialogAct" + }, + "intent": { + "$ref": "#/definitions/v1.skill.history.Intent" + }, + "interactionType": { + "$ref": "#/definitions/v1.skill.history.InteractionType", + "x-isEnum": true + }, + "locale": { + "$ref": "#/definitions/v1.skill.history.IntentRequestLocales", + "x-isEnum": true + }, + "publicationStatus": { + "$ref": "#/definitions/v1.skill.history.PublicationStatus", + "x-isEnum": true + }, + "stage": { + "$ref": "#/definitions/v1.StageType", + "x-isEnum": true + }, + "utteranceText": { + "type": "string", + "description": "The transcribed user speech." + } + } + }, + "v1.skill.history.DialogAct": { + "type": "object", + "properties": { + "name": { + "$ref": "#/definitions/v1.skill.history.DialogActName", + "x-isEnum": true + } + }, + "description": "The dialog act used in the interaction." + }, + "v1.skill.history.IntentRequests": { + "type": "object", + "properties": { + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "nextToken": { + "type": "string", + "description": "This token can be used to load the next page of the result." + }, + "isTruncated": { + "type": "boolean", + "description": "This property is true when all the results matching the search request haven't been returned, false otherwise." + }, + "totalCount": { + "type": "number", + "description": "Total number of records that matched the given search query." + }, + "startIndex": { + "type": "number", + "description": "Position of the current page in the result set." + }, + "skillId": { + "type": "string", + "description": "The Skill Id." + }, + "items": { + "type": "array", + "description": "List of intent requests for the skill", + "items": { + "$ref": "#/definitions/v1.skill.history.IntentRequest" + } + } + }, + "description": "Response to the GET Intent Request History API. It contains the collection of utterances for the skill, nextToken and other metadata related to the search query." + }, + "v1.skill.history.IntentRequestLocales": { + "type": "string", + "description": "Skill locale in which this interaction occurred.", + "enum": [ + "en-US", + "en-GB", + "en-IN", + "en-CA", + "en-AU", + "de-DE", + "ja-JP" + ] + }, + "v1.skill.history.PublicationStatus": { + "type": "string", + "description": "The publication status of the skill when this interaction occurred", + "enum": [ + "Development", + "Certification" + ] + }, + "v1.skill.history.InteractionType": { + "type": "string", + "description": "Indicates if the utterance was executed as a \"ONE_SHOT\" interaction or \"MODAL\" interaction.\n* `ONE_SHOT`: The user invokes the skill and states their intent in a single phrase.\n* `MODAL`: The user first invokes the skill and then states their intent.\n", + "enum": [ + "ONE_SHOT", + "MODAL" + ] + }, + "v1.skill.history.sortFieldForIntentRequestType": { + "type": "string", + "enum": [ + "recordCount", + "intent.name", + "intent.confidence.bin", + "stage", + "dialogAct.name", + "locale", + "utteranceText", + "publicationStatus", + "interactionType" + ], + "default": "recordCount" + }, + "v1.skill.history.IntentConfidenceBin": { + "type": "string", + "description": "A filter used to retrieve items where the intent confidence bin is equal to the given value.\n* `HIGH`: Intent was recognized with high confidence.\n* `MEDIUM`: Intent was recognized with medium confidence.\n* `LOW`: Intent was recognized with low confidence. Note: Low confidence intents are not sent to the skill.\n", + "enum": [ + "HIGH", + "MEDIUM", + "LOW" + ] + }, + "v1.skill.history.localeInQuery": { + "type": "string", + "description": "A filter used to retrieve items where the locale is equal to the given value.", + "enum": [ + "en-US", + "en-GB", + "en-IN", + "en-CA", + "en-AU", + "de-DE", + "ja-JP" + ] + }, + "v1.skill.interactionModel.InteractionModelData": { + "type": "object", + "required": [ + "interactionModel" + ], + "properties": { + "version": { + "type": "string" + }, + "description": { + "type": "string" + }, + "interactionModel": { + "$ref": "#/definitions/v1.skill.interactionModel.InteractionModelSchema" + } + } + }, + "v1.skill.interactionModel.InteractionModelSchema": { + "type": "object", + "required": [ + "languageModel" + ], + "properties": { + "languageModel": { + "$ref": "#/definitions/v1.skill.interactionModel.languageModel" + }, + "dialog": { + "$ref": "#/definitions/v1.skill.interactionModel.Dialog" + }, + "prompts": { + "type": "array", + "description": "List of prompts.", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.Prompt" + } + } + } + }, + "v1.skill.interactionModel.languageModel": { + "type": "object", + "required": [ + "intents", + "invocationName" + ], + "properties": { + "invocationName": { + "type": "string", + "description": "Invocation name of the skill.", + "minLength": 1 + }, + "types": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.SlotType" + } + }, + "intents": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.Intent" + }, + "minItems": 1 + }, + "modelConfiguration": { + "$ref": "#/definitions/v1.skill.interactionModel.ModelConfiguration" + } + }, + "description": "Define the language model." + }, + "v1.skill.interactionModel.ModelConfiguration": { + "type": "object", + "properties": { + "fallbackIntentSensitivity": { + "$ref": "#/definitions/v1.skill.interactionModel.FallbackIntentSensitivity" + } + }, + "description": "Global configurations applicable to a skill's model." + }, + "v1.skill.interactionModel.FallbackIntentSensitivity": { + "type": "object", + "required": [ + "level" + ], + "properties": { + "level": { + "$ref": "#/definitions/v1.skill.interactionModel.FallbackIntentSensitivityLevel", + "x-isEnum": true + } + }, + "description": "Denotes skill's sensitivity for out-of-domain utterances." + }, + "v1.skill.interactionModel.FallbackIntentSensitivityLevel": { + "type": "string", + "description": "Skill's sensitivity level for out-of-domain utterances. By default, the sensitivity level of the skill is set to ‘LOW’.\nAs the sensitivity level for a skill is increased, more customer utterances that are not supported by the skill will be captured by AMAZON.FallbackIntent.\n", + "enum": [ + "HIGH", + "MEDIUM", + "LOW" + ] + }, + "v1.skill.interactionModel.SlotType": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string", + "description": "The name of the custom slot type." + }, + "generatedBy": { + "type": "string", + "description": "Name of the generator used to generate this object.", + "minLength": 1, + "maxLength": 100 + }, + "values": { + "type": "array", + "description": "List of expected values. Values outside the list are still returned.", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.TypeValue" + } + }, + "valueSupplier": { + "$ref": "#/definitions/v1.skill.interactionModel.ValueSupplier" + } + }, + "description": "Custom slot type to define a list of possible values for a slot. Used for items that are not covered by Amazon's built-in slot types." + }, + "v1.skill.interactionModel.ValueSupplier": { + "type": "object", + "required": [ + "type" + ], + "discriminator": "type", + "properties": { + "type": { + "type": "string", + "description": "The exact type of validation e.g.CatalogValueSupplier etc.", + "x-isDiscriminator": true + } + }, + "description": "Supplier object to provide slot values." + }, + "v1.skill.interactionModel.InlineValueSupplier": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.ValueSupplier" + }, + { + "type": "object", + "properties": { + "values": { + "type": "array", + "description": "The list of slot type values.", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.TypeValue" + } + } + } + } + ], + "description": "Supplies inline slot type values.", + "x-discriminator-value": "InlineValueSupplier" + }, + "v1.skill.interactionModel.CatalogValueSupplier": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.ValueSupplier" + }, + { + "type": "object", + "properties": { + "valueCatalog": { + "$ref": "#/definitions/v1.skill.interactionModel.ValueCatalog" + } + } + } + ], + "description": "Supply slot values from catalog(s).", + "x-discriminator-value": "CatalogValueSupplier" + }, + "v1.skill.interactionModel.TypeValue": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "id": { + "type": "string" + }, + "name": { + "$ref": "#/definitions/v1.skill.interactionModel.TypeValueObject" + } + }, + "description": "The value schema in type object of interaction model." + }, + "v1.skill.interactionModel.TypeValueObject": { + "type": "object", + "required": [ + "synonyms", + "value" + ], + "properties": { + "value": { + "type": "string", + "minLength": 1 + }, + "synonyms": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + } + }, + "description": "The object that contains individual type values." + }, + "v1.skill.interactionModel.ValueCatalog": { + "type": "object", + "required": [ + "catalogId", + "version" + ], + "properties": { + "catalogId": { + "type": "string", + "description": "CatalogId.", + "minLength": 1 + }, + "version": { + "type": "string", + "description": "Catalog version.", + "minLength": 1 + } + }, + "description": "Catalog reference to provide values." + }, + "v1.skill.interactionModel.Intent": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string", + "description": "Name to identify the intent.", + "minLength": 1 + }, + "generatedBy": { + "type": "string", + "description": "Name of the generator used to generate this object.", + "minLength": 1, + "maxLength": 100 + }, + "slots": { + "type": "array", + "description": "List of slots within the intent.", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.SlotDefinition" + } + }, + "samples": { + "type": "array", + "description": "Phrases the user can speak e.g. to trigger an intent or provide value for a slot elicitation.", + "items": { + "type": "string" + } + } + }, + "description": "The set of intents your service can accept and process." + }, + "v1.skill.interactionModel.SlotDefinition": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string", + "description": "The name of the slot.", + "minLength": 1 + }, + "type": { + "type": "string", + "description": "The type of the slot. It can be a built-in or custom type." + }, + "multipleValues": { + "description": "Configuration object for multiple values capturing behavior for this slot.", + "$ref": "#/definitions/v1.skill.interactionModel.MultipleValuesConfig" + }, + "samples": { + "type": "array", + "description": "Phrases the user can speak e.g. to trigger an intent or provide value for a slot elicitation.", + "items": { + "type": "string" + } + } + }, + "description": "Slot definition." + }, + "v1.skill.interactionModel.MultipleValuesConfig": { + "type": "object", + "required": [ + "enabled" + ], + "properties": { + "enabled": { + "type": "boolean", + "description": "Boolean that indicates whether this slot can capture multiple values." + } + }, + "description": "Configuration object for multiple values capturing behavior for this slot." + }, + "v1.skill.interactionModel.Dialog": { + "type": "object", + "required": [ + "intents" + ], + "properties": { + "delegationStrategy": { + "description": "Defines a delegation strategy for the dialogs in this dialog model.", + "$ref": "#/definitions/v1.skill.interactionModel.DelegationStrategyType", + "x-isEnum": true + }, + "intents": { + "type": "array", + "description": "List of intents that have dialog rules associated with them. Dialogs can also span multiple intents.", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.DialogIntents" + }, + "minItems": 1 + } + }, + "description": "Defines dialog rules e.g. slot elicitation and validation, intent chaining etc." + }, + "v1.skill.interactionModel.DialogIntents": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string", + "description": "Name of the intent that has a dialog specification.", + "minLength": 1 + }, + "delegationStrategy": { + "description": "Defines an intent-specific delegation strategy for this dialog intent. Overrides dialog-level setting.", + "$ref": "#/definitions/v1.skill.interactionModel.DelegationStrategyType", + "x-isEnum": true + }, + "slots": { + "type": "array", + "description": "List of slots that have dialog rules.", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.DialogSlotItems" + } + }, + "confirmationRequired": { + "type": "boolean", + "description": "Describes whether confirmation of the intent is required." + }, + "prompts": { + "$ref": "#/definitions/v1.skill.interactionModel.DialogIntentsPrompts" + } + } + }, + "v1.skill.interactionModel.DelegationStrategyType": { + "type": "string", + "description": "Enumerates delegation strategies used to control automatic dialog management through the defined dialog model. When no delegation strategies are defined, the value SKILL_RESPONSE is assumed.\n", + "enum": [ + "ALWAYS", + "SKILL_RESPONSE" + ] + }, + "v1.skill.interactionModel.DialogSlotItems": { + "type": "object", + "required": [ + "name", + "prompts", + "type" + ], + "properties": { + "name": { + "type": "string", + "description": "The name of the slot that has dialog rules associated with it.", + "minLength": 1 + }, + "type": { + "type": "string", + "description": "Type of the slot in the dialog intent.", + "minLength": 1 + }, + "elicitationRequired": { + "type": "boolean", + "description": "Describes whether elicitation of the slot is required." + }, + "confirmationRequired": { + "type": "boolean", + "description": "Describes whether confirmation of the slot is required." + }, + "prompts": { + "$ref": "#/definitions/v1.skill.interactionModel.DialogPrompts" + }, + "validations": { + "type": "array", + "description": "List of validations for the slot. if validation fails, user will be prompted with the provided prompt.", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.SlotValidation" + } + } + } + }, + "v1.skill.interactionModel.DialogPrompts": { + "type": "object", + "properties": { + "elicitation": { + "type": "string", + "description": "Reference to a prompt-id to use If this slot value is missing." + }, + "confirmation": { + "type": "string", + "description": "Reference to a prompt-id to use to confirm the slots value." + } + }, + "description": "Dialog prompts associated with this slot i.e. for elicitation and/or confirmation." + }, + "v1.skill.interactionModel.SlotValidation": { + "type": "object", + "required": [ + "prompt", + "type" + ], + "discriminator": "type", + "properties": { + "type": { + "type": "string", + "description": "The exact type of validation e.g. isLessThan,isGreaterThan etc.", + "x-isDiscriminator": true + }, + "prompt": { + "type": "string", + "description": "The prompt id that should be used if validation fails.", + "minLength": 1 + } + }, + "description": "Validation on a slot with support for prompt and confirmation." + }, + "v1.skill.interactionModel.DialogIntentsPrompts": { + "type": "object", + "properties": { + "elicitation": { + "type": "string", + "description": "Enum value in the dialog_slots map to reference the elicitation prompt id." + }, + "confirmation": { + "type": "string", + "description": "Enum value in the dialog_slots map to reference the confirmation prompt id." + } + }, + "description": "Collection of prompts for this intent." + }, + "v1.skill.interactionModel.IsGreaterThan": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.SlotValidation" + }, + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string", + "description": "Value to compare to.", + "minLength": 1 + } + } + } + ], + "description": "Validates that slot value is greater than the specified value.", + "x-discriminator-value": "isGreaterThan" + }, + "v1.skill.interactionModel.IsGreaterThanOrEqualTo": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.SlotValidation" + }, + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string", + "description": "Value to compare to.", + "minLength": 1 + } + } + } + ], + "description": "Validates that slot value is greater than or equals to the specified value.", + "x-discriminator-value": "isGreaterThanOrEqualTo" + }, + "v1.skill.interactionModel.IsLessThan": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.SlotValidation" + }, + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string", + "description": "Value to compare to.", + "minLength": 1 + } + } + } + ], + "description": "Validates that slot value is less than or equals to the specified value.", + "x-discriminator-value": "isLessThan" + }, + "v1.skill.interactionModel.IsLessThanOrEqualTo": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.SlotValidation" + }, + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string", + "description": "Value to compare to.", + "minLength": 1 + } + } + } + ], + "description": "Validates that slot value is less than or equals to the specified value.", + "x-discriminator-value": "isLessThanOrEqualTo" + }, + "v1.skill.interactionModel.IsInSet": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.SlotValidation" + }, + { + "type": "object", + "required": [ + "values" + ], + "properties": { + "values": { + "type": "array", + "description": "List of values to check.", + "items": { + "type": "string" + }, + "minItems": 1 + } + } + } + ], + "description": "Validates if the slot is in the specified set of values.", + "x-discriminator-value": "isInSet" + }, + "v1.skill.interactionModel.IsNotInSet": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.SlotValidation" + }, + { + "type": "object", + "required": [ + "values" + ], + "properties": { + "values": { + "type": "array", + "description": "List of values to check.", + "items": { + "type": "string" + }, + "minItems": 1 + } + } + } + ], + "description": "Validates if the slot is not in the specified set of values.", + "x-discriminator-value": "isNotInSet" + }, + "v1.skill.interactionModel.HasEntityResolutionMatch": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.SlotValidation" + } + ], + "description": "The hasEntityResolutionMatch would allow Alexa to trigger a re-prompt when the status produced by ER is \"ER_SUCCESS_NO_MATCH\".", + "x-discriminator-value": "hasEntityResolutionMatch" + }, + "v1.skill.interactionModel.IsInDuration": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.SlotValidation" + }, + { + "type": "object", + "properties": { + "start": { + "type": "string", + "description": "* `AMAZON.DATE`: ISO 8601 Duration using Y, M or D components or ISO 8601 Calendar Date in YYYY-MM-DD format.\n* `AMAZON.TIME`: ISO 8601 Duration using H or M component or ISO 8601 24-Hour Clock Time in hh:mm format.\n" + }, + "end": { + "type": "string", + "description": "* `AMAZON.DATE`: ISO 8601 Duration using Y, M or D components or ISO 8601 Calendar Date in YYYY-MM-DD format.\n* `AMAZON.TIME`: ISO 8601 Duration using H or M component or ISO 8601 24-Hour Clock Time in hh:mm format.\n" + } + } + } + ], + "description": "Validates that the given date or time (as a slot value) is in a given interval. Unlike other range validations, duration based validations lets the developer define a dynamic range of date or time using ISO_8601 Duration Format. Based on the given 'start' and 'end' parameters an interval is created. The slot value given by the skill's user at runtime is then validated inside this interval.\nBoth 'start' and 'end' parameters are in reference to the current date/time. Here the current date/time refers to the date/time when the skill's user made the request.\n", + "x-discriminator-value": "isInDuration" + }, + "v1.skill.interactionModel.IsNotInDuration": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.SlotValidation" + }, + { + "type": "object", + "properties": { + "start": { + "type": "string", + "description": "* `AMAZON.DATE`: ISO 8601 Duration using Y, M or D components or ISO 8601 Calendar Date in YYYY-MM-DD format.\n* `AMAZON.TIME`: ISO 8601 Duration using H or M component or ISO 8601 24-Hour Clock Time in hh:mm format.\n" + }, + "end": { + "type": "string", + "description": "* `AMAZON.DATE`: ISO 8601 Duration using Y, M or D components or ISO 8601 Calendar Date in YYYY-MM-DD format.\n* `AMAZON.TIME`: ISO 8601 Duration using H or M component or ISO 8601 24-Hour Clock Time in hh:mm format.\n" + } + } + } + ], + "description": "Validates that the given date or time (as a slot value) is not in a given interval. Unlike other range validations, duration based validations lets the developer define a dynamic range of date or time using ISO_8601 Duration Format. Based on the given 'start' and 'end' parameters an interval is created. The slot value given by the skill's user at runtime is then validated inside this interval.\nBoth 'start' and 'end' parameters are in reference to the current date/time. Here the current date/time refers to the date/time when the skill's user made the request.\n", + "x-discriminator-value": "isNotInDuration" + }, + "v1.skill.interactionModel.Prompt": { + "type": "object", + "required": [ + "id", + "variations" + ], + "properties": { + "id": { + "type": "string", + "description": "The prompt id, this id can be used from dialog definitions.", + "minLength": 1 + }, + "variations": { + "type": "array", + "description": "List of variations of the prompt, each variation can be either a text string or a well defined ssml string depending on the type defined.", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.PromptItems" + }, + "minItems": 1 + } + } + }, + "v1.skill.interactionModel.PromptItems": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "type": { + "$ref": "#/definitions/v1.skill.interactionModel.PromptItemsType", + "x-isEnum": true + }, + "value": { + "type": "string", + "description": "Specifies the prompt.", + "minLength": 1 + } + } + }, + "v1.skill.interactionModel.PromptItemsType": { + "type": "string", + "description": "Prompt can be specified in different formats e.g. text, ssml.", + "enum": [ + "SSML", + "PlainText" + ] + }, + "v1.skill.interactionModel.catalog.UpdateRequest": { + "type": "object", + "required": [ + "description", + "name" + ], + "properties": { + "name": { + "type": "string", + "description": "The catalog name." + }, + "description": { + "type": "string", + "description": "The catalog description with a 255 character maximum." + } + }, + "description": "Catalog update request object." + }, + "v1.skill.interactionModel.catalog.DefinitionData": { + "type": "object", + "required": [ + "catalog", + "vendorId" + ], + "properties": { + "catalog": { + "$ref": "#/definitions/v1.skill.interactionModel.catalog.CatalogInput" + }, + "vendorId": { + "type": "string", + "description": "The vendorId that the catalog should belong to." + } + }, + "description": "Catalog request definitions." + }, + "v1.skill.interactionModel.catalog.CatalogInput": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string", + "description": "Name of the catalog." + }, + "description": { + "type": "string", + "description": "Description string about the catalog." + } + }, + "description": "Definition for catalog input." + }, + "v1.skill.interactionModel.catalog.CatalogEntity": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the catalog." + }, + "description": { + "type": "string", + "description": "Description string about the catalog." + } + }, + "description": "Definition for catalog entity." + }, + "v1.skill.interactionModel.catalog.CatalogItem": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the catalog." + }, + "description": { + "type": "string", + "description": "Description string about the catalog." + }, + "catalogId": { + "type": "string", + "description": "Identifier of the catalog, optional in get response as the request already has catalogId." + }, + "_links": { + "$ref": "#/definitions/v1.Links" + } + }, + "description": "Definition for catalog entity." + }, + "v1.skill.interactionModel.catalog.ListCatalogResponse": { + "type": "object", + "properties": { + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "catalogs": { + "type": "array", + "description": "List of catalogs.\n", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.catalog.CatalogItem" + } + }, + "isTruncated": { + "type": "boolean" + }, + "nextToken": { + "type": "string" + }, + "totalCount": { + "type": "integer" + } + }, + "description": "List of catalog versions of a skill for the vendor." + }, + "v1.skill.interactionModel.catalog.CatalogStatus": { + "type": "object", + "properties": { + "lastUpdateRequest": { + "$ref": "#/definitions/v1.skill.interactionModel.catalog.LastUpdateRequest" + } + }, + "description": "Defines the structure for catalog status response." + }, + "v1.skill.interactionModel.catalog.LastUpdateRequest": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.interactionModel.catalog.CatalogStatusType", + "x-isEnum": true + }, + "version": { + "type": "string", + "description": "The version id of the entity returned." + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "description": "Contains attributes related to last modification request of a resource." + }, + "v1.skill.interactionModel.catalog.CatalogStatusType": { + "type": "string", + "description": "Status of last modification request for a resource.", + "enum": [ + "FAILED", + "IN_PROGRESS", + "SUCCEEDED" + ] + }, + "v1.skill.interactionModel.catalog.CatalogResponse": { + "type": "object", + "properties": { + "catalogId": { + "type": "string", + "description": "ID of the catalog created." + } + }, + "description": "CatalogId information." + }, + "v1.skill.interactionModel.catalog.CatalogDefinitionOutput": { + "type": "object", + "properties": { + "catalog": { + "$ref": "#/definitions/v1.skill.interactionModel.catalog.CatalogEntity" + }, + "creationTime": { + "type": "string", + "description": "Time of the catalog definition creation." + }, + "totalVersions": { + "type": "string", + "description": "Total number of versions." + } + }, + "description": "Catalog request definitions." + }, + "v1.skill.interactionModel.conflictDetection.GetConflictDetectionJobStatusResponse": { + "type": "object", + "required": [ + "status" + ], + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.interactionModel.conflictDetection.ConflictDetectionJobStatus", + "x-isEnum": true + }, + "totalConflicts": { + "type": "number", + "format": "long", + "description": "The total number of conflicts within skill model." + } + } + }, + "v1.skill.interactionModel.conflictDetection.ConflictDetectionJobStatus": { + "type": "string", + "description": "The status of conflict detection job.", + "enum": [ + "IN_PROGRESS", + "COMPLETED", + "FAILED" + ] + }, + "v1.skill.interactionModel.conflictDetection.GetConflictsResponse": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.conflictDetection.PagedResponse" + }, + { + "type": "object", + "required": [ + "results" + ], + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.conflictDetection.GetConflictsResponseResult" + } + } + } + } + ] + }, + "v1.skill.interactionModel.conflictDetection.GetConflictsResponseResult": { + "type": "object", + "required": [ + "conflictingUtterance", + "conflicts" + ], + "properties": { + "conflictingUtterance": { + "type": "string", + "description": "Utterance resolved from sample utterance that causes conflicts among different intents." + }, + "conflicts": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.conflictDetection.ConflictResult" + } + } + } + }, + "v1.skill.interactionModel.conflictDetection.ConflictResult": { + "type": "object", + "required": [ + "intent", + "sampleUtterance" + ], + "properties": { + "sampleUtterance": { + "type": "string", + "description": "Sample utterance provided by 3P developers for intents." + }, + "intent": { + "$ref": "#/definitions/v1.skill.interactionModel.conflictDetection.ConflictIntent" + } + } + }, + "v1.skill.interactionModel.conflictDetection.ConflictIntent": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string", + "description": "Conflict intent name" + }, + "slots": { + "type": "object", + "description": "List of conflict intent slots", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.interactionModel.conflictDetection.ConflictIntentSlot" + } + } + } + }, + "v1.skill.interactionModel.conflictDetection.ConflictIntentSlot": { + "type": "object", + "required": [ + "type" + ], + "properties": { + "value": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "v1.skill.interactionModel.conflictDetection.PagedResponse": { + "type": "object", + "properties": { + "paginationContext": { + "$ref": "#/definitions/v1.skill.interactionModel.conflictDetection.PaginationContext" + }, + "_links": { + "$ref": "#/definitions/v1.Links" + } + } + }, + "v1.skill.interactionModel.conflictDetection.PaginationContext": { + "type": "object", + "properties": { + "nextToken": { + "type": "string", + "description": "A token returned if there are more results for the given inputs than `maxResults` from the request. It should also be used in the next request to retrieve more results." + }, + "totalCount": { + "type": "integer", + "format": "int64", + "description": "Total avaliable results for the given query." + } + } + }, + "v1.skill.interactionModel.version.catalogUpdate": { + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "The catalog description with a 255 character maximum." + } + }, + "description": "Catalog update description object." + }, + "v1.skill.interactionModel.version.VersionData": { + "type": "object", + "required": [ + "source" + ], + "properties": { + "source": { + "$ref": "#/definitions/v1.skill.interactionModel.version.InputSource" + }, + "description": { + "type": "string", + "description": "Description string for specific catalog version." + } + }, + "description": "Catalog version specific data." + }, + "v1.skill.interactionModel.version.InputSource": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Type of catalog." + }, + "url": { + "type": "string", + "description": "Url to the catalog reference." + } + }, + "description": "Definition for catalog version input data." + }, + "v1.skill.interactionModel.version.CatalogVersionData": { + "type": "object", + "properties": { + "source": { + "$ref": "#/definitions/v1.skill.interactionModel.version.InputSource" + }, + "description": { + "type": "string", + "description": "Description string for specific catalog version." + }, + "version": { + "type": "string", + "description": "Specific catalog version." + } + }, + "description": "Catalog version data with metadata." + }, + "v1.skill.interactionModel.version.CatalogValues": { + "type": "object", + "properties": { + "isTruncated": { + "type": "boolean" + }, + "nextToken": { + "type": "string" + }, + "totalCount": { + "type": "integer", + "description": "Total number of catalog values." + }, + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "values": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.version.ValueSchema" + } + } + }, + "description": "List of catalog values." + }, + "v1.skill.interactionModel.version.ValueSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "$ref": "#/definitions/v1.skill.interactionModel.version.ValueSchemaName" + } + }, + "description": "The value schema in type object of interaction model." + }, + "v1.skill.interactionModel.version.ValueSchemaName": { + "type": "object", + "properties": { + "value": { + "type": "string" + }, + "synonyms": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1.skill.interactionModel.version.ListResponse": { + "type": "object", + "properties": { + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "skillModelVersions": { + "type": "array", + "description": "List of interaction model versions.\n", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.version.VersionItems" + } + }, + "isTruncated": { + "type": "boolean" + }, + "nextToken": { + "type": "string" + } + }, + "description": "List of interactionModel versions of a skill for the vendor" + }, + "v1.skill.interactionModel.version.VersionItems": { + "type": "object", + "properties": { + "version": { + "type": "string" + }, + "creationTime": { + "type": "string" + }, + "description": { + "type": "string" + }, + "_links": { + "$ref": "#/definitions/v1.skill.interactionModel.version.Links" + } + }, + "description": "Version metadata about the entity." + }, + "v1.skill.interactionModel.version.Links": { + "type": "object", + "properties": { + "self": { + "$ref": "#/definitions/v1.Link" + } + } + }, + "v1.skill.interactionModel.version.CatalogEntityVersion": { + "type": "object", + "properties": { + "version": { + "type": "string" + }, + "creationTime": { + "type": "string", + "format": "date-time" + }, + "description": { + "type": "string" + }, + "_links": { + "$ref": "#/definitions/v1.skill.interactionModel.version.Links" + } + }, + "description": "Version metadata about the catalog entity version." + }, + "v1.skill.interactionModel.version.ListCatalogEntityVersionsResponse": { + "type": "object", + "properties": { + "_links": { + "$ref": "#/definitions/v1.skill.interactionModel.version.Links" + }, + "catalogVersions": { + "type": "array", + "description": "List of catalog entity versions.\n", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.version.CatalogEntityVersion" + } + }, + "isTruncated": { + "type": "boolean" + }, + "nextToken": { + "type": "string" + }, + "totalCount": { + "type": "integer" + } + }, + "description": "List of catalog versions of a catalog for the vendor in sortDirection order, descending as default." + }, + "v1.skill.interactionModel.type.UpdateRequest": { + "type": "object", + "properties": { + "slotType": { + "$ref": "#/definitions/v1.skill.interactionModel.type.SlotTypeUpdateDefinition" + } + }, + "description": "Slot type update request object." + }, + "v1.skill.interactionModel.type.SlotTypeUpdateDefinition": { + "type": "object", + "required": [ + "description" + ], + "properties": { + "description": { + "type": "string", + "description": "The slot type description with a 255 character maximum." + } + }, + "description": "Slot type update definition object." + }, + "v1.skill.interactionModel.type.DefinitionData": { + "type": "object", + "properties": { + "slotType": { + "$ref": "#/definitions/v1.skill.interactionModel.type.SlotTypeInput" + }, + "vendorId": { + "type": "string", + "description": "The vendorId that the slot type should belong to." + } + }, + "description": "Slot type request definitions." + }, + "v1.skill.interactionModel.type.SlotTypeInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the slot type." + }, + "description": { + "type": "string", + "description": "Description string about the slot type." + } + }, + "description": "Definition for slot type input." + }, + "v1.skill.interactionModel.type.SlotTypeItem": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the slot type." + }, + "description": { + "type": "string", + "description": "Description string about the slot type." + }, + "id": { + "type": "string", + "description": "Identifier of the slot type, optional in get response as the request already has slotTypeId." + }, + "_links": { + "$ref": "#/definitions/v1.Links" + } + }, + "description": "Definition for slot type entity." + }, + "v1.skill.interactionModel.type.ListSlotTypeResponse": { + "type": "object", + "properties": { + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "slotTypes": { + "type": "array", + "description": "List of slot types.\n", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.type.SlotTypeItem" + } + }, + "nextToken": { + "type": "string" + } + }, + "description": "List of slot types of a skill for the vendor." + }, + "v1.skill.interactionModel.type.SlotTypeStatus": { + "type": "object", + "properties": { + "updateRequest": { + "$ref": "#/definitions/v1.skill.interactionModel.type.LastUpdateRequest" + } + }, + "description": "Defines the structure for slot type status response." + }, + "v1.skill.interactionModel.type.LastUpdateRequest": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.interactionModel.type.SlotTypeStatusType", + "x-isEnum": true + }, + "version": { + "type": "string", + "description": "The version id of the entity returned." + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.type.Error" + } + }, + "warnings": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.type.Warning" + } + } + }, + "description": "Contains attributes related to last modification request of a resource." + }, + "v1.skill.interactionModel.type.SlotTypeStatusType": { + "type": "string", + "description": "Status of last modification request for a resource.", + "enum": [ + "FAILED", + "IN_PROGRESS", + "SUCCEEDED" + ] + }, + "v1.skill.interactionModel.type.SlotTypeResponse": { + "type": "object", + "properties": { + "slotType": { + "$ref": "#/definitions/v1.skill.interactionModel.type.SlotTypeResponseEntity" + } + }, + "description": "Slot Type information." + }, + "v1.skill.interactionModel.type.SlotTypeResponseEntity": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID of the slot type created." + } + }, + "description": "SlotTypeId information." + }, + "v1.skill.interactionModel.type.SlotTypeDefinitionOutput": { + "type": "object", + "properties": { + "slotType": { + "$ref": "#/definitions/v1.skill.interactionModel.type.SlotTypeInput" + }, + "totalVersions": { + "type": "string", + "description": "Total number of versions." + } + }, + "description": "Slot Type request definitions." + }, + "v1.skill.interactionModel.type.Error": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "The error code." + }, + "message": { + "type": "string", + "description": "The error message." + } + }, + "description": "The error which would fail requests." + }, + "v1.skill.interactionModel.type.Warning": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "The warning code." + }, + "message": { + "type": "string", + "description": "The warning message." + } + }, + "description": "The warning which would not fail requests." + }, + "v1.skill.interactionModel.typeVersion.slotTypeUpdate": { + "type": "object", + "properties": { + "slotType": { + "$ref": "#/definitions/v1.skill.interactionModel.typeVersion.slotTypeUpdateObject" + } + }, + "description": "Slot Type update description wrapper." + }, + "v1.skill.interactionModel.typeVersion.slotTypeUpdateObject": { + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "The slot type description with a 255 character maximum." + } + }, + "description": "Slot Type update description object." + }, + "v1.skill.interactionModel.typeVersion.VersionData": { + "type": "object", + "properties": { + "slotType": { + "$ref": "#/definitions/v1.skill.interactionModel.typeVersion.VersionDataObject" + } + }, + "description": "Slot Type version specific data." + }, + "v1.skill.interactionModel.typeVersion.VersionDataObject": { + "type": "object", + "properties": { + "definition": { + "$ref": "#/definitions/v1.skill.interactionModel.typeVersion.ValueSupplierObject" + }, + "description": { + "type": "string", + "description": "Description string for specific slot type version." + } + }, + "description": "Slot Type version fields with specific data." + }, + "v1.skill.interactionModel.typeVersion.SlotTypeVersionData": { + "type": "object", + "properties": { + "slotType": { + "$ref": "#/definitions/v1.skill.interactionModel.typeVersion.SlotTypeVersionDataObject" + } + }, + "description": "Slot Type version data with metadata." + }, + "v1.skill.interactionModel.typeVersion.SlotTypeVersionDataObject": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Slot type id associated with the slot type version." + }, + "definition": { + "$ref": "#/definitions/v1.skill.interactionModel.typeVersion.ValueSupplierObject" + }, + "description": { + "type": "string", + "description": "Description string for specific slot type version." + }, + "version": { + "type": "string", + "description": "Specific slot type version." + } + }, + "description": "Slot Type version fields with metadata." + }, + "v1.skill.interactionModel.typeVersion.ValueSupplierObject": { + "type": "object", + "properties": { + "valueSupplier": { + "$ref": "#/definitions/v1.skill.interactionModel.ValueSupplier" + } + }, + "description": "Value supplier object for slot definition." + }, + "v1.skill.interactionModel.typeVersion.SlotTypeVersionItem": { + "type": "object", + "properties": { + "version": { + "type": "string", + "description": "Version number of slot type." + }, + "description": { + "type": "string", + "description": "Description string about the slot type version." + }, + "_links": { + "$ref": "#/definitions/v1.Links" + } + }, + "description": "Definition for slot type entity." + }, + "v1.skill.interactionModel.typeVersion.ListSlotTypeVersionResponse": { + "type": "object", + "properties": { + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "slotTypeVersions": { + "type": "array", + "description": "List of slot types.\n", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.typeVersion.SlotTypeVersionItem" + } + }, + "nextToken": { + "type": "string" + } + }, + "description": "List of slot type versions of a skill for the vendor." + }, + "v1.skill.interactionModel.jobs.JobDefinition": { + "type": "object", + "discriminator": "type", + "properties": { + "type": { + "type": "string", + "description": "Polymorphic type of the job", + "x-isDiscriminator": true + }, + "trigger": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.Trigger" + }, + "status": { + "type": "string", + "description": "Current status of the job definition." + } + }, + "description": "Definition for dynamic job." + }, + "v1.skill.interactionModel.jobs.CatalogAutoRefresh": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.JobDefinition" + }, + { + "type": "object", + "properties": { + "trigger": { + "description": "CatalogAutoRefresh can only have CatalogAutoRefresh trigger.", + "$ref": "#/definitions/v1.skill.interactionModel.jobs.Scheduled" + }, + "resource": { + "description": "The resource that the job is act on. Only catalog is allowed.", + "$ref": "#/definitions/v1.skill.interactionModel.jobs.Catalog" + } + } + } + ], + "description": "Definition for CatalogAutoRefresh job.", + "x-discriminator-value": "CatalogAutoRefresh" + }, + "v1.skill.interactionModel.jobs.ReferenceVersionUpdate": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.JobDefinition" + }, + { + "type": "object", + "properties": { + "trigger": { + "description": "Can only have ReferencedResourceJobsComplete trigger.", + "$ref": "#/definitions/v1.skill.interactionModel.jobs.ReferencedResourceJobsComplete" + }, + "resource": { + "description": "The resource that the job is act on. Only slot and interactionModel are allowed.", + "$ref": "#/definitions/v1.skill.interactionModel.jobs.ResourceObject" + }, + "references": { + "type": "array", + "description": "Referenced resources working with ReferencedResourceJobsComplete trigger.", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.ResourceObject" + } + }, + "publishToLive": { + "type": "boolean", + "description": "Whether publish development stage to live after the updates." + } + } + } + ], + "description": "Definition for ReferenceVersionUpdate job.", + "x-discriminator-value": "ReferenceVersionUpdate" + }, + "v1.skill.interactionModel.jobs.ResourceObject": { + "type": "object", + "discriminator": "type", + "properties": { + "type": { + "type": "string", + "description": "Polymorphic type of the ResourceObject.", + "x-isDiscriminator": true + } + }, + "description": "Resource object where the job is applied on." + }, + "v1.skill.interactionModel.jobs.Catalog": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.ResourceObject" + }, + { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Catalog identifier." + } + } + } + ], + "description": "Catalog the job is applied on.", + "x-discriminator-value": "Catalog" + }, + "v1.skill.interactionModel.jobs.SlotTypeReference": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.ResourceObject" + }, + { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "SlotTypeReference identifier." + } + } + } + ], + "description": "Slot type reference the job is applied on.", + "x-discriminator-value": "SlotTypeReference" + }, + "v1.skill.interactionModel.jobs.InteractionModel": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.ResourceObject" + }, + { + "type": "object", + "required": [ + "id", + "locales" + ], + "properties": { + "id": { + "type": "string", + "description": "Skill identifier." + }, + "locales": { + "type": "array", + "description": "Locale identifier and default is empty list which means all available locales.", + "items": { + "type": "string" + } + } + } + } + ], + "description": "Interaction model the job is applied on.", + "x-discriminator-value": "InteractionModel" + }, + "v1.skill.interactionModel.jobs.Trigger": { + "type": "object", + "discriminator": "type", + "properties": { + "type": { + "type": "string", + "description": "Polymorphic type of the trigger", + "x-isDiscriminator": true + } + }, + "description": "Condition when jobs will be executed." + }, + "v1.skill.interactionModel.jobs.Scheduled": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.Trigger" + }, + { + "type": "object", + "required": [ + "hour" + ], + "properties": { + "hour": { + "type": "integer", + "description": "The cron-like attribute in UTC time to describe the hour of the day and currently can only be 0,4,8,12,16,20." + }, + "dayOfWeek": { + "type": "integer", + "description": "If not null, this means the scheudule is weekly. the cron-like attribute in UTC time to describe the day of the week (0-6)." + } + } + } + ], + "description": "Time-based condition when jobs will be executed.", + "x-discriminator-value": "Scheduled" + }, + "v1.skill.interactionModel.jobs.ReferencedResourceJobsComplete": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.Trigger" + }, + { + "type": "object" + } + ], + "description": "Dependent job condition when jobs will be executed.", + "x-discriminator-value": "ReferencedResourceJobsComplete" + }, + "v1.skill.interactionModel.jobs.Execution": { + "type": "object", + "properties": { + "executionId": { + "type": "string", + "description": "Identifier of the execution." + }, + "timestamp": { + "type": "string", + "format": "date-time", + "example": "2020-10-25T20:00:02.135Z", + "description": "ISO date-time timestamp when the execution starts." + }, + "errorCode": { + "type": "string", + "description": "ErrorCode to explain what went wrong in case of FAILUREs." + }, + "status": { + "type": "string", + "description": "Current status of the job execution." + }, + "errorDetails": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.JobErrorDetails" + } + }, + "description": "Execution data." + }, + "v1.skill.interactionModel.jobs.JobErrorDetails": { + "type": "object", + "properties": { + "executionMetadata": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.ExecutionMetadata" + } + } + }, + "description": "Optional details if the execution is depending on other executions." + }, + "v1.skill.interactionModel.jobs.JobDefinitionMetadata": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Job identifier." + }, + "type": { + "type": "string", + "description": "Polymorphic type of the job." + }, + "status": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.JobDefinitionStatus", + "x-isEnum": true + } + }, + "description": "Metadata of the job definition." + }, + "v1.skill.interactionModel.jobs.ExecutionMetadata": { + "type": "object", + "properties": { + "jobId": { + "type": "string", + "description": "Identifier of the job." + }, + "errorCode": { + "type": "string", + "description": "ErrorCode to explain what went wrong in case of FAILUREs." + }, + "status": { + "type": "string", + "description": "Current status of the job execution." + } + }, + "description": "ExecutionMetadata for executions." + }, + "v1.skill.interactionModel.jobs.ListJobDefinitionsResponse": { + "type": "object", + "properties": { + "paginationContext": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.JobAPIPaginationContext" + }, + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "jobs": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.JobDefinitionMetadata" + } + } + }, + "description": "The response of list job definitions." + }, + "v1.skill.interactionModel.jobs.CreateJobDefinitionRequest": { + "type": "object", + "properties": { + "vendorId": { + "type": "string", + "description": "ID of the vendor owning the skill." + }, + "jobDefinition": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.JobDefinition" + } + }, + "description": "Request to create job definitions." + }, + "v1.skill.interactionModel.jobs.CreateJobDefinitionResponse": { + "type": "object", + "properties": { + "jobId": { + "type": "string", + "description": "Idenitifier of the job definition." + } + }, + "description": "The response of create job definition." + }, + "v1.skill.interactionModel.jobs.GetExecutionsResponse": { + "type": "object", + "properties": { + "paginationContext": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.JobAPIPaginationContext" + }, + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "executions": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.Execution" + } + } + }, + "description": "The response of get execution history." + }, + "v1.skill.interactionModel.jobs.UpdateJobStatusRequest": { + "type": "object", + "required": [ + "status" + ], + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.JobDefinitionStatus", + "x-isEnum": true + } + }, + "description": "Update job status." + }, + "v1.skill.interactionModel.jobs.JobAPIPaginationContext": { + "type": "object", + "properties": { + "nextToken": { + "type": "string" + } + } + }, + "v1.skill.interactionModel.jobs.ValidationErrors": { + "type": "object", + "properties": { + "errors": { + "type": "array", + "description": "The list of errors.", + "items": { + "$ref": "#/definitions/v1.skill.interactionModel.jobs.DynamicUpdateError" + } + } + }, + "description": "The list of errors." + }, + "v1.skill.interactionModel.jobs.DynamicUpdateError": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Dynamic update error code." + }, + "message": { + "type": "string", + "description": "Readable description of error." + } + }, + "description": "Error schema for dynamic update." + }, + "v1.skill.interactionModel.jobs.JobDefinitionStatus": { + "type": "string", + "description": "Current status of the job definition.", + "enum": [ + "DISABLED", + "ENALBED" + ] + }, + "v1.skill.invocations.InvokeSkillRequest": { + "type": "object", + "required": [ + "endpointRegion", + "skillRequest" + ], + "properties": { + "endpointRegion": { + "$ref": "#/definitions/v1.skill.invocations.EndPointRegions", + "x-isEnum": true + }, + "skillRequest": { + "$ref": "#/definitions/v1.skill.invocations.SkillRequest" + } + } + }, + "v1.skill.invocations.EndPointRegions": { + "type": "string", + "description": "Region of endpoint to be called.", + "enum": [ + "NA", + "EU", + "FE" + ] + }, + "v1.skill.invocations.SkillRequest": { + "type": "object", + "required": [ + "body" + ], + "properties": { + "body": { + "type": "object", + "description": "ASK request body schema as defined in the public facing documentation (https://developer.amazon.com/en-US/docs/alexa/custom-skills/request-and-response-json-reference.html#request-body-syntax)\n", + "properties": {} + } + } + }, + "v1.skill.invocations.InvokeSkillResponse": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.invocations.InvocationResponseStatus", + "x-isEnum": true + }, + "result": { + "$ref": "#/definitions/v1.skill.invocations.InvocationResponseResult" + } + } + }, + "v1.skill.invocations.InvocationResponseStatus": { + "type": "string", + "description": "String that specifies the status of skill invocation. Possible values are \"SUCCEEDED\", and \"FAILED\".\n", + "enum": [ + "SUCCEEDED", + "FAILED" + ] + }, + "v1.skill.invocations.InvocationResponseResult": { + "type": "object", + "properties": { + "skillExecutionInfo": { + "$ref": "#/definitions/v1.skill.invocations.SkillExecutionInfo" + }, + "error": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "v1.skill.invocations.SkillExecutionInfo": { + "type": "object", + "properties": { + "invocationRequest": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.invocations.Request" + } + }, + "invocationResponse": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.invocations.Response" + } + }, + "metrics": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.invocations.Metrics" + } + } + } + }, + "v1.skill.invocations.Request": { + "type": "object", + "properties": { + "endpoint": { + "type": "string", + "description": "Skill's Lambda or HTTPS endpoint." + }, + "body": { + "type": "object", + "description": "JSON payload that was sent to the skill's Lambda or HTTPS endpoint.\n", + "properties": {} + } + } + }, + "v1.skill.invocations.Response": { + "type": "object", + "properties": { + "body": { + "type": "object", + "description": "Payload that was returned by the skill's Lambda or HTTPS endpoint.\n", + "properties": {} + } + } + }, + "v1.skill.invocations.Metrics": { + "type": "object", + "properties": { + "skillExecutionTimeInMilliseconds": { + "type": "integer", + "description": "How long, in milliseconds, it took the skill's Lambda or HTTPS endpoint to process the request.\n" + } + } + }, + "v1.skill.Manifest.SkillManifestEnvelope": { + "type": "object", + "properties": { + "manifest": { + "$ref": "#/definitions/v1.skill.Manifest.SkillManifest" + } + } + }, + "v1.skill.Manifest.SkillManifest": { + "type": "object", + "properties": { + "manifestVersion": { + "$ref": "#/definitions/v1.skill.Manifest.ManifestVersion", + "x-isEnum": true + }, + "publishingInformation": { + "$ref": "#/definitions/v1.skill.Manifest.SkillManifestPublishingInformation" + }, + "privacyAndCompliance": { + "$ref": "#/definitions/v1.skill.Manifest.SkillManifestPrivacyAndCompliance" + }, + "events": { + "$ref": "#/definitions/v1.skill.Manifest.SkillManifestEvents" + }, + "permissions": { + "type": "array", + "description": "Defines the structure for required permissions information in the skill manifest.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.PermissionItems" + } + }, + "authorizedClients": { + "type": "array", + "description": "Defines a list of clients authorized for a skill.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.AuthorizedClient" + } + }, + "apis": { + "$ref": "#/definitions/v1.skill.Manifest.SkillManifestApis" + } + }, + "description": "Defines the structure for a skill's metadata." + }, + "v1.skill.Manifest.ManifestVersion": { + "type": "string", + "description": "Version of the skill manifest.", + "enum": [ + "1.0" + ] + }, + "v1.skill.Manifest.AuthorizedClient": { + "type": "object", + "required": [ + "authenticationProvider" + ], + "properties": { + "authenticationProvider": { + "type": "string" + } + }, + "description": "Defines a client authorized for a skill." + }, + "v1.skill.Manifest.AuthorizedClientLwa": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.Manifest.AuthorizedClient" + }, + { + "type": "object", + "properties": { + "applications": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.AuthorizedClientLwaApplication" + }, + "minItems": 1 + } + } + } + ], + "description": "Defines client using Login With Amazon authentication provider, corresponds to LWA Security Profile.", + "x-discriminator-value": "LWA" + }, + "v1.skill.Manifest.AuthorizedClientLwaApplication": { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string" + } + }, + "description": "Defines an application for LWA security profile." + }, + "v1.skill.Manifest.AuthorizedClientLwaApplicationAndroid": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.Manifest.AuthorizedClientLwaApplication" + }, + { + "type": "object", + "properties": { + "appStoreAppId": { + "type": "string" + }, + "clientId": { + "type": "string" + } + } + } + ], + "description": "Defines an android application for LWA authentication provider.", + "x-discriminator-value": "LWA_ANDROID" + }, + "v1.skill.Manifest.SkillManifestPublishingInformation": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the skill that is displayed to customers in the Alexa app." + }, + "description": { + "type": "string", + "description": "Description of the skill's purpose and feature and how it works. Should describe any prerequisites like hardware or account requirements and detailed steps for the customer to get started. For Flash Briefing skill list the feeds offered within the skill. Use a conversational tone and correct grammar and punctuation. This description displays to customers on the skill detail card in the Alexa app." + }, + "locales": { + "type": "object", + "description": "Defines the structure for locale specific publishing information in the skill manifest.", + "minProperties": 1, + "additionalProperties": { + "$ref": "#/definitions/v1.skill.Manifest.SkillManifestLocalizedPublishingInformation" + } + }, + "isAvailableWorldwide": { + "type": "boolean", + "description": "True if the skill should be distributed in all countries where Amazon distributes skill false otherwise." + }, + "distributionMode": { + "$ref": "#/definitions/v1.skill.Manifest.DistributionMode", + "x-isEnum": true + }, + "gadgetSupport": { + "$ref": "#/definitions/v1.skill.Manifest.ManifestGadgetSupport" + }, + "testingInstructions": { + "type": "string", + "description": "Special instructions provided by the developer to test the skill.", + "maxLength": 4000 + }, + "category": { + "type": "string", + "description": "Category that best describes a skill. Indicates the filter category for the skill in the Alexa App." + }, + "distributionCountries": { + "type": "array", + "description": "Selected list of countries provided by the skill owner where Amazon can distribute the skill.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.DistributionCountries" + } + }, + "automaticDistribution": { + "$ref": "#/definitions/v1.skill.Manifest.AutomaticDistribution" + }, + "automaticClonedLocale": { + "$ref": "#/definitions/v1.skill.Manifest.AutomaticClonedLocale" + }, + "paidSkillInformation": { + "$ref": "#/definitions/v1.skill.Manifest.PaidSkillInformation" + } + }, + "description": "Defines the structure for publishing information in the skill manifest." + }, + "v1.skill.Manifest.AutomaticClonedLocale": { + "type": "object", + "required": [ + "locales" + ], + "properties": { + "locales": { + "type": "array", + "description": "List of language specific source locale to target locales mapping.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.LocalesByAutomaticClonedLocale" + } + } + }, + "description": "Defines the structure for Sync Locales in the skill manifest. This is an optional property and Sync Locales will be disabled if not set." + }, + "v1.skill.Manifest.LocalesByAutomaticClonedLocale": { + "type": "object", + "required": [ + "source" + ], + "properties": { + "source": { + "type": "string", + "description": "Locale where the metadata and model will be copied from. For example: en-US. This locale must already exist in the skill." + }, + "targets": { + "type": "array", + "description": "Optional. List of locales where the metadata and model will be copied to. All configuration of source locale will be copied, so target locales do not have to exist before. Defaults to all locales with the same language as the sourceLocale.", + "items": { + "type": "string" + } + } + }, + "description": "maps source locale to list of target locales. Source and target locales should be with the same language." + }, + "v1.skill.Manifest.AutomaticDistribution": { + "type": "object", + "required": [ + "isActive" + ], + "properties": { + "isActive": { + "type": "boolean", + "description": "set to true to opt in to Automatic Skill Distribution. If false, then the skill will not be considered for Automatic Skill Distribution. Note that once a skill has gone through the automatic distribution process and this value is later set to false, any locales that were published through this feature will not be reverted. Any published locales will need to be suppressed manually via contacting DAG." + }, + "sourceLocaleForLanguages": { + "type": "array", + "description": "list of items pairing a language with a source locale. Required if isActive is set to true. For each language there must be exactly one source locale.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.SourceLanguageForLocales" + } + } + }, + "description": "optional. Used by developer to opt in to Automatic Skill Distribution, a feature where a skill will automatically be published in new eligible locales from the same language (e.g. from \"en-US\" to \"en-CA\" and \"en-GB\"). Locales that the developer has already created will not be overwritten." + }, + "v1.skill.Manifest.SourceLanguageForLocales": { + "type": "object", + "required": [ + "language", + "sourceLocale" + ], + "properties": { + "language": { + "type": "string", + "description": "two-letter string representing the language to distribute to. There must be at least one locale in publishingInformation.locales which has this language as the prefix." + }, + "sourceLocale": { + "type": "string", + "description": "locale where the metadata and model will be copied from. This locale must already exist in the skill." + } + }, + "description": "maps a language to a locale. During Automatic Skill Distribution, skill metadata and model of the source locale will be copied to other eligible locales of the same language. Eligible destination locales will be determined by the system." + }, + "v1.skill.Manifest.ManifestGadgetSupport": { + "type": "object", + "required": [ + "requirement" + ], + "properties": { + "requirement": { + "$ref": "#/definitions/v1.skill.Manifest.GadgetSupportRequirement", + "x-isEnum": true + }, + "minGadgetButtons": { + "type": "integer", + "description": "Minimum number of gadget buttons required.", + "minimum": 1, + "maximum": 4 + }, + "maxGadgetButtons": { + "type": "integer", + "description": "Maximum number of gadget buttons required.", + "minimum": 1, + "maximum": 4 + }, + "numPlayersMax": { + "type": "integer", + "description": "Maximum number of players in the game.", + "minimum": 1 + }, + "numPlayersMin": { + "type": "integer", + "description": "Minimum number of players in the game.", + "minimum": 1, + "maximum": 16 + } + }, + "description": "Defines the structure for gadget buttons support in the skill manifest." + }, + "v1.skill.Manifest.DistributionMode": { + "type": "string", + "description": "What audience the skill should be distributed to. \"PUBLIC\" - available to all users. Has ASIN and can be enabled. \"PRIVATE\" - available to entitled users. Has ASIN and can be enabled. \"INTERNAL\" - has no ASIN and cannot be enabled by users. Internally managed skills.\n", + "enum": [ + "PRIVATE", + "PUBLIC" + ] + }, + "v1.skill.Manifest.GadgetSupportRequirement": { + "type": "string", + "description": "Specifies if gadget support is required/optional for this skill to work.", + "enum": [ + "REQUIRED", + "OPTIONAL" + ] + }, + "v1.skill.Manifest.SkillManifestLocalizedPublishingInformation": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string", + "description": "Name of the skill that is displayed to customers in the Alexa app.", + "minLength": 2 + }, + "smallIconUri": { + "type": "string", + "description": "URL to a small icon for the skill, which is shown in the list of skills (108x108px)." + }, + "largeIconUri": { + "type": "string", + "description": "URL to a large icon that represents this skill (512x512px)." + }, + "summary": { + "type": "string", + "description": "Summary description of the skill, which is shown when viewing the list of skills.", + "maxLength": 160 + }, + "description": { + "type": "string", + "description": "A full description explaining the skill’s core functionality and any prerequisites to using it (such as additional hardware, software, or accounts). For a Flash Briefing skill, you must list the feeds for the skill.", + "maxLength": 4000 + }, + "updatesDescription": { + "type": "string", + "description": "Updates description of the skill's new features and fixes in the version. Should describe changes in the revisions of the skill.", + "maxLength": 4000 + }, + "examplePhrases": { + "type": "array", + "description": "Three example phrases that illustrate how users can invoke your skill. For accuracy, these phrases must come directly from your sample utterances.", + "items": { + "type": "string", + "maxLength": 200 + }, + "maxItems": 4 + }, + "keywords": { + "type": "array", + "description": "Sample keyword phrases that describe the skill.", + "items": { + "type": "string", + "maxLength": 150 + }, + "maxItems": 30 + }, + "customProductPrompts": { + "$ref": "#/definitions/v1.skill.Manifest.CustomProductPrompts" + } + }, + "description": "Defines the structure for locale specific publishing information in the skill manifest." + }, + "v1.skill.Manifest.DistributionCountries": { + "type": "string", + "enum": [ + "AF", + "AX", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "KH", + "CM", + "CA", + "CV", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CG", + "CD", + "CK", + "CR", + "HR", + "CY", + "CZ", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IQ", + "IE", + "IM", + "IL", + "IT", + "CI", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MK", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "AN", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "RE", + "RO", + "RU", + "RW", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "ES", + "LK", + "SR", + "SJ", + "SZ", + "SE", + "CH", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "US", + "UM", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW" + ] + }, + "v1.skill.Manifest.SkillManifestPrivacyAndCompliance": { + "type": "object", + "properties": { + "locales": { + "type": "object", + "description": "Object that contains objects for each supported locale.", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.Manifest.SkillManifestLocalizedPrivacyAndCompliance" + } + }, + "allowsPurchases": { + "type": "boolean", + "description": "True if the skill allows users to make purchases or spend real money false otherwise." + }, + "usesPersonalInfo": { + "type": "boolean", + "description": "True if the skill collects users' personal information false otherwise." + }, + "isChildDirected": { + "type": "boolean", + "description": "True if the skill is directed to or targets children under the age of 13/16 false otherwise." + }, + "isExportCompliant": { + "type": "boolean", + "description": "True if it is certified that the skill may be imported to and exported from the United States and all other countries and regions in which Amazon operate its program or in which skill owner have authorized sales to end users (without the need for Amazon to obtain any license or clearance or take any other action) and is in full compliance with all applicable laws and regulations governing imports and export including those applicable to software that makes use of encryption technology." + }, + "containsAds": { + "type": "boolean", + "description": "True if the skill contains advertising false otherwise." + }, + "usesHealthInfo": { + "type": "boolean", + "description": "True if the skill developer is a Covered Entity (CE) or Business Associate (BA) as defined by the Health Insurance Portability And Accountability Act (HIPAA) and the skill requires Amazon to process PHI on their behalf, false otherwise. This is an optional property and treated as false if not set." + }, + "shoppingKit": { + "$ref": "#/definitions/v1.skill.Manifest.ShoppingKit" + } + }, + "description": "Defines the structure for privacy & compliance information in the skill manifest." + }, + "v1.skill.Manifest.ShoppingKit": { + "type": "object", + "properties": { + "isShoppingActionsEnabled": { + "type": "boolean", + "description": "True if the skill uses Alexa Shopping Actions, false otherwise." + }, + "isAmazonAssociatesOnAlexaEnabled": { + "type": "boolean", + "description": "True if the skill uses Shopping Actions with Amazon Associates, false otherwise." + } + }, + "description": "Defines the structure for Shopping Kit related information in the skill manifest." + }, + "v1.skill.Manifest.SkillManifestLocalizedPrivacyAndCompliance": { + "type": "object", + "properties": { + "privacyPolicyUrl": { + "type": "string", + "description": "Link to the privacy policy that applies to this skill." + }, + "termsOfUseUrl": { + "type": "string", + "description": "link to the terms of use document for this skill" + } + }, + "description": "Defines the structure for locale specific privacy & compliance information in the skill manifest." + }, + "v1.skill.Manifest.SkillManifestEndpoint": { + "type": "object", + "required": [ + "uri" + ], + "properties": { + "uri": { + "type": "string", + "format": "uri", + "description": "Amazon Resource Name (ARN) of the skill's Lambda function or HTTPS URL." + }, + "sslCertificateType": { + "$ref": "#/definitions/v1.skill.Manifest.SSLCertificateType", + "x-isEnum": true + } + }, + "description": "Defines the structure for endpoint information in the skill manifest." + }, + "v1.skill.Manifest.SSLCertificateType": { + "type": "string", + "description": "The SSL certificate type of the skill's HTTPS endpoint. Only valid for HTTPS endpoint not for AWS Lambda ARN.", + "enum": [ + "SelfSigned", + "Wildcard", + "Trusted" + ] + }, + "v1.skill.Manifest.SkillManifestEvents": { + "type": "object", + "required": [ + "endpoint" + ], + "properties": { + "subscriptions": { + "type": "array", + "description": "Contains an array of eventName object each of which contains the name of a skill event.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.EventName" + } + }, + "publications": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.EventPublications" + } + }, + "regions": { + "type": "object", + "description": "Contains an array of the supported Objects.", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.Manifest.Region" + } + }, + "endpoint": { + "$ref": "#/definitions/v1.skill.Manifest.SkillManifestEndpoint" + } + }, + "description": "Defines the structure for subscribed events information in the skill manifest." + }, + "v1.skill.Manifest.EventName": { + "type": "object", + "properties": { + "eventName": { + "$ref": "#/definitions/v1.skill.Manifest.EventNameType", + "x-isEnum": true + } + } + }, + "v1.skill.Manifest.EventNameType": { + "type": "string", + "description": "Name of the event to be subscribed to.", + "enum": [ + "Legacy.AudioPlayerGui.LyricsViewedEvent", + "Legacy.ListModel.DeleteItemRequest", + "Legacy.MediaPlayer.SequenceModified", + "Legacy.PlaybackController.ButtonCommand", + "EffectsController.RequestEffectChangeRequest", + "Legacy.ExternalMediaPlayer.RequestToken", + "ITEMS_UPDATED", + "Alexa.Video.Xray.ShowDetailsSuccessful", + "PlaybackController.NextCommandIssued", + "Legacy.MediaPlayer.PlaybackFinished", + "Alexa.Camera.VideoCaptureController.CaptureFailed", + "SKILL_DISABLED", + "Alexa.Camera.VideoCaptureController.CancelCaptureFailed", + "CustomInterfaceController.EventsReceived", + "Legacy.DeviceNotification.NotificationStarted", + "REMINDER_UPDATED", + "AUDIO_ITEM_PLAYBACK_STOPPED", + "Legacy.AuxController.InputActivityStateChanged", + "LocalApplication.MShopPurchasing.Event", + "Legacy.ExternalMediaPlayer.AuthorizationComplete", + "LocalApplication.HHOPhotos.Event", + "Alexa.Presentation.APL.UserEvent", + "Legacy.AudioPlayer.PlaybackInterrupted", + "Legacy.BluetoothNetwork.DeviceUnpairFailure", + "IN_SKILL_PRODUCT_SUBSCRIPTION_ENDED", + "Alexa.FileManager.UploadController.UploadFailed", + "Legacy.BluetoothNetwork.DeviceConnectedFailure", + "Legacy.AudioPlayer.AudioStutter", + "Alexa.Camera.VideoCaptureController.CaptureStarted", + "Legacy.Speaker.MuteChanged", + "CardRenderer.DisplayContentFinished", + "Legacy.SpeechSynthesizer.SpeechStarted", + "AudioPlayer.PlaybackStopped", + "Legacy.SoftwareUpdate.CheckSoftwareUpdateReport", + "CardRenderer.DisplayContentStarted", + "LocalApplication.NotificationsApp.Event", + "AudioPlayer.PlaybackStarted", + "Legacy.DeviceNotification.NotificationEnteredForground", + "Legacy.DeviceNotification.SetNotificationFailed", + "Legacy.AudioPlayer.PeriodicPlaybackProgressReport", + "Legacy.HomeAutoWifiController.HttpNotified", + "Alexa.Camera.PhotoCaptureController.CancelCaptureFailed", + "SKILL_ACCOUNT_LINKED", + "LIST_UPDATED", + "Legacy.DeviceNotification.NotificationSync", + "Legacy.SconeRemoteControl.VolumeDown", + "Legacy.MediaPlayer.PlaybackPaused", + "Legacy.Presentation.PresentationUserEvent", + "PlaybackController.PlayCommandIssued", + "Legacy.ListModel.UpdateItemRequest", + "Messaging.MessageReceived", + "Legacy.SoftwareUpdate.InitiateSoftwareUpdateReport", + "AUDIO_ITEM_PLAYBACK_FAILED", + "LocalApplication.DeviceMessaging.Event", + "Alexa.Camera.PhotoCaptureController.CaptureFailed", + "Legacy.AudioPlayer.PlaybackIdle", + "Legacy.BluetoothNetwork.EnterPairingModeSuccess", + "Legacy.AudioPlayer.PlaybackError", + "Legacy.ListModel.GetPageByOrdinalRequest", + "Legacy.MediaGrouping.GroupChangeResponseEvent", + "Legacy.BluetoothNetwork.DeviceDisconnectedFailure", + "Legacy.BluetoothNetwork.EnterPairingModeFailure", + "Legacy.SpeechSynthesizer.SpeechInterrupted", + "PlaybackController.PreviousCommandIssued", + "Legacy.AudioPlayer.PlaybackFinished", + "Legacy.System.UserInactivity", + "Display.UserEvent", + "Legacy.PhoneCallController.Event", + "Legacy.DeviceNotification.SetNotificationSucceeded", + "LocalApplication.Photos.Event", + "LocalApplication.VideoExperienceService.Event", + "Legacy.ContentManager.ContentPlaybackTerminated", + "Legacy.PlaybackController.PlayCommand", + "Legacy.PlaylistController.ErrorResponse", + "Legacy.SconeRemoteControl.VolumeUp", + "MessagingController.UpdateConversationsStatus", + "Legacy.BluetoothNetwork.DeviceDisconnectedSuccess", + "LocalApplication.Communications.Event", + "AUDIO_ITEM_PLAYBACK_STARTED", + "Legacy.BluetoothNetwork.DevicePairFailure", + "LIST_DELETED", + "Legacy.PlaybackController.ToggleCommand", + "Legacy.BluetoothNetwork.DevicePairSuccess", + "Legacy.MediaPlayer.PlaybackError", + "AudioPlayer.PlaybackFinished", + "Legacy.DeviceNotification.NotificationStopped", + "Legacy.SipClient.Event", + "Display.ElementSelected", + "LocalApplication.MShop.Event", + "Legacy.ListModel.AddItemRequest", + "Legacy.BluetoothNetwork.ScanDevicesReport", + "Legacy.MediaPlayer.PlaybackStopped", + "Legacy.AudioPlayerGui.ButtonClickedEvent", + "LocalApplication.AlexaVoiceLayer.Event", + "Legacy.PlaybackController.PreviousCommand", + "Legacy.AudioPlayer.InitialPlaybackProgressReport", + "Legacy.BluetoothNetwork.DeviceConnectedSuccess", + "LIST_CREATED", + "Legacy.ActivityManager.ActivityContextRemovedEvent", + "ALL_LISTS_CHANGED", + "Legacy.AudioPlayer.PlaybackNearlyFinished", + "Legacy.MediaGrouping.GroupChangeNotificationEvent", + "LocalApplication.Sentry.Event", + "SKILL_PROACTIVE_SUBSCRIPTION_CHANGED", + "SKILL_NOTIFICATION_SUBSCRIPTION_CHANGED", + "REMINDER_CREATED", + "Alexa.Presentation.HTML.Event", + "FitnessSessionController.FitnessSessionError", + "Legacy.SconeRemoteControl.Next", + "Alexa.Camera.VideoCaptureController.CaptureFinished", + "Legacy.MediaPlayer.SequenceItemsRequested", + "Legacy.PlaybackController.PauseCommand", + "LocalApplication.AlexaVision.Event", + "LocalApplication.Closet.Event", + "Alexa.FileManager.UploadController.CancelUploadFailed", + "Legacy.MediaPlayer.PlaybackResumed", + "SKILL_PERMISSION_ACCEPTED", + "FitnessSessionController.FitnessSessionPaused", + "Legacy.AudioPlayer.PlaybackPaused", + "Alexa.Presentation.HTML.LifecycleStateChanged", + "LocalApplication.SipUserAgent.Event", + "Legacy.MediaPlayer.PlaybackStarted", + "REMINDER_STATUS_CHANGED", + "MessagingController.UploadConversations", + "ITEMS_DELETED", + "Legacy.AuxController.PluggedStateChanged", + "Legacy.AudioPlayer.PlaybackStarted", + "Alexa.FileManager.UploadController.UploadStarted", + "ITEMS_CREATED", + "Legacy.ExternalMediaPlayer.Event", + "LocalApplication.LocalMediaPlayer.Event", + "LocalApplication.KnightContacts.Event", + "LocalApplication.Calendar.Event", + "Legacy.AlertsController.DismissCommand", + "Legacy.AudioPlayer.PlaybackStutterFinished", + "Legacy.SpeechSynthesizer.SpeechFinished", + "Legacy.ExternalMediaPlayer.ReportDiscoveredPlayers", + "LocalApplication.SipClient.Event", + "Legacy.BluetoothNetwork.DeviceUnpairSuccess", + "Legacy.Speaker.VolumeChanged", + "CardRenderer.ReadContentFinished", + "LocalApplication.HomeAutomationMedia.Event", + "Legacy.BluetoothNetwork.CancelPairingMode", + "LocalApplication.DigitalDash.Event", + "CardRenderer.ReadContentStarted", + "Legacy.GameEngine.GameInputEvent", + "LocalApplication.LocalVoiceUI.Event", + "Legacy.Microphone.AudioRecording", + "LocalApplication.AlexaPlatformTestSpeechlet.Event", + "Legacy.HomeAutoWifiController.SsdpServiceDiscovered", + "Alexa.Camera.PhotoCaptureController.CancelCaptureFinished", + "Legacy.HomeAutoWifiController.DeviceReconnected", + "SKILL_ENABLED", + "Alexa.Camera.VideoCaptureController.CancelCaptureFinished", + "MessagingController.UpdateMessagesStatusRequest", + "REMINDER_STARTED", + "CustomInterfaceController.Expired", + "LocalApplication.AvaPhysicalShopping.Event", + "LocalApplication.WebVideoPlayer.Event", + "Legacy.HomeAutoWifiController.SsdpServiceTerminated", + "LocalApplication.FireflyShopping.Event", + "Legacy.PlaybackController.NextCommand", + "LocalApplication.Gallery.Event", + "Alexa.Presentation.PresentationDismissed", + "EffectsController.StateReceiptChangeRequest", + "LocalApplication.Alexa.Translation.LiveTranslation.Event", + "LocalApplication.AlexaNotifications.Event", + "REMINDER_DELETED", + "GameEngine.InputHandlerEvent", + "Legacy.PlaylistController.Response", + "LocalApplication.KnightHome.Event", + "Legacy.ListRenderer.ListItemEvent", + "AudioPlayer.PlaybackFailed", + "LocalApplication.KnightHomeThingsToTry.Event", + "Legacy.BluetoothNetwork.SetDeviceCategoriesFailed", + "Legacy.ExternalMediaPlayer.Logout", + "Alexa.FileManager.UploadController.UploadFinished", + "Legacy.ActivityManager.FocusChanged", + "Legacy.AlertsController.SnoozeCommand", + "Legacy.SpeechRecognizer.WakeWordChanged", + "Legacy.ListRenderer.GetListPageByToken", + "MessagingController.UpdateSendMessageStatusRequest", + "FitnessSessionController.FitnessSessionEnded", + "Alexa.Presentation.APL.RuntimeError", + "Legacy.ListRenderer.GetListPageByOrdinal", + "FitnessSessionController.FitnessSessionResumed", + "IN_SKILL_PRODUCT_SUBSCRIPTION_STARTED", + "Legacy.DeviceNotification.DeleteNotificationSucceeded", + "Legacy.SpeechSynthesizer.SpeechSynthesizerError", + "Alexa.Video.Xray.ShowDetailsFailed", + "Alexa.FileManager.UploadController.CancelUploadFinished", + "Legacy.SconeRemoteControl.PlayPause", + "Legacy.DeviceNotification.NotificationEnteredBackground", + "SKILL_PERMISSION_CHANGED", + "Legacy.AudioPlayer.Metadata", + "Legacy.AudioPlayer.PlaybackStutterStarted", + "AUDIO_ITEM_PLAYBACK_FINISHED", + "EffectsController.RequestGuiChangeRequest", + "FitnessSessionController.FitnessSessionStarted", + "Legacy.PlaybackController.LyricsViewedEvent", + "Legacy.ExternalMediaPlayer.Login", + "PlaybackController.PauseCommandIssued", + "Legacy.MediaPlayer.PlaybackIdle", + "Legacy.SconeRemoteControl.Previous", + "DeviceSetup.SetupCompleted", + "Legacy.MediaPlayer.PlaybackNearlyFinished", + "LocalApplication.todoRenderer.Event", + "Legacy.BluetoothNetwork.SetDeviceCategoriesSucceeded", + "Legacy.BluetoothNetwork.MediaControlSuccess", + "Legacy.HomeAutoWifiController.SsdpDiscoveryFinished", + "Alexa.Presentation.APL.LoadIndexListData", + "IN_SKILL_PRODUCT_SUBSCRIPTION_RENEWED", + "Legacy.BluetoothNetwork.MediaControlFailure", + "Legacy.AuxController.EnabledStateChanged", + "Legacy.FavoritesController.Response", + "Legacy.ListModel.ListStateUpdateRequest", + "Legacy.EqualizerController.EqualizerChanged", + "Legacy.MediaGrouping.GroupSyncEvent", + "Legacy.FavoritesController.Error", + "Legacy.ListModel.GetPageByTokenRequest", + "Legacy.ActivityManager.ActivityInterrupted", + "Legacy.MeetingClientController.Event", + "Legacy.Presentation.PresentationDismissedEvent", + "Legacy.Spotify.Event", + "Legacy.ExternalMediaPlayer.Error", + "Legacy.AuxController.DirectionChanged", + "AudioPlayer.PlaybackNearlyFinished", + "Alexa.Camera.PhotoCaptureController.CaptureFinished", + "Legacy.UDPController.BroadcastResponse", + "Legacy.AudioPlayer.PlaybackResumed", + "Legacy.DeviceNotification.DeleteNotificationFailed" + ] + }, + "v1.skill.Manifest.EventPublications": { + "type": "object", + "properties": { + "eventName": { + "type": "string", + "description": "Name of the event to publish." + } + } + }, + "v1.skill.Manifest.Region": { + "type": "object", + "required": [ + "endpoint" + ], + "properties": { + "endpoint": { + "$ref": "#/definitions/v1.skill.Manifest.SkillManifestEndpoint" + } + }, + "description": "Defines the structure for regional information." + }, + "v1.skill.Manifest.PermissionItems": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "$ref": "#/definitions/v1.skill.Manifest.PermissionName", + "x-isEnum": true + } + } + }, + "v1.skill.Manifest.PermissionName": { + "type": "string", + "description": "Name of the required permission.", + "enum": [ + "alexa::device_id:read", + "alexa::personality:explicit:read", + "alexa::authenticate:2:mandatory", + "alexa:devices:all:address:country_and_postal_code:read", + "alexa::profile:mobile_number:read", + "alexa::async_event:write", + "alexa::device_type:read", + "alexa::skill:proactive_enablement", + "alexa::personality:explicit:write", + "alexa::household:lists:read", + "alexa::utterance_id:read", + "alexa::user_experience_guidance:read", + "alexa::devices:all:notifications:write", + "avs::distributed_audio", + "alexa::devices:all:address:full:read", + "alexa::devices:all:notifications:urgent:write", + "payments:autopay_consent", + "alexa::alerts:timers:skill:readwrite", + "alexa::customer_id:read", + "alexa::skill:cds:monetization", + "alexa::music:cast", + "alexa::profile:given_name:read", + "alexa::alerts:reminders:skill:readwrite", + "alexa::household:lists:write", + "alexa::profile:email:read", + "alexa::profile:name:read", + "alexa::devices:all:geolocation:read", + "alexa::raw_person_id:read", + "alexa::authenticate:2:optional", + "alexa::health:profile:write", + "alexa::person_id:read", + "alexa::skill:products:entitlements", + "alexa::energy:devices:state:read", + "alexa::origin_ip_address:read", + "alexa::devices:all:coarse_location:read", + "alexa::devices:all:tokenized_geolocation:read", + "alexa::measurement_system::readwrite", + "dash::vendor:read:endpoints" + ] + }, + "v1.skill.Manifest.SkillManifestApis": { + "type": "object", + "properties": { + "flashBriefing": { + "$ref": "#/definitions/v1.skill.Manifest.FlashBriefingApis" + }, + "custom": { + "$ref": "#/definitions/v1.skill.Manifest.CustomApis" + }, + "knowledge": { + "$ref": "#/definitions/v1.skill.Manifest.KnowledgeApis" + }, + "smartHome": { + "$ref": "#/definitions/v1.skill.Manifest.SmartHomeApis" + }, + "video": { + "$ref": "#/definitions/v1.skill.Manifest.VideoApis" + }, + "alexaForBusiness": { + "$ref": "#/definitions/v1.skill.Manifest.AlexaForBusinessApis" + }, + "householdList": { + "$ref": "#/definitions/v1.skill.Manifest.HouseHoldList" + }, + "music": { + "$ref": "#/definitions/v1.skill.Manifest.MusicApis" + }, + "demandResponse": { + "$ref": "#/definitions/v1.skill.Manifest.DemandResponseApis" + } + }, + "description": "Defines the structure for implemented apis information in the skill manifest." + }, + "v1.skill.Manifest.KnowledgeApis": { + "type": "object", + "properties": { + "enablementChannel": { + "$ref": "#/definitions/v1.skill.Manifest.KnowledgeApisEnablementChannel", + "x-isEnum": true + }, + "locales": { + "type": "object", + "description": "Defines the structure of locale specific knowledge information in the skill manifest.", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.Manifest.LocalizedKnowledgeInformation" + } + } + }, + "description": "defines the structure for the knowledge api of the skill." + }, + "v1.skill.Manifest.KnowledgeApisEnablementChannel": { + "type": "string", + "description": "Defines how the skill can be enabled by developers. values can be set to 'PUBLIC' (in Alexa Skill Store), 'ASP' (A4R/A4H vendor devices), or 'A4B' Public and ASP selections must have \"distributionMode\" = 'PUBLIC' and will only be eligible for distribution on personal or vendor (A4H/A4R or A4B) devices.", + "enum": [ + "PUBLIC", + "ASP", + "A4B" + ] + }, + "v1.skill.Manifest.LocalizedKnowledgeInformation": { + "type": "object", + "properties": { + "answerAttribution": { + "type": "string", + "description": "enables skill developers to prepend a custom message to all of their knowledge skill's answers, which can help inform end-users of the skill and data source answering their question.", + "maxLength": 75 + } + }, + "description": "Defines the structure of localized knowledge information in the skill manifest." + }, + "v1.skill.Manifest.FlashBriefingApis": { + "type": "object", + "required": [ + "locales" + ], + "properties": { + "locales": { + "type": "object", + "description": "Object that contains objects for each supported locale.", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "$ref": "#/definitions/v1.skill.Manifest.LocalizedFlashBriefingInfo" + } + } + }, + "description": "Defines the structure of flash briefing api in the skill manifest." + }, + "v1.skill.Manifest.LocalizedFlashBriefingInfo": { + "type": "object", + "properties": { + "feeds": { + "type": "array", + "description": "Defines the structure for a feed information in the skill manifest.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.LocalizedFlashBriefingInfoItems" + }, + "maxItems": 50 + }, + "customErrorMessage": { + "type": "string", + "description": "Alexa says this to the customer if the skill fails to render the content.", + "minLength": 1, + "maxLength": 100 + } + }, + "description": "Defines the structure of a localized flash briefing information." + }, + "v1.skill.Manifest.LocalizedFlashBriefingInfoItems": { + "type": "object", + "required": [ + "contentType", + "genre", + "isDefault", + "updateFrequency", + "url" + ], + "properties": { + "logicalName": { + "type": "string", + "description": "Logical name of the feed. This is used to signify relation among feeds across different locales. Example If you have \"weather\" feed in multiple locale then consider naming it \"weather_update\" and we will make sure to play the right feed if customer changes the language on device.", + "maxLength": 255 + }, + "name": { + "type": "string", + "description": "Name that identifies this feed.", + "maxLength": 255 + }, + "url": { + "type": "string", + "description": "Url for the feed" + }, + "imageUri": { + "type": "string", + "description": "Uri for the feed image" + }, + "contentType": { + "$ref": "#/definitions/v1.skill.Manifest.FlashBriefingContentType", + "x-isEnum": true + }, + "genre": { + "$ref": "#/definitions/v1.skill.Manifest.FlashBriefingGenre", + "x-isEnum": true + }, + "updateFrequency": { + "$ref": "#/definitions/v1.skill.Manifest.FlashBriefingUpdateFrequency", + "x-isEnum": true + }, + "vuiPreamble": { + "type": "string", + "description": "A short introduction for the feed that Alexa reads to the customer before the feed contents. Should start with \"In\" or \"From\".", + "maxLength": 70 + }, + "isDefault": { + "type": "boolean", + "description": "True if this should be the default feed to be enabled when customer enables the skill false otherwise." + } + } + }, + "v1.skill.Manifest.FlashBriefingGenre": { + "type": "string", + "description": "Type or subject of the content in the feed.", + "enum": [ + "HEADLINE_NEWS", + "BUSINESS", + "POLITICS", + "ENTERTAINMENT", + "TECHNOLOGY", + "HUMOR", + "LIFESTYLE", + "SPORTS", + "SCIENCE", + "HEALTH_AND_FITNESS", + "ARTS_AND_CULTURE", + "PRODUCTIVITY_AND_UTILITIES", + "OTHER" + ] + }, + "v1.skill.Manifest.FlashBriefingContentType": { + "type": "string", + "description": "Format of the feed content.", + "enum": [ + "TEXT", + "AUDIO" + ] + }, + "v1.skill.Manifest.FlashBriefingUpdateFrequency": { + "type": "string", + "description": "Tells how often the feed has new content.", + "enum": [ + "HOURLY", + "DAILY", + "WEEKLY" + ] + }, + "v1.skill.Manifest.CustomApis": { + "type": "object", + "properties": { + "_targetRuntimes": { + "type": "array", + "description": "Defines the set of target runtimes for this skill.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.Custom.TargetRuntime" + }, + "minItems": 1 + }, + "locales": { + "type": "object", + "description": "Object that contains Objects for each supported locale.", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.Manifest.CustomLocalizedInformation" + } + }, + "regions": { + "type": "object", + "description": "Contains an array of the supported Objects.", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.Manifest.Region" + } + }, + "endpoint": { + "$ref": "#/definitions/v1.skill.Manifest.SkillManifestEndpoint" + }, + "interfaces": { + "type": "array", + "description": "Defines the structure for interfaces supported by the custom api of the skill.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.Interface" + } + }, + "tasks": { + "type": "array", + "description": "List of provided tasks.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.CustomTask" + }, + "minItems": 1 + }, + "connections": { + "$ref": "#/definitions/v1.skill.Manifest.CustomConnections" + }, + "dialogManagement": { + "$ref": "#/definitions/v1.skill.Manifest.DialogManagement" + }, + "appLink": { + "$ref": "#/definitions/v1.skill.Manifest.AppLink" + } + }, + "description": "Defines the structure for custom api of the skill." + }, + "v1.skill.Manifest.Custom.SuppressedInterface": { + "type": "string", + "enum": [ + "AudioPlayer", + "PlaybackController", + "Display", + "VideoPlayer", + "GameEngine", + "GadgetController", + "CanHandleIntentRequest", + "CanFulfillIntentRequest", + "AlexaPresentationApl", + "AlexaPresentationHtml", + "AlexaDataStore", + "AlexaDataStorePackageManager", + "PhotoCaptureController", + "VideoCaptureController", + "UploadController", + "CustomInterface", + "AlexaAugmentationEffectsController" + ] + }, + "v1.skill.Manifest.CustomLocalizedInformation": { + "type": "object", + "properties": { + "dialogManagement": { + "$ref": "#/definitions/v1.skill.Manifest.CustomLocalizedInformationDialogManagement" + } + }, + "description": "Defines the localized custom api information." + }, + "v1.skill.Manifest.CustomLocalizedInformationDialogManagement": { + "type": "object", + "properties": { + "sessionStartDelegationStrategy": { + "$ref": "#/definitions/v1.skill.Manifest.CustomDialogManagement.SessionStartDelegationStrategy" + } + }, + "description": "Defines locale-specific dialog-management configuration for a skill." + }, + "v1.skill.Manifest.CustomDialogManagement.SessionStartDelegationStrategy": { + "type": "object", + "required": [ + "target" + ], + "properties": { + "target": { + "type": "string" + } + }, + "description": "Specifies the initial dialog manager to field requests when a new skill session starts. If absent, this is assumed to be the default \"skill\" target" + }, + "v1.skill.Manifest.Custom.TargetRuntime": { + "type": "object", + "required": [ + "type" + ], + "discriminator": "type", + "properties": { + "type": { + "type": "string", + "x-isDiscriminator": true + } + }, + "description": "Discriminator for target runtime objects." + }, + "v1.skill.Manifest.Custom.TargetRuntimeType": { + "type": "string", + "enum": [ + "DEVICE" + ] + }, + "v1.skill.Manifest.Custom.TargetRuntimeDevice": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.Manifest.Custom.TargetRuntime" + } + ], + "description": "The type of target runtime.", + "x-discriminator-value": "DEVICE" + }, + "v1.skill.Manifest.CustomConnections": { + "type": "object", + "properties": { + "requires": { + "type": "array", + "description": "List of required connections.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.Custom.Connection" + }, + "minItems": 1 + }, + "provides": { + "type": "array", + "description": "List of provided connections.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.Custom.Connection" + }, + "minItems": 1 + } + }, + "description": "Supported connections." + }, + "v1.skill.Manifest.Custom.Connection": { + "type": "object", + "required": [ + "name", + "payload" + ], + "properties": { + "name": { + "type": "string", + "description": "Name of the connection.", + "minLength": 1 + }, + "payload": { + "$ref": "#/definitions/v1.skill.Manifest.ConnectionsPayload" + } + }, + "description": "Skill connection object." + }, + "v1.skill.Manifest.ConnectionsPayload": { + "type": "object", + "required": [ + "type", + "version" + ], + "properties": { + "type": { + "type": "string", + "description": "Type of the payload.", + "minLength": 1 + }, + "version": { + "type": "string", + "description": "Version of the payload.", + "minLength": 1 + } + }, + "description": "Payload of the connection." + }, + "v1.skill.Manifest.DialogManagement": { + "type": "object", + "required": [ + "dialogManagers" + ], + "properties": { + "dialogManagers": { + "type": "array", + "description": "List of dialog managers configured by the skill", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.DialogManager" + } + }, + "sessionStartDelegationStrategy": { + "$ref": "#/definitions/v1.skill.Manifest.DialogDelegationStrategy" + } + }, + "description": "Defines the dialog management configuration for the skill." + }, + "v1.skill.Manifest.DialogDelegationStrategy": { + "type": "object", + "required": [ + "target" + ], + "properties": { + "target": { + "type": "string" + } + }, + "description": "Specifies the initial dialog manager to field requests when a new skill session starts. If absent this is assumed to be the default \\\"skill\\\" target." + }, + "v1.skill.Manifest.DialogManager": { + "type": "object", + "required": [ + "type" + ], + "discriminator": "type", + "properties": { + "type": { + "type": "string", + "description": "Type of DialogManager.", + "x-isDiscriminator": true + } + }, + "description": "Individual dialog manager defined for the skill." + }, + "v1.skill.Manifest.AMAZONConversationsDialogManager": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.Manifest.DialogManager" + } + ], + "description": "The type of dialog manager: * AMAZON.Conversations - The Alexa Conversations (Coltrane) model for this skill.", + "x-discriminator-value": "AMAZON.Conversations" + }, + "v1.skill.Manifest.Interface": { + "type": "object", + "required": [ + "type" + ], + "discriminator": "type", + "properties": { + "type": { + "type": "string", + "x-isDiscriminator": true + } + } + }, + "v1.skill.Manifest.InterfaceType": { + "type": "string", + "description": "Name of the interface.", + "enum": [ + "AUDIO_PLAYER", + "VIDEO_APP", + "RENDER_TEMPLATE", + "GAME_ENGINE", + "GADGET_CONTROLLER", + "CAN_FULFILL_INTENT_REQUEST", + "ALEXA_PRESENTATION_APL", + "ALEXA_CAMERA_PHOTO_CAPTURE_CONTROLLER", + "ALEXA_CAMERA_VIDEO_CAPTURE_CONTROLLER", + "ALEXA_FILE_MANAGER_UPLOAD_CONTROLLER", + "CUSTOM_INTERFACE", + "ALEXA_AUGMENTATION_EFFECTS_CONTROLLER", + "APP_LINKS", + "ALEXA_EXTENSION", + "APP_LINKS_V2", + "ALEXA_SEARCH" + ] + }, + "v1.skill.Manifest.AudioInterface": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.Manifest.Interface" + } + ], + "x-discriminator-value": "AUDIO_PLAYER" + }, + "v1.skill.Manifest.VideoAppInterface": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.Manifest.Interface" + } + ], + "x-discriminator-value": "VIDEO_APP" + }, + "v1.skill.Manifest.DisplayInterface": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.Manifest.Interface" + }, + { + "type": "object", + "properties": { + "minimumTemplateVersion": { + "$ref": "#/definitions/v1.skill.Manifest.DisplayInterfaceTemplateVersion" + }, + "minimumApmlVersion": { + "$ref": "#/definitions/v1.skill.Manifest.DisplayInterfaceApmlVersion" + } + } + } + ], + "description": "Used to declare that the skill uses the Display interface. When a skill declares that it uses the Display interface the Display interface will be passed in the supportedInterfaces section of devices which meet any of the required minimum version attributes specified in the manifest. If the device does not meet any of the minimum versions specified in the manifest the Display interface will not be present in the supportedInterfaces section. If neither the minimumTemplateVersion nor the minimumApmlVersion attributes are specified in the manifes then the minimumTemplateVersion is defaulted to 1.0 and apmlVersion is omitted.", + "x-discriminator-value": "RENDER_TEMPLATE" + }, + "v1.skill.Manifest.AppLinkInterface": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.Manifest.Interface" + } + ], + "x-discriminator-value": "APP_LINKS" + }, + "v1.skill.Manifest.AppLinkV2Interface": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.Manifest.Interface" + } + ], + "x-discriminator-value": "APP_LINKS_V2" + }, + "v1.skill.Manifest.GameEngineInterface": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.Manifest.Interface" + } + ], + "x-discriminator-value": "GAME_ENGINE" + }, + "v1.skill.Manifest.GadgetControllerInterface": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.Manifest.Interface" + } + ], + "description": "Skills using Gadget Controller can send directives to Echo Buttons. This is a legacy interface specific to Echo Buttons.", + "x-discriminator-value": "GADGET_CONTROLLER" + }, + "v1.skill.Manifest.AlexaPresentationAplInterface": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.Manifest.Interface" + }, + { + "type": "object", + "properties": { + "supportedViewports": { + "type": "array", + "description": "List of supported viewports.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.ViewportSpecification" + } + } + } + } + ], + "description": "Used to declare that the skill uses the Alexa.Presentation.APL interface.", + "x-discriminator-value": "ALEXA_PRESENTATION_APL" + }, + "v1.skill.Manifest.AlexaPresentationHtmlInterface": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.Manifest.Interface" + } + ], + "description": "Used to declare that the skill uses the Alexa.Presentation.HTML interface.", + "x-discriminator-value": "ALEXA_PRESENTATION_HTML" + }, + "v1.skill.Manifest.ExtensionRequest": { + "type": "object", + "required": [ + "uri" + ], + "properties": { + "uri": { + "type": "string", + "description": "The extension's URI." + } + }, + "description": "Represents a request for a runtime extension. Extensions are optional enhancements to a runtime that provide additional sources of data, commands, and event handlers." + }, + "v1.skill.Manifest.ExtensionInitializationRequest": { + "type": "object", + "required": [ + "uri" + ], + "properties": { + "uri": { + "type": "string", + "description": "The extension's URI." + }, + "settings": { + "type": "object", + "description": "Default initialization extension settings.", + "properties": {}, + "x-jsonSchema-additionalProperties": { + "type": "string" + } + } + }, + "description": "Represents a request to automatically initialize an extension by a runtime." + }, + "v1.skill.Manifest.CustomTask": { + "type": "object", + "required": [ + "name", + "version" + ], + "properties": { + "name": { + "type": "string", + "description": "Name of the task.", + "minLength": 1 + }, + "version": { + "type": "string", + "description": "Version of the task.", + "minLength": 1 + } + }, + "description": "Defines the name and version of the task that the skill wants to handle." + }, + "v1.skill.Manifest.DisplayInterfaceTemplateVersion": { + "type": "string", + "description": "The minimum version of pre-defined templates supported by the skill. If a device does not support a version greater than or equal to the version specified her then templateVersion will not be passed inside the Display interface in the ASK request.", + "enum": [ + "1" + ] + }, + "v1.skill.Manifest.DisplayInterfaceApmlVersion": { + "type": "string", + "description": "The minimum version of the APML specification supported by the skill. If a device does not support a version greater than or equal to the version specified her then apmlVersion will not be passed inside the Display interface in the ASK request.", + "enum": [ + "0.2" + ] + }, + "v1.skill.Manifest.ViewportSpecification": { + "type": "object", + "required": [ + "mode", + "shape" + ], + "properties": { + "mode": { + "$ref": "#/definitions/v1.skill.Manifest.ViewportMode", + "x-isEnum": true + }, + "shape": { + "$ref": "#/definitions/v1.skill.Manifest.ViewportShape", + "x-isEnum": true + }, + "minWidth": { + "type": "integer", + "description": "Defines the minimum width of viewport that comply with this specification.", + "minimum": 1 + }, + "maxWidth": { + "type": "integer", + "description": "Defines the maximum width of viewport that comply with this specification.", + "minimum": 1 + }, + "minHeight": { + "type": "integer", + "description": "Defines the minimum height of viewport that comply with this specification.", + "minimum": 1 + }, + "maxHeight": { + "type": "integer", + "description": "Defines the maximum height of viewport that comply with this specification.", + "minimum": 1 + } + }, + "description": "Defines a viewport specification." + }, + "v1.skill.Manifest.ViewportMode": { + "type": "string", + "description": "Defines the mode of viewport that comply with this specification. E.g. HUB TV.", + "enum": [ + "HUB", + "TV", + "MOBILE", + "PC", + "AUTO" + ] + }, + "v1.skill.Manifest.ViewportShape": { + "type": "string", + "description": "Defines the shape of the device's viewport.", + "enum": [ + "RECTANGLE", + "ROUND" + ] + }, + "v1.skill.Manifest.SmartHomeApis": { + "type": "object", + "required": [ + "protocolVersion" + ], + "properties": { + "regions": { + "type": "object", + "description": "Contains an array of the supported Objects.", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.Manifest.LambdaRegion" + } + }, + "endpoint": { + "$ref": "#/definitions/v1.skill.Manifest.LambdaEndpoint" + }, + "protocolVersion": { + "$ref": "#/definitions/v1.skill.Manifest.SmartHomeProtocol", + "x-isEnum": true + }, + "supportedControls": { + "$ref": "#/definitions/v1.skill.Manifest.SupportedControls" + } + }, + "description": "Defines the structure of smart home api of the skill." + }, + "v1.skill.Manifest.SupportedControls": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/v1.skill.Manifest.SupportedControlsType", + "x-isEnum": true + } + }, + "description": "(Optional) Contains the attributes specifying additional functionalities supported by the skill." + }, + "v1.skill.Manifest.SupportedControlsType": { + "type": "string", + "description": "Type of the supported functionality.", + "enum": [ + "REMOTE_VEHICLE_CONTROL" + ] + }, + "v1.skill.Manifest.LambdaEndpoint": { + "type": "object", + "required": [ + "uri" + ], + "properties": { + "uri": { + "type": "string", + "description": "Amazon Resource Name (ARN) of the Lambda function." + }, + "sslCertificateType": { + "$ref": "#/definitions/v1.skill.Manifest.LambdaSSLCertificateType", + "x-isEnum": true + } + }, + "description": "Contains the uri field. This sets the global default endpoint." + }, + "v1.skill.Manifest.AlexaSearch": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.Manifest.Interface" + } + ], + "x-discriminator-value": "ALEXA_SEARCH" + }, + "v1.skill.Manifest.LambdaSSLCertificateType": { + "type": "string", + "description": "The SSL certificate type of the skill's HTTPS endpoint. Only valid for HTTPS endpoint not for AWS Lambda ARN.", + "enum": [ + "SelfSigned", + "Wildcard", + "Trusted" + ] + }, + "v1.skill.Manifest.LambdaRegion": { + "type": "object", + "required": [ + "endpoint" + ], + "properties": { + "endpoint": { + "$ref": "#/definitions/v1.skill.Manifest.LambdaEndpoint" + } + }, + "description": "Defines the structure of a regional information." + }, + "v1.skill.Manifest.SmartHomeProtocol": { + "type": "string", + "description": "Version of the Smart Home API. Default and recommended value is '3'. You may create a skill with version '2' for testing migration to version '3', but a skill submission using version '2' will not be certified.", + "enum": [ + "2", + "2.0", + "3", + "3.0" + ] + }, + "v1.skill.Manifest.VideoApisLocale": { + "type": "object", + "required": [ + "videoProviderTargetingNames" + ], + "properties": { + "videoProviderTargetingNames": { + "type": "array", + "description": "Defines the video provider's targeting name.", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "videoProviderLogoUri": { + "type": "string" + }, + "fireTvCatalogIngestion": { + "$ref": "#/definitions/v1.skill.Manifest.VideoFireTvCatalogIngestion" + }, + "features": { + "type": "array", + "description": "Defines the array of video features for this skill.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.VideoFeature" + } + }, + "promptNames": { + "type": "array", + "description": "Name to use when Alexa renders the video skill name in a prompt to the user", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.VideoPromptName" + } + } + }, + "description": "Defines the structure for localized video api information." + }, + "v1.skill.Manifest.VideoFeature": { + "type": "object", + "required": [ + "name", + "version" + ], + "discriminator": "name", + "properties": { + "version": { + "type": "string" + }, + "name": { + "type": "string", + "x-isDiscriminator": true + } + }, + "description": "A feature of an Alexa skill." + }, + "v1.skill.Manifest.VoiceProfileFeature": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.Manifest.VideoFeature" + } + ], + "description": "Feature for allowing for querying for available partner voice profiles, linking Alexa Speaker ID profiles to partner speaker profiles, and sending partner speaker profiles in directives.", + "x-discriminator-value": "VIDEO_VOICE_PROFILE" + }, + "v1.skill.Manifest.VideoPromptName": { + "type": "object", + "required": [ + "name", + "type" + ], + "properties": { + "type": { + "$ref": "#/definitions/v1.skill.Manifest.VideoPromptNameType", + "x-isEnum": true + }, + "name": { + "type": "string" + } + } + }, + "v1.skill.Manifest.VideoPromptNameType": { + "type": "string", + "enum": [ + "Default" + ] + }, + "v1.skill.Manifest.VideoFireTvCatalogIngestion": { + "type": "object", + "properties": { + "fireTvCatalogIngestionSourceId": { + "type": "string" + }, + "isFireTvCatalogIngestionEnabled": { + "type": "boolean" + } + } + }, + "v1.skill.Manifest.VideoCatalogInfo": { + "type": "object", + "required": [ + "sourceId" + ], + "properties": { + "sourceId": { + "type": "string" + } + } + }, + "v1.skill.Manifest.VideoApis": { + "type": "object", + "properties": { + "regions": { + "type": "object", + "description": "Defines the structure for region information.", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.Manifest.VideoRegion" + } + }, + "locales": { + "type": "object", + "description": "Defines the structure for the locale specific video api information.", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.Manifest.VideoApisLocale" + } + }, + "endpoint": { + "$ref": "#/definitions/v1.skill.Manifest.LambdaEndpoint" + }, + "countries": { + "type": "object", + "description": "Object that contains Objects for each supported country.", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.Manifest.VideoCountryInfo" + } + } + }, + "description": "Defines the structure for video api of the skill." + }, + "v1.skill.Manifest.VideoRegion": { + "type": "object", + "required": [ + "endpoint" + ], + "properties": { + "endpoint": { + "$ref": "#/definitions/v1.skill.Manifest.SkillManifestEndpoint" + }, + "upchannel": { + "type": "array", + "description": "The channel through which the partner skill can communicate to Alexa.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.UpChannelItems" + } + } + }, + "description": "Defines the structure for endpoint information." + }, + "v1.skill.Manifest.UpChannelItems": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Use \\\"SNS\\\" for this field." + }, + "uri": { + "type": "string", + "description": "SNS Amazon Resource Name (ARN) for video skill through which video partner can send events to Alexa." + } + } + }, + "v1.skill.Manifest.VideoCountryInfo": { + "type": "object", + "properties": { + "catalogInformation": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.VideoCatalogInfo" + } + } + }, + "description": "Defines the structure of per-country video info in the skill manifest." + }, + "v1.skill.Manifest.AlexaForBusinessApis": { + "type": "object", + "properties": { + "regions": { + "type": "object", + "description": "Contains an array of the supported Objects.", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.Manifest.Region" + } + }, + "endpoint": { + "$ref": "#/definitions/v1.skill.Manifest.SkillManifestEndpoint" + }, + "interfaces": { + "type": "array", + "description": "Contains the list of supported interfaces.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.AlexaForBusinessInterface" + } + } + }, + "description": "Defines the structure of alexaForBusiness api in the skill manifest." + }, + "v1.skill.Manifest.AlexaForBusinessInterface": { + "type": "object", + "required": [ + "namespace", + "requests", + "version" + ], + "properties": { + "namespace": { + "type": "string", + "description": "Name of the interface." + }, + "version": { + "$ref": "#/definitions/v1.skill.Manifest.Version", + "x-isEnum": true + }, + "requests": { + "type": "array", + "description": "Contains a list of requests/messages that skill can handle.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.AlexaForBusinessInterfaceRequest" + } + } + } + }, + "v1.skill.Manifest.Version": { + "type": "string", + "description": "Version of the interface.", + "enum": [ + "1.0" + ] + }, + "v1.skill.Manifest.AlexaForBusinessInterfaceRequest": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "$ref": "#/definitions/v1.skill.Manifest.AlexaForBusinessInterfaceRequestName", + "x-isEnum": true + } + } + }, + "v1.skill.Manifest.AlexaForBusinessInterfaceRequestName": { + "type": "string", + "description": "Name of the request.", + "enum": [ + "Search", + "Create", + "Update" + ] + }, + "v1.skill.Manifest.HealthInterface": { + "type": "object", + "required": [ + "namespace" + ], + "properties": { + "namespace": { + "type": "string", + "description": "Name of the interface." + }, + "version": { + "type": "string", + "description": "defines the version of skill interface." + } + } + }, + "v1.skill.Manifest.HouseHoldList": { + "type": "object", + "description": "Defines the structure of household list api in the skill manifest." + }, + "v1.skill.Manifest.MusicApis": { + "type": "object", + "properties": { + "regions": { + "type": "object", + "description": "Contains an array of the supported Objects.", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.Manifest.LambdaRegion" + } + }, + "endpoint": { + "$ref": "#/definitions/v1.skill.Manifest.LambdaEndpoint" + }, + "capabilities": { + "type": "array", + "description": "Defines the structure of music capabilities information in the skill manifest.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.MusicCapability" + } + }, + "interfaces": { + "type": "array", + "description": "A list of music skill interfaces that your skill supports.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.MusicInterfaces" + } + }, + "locales": { + "type": "object", + "description": "Defines the structure of locale specific music information in the skill manifest.", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.Manifest.LocalizedMusicInfo" + } + }, + "contentTypes": { + "type": "array", + "description": "List of the type of content to be provided by the music skill.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.MusicContentType" + } + } + }, + "description": "Defines the structure of music api in the skill manifest." + }, + "v1.skill.Manifest.MusicCapability": { + "type": "object", + "properties": { + "namespace": { + "type": "string", + "description": "Namespace of music skill api." + }, + "name": { + "type": "string", + "description": "Name of music skill api." + }, + "version": { + "type": "string", + "description": "Version of music skill api." + } + } + }, + "v1.skill.Manifest.MusicInterfaces": { + "type": "object", + "required": [ + "namespace" + ], + "properties": { + "namespace": { + "type": "string", + "description": "Name of the interface." + }, + "version": { + "type": "string", + "description": "Version of the interface." + }, + "requests": { + "type": "array", + "description": "Contains a list of requests/messages that skill can handle.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.MusicRequest" + } + } + } + }, + "v1.skill.Manifest.MusicRequest": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the request." + } + } + }, + "v1.skill.Manifest.LocalizedMusicInfo": { + "type": "object", + "properties": { + "promptName": { + "type": "string", + "description": "Name to be used when Alexa renders the music skill name." + }, + "aliases": { + "type": "array", + "description": "Defines the structure of the music prompt name information in the skill manifest.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.MusicAlias" + }, + "minItems": 1 + }, + "features": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.MusicFeature" + } + }, + "wordmarkLogos": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.MusicWordmark" + } + } + }, + "description": "Defines the structure of localized music information in the skill manifest." + }, + "v1.skill.Manifest.MusicAlias": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Alias name to be associated with the music skill." + } + } + }, + "v1.skill.Manifest.MusicFeature": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Feature name to be associated with the music skill." + } + } + }, + "v1.skill.Manifest.MusicWordmark": { + "type": "object", + "properties": { + "uri": { + "type": "string", + "description": "Wordmark logo to be used by devices with displays." + } + } + }, + "v1.skill.Manifest.MusicContentType": { + "type": "object", + "properties": { + "name": { + "$ref": "#/definitions/v1.skill.Manifest.MusicContentName", + "x-isEnum": true + } + }, + "description": "Defines the structure for content that can be provided by a music skill." + }, + "v1.skill.Manifest.MusicContentName": { + "type": "string", + "description": "Name of the content type that's supported for the music skill.", + "enum": [ + "ON_DEMAND", + "RADIO", + "PODCAST" + ] + }, + "v1.skill.Manifest.AppLink": { + "type": "object", + "properties": { + "linkedApplications": { + "type": "array", + "description": "Allows developers to declare their Skill will use Alexa App Links, and list relevant apps. This field is required when using the APP_LINK interface.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.LinkedApplication" + }, + "minItems": 1 + }, + "linkedWebDomains": { + "type": "array", + "description": "Allow developer to decalre their skill to link to the declared web domains.", + "items": { + "type": "string", + "minLength": 1 + }, + "minItems": 1 + }, + "linkedAndroidCommonIntents": { + "type": "array", + "description": "Allow developer to declare their skill to link to the speicified android common intents.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.LinkedAndroidCommonIntent" + }, + "minItems": 1 + }, + "linkedCommonSchemes": { + "$ref": "#/definitions/v1.skill.Manifest.LinkedCommonSchemes" + } + }, + "description": "Details required for app linking use cases." + }, + "v1.skill.Manifest.LinkedApplication": { + "type": "object", + "required": [ + "catalogInfo", + "friendlyName" + ], + "properties": { + "catalogInfo": { + "$ref": "#/definitions/v1.skill.Manifest.CatalogInfo" + }, + "customSchemes": { + "type": "array", + "description": "Supported schemes", + "items": { + "type": "string", + "minLength": 1 + }, + "minItems": 1 + }, + "domains": { + "type": "array", + "description": "Supported domains", + "items": { + "type": "string", + "minLength": 1 + }, + "minItems": 1 + }, + "friendlyName": { + "$ref": "#/definitions/v1.skill.Manifest.FriendlyName" + }, + "androidCustomIntents": { + "type": "array", + "description": "Supported android custom intent", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.AndroidCustomIntent" + }, + "minItems": 1 + } + }, + "description": "Applications associated with the skill." + }, + "v1.skill.Manifest.LinkedCommonSchemes": { + "type": "object", + "properties": { + "IOS_APP_STORE": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.IOSAppStoreCommonSchemeName" + }, + "minItems": 1 + }, + "GOOGLE_PLAY_STORE": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.PlayStoreCommonSchemeName" + }, + "minItems": 1 + } + }, + "description": "Allow developer to declare their skill to link to the speicified common schemes" + }, + "v1.skill.Manifest.IOSAppStoreCommonSchemeName": { + "type": "string", + "description": "supported common schemes for IOS_APP_STORE. MAPS is for \"maps:\" and TEL is for \"tel:\".", + "enum": [ + "MAPS", + "TEL" + ] + }, + "v1.skill.Manifest.PlayStoreCommonSchemeName": { + "type": "string", + "description": "supported common schemes for GOOGLE_PLAY_STORE. MAPS is for \"maps:\" and TEL is for \"tel:\".", + "enum": [ + "MAPS", + "TEL" + ] + }, + "v1.skill.Manifest.LinkedAndroidCommonIntent": { + "type": "object", + "required": [ + "catalogType", + "intentName" + ], + "properties": { + "intentName": { + "$ref": "#/definitions/v1.skill.Manifest.AndroidCommonIntentName", + "x-isEnum": true + }, + "catalogType": { + "$ref": "#/definitions/v1.skill.Manifest.CatalogName", + "x-isEnum": true + } + }, + "description": "Android common intents associated with the skill" + }, + "v1.skill.Manifest.CatalogName": { + "type": "string", + "enum": [ + "IOS_APP_STORE", + "GOOGLE_PLAY_STORE" + ] + }, + "v1.skill.Manifest.AndroidCommonIntentName": { + "type": "string", + "description": "Supported android common intent. Each of the value maps to a common intent defined in https://developer.android.com/guide/components/intents-common.", + "enum": [ + "SHOW_IN_MAP", + "ADD_CALENDAR_EVENT", + "PLAY_MEDIA", + "START_PHONE_CALL", + "OPEN_SETTINGS" + ] + }, + "v1.skill.Manifest.AndroidCustomIntent": { + "type": "object", + "properties": { + "component": { + "type": "string", + "description": "android component name", + "minLength": 1 + }, + "action": { + "type": "string", + "description": "android intent action", + "minLength": 1 + } + }, + "description": "Android custom intent" + }, + "v1.skill.Manifest.CatalogInfo": { + "type": "object", + "required": [ + "identifier", + "type" + ], + "properties": { + "type": { + "$ref": "#/definitions/v1.skill.Manifest.CatalogType", + "x-isEnum": true + }, + "identifier": { + "type": "string", + "description": "Identifier when accessing app in store.", + "minLength": 1 + } + }, + "description": "Details about how the app is listed on app store catalogs." + }, + "v1.skill.Manifest.CatalogType": { + "type": "string", + "description": "Supported catalog", + "enum": [ + "IOS_APP_STORE", + "GOOGLE_PLAY_STORE" + ] + }, + "v1.skill.Manifest.FriendlyName": { + "type": "object", + "required": [ + "default" + ], + "properties": { + "default": { + "type": "string", + "description": "Default app name", + "minLength": 1 + }, + "localizedNames": { + "type": "array", + "description": "Localized app names.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.LocalizedName" + }, + "minItems": 1 + } + }, + "description": "Localized App name" + }, + "v1.skill.Manifest.LocalizedName": { + "type": "object", + "required": [ + "locale", + "name" + ], + "properties": { + "locale": { + "type": "string", + "description": "locale", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "app name", + "minLength": 1 + } + }, + "description": "Localized app name" + }, + "v1.skill.Manifest.DemandResponseApis": { + "type": "object", + "properties": { + "regions": { + "type": "object", + "description": "Contains an array of the supported Objects.", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.Manifest.LambdaRegion" + } + }, + "endpoint": { + "$ref": "#/definitions/v1.skill.Manifest.LambdaEndpoint" + }, + "enrollmentUrl": { + "type": "string", + "description": "Defines the url for enrolling into a demand response program." + } + }, + "description": "Defines the structure for demand response api of the skill." + }, + "v1.skill.Manifest.PaidSkillInformation": { + "type": "object", + "required": [ + "pricing", + "taxInformation" + ], + "properties": { + "pricing": { + "type": "object", + "description": "Defines the structure for marketplace specific pricing information in the skill manifest", + "minProperties": 1, + "additionalProperties": { + "type": "array", + "description": "List of paid skill product pricing information.", + "items": { + "$ref": "#/definitions/v1.skill.Manifest.MarketplacePricing" + }, + "maxItems": 1, + "minItems": 1 + } + }, + "taxInformation": { + "$ref": "#/definitions/v1.skill.Manifest.TaxInformation" + } + }, + "description": "Defines the structure of the paid skill information of the skill." + }, + "v1.skill.Manifest.CustomProductPrompts": { + "type": "object", + "required": [ + "purchaseConfirmationDescription", + "purchasePromptDescription" + ], + "properties": { + "purchasePromptDescription": { + "type": "string", + "description": "Description of the paid skill product heard before customer is prompted for purchase." + }, + "purchaseConfirmationDescription": { + "type": "string", + "description": "Description of the paid skill product that displays when the paid skill is purchased." + } + }, + "description": "Custom prompts used for paid skill product purchasing options. Supports Speech Synthesis Markup Language (SSML), which can be used to control pronunciation, intonation, timing, and emotion." + }, + "v1.skill.Manifest.MarketplacePricing": { + "type": "object", + "required": [ + "currency", + "offerType", + "price" + ], + "properties": { + "offerType": { + "$ref": "#/definitions/v1.skill.Manifest.OfferType", + "x-isEnum": true + }, + "price": { + "type": "number", + "description": "Defines the price of a paid skill product. The price should be your suggested price, not including any VAT or similar taxes. Taxes are included in the final price to end users." + }, + "currency": { + "$ref": "#/definitions/v1.skill.Manifest.Currency", + "x-isEnum": true + }, + "freeTrialInformation": { + "$ref": "#/definitions/v1.skill.Manifest.FreeTrialInformation" + }, + "subscriptionInformation": { + "$ref": "#/definitions/v1.skill.Manifest.SubscriptionInformation" + } + }, + "description": "Paid skill product pricing information." + }, + "v1.skill.Manifest.OfferType": { + "type": "string", + "description": "The type of the offer.", + "enum": [ + "SUBSCRIPTION", + "ENTITLEMENT" + ] + }, + "v1.skill.Manifest.Currency": { + "type": "string", + "format": "ISO 4217 format", + "description": "Currency to use for paid skill product.", + "enum": [ + "USD" + ] + }, + "v1.skill.Manifest.TaxInformation": { + "type": "object", + "required": [ + "category" + ], + "properties": { + "category": { + "$ref": "#/definitions/v1.skill.Manifest.TaxInformationCategory", + "x-isEnum": true + } + }, + "description": "Defines the structure for paid skill product tax information." + }, + "v1.skill.Manifest.TaxInformationCategory": { + "type": "string", + "description": "The tax category that best describes the paid skill product.", + "enum": [ + "SOFTWARE", + "STREAMING_AUDIO", + "STREAMING_RADIO", + "INFORMATION_SERVICES", + "VIDEO", + "PERIODICALS", + "NEWSPAPERS" + ] + }, + "v1.skill.Manifest.SubscriptionInformation": { + "type": "object", + "required": [ + "subscriptionPaymentFrequency" + ], + "properties": { + "subscriptionPaymentFrequency": { + "$ref": "#/definitions/v1.skill.Manifest.SubscriptionPaymentFrequency", + "x-isEnum": true + } + }, + "description": "Defines the structure for paid skill product subscription information." + }, + "v1.skill.Manifest.SubscriptionPaymentFrequency": { + "type": "string", + "description": "The frequency in which payments are collected for the subscription.", + "enum": [ + "MONTHLY", + "YEARLY" + ] + }, + "v1.skill.Manifest.FreeTrialInformation": { + "type": "object", + "required": [ + "freeTrialDuration" + ], + "properties": { + "freeTrialDuration": { + "type": "string", + "format": "ISO_8601#Durations format", + "description": "Defines the free trial period for the paid skill product, in ISO_8601#Durations format." + } + }, + "description": "Defines the structure for paid skill product free trial information." + }, + "v1.skill.metrics.GetMetricDataResponse": { + "type": "object", + "required": [ + "metric", + "timestamps", + "values" + ], + "properties": { + "metric": { + "type": "string", + "description": "The name of metric which customer requested." + }, + "timestamps": { + "type": "array", + "description": "The timestamps for the data points.", + "items": { + "type": "string", + "format": "date-time" + } + }, + "values": { + "type": "array", + "description": "The data points for the metric corresponding to Timestamps.", + "items": { + "type": "number" + } + }, + "nextToken": { + "type": "string", + "description": "A token that marks the next batch of returned results." + } + }, + "description": "Response object for the API call which contains metrics data." + }, + "v1.skill.metrics.Period": { + "type": "string", + "description": "The aggregation period to use when retrieving the metric, follows ISO_8601#Durations format.", + "enum": [ + "SINGLE", + "PT15M", + "PT1H", + "P1D" + ] + }, + "v1.skill.metrics.Metric": { + "type": "string", + "description": "A distinct set of logic which predictably returns a set of data.", + "enum": [ + "uniqueCustomers", + "totalEnablements", + "totalUtterances", + "successfulUtterances", + "failedUtterances", + "totalSessions", + "successfulSessions", + "incompleteSessions", + "userEndedSessions", + "skillEndedSessions" + ] + }, + "v1.skill.metrics.stageForMetric": { + "type": "string", + "description": "The stage of the skill (live, development).", + "enum": [ + "live", + "development" + ] + }, + "v1.skill.metrics.SkillType": { + "type": "string", + "description": "The type of the skill (custom, smartHome and flashBriefing).", + "enum": [ + "custom", + "smartHome", + "flashBriefing" + ] + }, + "v1.skill.Private.ListPrivateDistributionAccountsResponse": { + "type": "object", + "properties": { + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "privateDistributionAccounts": { + "type": "array", + "description": "List of PrivateDistributionAccounts.", + "items": { + "$ref": "#/definitions/v1.skill.Private.PrivateDistributionAccount" + } + }, + "nextToken": { + "type": "string" + } + }, + "description": "Response of ListPrivateDistributionAccounts." + }, + "v1.skill.Private.PrivateDistributionAccount": { + "type": "object", + "properties": { + "principal": { + "type": "string", + "description": "12-digit numerical account ID for AWS account holders." + }, + "acceptStatus": { + "$ref": "#/definitions/v1.skill.Private.AcceptStatus", + "x-isEnum": true + } + }, + "description": "Contains information of the private distribution account with given id." + }, + "v1.skill.Private.AcceptStatus": { + "type": "string", + "description": "Enterprise IT administrators' action on the private distribution.", + "enum": [ + "ACCEPTED", + "PENDING" + ] + }, + "v1.skill.publication.PublishSkillRequest": { + "type": "object", + "properties": { + "publishesAtDate": { + "type": "string", + "format": "date-time", + "description": "Used to determine when the skill Publishing should start. It takes the request timestamp as default value. The date range can be a maximum of upto 6 months from the current time stamp. The format should be the RFC 3399 variant of ISO 8601. e.g 2019-04-12T23:20:50.52Z" + } + } + }, + "v1.skill.publication.SkillPublicationResponse": { + "type": "object", + "properties": { + "publishesAtDate": { + "type": "string", + "format": "date-time", + "description": "Used to determine when the skill Publishing should start." + }, + "status": { + "$ref": "#/definitions/v1.skill.publication.SkillPublicationStatus", + "x-isEnum": true + } + } + }, + "v1.skill.publication.SkillPublicationStatus": { + "type": "string", + "description": "Status of publishing", + "enum": [ + "IN_PROGRESS", + "SUCCEEDED", + "FAILED", + "CANCELLED", + "SCHEDULED" + ] + }, + "v1.skill.simulations.SimulationsApiRequest": { + "type": "object", + "required": [ + "device", + "input" + ], + "properties": { + "input": { + "$ref": "#/definitions/v1.skill.simulations.Input" + }, + "device": { + "$ref": "#/definitions/v1.skill.simulations.Device" + }, + "session": { + "$ref": "#/definitions/v1.skill.simulations.Session" + }, + "simulation": { + "$ref": "#/definitions/v1.skill.simulations.Simulation" + } + } + }, + "v1.skill.simulations.Device": { + "type": "object", + "required": [ + "locale" + ], + "properties": { + "locale": { + "type": "string", + "description": "A valid locale (e.g \"en-US\") for the virtual device used in simulation.\n" + } + }, + "description": "Model of a virtual device used for simulation. This device object emulates attributes associated with a real Alexa enabled device.\n" + }, + "v1.skill.simulations.Input": { + "type": "object", + "required": [ + "content" + ], + "properties": { + "content": { + "type": "string", + "description": "A string corresponding to the utterance text of what a customer would say to Alexa.\n" + } + } + }, + "v1.skill.simulations.Session": { + "type": "object", + "properties": { + "mode": { + "$ref": "#/definitions/v1.skill.simulations.SessionMode", + "x-isEnum": true + } + }, + "description": "Session settings for running current simulation.\n" + }, + "v1.skill.simulations.SessionMode": { + "type": "string", + "description": "Indicate the session mode of the current simulation is using.\n", + "enum": [ + "DEFAULT", + "FORCE_NEW_SESSION" + ] + }, + "v1.skill.simulations.Simulation": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/v1.skill.simulations.SimulationType", + "x-isEnum": true + } + }, + "description": "Simulation settings for the current simulation request.\n" + }, + "v1.skill.simulations.SimulationType": { + "type": "string", + "description": "String indicating the type of simulation request. Possible values are \"DEFAULT\" and \"NFI_ISOLATED_SIMULATION\". \"NFI_ISOLATED_SIMULATION\" is used to test the NFI(Name Free Interaction) enabled skills in isolation. This field is reserved for testing Name Free Interactions(NFI). Skills that are eligible to add NFI can only use this field. To learn more, visit https://developer.amazon.com/en-US/docs/alexa/custom-skills/understand-name-free-interaction-for-custom-skills.html\n", + "enum": [ + "DEFAULT", + "NFI_ISOLATED_SIMULATION" + ] + }, + "v1.skill.simulations.SimulationsApiResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Id of the simulation resource." + }, + "status": { + "$ref": "#/definitions/v1.skill.simulations.SimulationsApiResponseStatus", + "x-isEnum": true + }, + "result": { + "$ref": "#/definitions/v1.skill.simulations.SimulationResult" + } + } + }, + "v1.skill.simulations.SimulationsApiResponseStatus": { + "type": "string", + "description": "String that specifies the current status of the simulation. Possible values are \"IN_PROGRESS\", \"SUCCESSFUL\", and \"FAILED\".\n", + "enum": [ + "IN_PROGRESS", + "SUCCESSFUL", + "FAILED" + ] + }, + "v1.skill.simulations.SimulationResult": { + "type": "object", + "properties": { + "alexaExecutionInfo": { + "$ref": "#/definitions/v1.skill.simulations.AlexaExecutionInfo" + }, + "skillExecutionInfo": { + "$ref": "#/definitions/v1.skill.simulations.Invocation" + }, + "error": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "v1.skill.simulations.AlexaExecutionInfo": { + "type": "object", + "properties": { + "alexaResponses": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.simulations.AlexaResponse" + } + } + } + }, + "v1.skill.simulations.AlexaResponse": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The type of Alexa response" + }, + "content": { + "description": "The detail information needs to exposed in this type of Alexa response.\n", + "$ref": "#/definitions/v1.skill.simulations.AlexaResponseContent" + } + } + }, + "v1.skill.simulations.AlexaResponseContent": { + "type": "object", + "properties": { + "caption": { + "type": "string", + "description": "The plain text get from Alexa speech response" + } + } + }, + "v1.skill.simulations.Invocation": { + "type": "object", + "properties": { + "invocationRequest": { + "$ref": "#/definitions/v1.skill.simulations.InvocationRequest" + }, + "invocationResponse": { + "$ref": "#/definitions/v1.skill.simulations.InvocationResponse" + }, + "metrics": { + "$ref": "#/definitions/v1.skill.simulations.Metrics" + } + } + }, + "v1.skill.simulations.InvocationRequest": { + "type": "object", + "properties": { + "endpoint": { + "type": "string", + "description": "Skill's Lambda or HTTPS endpoint." + }, + "body": { + "type": "object", + "description": "JSON payload that was sent to the skill's Lambda or HTTPS endpoint.\n", + "additionalProperties": { + "type": "object", + "properties": {} + } + } + } + }, + "v1.skill.simulations.InvocationResponse": { + "type": "object", + "properties": { + "body": { + "type": "object", + "description": "Payload that was returned by the skill's Lambda or HTTPS endpoint.\n", + "additionalProperties": { + "type": "object", + "properties": {} + } + } + } + }, + "v1.skill.simulations.Metrics": { + "type": "object", + "properties": { + "skillExecutionTimeInMilliseconds": { + "type": "integer", + "description": "How long, in milliseconds, it took the skill's Lambda or HTTPS endpoint to process the request.\n" + } + } + }, + "v1.skill.validations.ValidationsApiRequest": { + "type": "object", + "required": [ + "locales" + ], + "properties": { + "locales": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1.skill.validations.ValidationsApiResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Id of the validation resource." + }, + "status": { + "$ref": "#/definitions/v1.skill.validations.ValidationsApiResponseStatus", + "x-isEnum": true + }, + "result": { + "$ref": "#/definitions/v1.skill.validations.ValidationsApiResponseResult" + } + } + }, + "v1.skill.validations.ValidationsApiResponseStatus": { + "type": "string", + "description": "String that specifies the current status of validation execution. Possible values are \"IN_PROGRESS\", \"SUCCESSFUL\", and \"FAILED\".\n", + "enum": [ + "IN_PROGRESS", + "SUCCESSFUL", + "FAILED" + ] + }, + "v1.skill.validations.ValidationsApiResponseResult": { + "type": "object", + "properties": { + "validations": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.validations.ResponseValidation" + } + }, + "error": { + "$ref": "#/definitions/v1.Error" + } + } + }, + "v1.skill.validations.ResponseValidation": { + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "Short, human readable title of the validation performed.\n" + }, + "description": { + "type": "string", + "description": "Human readable description of the validation performed. May include instructions to address validation failure.\n" + }, + "category": { + "type": "string", + "description": "Dot-delimited category.\n" + }, + "locale": { + "type": "string", + "description": "Locale of the validation.\n" + }, + "importance": { + "$ref": "#/definitions/v1.skill.validations.ResponseValidationImportance", + "x-isEnum": true + }, + "status": { + "$ref": "#/definitions/v1.skill.validations.ResponseValidationStatus", + "x-isEnum": true + } + } + }, + "v1.skill.validations.ResponseValidationImportance": { + "type": "string", + "description": "String that specifies importance of the validation. Possible values are \"REQUIRED\" and \"RECOMMENDED\"\n", + "enum": [ + "REQUIRED", + "RECOMMENDED" + ] + }, + "v1.skill.validations.ResponseValidationStatus": { + "type": "string", + "description": "String that specifies status of the validation. Possible values are \"SUCCESSFUL\" and \"FAILED\"\n", + "enum": [ + "SUCCESSFUL", + "FAILED" + ] + }, + "v1.skill.createSkillRequest": { + "type": "object", + "properties": { + "vendorId": { + "type": "string", + "description": "ID of the vendor owning the skill." + }, + "manifest": { + "$ref": "#/definitions/v1.skill.Manifest.SkillManifest" + }, + "hosting": { + "$ref": "#/definitions/v1.skill.AlexaHosted.HostingConfiguration" + } + } + }, + "v1.skill.ListSkillResponse": { + "type": "object", + "properties": { + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "skills": { + "type": "array", + "description": "List of skill summaries. List might contain either one, two or three entries for a given skillId depending on the skill's publication history and the publication method.\n`Skill containing certified stage`\n* If a skill was never published to live, this list will contain two entries `:` one with stage 'development' and another with stage 'certified'. Both of these summaries will have same skillId.\n* For any skill that has been published to 'live', this list will contain three entries `:` one with stage 'development', one with stage `certified` and one with stage 'live'. All of these summaries will have same skillId.\n`Skill without certified stage`\n* If a skill was never published to live, this list will contain only one entry for the skill with stage as 'development'.\n* For any skill that has been published to 'live', this list will contain two entries `:` one with stage 'development' and another with stage 'live'. Both of these summaries will have same skillId.\n", + "items": { + "$ref": "#/definitions/v1.skill.SkillSummary" + } + }, + "isTruncated": { + "type": "boolean" + }, + "nextToken": { + "type": "string" + } + }, + "description": "List of skills for the vendor." + }, + "v1.skill.ListSkillVersionsResponse": { + "type": "object", + "properties": { + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "skillVersions": { + "type": "array", + "description": "Skill version metadata", + "items": { + "$ref": "#/definitions/v1.skill.SkillVersion" + } + }, + "isTruncated": { + "type": "boolean" + }, + "nextToken": { + "type": "string" + } + }, + "description": "List of all skill versions" + }, + "v1.skill.SkillVersion": { + "type": "object", + "properties": { + "version": { + "type": "string" + }, + "message": { + "type": "string", + "description": "Description of the version (limited to 300 characters).\n", + "minLength": 1, + "maxLength": 300 + }, + "creationTime": { + "type": "string", + "format": "date-time" + }, + "submissions": { + "type": "array", + "description": "List of submissions for the skill version\n", + "items": { + "$ref": "#/definitions/v1.skill.VersionSubmission" + } + } + }, + "description": "Information about the skill version" + }, + "v1.skill.VersionSubmission": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.VersionSubmissionStatus", + "x-isEnum": true + }, + "submissionTime": { + "type": "string", + "format": "date-time" + } + }, + "description": "Submission for a skill version\n" + }, + "v1.skill.VersionSubmissionStatus": { + "type": "string", + "description": "The lifecycle status of the skill version submission.\n* `LIVE` - The skill version is in the live stage\n* `CERTIFIED` - The skill version has gone through the certification review process and has been certified.\n* `IN_REVIEW` - The skill version is currently under review for certification and publication. During this time, you cannot edit the configuration.\n* `FAILED_CERTIFICATION` - The skill version has been submitted for certification, however it has failed certification review. Please submit a new version for certification.\n* `HIDDEN` - The skill version has been published but is no longer available to new users for activation. Existing users can still invoke this skill if it is the most recent version.\n* `REMOVED` - The skill version has been published but removed for use, due to Amazon's policy violation. You can update your skill and publish a new version to live to address the policy violation.\n* `WITHDRAWN_FROM_CERTIFICATION` - The skill version was submitted for certification but was withdrawn from review.\n", + "enum": [ + "LIVE", + "CERTIFIED", + "IN_REVIEW", + "FAILED_CERTIFICATION", + "HIDDEN", + "REMOVED", + "WITHDRAWN_FROM_CERTIFICATION" + ] + }, + "v1.skill.SkillSummary": { + "type": "object", + "properties": { + "skillId": { + "type": "string" + }, + "stage": { + "$ref": "#/definitions/v1.StageV2Type", + "x-isEnum": true + }, + "apis": { + "type": "array", + "description": "List of APIs currently implemented by the skill.", + "items": { + "$ref": "#/definitions/v1.skill.SkillSummaryApis" + } + }, + "publicationStatus": { + "$ref": "#/definitions/v1.skill.PublicationStatus", + "x-isEnum": true + }, + "lastUpdated": { + "type": "string", + "format": "date-time" + }, + "nameByLocale": { + "type": "object", + "description": "Name of the skill in skill locales (keys are locale names (e.g. 'en-US') whereas values are name of the\nskill in that locale.\n", + "additionalProperties": { + "type": "string" + } + }, + "asin": { + "type": "string", + "description": "Amazon Standard Identification Number (ASIN) is unique blocks of 10 letters and/or numbers that identify items. More info about ASIN can be found here: https://www.amazon.com/gp/seller/asin-upc-isbn-info.html\nASIN is available for those skills only, that have been published, at least once.\n" + }, + "_links": { + "$ref": "#/definitions/v1.Links" + } + }, + "description": "Information about the skills." + }, + "v1.skill.PublicationStatus": { + "type": "string", + "description": "Publication status of the skill.\nIt is associated with the skill's stage. Skill in 'development' stage can have publication status as 'DEVELOPMENT' or 'CERTIFICATION'. Skill in 'certified' stage can have publication status as 'CERTIFIED'. 'Skill in 'live' stage can have publication status as 'PUBLISHED', 'HIDDEN' or 'REMOVED'.\n* `DEVELOPMENT` - The skill is available only to you. If you have enabled it for testing, you can test it on devices registered to your developer account.\n* `CERTIFICATION` - Amazon is currently reviewing the skill for publication. During this time, you cannot edit the configuration.\n* `CERTIFIED` - The skill has been certified and ready to be published. Skill can be either published immediately or an future release date can be set for the skill. You cannot edit the configuration for the certified skills. To start development, make your changes on the development version.\n* `PUBLISHED` - The skill has been published and is available to users. You cannot edit the configuration for live skills. To start development on an updated version, make your changes on the development version instead.\n* `HIDDEN` - The skill has been published but is no longer available to new users for activation. Existing users can still invoke this skill.\n* `REMOVED` - The skill has been published but removed for use, due to Amazon's policy violation. You can update your skill and publish a new version to live to address the policy violation.\n", + "enum": [ + "DEVELOPMENT", + "CERTIFICATION", + "CERTIFIED", + "PUBLISHED", + "HIDDEN", + "REMOVED" + ] + }, + "v1.skill.SkillSummaryApis": { + "type": "string", + "enum": [ + "custom", + "smartHome", + "flashBriefing", + "video", + "music", + "householdList", + "health", + "alexaForBusiness", + "demandResponse" + ] + }, + "v1.skill.CreateSkillResponse": { + "type": "object", + "properties": { + "skillId": { + "type": "string", + "description": "ID of the skill created." + } + }, + "description": "SkillId information." + }, + "v1.skill.SSLCertificatePayload": { + "type": "object", + "properties": { + "sslCertificate": { + "type": "string", + "description": "The default ssl certificate for the skill. If a request is made for a region without an explicit ssl certificate, this certificate will be used." + }, + "regions": { + "type": "object", + "description": "A map of region to ssl certificate. Keys are string region codes (https://developer.amazon.com/docs/smapi/skill-manifest.html#regions), values are regional ssl certificate objects which contain the ssl certificate blobs as strings.", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.RegionalSSLCertificate" + } + } + } + }, + "v1.skill.RegionalSSLCertificate": { + "type": "object", + "properties": { + "sslCertificate": { + "type": "string" + } + } + }, + "v1.skill.SkillStatus": { + "type": "object", + "properties": { + "manifest": { + "$ref": "#/definitions/v1.skill.ManifestStatus" + }, + "interactionModel": { + "type": "object", + "description": "Status for available interaction models, keyed by locale.", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.SkillInteractionModelStatus" + } + }, + "hostedSkillDeployment": { + "$ref": "#/definitions/v1.skill.HostedSkillDeploymentStatus" + }, + "hostedSkillProvisioning": { + "$ref": "#/definitions/v1.skill.HostedSkillProvisioningStatus" + } + }, + "description": "Defines the structure for skill status response." + }, + "v1.skill.skillResourcesEnum": { + "type": "object", + "enum": [ + "manifest", + "interactionModel", + "hostedSkillDeployment", + "hostedSkillProvisioning" + ] + }, + "v1.skill.ManifestStatus": { + "type": "object", + "properties": { + "lastUpdateRequest": { + "$ref": "#/definitions/v1.skill.ManifestLastUpdateRequest" + }, + "eTag": { + "type": "string", + "description": "An opaque identifier for last successfully updated resource." + } + }, + "description": "Defines the structure for a resource status." + }, + "v1.skill.ManifestLastUpdateRequest": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.Status", + "x-isEnum": true + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "warnings": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "version": { + "type": "string", + "description": "on success, this field indicates the created version." + } + }, + "description": "Contains attributes related to last modification (create/update) request of a resource." + }, + "v1.skill.SkillInteractionModelStatus": { + "type": "object", + "properties": { + "lastUpdateRequest": { + "$ref": "#/definitions/v1.skill.InteractionModelLastUpdateRequest" + }, + "eTag": { + "type": "string", + "description": "An opaque identifier for last successfully updated resource." + }, + "version": { + "type": "string", + "description": "Version for last successfully built model." + } + }, + "description": "Defines the structure for interaction model build status." + }, + "v1.skill.InteractionModelLastUpdateRequest": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.Status", + "x-isEnum": true + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "warnings": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "buildDetails": { + "$ref": "#/definitions/v1.skill.BuildDetails" + } + }, + "description": "Contains attributes related to last modification (create/update) request of a resource." + }, + "v1.skill.HostedSkillDeploymentStatus": { + "type": "object", + "properties": { + "lastUpdateRequest": { + "$ref": "#/definitions/v1.skill.HostedSkillDeploymentStatusLastUpdateRequest" + } + }, + "description": "Defines the most recent deployment status for the Alexa hosted skill." + }, + "v1.skill.HostedSkillDeploymentStatusLastUpdateRequest": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.Status", + "x-isEnum": true + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "warnings": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "deploymentDetails": { + "$ref": "#/definitions/v1.skill.HostedSkillDeploymentDetails" + } + }, + "description": "Contains attributes related to last modification request of a hosted skill deployment resource." + }, + "v1.skill.HostedSkillDeploymentDetails": { + "type": "object", + "properties": { + "commitId": { + "type": "string" + }, + "logUrl": { + "type": "string" + } + }, + "description": "Details about hosted skill deployment." + }, + "v1.skill.HostedSkillProvisioningStatus": { + "type": "object", + "properties": { + "lastUpdateRequest": { + "$ref": "#/definitions/v1.skill.HostedSkillProvisioningLastUpdateRequest" + } + }, + "description": "Defines the provisioning status for hosted skill." + }, + "v1.skill.HostedSkillProvisioningLastUpdateRequest": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.Status", + "x-isEnum": true + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "warnings": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "description": "Contains attributes related to last modification request of a hosted skill provisioning resource." + }, + "v1.skill.BuildDetails": { + "type": "object", + "properties": { + "steps": { + "type": "array", + "description": "An array where each element represents a build step.", + "items": { + "$ref": "#/definitions/v1.skill.BuildStep" + } + } + }, + "description": "Contains array which describes steps involved in a build. Elements (or build steps) are added\nto this array as they become IN_PROGRESS.\n" + }, + "v1.skill.BuildStep": { + "type": "object", + "properties": { + "name": { + "$ref": "#/definitions/v1.skill.BuildStepName", + "x-isEnum": true + }, + "status": { + "$ref": "#/definitions/v1.skill.Status", + "x-isEnum": true + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "description": "Describes the status of a build step." + }, + "v1.skill.BuildStepName": { + "type": "string", + "description": "Name of the build step. Possible values -\n* `DIALOG_MODEL_BUILD` - Build status for dialog model.\n* `LANGUAGE_MODEL_QUICK_BUILD` - Build status for FST model.\n* `LANGUAGE_MODEL_FULL_BUILD` - Build status for statistical model.\n* `ALEXA_CONVERSATIONS_QUICK_BUILD` - AlexaConversations LowFidelity model build status.\n* `ALEXA_CONVERSATIONS_FULL_BUILD` - AlexaConversations HighFidelity model build status.\n", + "enum": [ + "DIALOG_MODEL_BUILD", + "LANGUAGE_MODEL_QUICK_BUILD", + "LANGUAGE_MODEL_FULL_BUILD", + "ALEXA_CONVERSATIONS_QUICK_BUILD", + "ALEXA_CONVERSATIONS_FULL_BUILD" + ] + }, + "v1.skill.Status": { + "type": "string", + "description": "Status of a resource.", + "enum": [ + "FAILED", + "IN_PROGRESS", + "SUCCEEDED" + ] + }, + "v1.skill.SkillCredentials": { + "type": "object", + "properties": { + "skillMessagingCredentials": { + "$ref": "#/definitions/v1.skill.SkillMessagingCredentials" + } + }, + "description": "Structure for skill credentials response." + }, + "v1.skill.SkillMessagingCredentials": { + "type": "object", + "properties": { + "clientId": { + "type": "string", + "description": "The client id for the security profile." + }, + "clientSecret": { + "type": "string", + "description": "The client secret for the security profile." + } + }, + "description": "Defines the structure for skill messaging credentials." + }, + "v1.skill.SubmitSkillForCertificationRequest": { + "type": "object", + "properties": { + "publicationMethod": { + "$ref": "#/definitions/v1.skill.PublicationMethod", + "x-isEnum": true + }, + "versionMessage": { + "type": "string", + "description": "Description of the version (limited to 300 characters)." + } + } + }, + "v1.skill.PublicationMethod": { + "type": "string", + "description": "Determines if the skill should be submitted only for certification and manually publish later or publish immediately after the skill is certified. Omitting the publication method will default to auto publishing.", + "enum": [ + "MANUAL_PUBLISHING", + "AUTO_PUBLISHING" + ] + }, + "v1.skill.WithdrawRequest": { + "type": "object", + "required": [ + "reason" + ], + "properties": { + "reason": { + "$ref": "#/definitions/v1.skill.Reason", + "x-isEnum": true + }, + "message": { + "type": "string", + "description": "The message only in case the reason in OTHER." + } + }, + "description": "The payload for the withdraw operation." + }, + "v1.skill.Reason": { + "type": "string", + "description": "The reason to withdraw.", + "enum": [ + "TEST_SKILL", + "MORE_FEATURES", + "DISCOVERED_ISSUE", + "NOT_RECEIVED_CERTIFICATION_FEEDBACK", + "NOT_INTEND_TO_PUBLISH", + "OTHER" + ] + }, + "v1.skill.createSkillWithPackageRequest": { + "type": "object", + "required": [ + "location" + ], + "properties": { + "vendorId": { + "type": "string", + "description": "ID of the vendor owning the skill.", + "minLength": 1, + "maxLength": 255 + }, + "location": { + "type": "string", + "format": "uri", + "description": "The URL for the skill package." + } + } + }, + "v1.skill.updateSkillWithPackageRequest": { + "type": "object", + "required": [ + "location" + ], + "properties": { + "location": { + "type": "string", + "format": "uri", + "description": "The URL for the skill package." + } + } + }, + "v1.skill.ImportResponse": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.ResponseStatus", + "x-isEnum": true + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "warnings": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "skill": { + "$ref": "#/definitions/v1.skill.ImportResponseSkill" + } + } + }, + "v1.skill.ResponseStatus": { + "type": "string", + "description": "Status for a Response resource.", + "enum": [ + "FAILED", + "IN_PROGRESS", + "SUCCEEDED", + "ROLLBACK_SUCCEEDED", + "ROLLBACK_FAILED", + "SKIPPED" + ] + }, + "v1.skill.ImportResponseSkill": { + "type": "object", + "required": [ + "resources" + ], + "properties": { + "skillId": { + "type": "string" + }, + "eTag": { + "type": "string" + }, + "resources": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.ResourceImportStatus" + } + } + } + }, + "v1.skill.ResourceImportStatus": { + "type": "object", + "required": [ + "status" + ], + "properties": { + "name": { + "type": "string", + "description": "Resource name. eg. manifest, interactionModels.en_US and so on." + }, + "status": { + "$ref": "#/definitions/v1.skill.ResponseStatus", + "x-isEnum": true + }, + "action": { + "$ref": "#/definitions/v1.skill.Action", + "x-isEnum": true + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "warnings": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "description": "Defines the structure for a resource deployment status." + }, + "v1.skill.Action": { + "type": "string", + "description": "Action of a resource.", + "enum": [ + "CREATE", + "UPDATE", + "ASSOCIATE", + "DISASSOCIATE" + ] + }, + "v1.skill.UploadResponse": { + "type": "object", + "properties": { + "uploadUrl": { + "type": "string", + "description": "The upload URL to upload a skill package." + }, + "expiresAt": { + "type": "string", + "format": "date-time", + "description": "The expiration time of the URL" + } + }, + "description": "Defines the structure for skill upload response." + }, + "v1.skill.ExportResponse": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.ResponseStatus", + "x-isEnum": true + }, + "skill": { + "$ref": "#/definitions/v1.skill.ExportResponseSkill" + } + } + }, + "v1.skill.ExportResponseSkill": { + "type": "object", + "properties": { + "eTag": { + "type": "string" + }, + "location": { + "type": "string", + "format": "uri" + }, + "expiresAt": { + "type": "string", + "description": "ExpiresAt timestamp in milliseconds." + } + }, + "description": "Defines the structure of the GetExport response." + }, + "v1.skill.StandardizedError": { + "type": "object", + "properties": { + "validationDetails": { + "description": "Standardized, machine readable structure that wraps all the information about a specific occurrence of an error of the type specified by the code.", + "$ref": "#/definitions/v1.skill.validationDetails" + } + }, + "description": "Standardized structure which wraps machine parsable and human readable information about an error.", + "x-inheritsFrom": "v1.Error" + }, + "v1.skill.validationDetails": { + "type": "object", + "properties": { + "actualImageAttributes": { + "description": "Set of properties of the image provided by the customer.", + "$ref": "#/definitions/v1.skill.imageAttributes" + }, + "actualNumberOfItems": { + "type": "integer", + "description": "Number of items in an array provided by the customer." + }, + "actualStringLength": { + "type": "integer", + "description": "Number of characters in a string provided by the customer." + }, + "allowedContentTypes": { + "type": "array", + "description": "List of allowed content types for a resource.", + "items": { + "type": "string", + "description": "Allowed content type in IANA media type format." + } + }, + "allowedDataTypes": { + "type": "array", + "description": "List of allowed data types for an instance.", + "items": { + "description": "Allowed data type.", + "$ref": "#/definitions/v1.skill.ValidationDataTypes" + } + }, + "allowedImageAttributes": { + "type": "array", + "description": "List of set of properties representing all possible allowed images.", + "items": { + "description": "Set of properties of the image provided by the customer.", + "$ref": "#/definitions/v1.skill.imageAttributes" + } + }, + "conflictingInstance": { + "description": "Instance conflicting with another instance.", + "$ref": "#/definitions/v1.skill.Instance" + }, + "expectedFormat": { + "description": "Format in which instance value is expected in.", + "$ref": "#/definitions/v1.skill.Format", + "x-isEnum": true + }, + "expectedInstance": { + "description": "Instance that is expected by a related instance.", + "$ref": "#/definitions/v1.skill.Instance" + }, + "expectedRegexPattern": { + "type": "string", + "description": "Regular expression that a string instance is expected to match." + }, + "agreementType": { + "description": "Type of the agreement that the customer must be compliant to.", + "$ref": "#/definitions/v1.skill.AgreementType", + "x-isEnum": true + }, + "feature": { + "description": "Properties of a publicly known feature that has restricted access.", + "$ref": "#/definitions/v1.skill.ValidationFeature" + }, + "inconsistentEndpoint": { + "description": "Endpoint which has a different value for property named type when compared to original endpoint.", + "$ref": "#/definitions/v1.skill.ValidationEndpoint" + }, + "minimumIntegerValue": { + "type": "integer", + "description": "Minimum allowed value of an integer instance." + }, + "minimumNumberOfItems": { + "type": "integer", + "description": "Minimum allowed number of items in an array." + }, + "minimumStringLength": { + "type": "integer", + "description": "Minimum allowed number of characters in a string." + }, + "maximumIntegerValue": { + "type": "integer", + "description": "Maximum allowed value of an integer instance." + }, + "maximumNumberOfItems": { + "type": "integer", + "description": "Maximum allowed number of items in an array." + }, + "maximumStringLength": { + "type": "integer", + "description": "Maximum allowed number of characters in a string." + }, + "originalEndpoint": { + "description": "An Endpoint instance", + "$ref": "#/definitions/v1.skill.ValidationEndpoint" + }, + "originalInstance": { + "description": "An Instance", + "$ref": "#/definitions/v1.skill.Instance" + }, + "reason": { + "description": "Represents what is wrong in the request.", + "$ref": "#/definitions/v1.skill.ValidationFailureReason" + }, + "requiredProperty": { + "type": "string", + "description": "Property required but missing in the object." + }, + "unexpectedProperty": { + "type": "string", + "description": "Property not expected but present in the object." + } + }, + "description": "Standardized, machine readable structure that wraps all the information about a specific occurrence of an error of the type specified by the code." + }, + "v1.skill.imageAttributes": { + "type": "object", + "properties": { + "dimension": { + "$ref": "#/definitions/v1.skill.ImageDimension" + }, + "size": { + "$ref": "#/definitions/v1.skill.ImageSize" + }, + "maximumSize": { + "$ref": "#/definitions/v1.skill.ImageSize" + } + }, + "description": "Set of properties of the image provided by the customer." + }, + "v1.skill.ImageDimension": { + "type": "object", + "properties": { + "widthInPixels": { + "type": "integer", + "description": "Width of the image in pixels." + }, + "heightInPixels": { + "type": "integer", + "description": "Height of the image in pixels." + } + }, + "description": "Dimensions of an image." + }, + "v1.skill.ImageSize": { + "type": "object", + "properties": { + "value": { + "type": "number", + "description": "Value measuring the size of the image." + }, + "unit": { + "$ref": "#/definitions/v1.skill.ImageSizeUnit", + "x-isEnum": true + } + }, + "description": "On disk storage size of image." + }, + "v1.skill.ImageSizeUnit": { + "type": "string", + "description": "Unit of measurement for size of image.", + "enum": [ + "MB" + ] + }, + "v1.skill.ValidationDataTypes": { + "type": "string", + "enum": [ + "object", + "boolean", + "integer", + "array", + "string", + "null" + ] + }, + "v1.skill.Instance": { + "type": "object", + "properties": { + "propertyPath": { + "type": "string", + "description": "Path that uniquely identifies the instance in the resource." + }, + "dataType": { + "$ref": "#/definitions/v1.skill.ValidationDataTypes", + "x-isEnum": true + }, + "value": { + "type": "string", + "description": "String value of the instance. Incase of null, object or array the value field would be null or not present. Incase of string, boolean or integer dataType it will be the corresponding String value." + } + }, + "description": "Structure representing properties of an instance of data. Definition will be either one of a booleanInstance, stringInstance, integerInstance, or compoundInstance." + }, + "v1.skill.AgreementType": { + "type": "string", + "description": "Type of the agreement that the customer must be compliant to.", + "enum": [ + "EXPORT_COMPLIANCE" + ] + }, + "v1.skill.ValidationFeature": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the feature." + }, + "contact": { + "type": "string", + "description": "Contact URL or email for the feature." + } + }, + "description": "Structure representing a public feature." + }, + "v1.skill.ValidationEndpoint": { + "type": "object", + "properties": { + "propertyPath": { + "type": "string", + "description": "Path to the endpoint URI in the resource." + }, + "type": { + "type": "string", + "description": "Type of the endpoint (https, http, arn etc)." + }, + "value": { + "type": "string", + "description": "Full URI of the endpoint." + } + }, + "description": "Structure representing an endpoint." + }, + "v1.skill.Format": { + "type": "string", + "description": "Format in which instance value is expected in.", + "enum": [ + "URI" + ] + }, + "v1.skill.ValidationFailureReason": { + "type": "object", + "properties": { + "type": { + "description": "Enum for type of validation failure in the request.", + "$ref": "#/definitions/v1.skill.ValidationFailureType", + "x-isEnum": true + } + }, + "description": "Object representing what is wrong in the request." + }, + "v1.skill.ValidationFailureType": { + "type": "string", + "description": "Enum for type of validation failure in the request.", + "enum": [ + "RESOURCE_DOES_NOT_EXIST", + "RESOURCE_VERSION_DOES_NOT_MATCH", + "MALFORMED_INPUT", + "EXPECTED_NOT_EMPTY_VALUE", + "INVALID_NUMBER_OF_OCCURENCES", + "INVALID_NUMBER_OF_PROPERTIES", + "EXPECTED_ATLEAST_ONE_RELATED_INSTANCE", + "EXPECTED_EXACTLY_ONE_RELATED_INSTANCE", + "RESOURCE_LOCKED", + "UNEXPECTED_RESOURCE_STAGE", + "UNEXPECTED_RESOURCE_PROPERTY", + "MISSING_RESOURCE_PROPERTY" + ] + }, + "v1.skill.CreateRollbackRequest": { + "type": "object", + "required": [ + "targetVersion" + ], + "properties": { + "targetVersion": { + "type": "string", + "description": "The target skill version to rollback to." + } + }, + "description": "Defines the request body to create a rollback request" + }, + "v1.skill.CreateRollbackResponse": { + "type": "object", + "properties": { + "rollbackRequestId": { + "type": "string", + "description": "Defines the identifier for a rollback request." + } + }, + "description": "Defines the response body when a rollback request is created" + }, + "v1.skill.RollbackRequestStatus": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "rollback request id" + }, + "targetVersion": { + "type": "string", + "description": "The target skill version to rollback to." + }, + "submissionTime": { + "type": "string", + "format": "date-time" + }, + "status": { + "$ref": "#/definitions/v1.skill.RollbackRequestStatusTypes", + "x-isEnum": true + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "description": "Rollback request for a skill" + }, + "v1.skill.RollbackRequestStatusTypes": { + "type": "string", + "description": "The rollback status of the rollback request.\n* `FAILED` - The rollback has failed. Please retry the rollback.\n* `INELIGIBLE` - The target version is ineligible for rollback.\n* `IN_PROGRESS` - The rollback is in progress.\n* `SUCCEEDED` - The rollback has succeeded.\n", + "enum": [ + "FAILED", + "INELIGIBLE", + "IN_PROGRESS", + "SUCCEEDED" + ] + }, + "v1.skill.CloneLocaleStatusResponse": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.CloneLocaleRequestStatus", + "x-isEnum": true + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + }, + "sourceLocale": { + "type": "string", + "description": "Source locale which is cloned to target locales." + }, + "targetLocales": { + "type": "object", + "description": "Mapping of statuses per locale.", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.CloneLocaleResourceStatus" + } + } + }, + "description": "A mapping of statuses per locale detailing progress of resource or error if encountered." + }, + "v1.skill.CloneLocaleResourceStatus": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.CloneLocaleStatus", + "x-isEnum": true + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.StandardizedError" + } + } + }, + "description": "an object detailing the status of a locale clone request and if applicable the errors occurred when saving/building resources during clone process." + }, + "v1.skill.CloneLocaleStatus": { + "type": "string", + "description": "Status for a locale clone on a particular target locale\n * `IN_PROGRESS` status would indicate the clone is still in progress to the target locale.\n * `SUCCEEDED` status would indicate the source locale was cloned successfully to the target locale.\n * `INELIGIBLE` status would indicate the source locale was ineligible to be cloned the target locale.\n * `FAILED` status would indicate the source locale was not cloned the target locale successfully.\n * `ROLLBACK_SUCCEEDED` status would indicate the locale was rolled back to the previous state in case any failure.\n * `ROLLBACK_FAILED` status would indicate that in case of failure, the rollback to the previous state of the locale was attempted, but it failed.\n", + "enum": [ + "FAILED", + "INELIGIBLE", + "IN_PROGRESS", + "ROLLBACK_FAILED", + "ROLLBACK_SUCCEEDED", + "SUCCEEDED" + ] + }, + "v1.skill.CloneLocaleRequestStatus": { + "type": "string", + "description": "Status for a locale clone request\nCloneLocale API initiates cloning from a source locale to all target locales.\n * `IN_PROGRESS` status would indicate the clone is still in progress.\n * `SUCCEEDED` status would indicate the source locale was cloned successfully to all target locales.\n * `INELIGIBLE` status would indicate the source locale was ineligible to be cloned to all target locales.\n * `MIXED` status would indicate the different status of clone on different locales, and individual target locale statues should be checked.\n * `FAILED` status would indicate the source locale was not cloned all target locales successfully despite the request being eligible due to internal service issues.\n * `ROLLBACK_SUCCEEDED` status would indicate the skill was rolled back to the previous state in case any failure.\n * `ROLLBACK_FAILED` status would indicate that in case of failure, the rollback to the previous state of the skill was attempted, but it failed.\n", + "enum": [ + "FAILED", + "INELIGIBLE", + "IN_PROGRESS", + "MIXED", + "ROLLBACK_FAILED", + "ROLLBACK_SUCCEEDED", + "SUCCEEDED" + ] + }, + "v1.skill.CloneLocaleRequest": { + "type": "object", + "required": [ + "sourceLocale", + "targetLocales" + ], + "properties": { + "sourceLocale": { + "type": "string", + "description": "Locale with the assets that will be cloned." + }, + "targetLocales": { + "type": "array", + "description": "A list of locale(s) where the assets will be copied to.", + "items": { + "type": "string" + } + }, + "overwriteMode": { + "description": "Can locale of skill be overwritten. Default value is DO_NOT_OVERWRITE.", + "$ref": "#/definitions/v1.skill.OverwriteMode", + "x-isEnum": true + } + }, + "description": "Defines the request body for the cloneLocale API." + }, + "v1.skill.OverwriteMode": { + "type": "string", + "description": "Can locale of skill be overwritten. Default value is DO_NOT_OVERWRITE.", + "enum": [ + "DO_NOT_OVERWRITE", + "OVERWRITE" + ] + }, + "v1.skill.CloneLocaleStageType": { + "type": "string", + "enum": [ + "development" + ] + }, + "v1.vendorManagement.Vendors": { + "type": "object", + "properties": { + "vendors": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.vendorManagement.Vendor" + } + } + }, + "description": "List of Vendors." + }, + "v1.vendorManagement.Vendor": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of vendor." + }, + "id": { + "type": "string", + "description": "Unique identifier of vendor associated with the API caller account." + }, + "roles": { + "type": "array", + "description": "Roles that user has for this vendor.", + "items": { + "type": "string" + } + } + }, + "description": "Vendor Response Object." + }, + "v1.auditLogs.RequestFilters": { + "type": "object", + "properties": { + "clients": { + "type": "array", + "description": "List of Client IDs for filtering.", + "items": { + "$ref": "#/definitions/v1.auditLogs.ClientFilter" + } + }, + "operations": { + "type": "array", + "description": "Filters for a list of operation names and versions.", + "items": { + "$ref": "#/definitions/v1.auditLogs.OperationFilter" + } + }, + "resources": { + "type": "array", + "description": "Filters for a list of resources and/or their types. See documentation for allowed types.", + "items": { + "$ref": "#/definitions/v1.auditLogs.ResourceFilter" + } + }, + "requesters": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.auditLogs.RequesterFilter" + } + }, + "startTime": { + "type": "string", + "format": "date-time", + "description": "Sets the start time for this search. Any audit logs with timestamps after this time (inclusive) will be included in the response." + }, + "endTime": { + "type": "string", + "format": "date-time", + "description": "Sets the end time for this search. Any audit logs with timestamps before this time (exclusive) will be included in the result." + }, + "httpResponseCodes": { + "type": "array", + "description": "Filters for HTTP response codes. For example, '200' or '503'", + "items": { + "type": "string" + } + } + }, + "description": "Request Filters for filtering audit logs." + }, + "v1.auditLogs.ClientFilter": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "UUID" + } + }, + "description": "Identifier for the application the developer used to manage their skills and skill-related resources. For OAuth applications, this is the OAuth Client Id." + }, + "v1.auditLogs.OperationFilter": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "description": "Name and version of the operation that the developer performed. For example, 'deleteSkill' and 'v1'. This is the same name used in the SMAPI SDK." + }, + "v1.auditLogs.ResourceFilter": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "UUID" + }, + "type": { + "$ref": "#/definitions/v1.auditLogs.ResourceTypeEnum", + "x-isEnum": true + } + }, + "description": "Resource that the developer operated on. Both do not need to be provided." + }, + "v1.auditLogs.ResourceTypeEnum": { + "type": "string", + "enum": [ + "Skill", + "SkillCatalog", + "InSkillProduct", + "Import", + "Export" + ] + }, + "v1.auditLogs.RequesterFilter": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "LoginWithAmazon User ID." + } + }, + "description": "Filter for the requester of the operation." + }, + "v1.auditLogs.SortDirection": { + "type": "string", + "description": "Sets the sorting direction of the result items. When set to 'ASC' these items are returned in ascending order of sortField value and when set to 'DESC' these items are returned in descending order of sortField value.", + "enum": [ + "ASC", + "DESC" + ], + "default": "DESC" + }, + "v1.auditLogs.SortField": { + "type": "string", + "description": "Sets the field on which the sorting would be applied.", + "enum": [ + "timestamp", + "operation", + "resource.id", + "resource.type", + "requester.userId", + "client.id", + "httpResponseCode" + ], + "default": "timestamp" + }, + "v1.auditLogs.RequestPaginationContext": { + "type": "object", + "properties": { + "nextToken": { + "type": "string", + "description": "When the response to this API call is truncated, the response includes the nextToken element. The value of nextToken can be used in the next request as the continuation-token to list the next set of objects. The continuation token is an opaque value that this API understands. Token has expiry of 1 hour.", + "minLength": 1, + "maxLength": 2047 + }, + "maxResults": { + "type": "integer", + "description": "Sets the maximum number of results returned in the response body. If you want to retrieve more or less than the default of 50 results, you can add this parameter to your request. maxResults can exceed the upper limit of 250 but we will not return more items than that. The response might contain fewer results than maxResults for purpose of keeping SLA or because there are not enough items, but it will never contain more.", + "minimum": 1, + "maximum": 200 + } + }, + "description": "This object includes nextToken and maxResults." + }, + "v1.auditLogs.AuditLogsResponse": { + "type": "object", + "properties": { + "paginationContext": { + "$ref": "#/definitions/v1.auditLogs.ResponsePaginationContext" + }, + "_links": { + "$ref": "#/definitions/v1.Links" + }, + "auditLogs": { + "type": "array", + "description": "List of audit logs for the vendor.", + "items": { + "$ref": "#/definitions/v1.auditLogs.AuditLog" + } + } + }, + "description": "Response to the Query Audit Logs API. It contains the collection of audit logs for the vendor, nextToken and other metadata related to the search query." + }, + "v1.auditLogs.ResponsePaginationContext": { + "type": "object", + "properties": { + "nextToken": { + "type": "string", + "description": "This token can be used to load the next page of the result.", + "minLength": 1, + "maxLength": 2047 + } + }, + "description": "This object contains the next token used to load the next page of the result." + }, + "v1.auditLogs.AuditLog": { + "type": "object", + "properties": { + "xAmznRequestId": { + "type": "string", + "format": "UUID", + "description": "UUID that identifies a specific request." + }, + "timestamp": { + "type": "string", + "format": "date-time", + "description": "Date-Time when the request was made." + }, + "client": { + "$ref": "#/definitions/v1.auditLogs.Client" + }, + "operation": { + "$ref": "#/definitions/v1.auditLogs.Operation" + }, + "resources": { + "type": "array", + "description": "Contains information about the resources affected in this request.", + "items": { + "$ref": "#/definitions/v1.auditLogs.Resource" + } + }, + "requester": { + "$ref": "#/definitions/v1.auditLogs.Requester" + }, + "httpResponseCode": { + "type": "integer", + "description": "HTTP Status Code returned by this request." + } + } + }, + "v1.auditLogs.Client": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "description": "Contains information about the Client that this request was performed by." + }, + "v1.auditLogs.Operation": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "description": "Object containing name and version." + }, + "v1.auditLogs.Resource": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "UUID" + }, + "type": { + "type": "string" + } + }, + "description": "Resource that the developer operated on. This includes both the type and ID of the resource." + }, + "v1.auditLogs.Requester": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "LWA User ID. https://developer.amazon.com/docs/login-with-amazon/obtain-customer-profile.html" + } + }, + "description": "The user that performed the operation." + }, + "v1.auditLogs.AuditLogsRequest": { + "type": "object", + "required": [ + "vendorId" + ], + "properties": { + "vendorId": { + "type": "string", + "description": "Vendor Id. See developer.amazon.com/mycid.html.", + "minLength": 1, + "maxLength": 255 + }, + "requestFilters": { + "$ref": "#/definitions/v1.auditLogs.RequestFilters" + }, + "sortDirection": { + "$ref": "#/definitions/v1.auditLogs.SortDirection", + "x-isEnum": true + }, + "sortField": { + "$ref": "#/definitions/v1.auditLogs.SortField", + "x-isEnum": true + }, + "paginationContext": { + "$ref": "#/definitions/v1.auditLogs.RequestPaginationContext" + } + } + }, + "v1.skill.nlu.evaluations.EvaluateNLURequest": { + "type": "object", + "required": [ + "locale", + "source", + "stage" + ], + "properties": { + "stage": { + "type": "string", + "enum": [ + "development", + "live" + ] + }, + "locale": { + "type": "string" + }, + "source": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.Source" + } + } + }, + "v1.skill.nlu.evaluations.EvaluateResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Id used to retrieve the evaluation later." + } + } + }, + "v1.skill.nlu.evaluations.ListNLUEvaluationsResponse": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.nlu.evaluations.PagedResponse" + }, + { + "type": "object", + "properties": { + "evaluations": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.Evaluation" + } + } + } + } + ], + "description": "response body for a list evaluation API" + }, + "v1.skill.nlu.evaluations.GetNLUEvaluationResponse": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.nlu.evaluations.EvaluationEntity" + }, + { + "type": "object", + "properties": { + "_links": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.GetNLUEvaluationResponseLinks" + } + } + } + ] + }, + "v1.skill.nlu.evaluations.GetNLUEvaluationResultsResponse": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.nlu.evaluations.PagedResultsResponse" + }, + { + "type": "object", + "properties": { + "totalFailed": { + "type": "number", + "description": "count of tests failed. A test fails when the expected intent and expected slots are not identical.\n" + }, + "testCases": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.TestCase" + } + } + } + } + ] + }, + "v1.skill.nlu.evaluations.EvaluationInputs": { + "type": "object", + "properties": { + "locale": { + "type": "string" + }, + "stage": { + "type": "object", + "properties": {} + }, + "source": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.Source" + } + } + }, + "v1.skill.nlu.evaluations.Source": { + "type": "object", + "properties": { + "annotationId": { + "type": "string", + "description": "ID of the annotation set" + } + }, + "description": "Use Annotation Set as evaluation source\n" + }, + "v1.skill.nlu.evaluations.PagedResponse": { + "type": "object", + "properties": { + "paginationContext": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.PaginationContext" + }, + "_links": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.Links" + } + } + }, + "v1.skill.nlu.evaluations.PagedResultsResponse": { + "type": "object", + "properties": { + "paginationContext": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.PagedResultsResponsePaginationContext" + }, + "_links": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.Links" + } + } + }, + "v1.skill.nlu.evaluations.EvaluationEntity": { + "type": "object", + "properties": { + "startTimestamp": { + "type": "string", + "format": "date-time" + }, + "endTimestamp": { + "type": "string", + "format": "date-time" + }, + "status": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.Status", + "x-isEnum": true + }, + "errorMessage": { + "type": "string", + "description": "Error message when evaluation job fails" + }, + "inputs": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.EvaluationInputs" + } + } + }, + "v1.skill.nlu.evaluations.ConfirmationStatus": { + "type": "string", + "description": "An enumeration indicating whether the user has explicitly confirmed or denied the entire intent/slot. Possible values: 'NONE', 'CONFIRMED', 'DENIED'.\n", + "enum": [ + "NONE", + "CONFIRMED", + "DENIED" + ] + }, + "v1.skill.nlu.evaluations.Status": { + "type": "string", + "enum": [ + "PASSED", + "FAILED", + "IN_PROGRESS", + "ERROR" + ] + }, + "v1.skill.nlu.evaluations.ResultsStatus": { + "type": "string", + "enum": [ + "PASSED", + "FAILED" + ] + }, + "v1.skill.nlu.evaluations.Evaluation": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.nlu.evaluations.EvaluationEntity" + }, + { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id of the job" + } + } + } + ] + }, + "v1.skill.nlu.evaluations.GetNLUEvaluationResponseLinks": { + "type": "object", + "properties": { + "results": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.Results" + } + } + }, + "v1.skill.nlu.evaluations.TestCase": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.ResultsStatus", + "x-isEnum": true + }, + "inputs": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.Inputs" + }, + "actual": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.Actual" + }, + "expected": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.Expected" + } + } + } + }, + "v1.skill.nlu.evaluations.PaginationContext": { + "type": "object", + "properties": { + "nextToken": { + "type": "string", + "description": "opaque token returned if there are more results for the given inputs than `maxResults` from the request." + } + } + }, + "v1.skill.nlu.evaluations.PagedResultsResponsePaginationContext": { + "type": "object", + "properties": { + "nextToken": { + "type": "string", + "description": "opaque token returned if there are more results for the given inputs than `maxResults` from the request." + }, + "totalCount": { + "type": "string", + "description": "Total available results for the given query." + } + } + }, + "v1.skill.nlu.evaluations.Results": { + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "url to get the test case result details Example: /v1/skills/{skillId}/nluEvaluations/{evaluationId}/results\n" + } + } + }, + "v1.skill.nlu.evaluations.Inputs": { + "type": "object", + "properties": { + "utterance": { + "type": "string" + }, + "referenceTimestamp": { + "type": "string", + "format": "date-time", + "example": "2018-10-25T23:50:02.135Z", + "description": "Datetime to use to base date operations on." + } + } + }, + "v1.skill.nlu.evaluations.Actual": { + "type": "object", + "properties": { + "domain": { + "type": "string" + }, + "intent": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.Intent" + } + } + }, + "v1.skill.nlu.evaluations.Expected": { + "type": "object", + "properties": { + "domain": { + "type": "string" + }, + "intent": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.ExpectedIntent" + } + } + }, + "v1.skill.nlu.evaluations.Intent": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "confirmationStatus": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.ConfirmationStatus", + "x-isEnum": true + }, + "slots": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.SlotsProps" + } + } + } + }, + "v1.skill.nlu.evaluations.ExpectedIntent": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "slots": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.ExpectedIntentSlotsProps" + } + } + } + }, + "v1.skill.nlu.evaluations.SlotsProps": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + }, + "confirmationStatus": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.ConfirmationStatus", + "x-isEnum": true + }, + "resolutions": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.Resolutions" + } + } + }, + "v1.skill.nlu.evaluations.ExpectedIntentSlotsProps": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + }, + "v1.skill.nlu.evaluations.Resolutions": { + "type": "object", + "properties": { + "resolutionsPerAuthority": { + "type": "array", + "description": "An array of objects representing each possible authority for entity resolution. An authority represents the source for the data provided for the slot. For a custom slot type, the authority is the slot type you defined.\n", + "items": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.ResolutionsPerAuthority" + } + } + } + }, + "description": "A resolutions object representing the results of resolving the words captured from the user's utterance.\n" + }, + "v1.skill.nlu.evaluations.ResolutionsPerAuthority": { + "type": "object", + "properties": { + "authority": { + "type": "string", + "description": "The name of the authority for the slot values. For custom slot types, this authority label incorporates your skill ID and the slot type name.\n" + }, + "status": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.ResolutionsPerAuthorityStatus" + }, + "values": { + "type": "array", + "description": "An array of resolved values for the slot.", + "items": { + "$ref": "#/definitions/v1.skill.nlu.evaluations.ResolutionsPerAuthorityValue" + } + } + } + }, + "v1.skill.nlu.evaluations.ResolutionsPerAuthorityStatus": { + "type": "object", + "properties": { + "code": { + "description": "A code indicating the results of attempting to resolve the user utterance against the defined slot types. This can be one of the following:\nER_SUCCESS_MATCH: The spoken value matched a value or synonym explicitly defined in your custom slot type. ER_SUCCESS_NO_MATCH: The spoken value did not match any values or synonyms explicitly defined in your custom slot type. ER_ERROR_TIMEOUT: An error occurred due to a timeout. ER_ERROR_EXCEPTION: An error occurred due to an exception during processing.\n", + "$ref": "#/definitions/v1.skill.nlu.evaluations.ResolutionsPerAuthorityStatusCode", + "x-isEnum": true + } + } + }, + "v1.skill.nlu.evaluations.ResolutionsPerAuthorityStatusCode": { + "type": "string", + "description": "A code indicating the results of attempting to resolve the user utterance against the defined slot types. This can be one of the following:\nER_SUCCESS_MATCH: The spoken value matched a value or synonym explicitly defined in your custom slot type. ER_SUCCESS_NO_MATCH: The spoken value did not match any values or synonyms explicitly defined in your custom slot type. ER_ERROR_TIMEOUT: An error occurred due to a timeout. ER_ERROR_EXCEPTION: An error occurred due to an exception during processing.\n", + "enum": [ + "ER_SUCCESS_MATCH", + "ER_SUCCESS_NO_MATCH", + "ER_ERROR_TIMEOUT", + "ER_ERROR_EXCEPTION" + ] + }, + "v1.skill.nlu.evaluations.ResolutionsPerAuthorityValue": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The string for the resolved slot value." + }, + "id": { + "type": "string", + "description": "The unique ID defined for the resolved slot value. This is based on the IDs defined in the slot type definition.\n" + } + } + }, + "v1.skill.nlu.evaluations.Links": { + "type": "object", + "properties": { + "self": { + "$ref": "#/definitions/v1.Link" + }, + "next": { + "$ref": "#/definitions/v1.Link" + } + }, + "description": "Links for the API navigation." + }, + "v1.skill.nlu.annotationSets.CreateNLUAnnotationSetRequest": { + "type": "object", + "required": [ + "locale", + "name" + ], + "properties": { + "locale": { + "type": "string", + "description": "The locale of the NLU annotation set" + }, + "name": { + "type": "string", + "description": "The name of NLU annotation set provided by customer" + } + } + }, + "v1.skill.nlu.annotationSets.CreateNLUAnnotationSetResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Id used to retrieve the NLU annotation set." + } + } + }, + "v1.skill.nlu.annotationSets.ListNLUAnnotationSetsResponse": { + "type": "object", + "properties": { + "annotationSets": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.nlu.annotationSets.AnnotationSet" + } + }, + "paginationContext": { + "$ref": "#/definitions/v1.skill.nlu.annotationSets.PaginationContext" + }, + "_links": { + "$ref": "#/definitions/v1.skill.nlu.annotationSets.Links" + } + } + }, + "v1.skill.nlu.annotationSets.UpdateNLUAnnotationSetPropertiesRequest": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string", + "description": "The name of NLU annotation set provided by customer" + } + } + }, + "v1.skill.nlu.annotationSets.UpdateNLUAnnotationSetAnnotationsRequest": { + "type": "object", + "example": { + "application/json": { + "data": [ + { + "inputs": { + "utterance": "i want to travel from seattle", + "referenceTimestamp": "2018-10-25T23:50:02.135Z" + }, + "expected": [ + { + "intent": { + "name": "TravelIntent", + "slots": { + "fromCity": { + "value": "seattle" + } + } + } + } + ] + } + ] + }, + "text/csv": "utterance,referenceTimestamp,intent,slot[fromCity] i want to travel from seattle,2018-10-25T23:50:02.135Z,TravelIntent,seattle\n" + } + }, + "v1.skill.nlu.annotationSets.GetNLUAnnotationSetPropertiesResponse": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.nlu.annotationSets.AnnotationSetEntity" + } + ] + }, + "v1.skill.nlu.annotationSets.AnnotationSetEntity": { + "type": "object", + "properties": { + "locale": { + "type": "string" + }, + "name": { + "type": "string", + "description": "Name of the NLU annotation set" + }, + "numberOfEntries": { + "type": "integer", + "description": "Number of entries which represents number of utterances in each NLU annotation set content" + }, + "updatedTimestamp": { + "type": "string", + "format": "date-time", + "example": "2018-10-25T23:50:02.135Z", + "description": "The lastest updated timestamp for the NLU annotation set" + } + } + }, + "v1.skill.nlu.annotationSets.AnnotationSet": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.nlu.annotationSets.AnnotationSetEntity" + }, + { + "type": "object", + "properties": { + "annotationId": { + "type": "string", + "description": "Identifier of the NLU annotation set." + } + } + } + ] + }, + "v1.skill.nlu.annotationSets.PaginationContext": { + "type": "object", + "properties": { + "nextToken": { + "type": "string", + "description": "Opaque token returned if there are more results for the given inputs than `maxResults` from the request." + } + } + }, + "v1.skill.nlu.annotationSets.Links": { + "type": "object", + "properties": { + "self": { + "$ref": "#/definitions/v1.Link" + }, + "next": { + "$ref": "#/definitions/v1.Link" + } + }, + "description": "Links for the API navigation." + }, + "v1.skill.asr.annotationSets.CreateAsrAnnotationSetRequestObject": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string", + "description": "The name of ASR annotation set. The length of the name cannot exceed 170 chars. Only alphanumeric characters are accepted." + } + } + }, + "v1.skill.asr.annotationSets.CreateAsrAnnotationSetResponse": { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "string", + "description": "ID used to retrieve the ASR annotation set." + } + } + }, + "v1.skill.asr.annotationSets.ListASRAnnotationSetsResponse": { + "type": "object", + "required": [ + "annotationSets" + ], + "properties": { + "annotationSets": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.asr.annotationSets.AnnotationSetItems" + } + }, + "paginationContext": { + "$ref": "#/definitions/v1.skill.asr.annotationSets.PaginationContext" + } + } + }, + "v1.skill.asr.annotationSets.AnnotationSetItems": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.asr.annotationSets.AnnotationSetMetadata" + }, + { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "string", + "description": "The Annotation set id" + } + } + } + ] + }, + "v1.skill.asr.annotationSets.UpdateAsrAnnotationSetPropertiesRequestObject": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string", + "description": "The name of ASR annotation set. The length of the name cannot exceed 170 chars. Only alphanumeric characters are accepted." + } + } + }, + "v1.skill.asr.annotationSets.UpdateAsrAnnotationSetContentsPayload": { + "type": "object", + "required": [ + "annotations" + ], + "properties": { + "annotations": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.asr.annotationSets.Annotation" + } + } + }, + "description": "This is the payload shema for updating asr annotation set contents. Note for text/csv content type, the csv header definitions need to follow the properties of '#/definitions/Annotaion'\n" + }, + "v1.skill.asr.annotationSets.GetAsrAnnotationSetAnnotationsResponse": { + "type": "object", + "required": [ + "annotations" + ], + "properties": { + "annotations": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.skill.asr.annotationSets.AnnotationWithAudioAsset" + } + }, + "paginationContext": { + "$ref": "#/definitions/v1.skill.asr.annotationSets.PaginationContext" + } + }, + "description": "This is the payload schema for annotation set contents. Note that when uploadId and filePathInUpload is present, and the payload content type is 'application/json', audioAsset is included in the returned annotation set content payload. For 'text/csv' annotation set content type, audioAssetDownloadUrl and audioAssetDownloadUrlExpiryTime are included in the csv headers for representing the audio download url and the expiry time of the presigned audio download.\n" + }, + "v1.skill.asr.annotationSets.AudioAsset": { + "type": "object", + "required": [ + "downloadUrl", + "expiryTime" + ], + "properties": { + "downloadUrl": { + "type": "string", + "description": "S3 presigned download url for downloading the audio file" + }, + "expiryTime": { + "type": "string", + "description": "Timestamp when the audio download url expire in ISO 8601 format" + } + }, + "description": "Object containing information about downloading audio file" + }, + "v1.skill.asr.annotationSets.AnnotationWithAudioAsset": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.asr.annotationSets.Annotation" + }, + { + "type": "object", + "properties": { + "audioAsset": { + "$ref": "#/definitions/v1.skill.asr.annotationSets.AudioAsset" + } + } + } + ], + "description": "Object containing annotation content and audio file download information." + }, + "v1.skill.asr.annotationSets.Annotation": { + "type": "object", + "properties": { + "uploadId": { + "type": "string", + "description": "Upload id obtained when developer creates an upload using catalog API. Required to be present when expectedTranscription is missing. When uploadId is present, filePathInUpload must also be present." + }, + "filePathInUpload": { + "type": "string", + "description": "File path in the uploaded zip file. For example, a zip containing a folder named 'a' and there is an audio b.mp3 in that folder. The file path is a/b.mp3. Notice that forward slash ('/') should be used to concatenate directories. Required to be present when expectedTranscription is missing. When filePathInUpload is present, uploadId must also be present." + }, + "evaluationWeight": { + "type": "number", + "description": "Weight of the test case in an evaluation, the value would be used for calculating metrics such as overall error rate. The acceptable values are from 1 - 1000. 1 means least significant, 1000 means mot significant. Here is how weight impact the `OVERALL_ERROR_RATE` calculation: For example, an annotation set consists of 3 annotations and they have weight of 8, 1, 1. The evaluation results show that only the first annotation test case passed while the rest of the test cases failed. In this case, the overall error rate is (8 / (8 + 1 + 1)) = 0.8\n", + "minimum": 1, + "maximum": 1000 + }, + "expectedTranscription": { + "type": "string", + "description": "Expected transcription text for the input audio. The acceptable length of the string is between 1 and 500 Unicode characters. Required to be present when uploadId and filePathInUpload are missing." + } + }, + "description": "A single test case that describes the audio reference, expected transcriptions, test case weight etc. Each annotation object must have at least expectedTranscription or, uploadId and filePathInUpload in pair. In any case, filePathInUpload and uploadId must be present or missing in pair." + }, + "v1.skill.asr.annotationSets.GetASRAnnotationSetsPropertiesResponse": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.asr.annotationSets.AnnotationSetMetadata" + } + ] + }, + "v1.skill.asr.annotationSets.PaginationContext": { + "type": "object", + "required": [ + "nextToken" + ], + "properties": { + "nextToken": { + "type": "string", + "description": "The page token, this should be passed as a `nextToken` query parameter to the API to retrieve more items. If this field is not present the end of all of the items was reached. If a `maxResults` query parameter was specified then no more than `maxResults` items are returned.\n" + } + }, + "description": "This holds all data needed to control pagination from the user.\n" + }, + "v1.skill.asr.annotationSets.AnnotationSetMetadata": { + "type": "object", + "required": [ + "annotationCount", + "lastUpdatedTimestamp", + "name" + ], + "properties": { + "name": { + "type": "string", + "description": "Name of the ASR annotation set" + }, + "annotationCount": { + "type": "integer", + "description": "Number of annotations within an annotation set" + }, + "lastUpdatedTimestamp": { + "type": "string", + "format": "date-time", + "description": "The timestamp for the most recent update of ASR annotation set" + }, + "eligibleForEvaluation": { + "type": "boolean", + "description": "Indicates if the annotation set is eligible for evaluation. A set is not eligible for evaluation if any annotation within the set has a missing uploadId, filePathInUpload, expectedTranscription, or evaluationWeight." + } + } + }, + "v1.skill.asr.evaluations.PostAsrEvaluationsRequestObject": { + "type": "object", + "required": [ + "annotationSetId", + "skill" + ], + "properties": { + "skill": { + "$ref": "#/definitions/v1.skill.asr.evaluations.Skill" + }, + "annotationSetId": { + "type": "string", + "description": "ID for annotation set" + } + } + }, + "v1.skill.asr.evaluations.Skill": { + "type": "object", + "required": [ + "locale", + "stage" + ], + "properties": { + "stage": { + "$ref": "#/definitions/v1.StageType", + "x-isEnum": true + }, + "locale": { + "type": "string", + "description": "skill locale in bcp 47 format" + } + } + }, + "v1.skill.asr.evaluations.PostAsrEvaluationsResponseObject": { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "string", + "description": "ID used to retrieve the evaluation status/results later." + } + } + }, + "v1.skill.asr.evaluations.GetAsrEvaluationStatusResponseObject": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.asr.evaluations.EvaluationMetadata" + } + ] + }, + "v1.skill.asr.evaluations.ListAsrEvaluationsResponse": { + "type": "object", + "required": [ + "evaluations" + ], + "properties": { + "evaluations": { + "type": "array", + "description": "an array containing all evaluations that have ever run by developers based on the filter criteria defined in the request", + "items": { + "$ref": "#/definitions/v1.skill.asr.evaluations.EvaluationItems" + } + }, + "paginationContext": { + "$ref": "#/definitions/v1.skill.asr.evaluations.PaginationContext" + } + }, + "description": "response body for a list evaluation API" + }, + "v1.skill.asr.evaluations.EvaluationItems": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.asr.evaluations.EvaluationMetadata" + }, + { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "string", + "description": "evaluation id" + } + } + } + ] + }, + "v1.skill.asr.evaluations.EvaluationResult": { + "type": "object", + "required": [ + "annotation", + "status" + ], + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.asr.evaluations.EvaluationResultStatus", + "x-isEnum": true + }, + "annotation": { + "$ref": "#/definitions/v1.skill.asr.evaluations.AnnotationWithAudioAsset" + }, + "output": { + "$ref": "#/definitions/v1.skill.asr.evaluations.EvaluationResultOutput" + }, + "error": { + "$ref": "#/definitions/v1.skill.asr.evaluations.ErrorObject" + } + }, + "description": "evaluation detailed result" + }, + "v1.skill.asr.evaluations.AnnotationWithAudioAsset": { + "allOf": [ + { + "$ref": "#/definitions/v1.skill.asr.evaluations.Annotation" + }, + { + "type": "object", + "required": [ + "audioAsset" + ], + "properties": { + "audioAsset": { + "$ref": "#/definitions/v1.skill.asr.evaluations.AudioAsset" + } + } + } + ], + "description": "object containing annotation content and audio file download information." + }, + "v1.skill.asr.evaluations.Annotation": { + "type": "object", + "required": [ + "evaluationWeight", + "expectedTranscription", + "filePathInUpload", + "uploadId" + ], + "properties": { + "uploadId": { + "type": "string", + "description": "upload id obtained when developer creates an upload using catalog API" + }, + "filePathInUpload": { + "type": "string", + "description": "file path in the uploaded zip file. For example, a zip containing a folder named 'a' and there is an audio b.mp3 in that folder. The file path is a/b.mp3. Notice that forward slash ('/') should be used to concatenate directories." + }, + "evaluationWeight": { + "type": "number", + "description": "weight of the test case in an evaluation, the value would be used for calculating metrics such as overall error rate. The acceptable values are from 1 - 1000. 1 means least significant, 1000 means mot significant. Here is how weight impact the `OVERALL_ERROR_RATE` calculation: For example, an annotation set consists of 3 annotations and they have weight of 8, 1, 1. The evaluation results show that only the first annotation test case passed while the rest of the test cases failed. In this case, the overall error rate is (8 / (8 + 1 + 1)) = 0.8\n", + "minimum": 1, + "maximum": 1000 + }, + "expectedTranscription": { + "type": "string", + "description": "expected transcription text for the input audio. The acceptable length of the string is between 1 and 500 Unicode characters" + } + } + }, + "v1.skill.asr.evaluations.AudioAsset": { + "type": "object", + "required": [ + "downloadUrl", + "expiryTime" + ], + "properties": { + "downloadUrl": { + "type": "string", + "description": "S3 presigned download url for downloading the audio file" + }, + "expiryTime": { + "type": "string", + "description": "timestamp when the audio download url expire in ISO 8601 format" + } + }, + "description": "Object containing information about downloading audio file" + }, + "v1.skill.asr.evaluations.EvaluationResultOutput": { + "type": "object", + "required": [ + "transcription" + ], + "properties": { + "transcription": { + "type": "string", + "description": "actual transcription returned from ASR for the audio" + } + } + }, + "v1.skill.asr.evaluations.GetAsrEvaluationsResultsResponse": { + "type": "object", + "required": [ + "results" + ], + "properties": { + "results": { + "type": "array", + "description": "array containing all evaluation results.", + "items": { + "$ref": "#/definitions/v1.skill.asr.evaluations.EvaluationResult" + } + }, + "paginationContext": { + "$ref": "#/definitions/v1.skill.asr.evaluations.PaginationContext" + } + }, + "description": "response for GetAsrEvaluationsResults" + }, + "v1.skill.asr.evaluations.PaginationContext": { + "type": "object", + "required": [ + "nextToken" + ], + "properties": { + "nextToken": { + "type": "string", + "description": "The page token, this should be passed as a `nextToken` query parameter to the API to retrieve more items. If this field is not present the end of all of the items was reached. If a `maxResults` query parameter was specified then no more than `maxResults` items are returned.\n" + } + }, + "description": "This holds all data needed to control pagination from the user.\n" + }, + "v1.skill.asr.evaluations.EvaluationStatus": { + "type": "string", + "description": "Evaluation status:\n * `IN_PROGRESS` - indicate the evaluation is in progress.\n * `COMPLETED` - indicate the evaluation has been completed.\n * `FAILED` - indicate the evaluation has run into an error.\n", + "enum": [ + "IN_PROGRESS", + "COMPLETED", + "FAILED" + ] + }, + "v1.skill.asr.evaluations.ErrorObject": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "message": { + "type": "string", + "description": "human-readable error message" + }, + "code": { + "type": "string", + "description": "machine-readable error code" + } + }, + "description": "Object containing information about the error occurred during an evaluation run. This filed would present if an unexpected error occurred during an evaluatin run.\n" + }, + "v1.skill.asr.evaluations.EvaluationMetadata": { + "type": "object", + "required": [ + "completedEvaluationCount", + "request", + "startTimestamp", + "status", + "totalEvaluationCount" + ], + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.asr.evaluations.EvaluationStatus", + "x-isEnum": true + }, + "totalEvaluationCount": { + "type": "number", + "description": "indicate the total number of evaluations that are supposed to be run in the evaluation request" + }, + "completedEvaluationCount": { + "type": "number", + "description": "indicate the number of completed evaluations" + }, + "startTimestamp": { + "type": "string", + "format": "date-time", + "description": "indicate the start time stamp of the ASR evaluation job. ISO-8601 Format." + }, + "request": { + "$ref": "#/definitions/v1.skill.asr.evaluations.PostAsrEvaluationsRequestObject" + }, + "error": { + "$ref": "#/definitions/v1.skill.asr.evaluations.ErrorObject" + }, + "result": { + "$ref": "#/definitions/v1.skill.asr.evaluations.EvaluationMetadataResult" + } + }, + "description": "response body for GetAsrEvaluationsStatus API" + }, + "v1.skill.asr.evaluations.EvaluationMetadataResult": { + "type": "object", + "required": [ + "metrics", + "status" + ], + "properties": { + "status": { + "$ref": "#/definitions/v1.skill.asr.evaluations.EvaluationResultStatus", + "x-isEnum": true + }, + "metrics": { + "$ref": "#/definitions/v1.skill.asr.evaluations.Metrics" + } + }, + "description": "indicate the result of the evaluation. This field would be present if the evaluation status is `COMPLETED`" + }, + "v1.skill.asr.evaluations.Metrics": { + "type": "object", + "required": [ + "overallErrorRate" + ], + "properties": { + "overallErrorRate": { + "type": "number", + "description": "overall error rate for the ASR evaluation run" + } + } + }, + "v1.skill.asr.evaluations.EvaluationResultStatus": { + "type": "string", + "description": "enum indicating the evaluation result status.\n * `PASSED` - evaluation result is considered passed\n * `FAILED` - evaluation result is considered failed\n", + "enum": [ + "PASSED", + "FAILED" + ] + }, + "v1.skill.resourceSchema.getResourceSchemaResponse": { + "type": "object", + "properties": { + "schemaLocationUrl": { + "type": "string", + "description": "S3 presigned URL to schema location." + }, + "expiryTime": { + "type": "string", + "format": "date-time", + "example": "2020-10-19T23:50:02.135Z", + "description": "Timestamp when the schema location url expires in ISO 8601 format." + } + } + }, + "v1.smartHomeEvaluation.EvaluationObject": { + "type": "object", + "properties": { + "endTimestamp": { + "type": "string", + "format": "date-time" + }, + "startTimestamp": { + "type": "string", + "format": "date-time" + }, + "status": { + "$ref": "#/definitions/v1.smartHomeEvaluation.EvaluationEntityStatus", + "x-isEnum": true + }, + "endpointId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "sourceTestPlanIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "testPlanId": { + "type": "string" + } + } + }, + "v1.smartHomeEvaluation.paginationContextToken": { + "type": "object", + "properties": { + "nextToken": { + "type": "string" + } + } + }, + "v1.smartHomeEvaluation.ListSHCapabilityEvaluationsResponse": { + "type": "object", + "properties": { + "paginationContextToken": { + "$ref": "#/definitions/v1.smartHomeEvaluation.paginationContextToken" + }, + "evaluations": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.smartHomeEvaluation.EvaluationObject" + } + } + } + }, + "v1.smartHomeEvaluation.EvaluationEntityStatus": { + "type": "string", + "enum": [ + "PASSED", + "FAILED", + "IN_PROGRESS", + "ERROR" + ] + }, + "v1.smartHomeEvaluation.EvaluateSHCapabilityResponse": { + "allOf": [ + { + "$ref": "#/definitions/v1.smartHomeEvaluation.EvaluateSHCapabilityRequest" + }, + { + "type": "object", + "properties": { + "id": { + "type": "string" + } + } + } + ] + }, + "v1.smartHomeEvaluation.EvaluateSHCapabilityRequest": { + "type": "object", + "required": [ + "capabilityTestPlan", + "endpoint", + "stage" + ], + "properties": { + "capabilityTestPlan": { + "$ref": "#/definitions/v1.smartHomeEvaluation.CapabilityTestPlan" + }, + "endpoint": { + "$ref": "#/definitions/v1.smartHomeEvaluation.Endpoint" + }, + "stage": { + "$ref": "#/definitions/v1.smartHomeEvaluation.Stage", + "x-isEnum": true + } + } + }, + "v1.smartHomeEvaluation.CapabilityTestPlan": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + } + }, + "v1.smartHomeEvaluation.Endpoint": { + "type": "object", + "properties": { + "endpointId": { + "type": "string" + } + } + }, + "v1.smartHomeEvaluation.Stage": { + "type": "string", + "enum": [ + "development", + "live" + ] + }, + "v1.smartHomeEvaluation.SHEvaluationResultsMetric": { + "type": "object", + "properties": { + "errorTestCases": { + "type": "integer" + }, + "failedTestCases": { + "type": "integer" + }, + "passedTestCases": { + "type": "integer" + }, + "totalTestCases": { + "type": "integer" + } + } + }, + "v1.smartHomeEvaluation.GetSHCapabilityEvaluationResponse": { + "type": "object", + "properties": { + "endTimestamp": { + "type": "string", + "format": "date-time" + }, + "startTimestamp": { + "type": "string", + "format": "date-time" + }, + "status": { + "$ref": "#/definitions/v1.smartHomeEvaluation.EvaluationEntityStatus", + "x-isEnum": true + }, + "error": { + "$ref": "#/definitions/v1.smartHomeEvaluation.SHCapabilityError" + }, + "input": { + "$ref": "#/definitions/v1.smartHomeEvaluation.EvaluateSHCapabilityRequest" + }, + "metrics": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/v1.smartHomeEvaluation.SHEvaluationResultsMetric" + } + } + } + }, + "v1.smartHomeEvaluation.ListSHTestPlanItem": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "v1.smartHomeEvaluation.paginationContext": { + "type": "object", + "properties": { + "nextToken": { + "type": "string" + }, + "totalCount": { + "type": "integer", + "format": "int64" + } + } + }, + "v1.smartHomeEvaluation.PagedResponse": { + "type": "object", + "properties": { + "paginationContext": { + "$ref": "#/definitions/v1.smartHomeEvaluation.paginationContext" + } + } + }, + "v1.smartHomeEvaluation.ListSHCapabilityTestPlansResponse": { + "allOf": [ + { + "$ref": "#/definitions/v1.smartHomeEvaluation.PagedResponse" + }, + { + "type": "object", + "properties": { + "testPlans": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.smartHomeEvaluation.ListSHTestPlanItem" + } + } + } + } + ] + }, + "v1.smartHomeEvaluation.TestCaseResultStatus": { + "type": "string", + "enum": [ + "PASSED", + "FAILED", + "ERROR" + ] + }, + "v1.smartHomeEvaluation.TestCaseResult": { + "type": "object", + "properties": { + "actualCapabilityStates": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.smartHomeEvaluation.SHCapabilityState" + } + }, + "actualResponse": { + "$ref": "#/definitions/v1.smartHomeEvaluation.SHCapabilityResponse" + }, + "directive": { + "$ref": "#/definitions/v1.smartHomeEvaluation.SHCapabilityDirective" + }, + "error": { + "$ref": "#/definitions/v1.smartHomeEvaluation.SHCapabilityError" + }, + "expectedCapabilityStates": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.smartHomeEvaluation.SHCapabilityState" + } + }, + "expectedResponse": { + "$ref": "#/definitions/v1.smartHomeEvaluation.SHCapabilityResponse" + }, + "name": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/v1.smartHomeEvaluation.TestCaseResultStatus", + "x-isEnum": true + } + } + }, + "v1.smartHomeEvaluation.GetSHCapabilityEvaluationResultsResponse": { + "allOf": [ + { + "$ref": "#/definitions/v1.smartHomeEvaluation.PagedResponse" + }, + { + "type": "object", + "properties": { + "testCaseResults": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.smartHomeEvaluation.TestCaseResult" + } + } + } + } + ] + }, + "v1.smartHomeEvaluation.SHCapabilityState": { + "type": "object" + }, + "v1.smartHomeEvaluation.SHCapabilityResponse": { + "type": "object" + }, + "v1.smartHomeEvaluation.SHCapabilityDirective": { + "type": "object" + }, + "v1.smartHomeEvaluation.SHCapabilityError": { + "type": "object", + "properties": { + "code": { + "$ref": "#/definitions/v1.smartHomeEvaluation.SHCapabilityErrorCode", + "x-isEnum": true + }, + "message": { + "type": "string" + } + } + }, + "v1.smartHomeEvaluation.SHCapabilityErrorCode": { + "type": "string", + "enum": [ + "NO_SUCH_ENDPOINT", + "NO_SUCH_SKILL_STAGE", + "NO_SUCH_TEST_PLAN", + "MULTIPLE_MATCHED_ENDPOINTS", + "MULTIPLE_MATCHED_TEST_PLANS", + "CAPABILITY_NOT_SUPPORTED", + "DISCOVERY_FAILED", + "TEST_CASE_TIME_OUT" + ] + }, + "v2.skill.Invocation": { + "type": "object", + "properties": { + "invocationRequest": { + "$ref": "#/definitions/v2.skill.InvocationRequest" + }, + "invocationResponse": { + "$ref": "#/definitions/v2.skill.InvocationResponse" + }, + "metrics": { + "$ref": "#/definitions/v2.skill.Metrics" + } + } + }, + "v2.skill.InvocationRequest": { + "type": "object", + "properties": { + "endpoint": { + "type": "string", + "description": "Skill's Lambda or HTTPS endpoint." + }, + "body": { + "type": "object", + "description": "JSON payload that was sent to the skill's Lambda or HTTPS endpoint.\n", + "additionalProperties": { + "type": "object", + "properties": {} + } + } + } + }, + "v2.skill.InvocationResponse": { + "type": "object", + "properties": { + "body": { + "type": "object", + "description": "Payload that was returned by the skill's Lambda or HTTPS endpoint.\n", + "additionalProperties": { + "type": "object", + "properties": {} + } + } + } + }, + "v2.skill.Metrics": { + "type": "object", + "properties": { + "skillExecutionTimeInMilliseconds": { + "type": "integer", + "description": "How long, in milliseconds, it took the skill's Lambda or HTTPS endpoint to process the request.\n" + } + } + }, + "v2.skill.simulations.SimulationsApiRequest": { + "type": "object", + "required": [ + "device", + "input" + ], + "properties": { + "input": { + "$ref": "#/definitions/v2.skill.simulations.Input" + }, + "device": { + "$ref": "#/definitions/v2.skill.simulations.Device" + }, + "session": { + "$ref": "#/definitions/v2.skill.simulations.Session" + }, + "simulation": { + "$ref": "#/definitions/v2.skill.simulations.Simulation" + } + } + }, + "v2.skill.simulations.Input": { + "type": "object", + "required": [ + "content" + ], + "properties": { + "content": { + "type": "string", + "description": "A string corresponding to the utterance text of what a customer would say to Alexa.\n" + } + } + }, + "v2.skill.simulations.Device": { + "type": "object", + "required": [ + "locale" + ], + "properties": { + "locale": { + "type": "string", + "description": "A valid locale (e.g \"en-US\") for the virtual device used in simulation.\n" + } + }, + "description": "Model of a virtual device used for simulation. This device object emulates attributes associated with a real Alexa enabled device.\n" + }, + "v2.skill.simulations.Session": { + "type": "object", + "properties": { + "mode": { + "$ref": "#/definitions/v2.skill.simulations.SessionMode", + "x-isEnum": true + } + }, + "description": "Session settings for running current simulation.\n" + }, + "v2.skill.simulations.SessionMode": { + "type": "string", + "description": "Indicate the session mode of the current simulation is using.\n", + "enum": [ + "DEFAULT", + "FORCE_NEW_SESSION" + ] + }, + "v2.skill.simulations.Simulation": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/v2.skill.simulations.SimulationType", + "x-isEnum": true + } + }, + "description": "Simulation settings for the current simulation request.\n" + }, + "v2.skill.simulations.SimulationType": { + "type": "string", + "description": "String indicating the type of simulation request. Possible values are \"DEFAULT\" and \"NFI_ISOLATED_SIMULATION\". \"NFI_ISOLATED_SIMULATION\" is used to test the NFI(Name Free Interaction) enabled skills in isolation. This field is reserved for testing Name Free Interactions(NFI). Skills that are eligible to add NFI can only use this field. To learn more, visit https://developer.amazon.com/en-US/docs/alexa/custom-skills/understand-name-free-interaction-for-custom-skills.html\n", + "enum": [ + "DEFAULT", + "NFI_ISOLATED_SIMULATION" + ] + }, + "v2.skill.simulations.SimulationsApiResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Id of the simulation resource." + }, + "status": { + "$ref": "#/definitions/v2.skill.simulations.SimulationsApiResponseStatus", + "x-isEnum": true + }, + "result": { + "$ref": "#/definitions/v2.skill.simulations.SimulationResult" + } + } + }, + "v2.skill.simulations.SimulationsApiResponseStatus": { + "type": "string", + "description": "String that specifies the current status of the simulation. Possible values are \"IN_PROGRESS\", \"SUCCESSFUL\", and \"FAILED\".\n", + "enum": [ + "IN_PROGRESS", + "SUCCESSFUL", + "FAILED" + ] + }, + "v2.skill.simulations.SimulationResult": { + "type": "object", + "properties": { + "alexaExecutionInfo": { + "$ref": "#/definitions/v2.skill.simulations.AlexaExecutionInfo" + }, + "skillExecutionInfo": { + "$ref": "#/definitions/v2.skill.simulations.SkillExecutionInfo" + }, + "error": { + "$ref": "#/definitions/v2.Error" + } + } + }, + "v2.skill.simulations.SkillExecutionInfo": { + "type": "object", + "properties": { + "invocations": { + "type": "array", + "items": { + "$ref": "#/definitions/v2.skill.Invocation" + } + } + } + }, + "v2.skill.simulations.AlexaExecutionInfo": { + "type": "object", + "properties": { + "alexaResponses": { + "type": "array", + "items": { + "$ref": "#/definitions/v2.skill.simulations.AlexaResponse" + } + }, + "consideredIntents": { + "type": "array", + "items": { + "$ref": "#/definitions/v2.skill.simulations.Intent" + } + } + } + }, + "v2.skill.simulations.AlexaResponse": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The type of Alexa response" + }, + "content": { + "description": "The detail information needs to exposed in this type of Alexa response.\n", + "$ref": "#/definitions/v2.skill.simulations.AlexaResponseContent" + } + } + }, + "v2.skill.simulations.AlexaResponseContent": { + "type": "object", + "properties": { + "caption": { + "type": "string", + "description": "The plain text from Alexa speech response." + } + } + }, + "v2.skill.simulations.Intent": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "confirmationStatus": { + "$ref": "#/definitions/v2.skill.simulations.ConfirmationStatusType", + "x-isEnum": true + }, + "slots": { + "type": "object", + "description": "A map of key-value pairs that further describes what the user meant based on a predefined intent schema. The map can be empty.\n", + "additionalProperties": { + "$ref": "#/definitions/v2.skill.simulations.Slot" + } + } + } + }, + "v2.skill.simulations.ConfirmationStatusType": { + "type": "string", + "description": "An enumeration indicating whether the user has explicitly confirmed or denied the entire intent. Possible values: \"NONE\", \"CONFIRMED\", \"DENIED\".\n", + "enum": [ + "NONE", + "CONFIRMED", + "DENIED" + ] + }, + "v2.skill.simulations.Slot": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + }, + "confirmationStatus": { + "$ref": "#/definitions/v2.skill.simulations.ConfirmationStatusType", + "x-isEnum": true + }, + "resolutions": { + "$ref": "#/definitions/v2.skill.simulations.SlotResolutions" + } + } + }, + "v2.skill.simulations.SlotResolutions": { + "type": "object", + "properties": { + "resolutionsPerAuthority": { + "type": "array", + "description": "An array of objects representing each possible authority for entity resolution. An authority represents the source for the data provided for the slot. For a custom slot type, the authority is the slot type you defined.\n", + "items": { + "$ref": "#/definitions/v2.skill.simulations.ResolutionsPerAuthorityItems" + } + } + }, + "description": "A resolutions object representing the results of resolving the words captured from the user's utterance.\n" + }, + "v2.skill.simulations.ResolutionsPerAuthorityItems": { + "type": "object", + "properties": { + "authority": { + "type": "string", + "description": "The name of the authority for the slot values. For custom slot types, this authority label incorporates your skill ID and the slot type name.\n" + }, + "status": { + "$ref": "#/definitions/v2.skill.simulations.ResolutionsPerAuthorityStatus" + }, + "values": { + "type": "array", + "description": "An array of resolved values for the slot.", + "items": { + "$ref": "#/definitions/v2.skill.simulations.ResolutionsPerAuthorityValueItems" + } + } + } + }, + "v2.skill.simulations.ResolutionsPerAuthorityStatus": { + "type": "object", + "properties": { + "code": { + "$ref": "#/definitions/v2.skill.simulations.ResolutionsPerAuthorityStatusCode", + "x-isEnum": true + } + }, + "description": "An object representing the status of entity resolution for the slot." + }, + "v2.skill.simulations.ResolutionsPerAuthorityStatusCode": { + "type": "string", + "description": "A code indicating the results of attempting to resolve the user utterance against the defined slot types. This can be one of the following:\nER_SUCCESS_MATCH: The spoken value matched a value or synonym explicitly defined in your custom slot type. ER_SUCCESS_NO_MATCH: The spoken value did not match any values or synonyms explicitly defined in your custom slot type. ER_ERROR_TIMEOUT: An error occurred due to a timeout. ER_ERROR_EXCEPTION: An error occurred due to an exception during processing.\n", + "enum": [ + "ER_SUCCESS_MATCH", + "ER_SUCCESS_NO_MATCH", + "ER_ERROR_TIMEOUT", + "ER_ERROR_EXCEPTION" + ] + }, + "v2.skill.simulations.ResolutionsPerAuthorityValueItems": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The string for the resolved slot value." + }, + "id": { + "type": "string", + "description": "The unique ID defined for the resolved slot value. This is based on the IDs defined in the slot type definition.\n" + } + }, + "description": "An object representing the resolved value for the slot, based on the user's utterance and the slot type definition.\n" + }, + "v2.skill.invocations.invocationsApiRequest": { + "type": "object", + "required": [ + "endpointRegion", + "skillRequest" + ], + "properties": { + "endpointRegion": { + "$ref": "#/definitions/v2.skill.invocations.EndPointRegions", + "x-isEnum": true + }, + "skillRequest": { + "$ref": "#/definitions/v2.skill.invocations.SkillRequest" + } + } + }, + "v2.skill.invocations.EndPointRegions": { + "type": "string", + "description": "Region of endpoint to be called.", + "enum": [ + "NA", + "EU", + "FE", + "default" + ] + }, + "v2.skill.invocations.SkillRequest": { + "type": "object", + "required": [ + "body" + ], + "properties": { + "body": { + "type": "object", + "description": "ASK request body schema as defined in the public facing documentation (https://developer.amazon.com/en-US/docs/alexa/custom-skills/request-and-response-json-reference.html#request-body-syntax)\n", + "properties": {} + } + } + }, + "v2.skill.invocations.InvocationsApiResponse": { + "type": "object", + "properties": { + "status": { + "$ref": "#/definitions/v2.skill.invocations.InvocationResponseStatus", + "x-isEnum": true + }, + "result": { + "$ref": "#/definitions/v2.skill.invocations.InvocationResponseResult" + } + } + }, + "v2.skill.invocations.InvocationResponseStatus": { + "type": "string", + "description": "String that specifies the status of skill invocation. Possible values are \"SUCCESSFUL\", and \"FAILED\".\n", + "enum": [ + "SUCCESSFUL", + "FAILED" + ] + }, + "v2.skill.invocations.InvocationResponseResult": { + "type": "object", + "properties": { + "skillExecutionInfo": { + "$ref": "#/definitions/v2.skill.Invocation" + }, + "error": { + "$ref": "#/definitions/v2.Error" + } + } + } + } +} \ No newline at end of file diff --git a/test/test-utils.js b/test/test-utils.js index 8f0c7881..5f058a36 100644 --- a/test/test-utils.js +++ b/test/test-utils.js @@ -101,7 +101,7 @@ const _startMockServer = async (port, swaggerSpecPath) => { return run("npm", args, options); }; -const startMockSmapiServer = () => _startMockServer(MockServerPort.SMAPI, "node_modules/ask-smapi-model/spec.json"); +const startMockSmapiServer = () => _startMockServer(MockServerPort.SMAPI, "test/integration/fixtures/smapi_spec.json"); const startMockLwaServer = () => _startMockServer(MockServerPort.LWA, "test/integration/fixtures/lwa-swagger.json"); module.exports = { diff --git a/test/unit/clients/http-client-test.js b/test/unit/clients/http-client-test.js index a099068d..24f0d830 100644 --- a/test/unit/clients/http-client-test.js +++ b/test/unit/clients/http-client-test.js @@ -1,11 +1,11 @@ -const {expect} = require("chai"); -const sinon = require("sinon"); -const proxyquire = require("proxyquire"); +import axios from "axios"; +import {expect} from "chai"; +import {stub, replace, restore, spy} from "sinon"; -const httpClient = require("../../../lib/clients/http-client"); -const urlUtility = require("../../../lib/utils/url-utils"); -const logger = require("../../../lib/utils/logger-utility"); -const CONSTANTS = require("../../../lib/utils/constants"); +import * as httpClient from "../../../lib/clients/http-client"; +import urlUtility, {isValidUrl} from "../../../lib/utils/url-utils"; +import logger, {getInstance} from "../../../lib/utils/logger-utility"; +import {HTTP_REQUEST} from "../../../lib/utils/constants"; describe("Clients test - cli http request client", () => { const VALID_OPTIONS = {url: "https://test.com"}; @@ -15,6 +15,50 @@ describe("Clients test - cli http request client", () => { const VALID_OPERATION = "valid-operation"; const TEST_UPLOAD_URL = "https://upload.url.com"; const TEST_PAYLOAD = "payload"; + const TEST_REQUEST_BODY = {token: "someToken"}; + const TEST_FAKE_REQUEST_ID = "FOO REQUEST #5"; + const TEST_FAKE_RESPONSE_HEADERS = {"x-amzn-requestid": TEST_FAKE_REQUEST_ID}; + const TEST_FAKE_REQUEST_HEADERS = {"H-key": "H-value"}; + const TEST_DEFAULT_AXIOS_RESPONSE = { + status: 200, + statusText: "status message", + headers: TEST_FAKE_RESPONSE_HEADERS, + data: TEST_REQUEST_BODY, + config: { + method: "FAKE", + url: VALID_OPTIONS.url, + headers: TEST_FAKE_REQUEST_HEADERS, + data:TEST_REQUEST_BODY + } + }; + let stubRequest; + let axiosPromiseResponse; + let debugStub; + let errorStub; + let warnStub; + let infoStub; + + beforeEach(() => { + axiosPromiseResponse = stub(); + stubRequest = replace(axios, "request", axiosPromiseResponse); + axiosPromiseResponse.resolves(TEST_DEFAULT_AXIOS_RESPONSE); + + stub(logger, "getInstance"); + debugStub = stub(); + errorStub = stub(); + warnStub = stub(); + infoStub = stub(); + getInstance.returns({ + info: infoStub, + warn: warnStub, + error: errorStub, + debug: debugStub, + }); + }); + + afterEach(() => { + restore(); + }); describe("# input parameter validation", () => { it("| input operation is not a string, expect fatal error", (done) => { @@ -37,27 +81,30 @@ describe("Clients test - cli http request client", () => { it("| input operation url is not a valid url, expect fatal error", (done) => { // setup - sinon.stub(urlUtility, "isValidUrl"); - urlUtility.isValidUrl.withArgs(INVALID_URL_OPTIONS).returns(false); + stub(urlUtility, "isValidUrl"); + isValidUrl.withArgs(INVALID_URL_OPTIONS).returns(false); // call httpClient.request(INVALID_URL_OPTIONS, VALID_OPERATION, false, (err) => { + isValidUrl.restore(); + // verify expect(err).equal(`[Fatal]: Invalid URL:${INVALID_URL_OPTIONS.url}. CLI request must call with valid url.`); - urlUtility.isValidUrl.restore(); done(); }); }); }); describe("# embedding user-agent", () => { - let stubRequest; - let proxyhttpClient; let initialDownstreamClient; before(() => { - initialDownstreamClient = process.env.ASK_DOWNSTREAM_CLIENT; - stubRequest = sinon.stub(); - proxyhttpClient = proxyquire("../../../lib/clients/http-client", {request: stubRequest}); + if (process.env.ASK_DOWNSTREAM_CLIENT) { + initialDownstreamClient = process.env.ASK_DOWNSTREAM_CLIENT; + } + }); + + afterEach(() => { + initialDownstreamClient ? (process.env.ASK_DOWNSTREAM_CLIENT = initialDownstreamClient) : delete process.env.ASK_DOWNSTREAM_CLIENT; }); it("| no downstream client, expect CLI user agent", (done) => { @@ -67,9 +114,8 @@ describe("Clients test - cli http request client", () => { headers: {}, }; process.env.ASK_DOWNSTREAM_CLIENT = ""; - stubRequest.callsFake(() => {}); // call - proxyhttpClient.request(VALID_OPTION_WITH_HEADERS, VALID_OPERATION, true, () => {}); + httpClient.request(VALID_OPTION_WITH_HEADERS, VALID_OPERATION, true, () => {}); // verify expect(stubRequest.args[0][0]).to.have.property("headers"); expect(stubRequest.args[0][0].headers).to.have.property("User-Agent"); @@ -81,83 +127,81 @@ describe("Clients test - cli http request client", () => { // setup const TEST_DOWNSTREAM = "test_downstream"; process.env.ASK_DOWNSTREAM_CLIENT = TEST_DOWNSTREAM; - stubRequest.callsFake(() => {}); // call - proxyhttpClient.request(VALID_OPTIONS, VALID_OPERATION, false, () => {}); + httpClient.request(VALID_OPTIONS, VALID_OPERATION, false, () => {}); // verfiy expect(stubRequest.args[0][0]).to.have.property("headers"); expect(stubRequest.args[0][0].headers).to.have.property("User-Agent"); expect(stubRequest.args[0][0].headers["User-Agent"].startsWith(TEST_DOWNSTREAM)).equal(true); done(); }); - - afterEach(() => { - stubRequest.reset(); - }); - - after(() => { - process.env.ASK_DOWNSTREAM_CLIENT = initialDownstreamClient; - }); }); describe("# embedding proxyUrl", () => { - let stubRequest; - let proxyhttpClient; let initialProxyUrl; - beforeEach(() => { - initialProxyUrl = process.env.ASK_CLI_PROXY; - stubRequest = sinon.stub(); - proxyhttpClient = proxyquire("../../../lib/clients/http-client", {request: stubRequest}); + before(() => { + if (process.env.ASK_CLI_PROXY) { + initialProxyUrl = process.env.ASK_CLI_PROXY; + } + }); + + afterEach(() => { + initialProxyUrl ? (process.env.ASK_CLI_PROXY = initialProxyUrl) : delete process.env.ASK_CLI_PROXY; }); it("| proxyUrl is added to request options", (done) => { // setup - process.env.ASK_CLI_PROXY = "proxyUrl"; - stubRequest.callsFake(() => {}); + process.env.ASK_CLI_PROXY = "ftp://u:p@proxy.url:5678"; // call - proxyhttpClient.request(VALID_OPTIONS, VALID_OPERATION, true, () => {}); + httpClient.request(VALID_OPTIONS, VALID_OPERATION, true, () => {}); + // verfiy expect(stubRequest.args[0][0]).to.have.property("proxy"); - expect(stubRequest.args[0][0].proxy).equal("proxyUrl"); + expect(stubRequest.args[0][0].proxy.protocol).equal("ftp"); + expect(stubRequest.args[0][0].proxy.host).equal("proxy.url"); + expect(stubRequest.args[0][0].proxy.port).equal("5678"); + expect(stubRequest.args[0][0].proxy).to.have.property("auth"); + expect(stubRequest.args[0][0].proxy.auth.username).equal("u"); + expect(stubRequest.args[0][0].proxy.auth.password).equal("p"); + done(); - // reset }); - afterEach(() => { - stubRequest.reset(); - process.env.ASK_DOWNSTREAM_CLIENT = initialProxyUrl; + it("| proxyUrl is added to request options", (done) => { + // setup + const invalidProxyUrl = "This should fail the url Validity check"; + process.env.ASK_CLI_PROXY = invalidProxyUrl; + // call + httpClient.request(VALID_OPTIONS, VALID_OPERATION, true, (err, response) => { + // verify + expect(err).equal(`[Fatal]: Invalid Proxy setting URL: ${invalidProxyUrl}. Reset ASK_CLI_PROXY env variable with a valid proxy url.`); + expect(response).equal(undefined); + done(); + }); }); }); describe("# call request correctly", () => { - let stubRequest; - let proxyhttpClient; - - before(() => { - stubRequest = sinon.stub(); - proxyhttpClient = proxyquire("../../../lib/clients/http-client", {request: stubRequest}); - }); - it("| request error occurs, expect error message", (done) => { // setup - stubRequest.callsArgWith(1, "error", null); + axiosPromiseResponse.rejects("error"); // call - proxyhttpClient.request(VALID_OPTIONS, VALID_OPERATION, false, (err, response) => { + httpClient.request(VALID_OPTIONS, VALID_OPERATION, false, (err, response) => { // verify - expect(err).equal(`Failed to make request to ${VALID_OPERATION}.\nError response: error`); - expect(response).equal(undefined); + expect(err).equal(`The request to ${VALID_OPTIONS.url} failed. Client Error: error`); + expect(response).deep.equal({}); done(); }); }); it("| request with no error and no response, expect error", (done) => { // setup - stubRequest.callsArgWith(1, null, null); + axiosPromiseResponse.resolves(null); // call - proxyhttpClient.request(VALID_OPTIONS, VALID_OPERATION, false, (err, response) => { + httpClient.request(VALID_OPTIONS, VALID_OPERATION, false, (err, response) => { // verify - expect(err).equal(`Failed to make request to ${VALID_OPERATION}.\nPlease make sure "${VALID_OPTIONS.url}" is responding.`); + expect(err).equal(`The request to ${VALID_OPERATION}, failed.\nPlease make sure "${VALID_OPTIONS.url}" is responding.`); expect(response).equal(undefined); done(); }); @@ -165,9 +209,9 @@ describe("Clients test - cli http request client", () => { it("| request with no error and no response statusCode, expect error", (done) => { // setup - stubRequest.callsArgWith(1, null, {body: "response"}); + axiosPromiseResponse.resolves({data: "response"}); // call - proxyhttpClient.request(VALID_OPTIONS, VALID_OPERATION, false, (err, response) => { + httpClient.request(VALID_OPTIONS, VALID_OPERATION, false, (err, response) => { // verify expect(err).equal(`Failed to access the statusCode from the request to ${VALID_OPERATION}.`); expect(response).equal(undefined); @@ -177,9 +221,9 @@ describe("Clients test - cli http request client", () => { it("| request with success, expect no error and response", (done) => { // setup - stubRequest.callsArgWith(1, null, {statusCode: 200}); + axiosPromiseResponse.resolves({status: 200}); // call - proxyhttpClient.request(VALID_OPTIONS, VALID_OPERATION, false, (err, response) => { + httpClient.request(VALID_OPTIONS, VALID_OPERATION, false, (err, response) => { // verify expect(err).equal(null); expect(response).deep.equal({statusCode: 200}); @@ -191,82 +235,71 @@ describe("Clients test - cli http request client", () => { // setup const fakeResponse = { request: { - method: "method", - href: "href", - headers: "request headers", - body: "body", + method: TEST_DEFAULT_AXIOS_RESPONSE.config.method, + href: TEST_DEFAULT_AXIOS_RESPONSE.config.url, + headers: TEST_FAKE_REQUEST_HEADERS, + data: TEST_DEFAULT_AXIOS_RESPONSE.config.data, }, - headers: "response headers", - statusCode: "status code", - statusMessage: "status message", - body: "body", + headers: TEST_FAKE_RESPONSE_HEADERS, + status: 200, + statusText: "status message", + data: "body", + config: TEST_DEFAULT_AXIOS_RESPONSE.config }; - stubRequest.callsArgWith(1, null, fakeResponse); - sinon.stub(logger, "getInstance"); - const debugStub = sinon.spy(); - logger.getInstance.returns({ - debug: debugStub, - }); + axiosPromiseResponse.resolves(fakeResponse); // call - proxyhttpClient.request(VALID_OPTIONS, VALID_OPERATION, true, () => { + httpClient.request(VALID_OPTIONS, VALID_OPERATION, true, () => { // verify const expectedDebugContent = { activity: VALID_OPERATION, error: null, - "request-id": null, + "request-id": TEST_FAKE_REQUEST_ID, request: { - method: "method", - url: "href", - headers: "request headers", - body: "body", + method: fakeResponse.request.method, + url: fakeResponse.request.href, + headers: TEST_FAKE_REQUEST_HEADERS, + body: TEST_DEFAULT_AXIOS_RESPONSE.config.data, }, response: { - statusCode: "status code", - statusMessage: "status message", - headers: "response headers", + statusCode: 200, + statusMessage: fakeResponse.statusText, + headers: fakeResponse.headers, }, - body: "body", + body: fakeResponse.data, }; - expect(logger.getInstance.called).equal(true); + expect(getInstance.called).equal(true); expect(debugStub.args[0][0]).deep.equal(expectedDebugContent); - logger.getInstance.restore(); + getInstance.restore(); done(); }); }); }); describe("# verify upload method", () => { - const stubRequest = sinon.stub(); - const proxyhttpClient = proxyquire("../../../lib/clients/http-client", {request: stubRequest}); - - afterEach(() => { - sinon.restore(); - }); - it("| upload but meet error, expect error callback", (done) => { // setup - stubRequest.callsArgWith(1, "uploadErr"); + axiosPromiseResponse.rejects("uploadErr"); // test - proxyhttpClient.putByUrl(TEST_UPLOAD_URL, TEST_PAYLOAD, VALID_OPERATION, false, (err, res) => { + httpClient.putByUrl(TEST_UPLOAD_URL, TEST_PAYLOAD, VALID_OPERATION, false, (err, res) => { // verify expect(stubRequest.args[0][0].url).equal(TEST_UPLOAD_URL); - expect(stubRequest.args[0][0].method).equal(CONSTANTS.HTTP_REQUEST.VERB.PUT); - expect(stubRequest.args[0][0].body).equal(TEST_PAYLOAD); - expect(res).equal(undefined); - expect(err).equal(`Failed to make request to ${VALID_OPERATION}.\nError response: uploadErr`); + expect(stubRequest.args[0][0].method).equal(HTTP_REQUEST.VERB.PUT); + expect(stubRequest.args[0][0].data).equal(TEST_PAYLOAD); + expect(res).deep.equal({}); + expect(err).equal(`The request to ${TEST_UPLOAD_URL} failed. Client Error: uploadErr`); done(); }); }); it("| upload successfully", (done) => { // setup - stubRequest.callsArgWith(1, null, {statusCode: 202}); + axiosPromiseResponse.resolves({status: 202}); // test - proxyhttpClient.putByUrl(TEST_UPLOAD_URL, TEST_PAYLOAD, VALID_OPERATION, false, (err, res) => { + httpClient.putByUrl(TEST_UPLOAD_URL, TEST_PAYLOAD, VALID_OPERATION, false, (err, res) => { // verify expect(stubRequest.args[0][0].url).equal(TEST_UPLOAD_URL); - expect(stubRequest.args[0][0].method).equal(CONSTANTS.HTTP_REQUEST.VERB.PUT); - expect(stubRequest.args[0][0].body).equal(TEST_PAYLOAD); + expect(stubRequest.args[0][0].method).equal(HTTP_REQUEST.VERB.PUT); + expect(stubRequest.args[0][0].data).equal(TEST_PAYLOAD); expect(err).equal(null); expect(res).deep.equal({statusCode: 202}); done(); diff --git a/test/unit/clients/lwa-auth-code-client-test.js b/test/unit/clients/lwa-auth-code-client-test.js index 74233d16..07c268f6 100644 --- a/test/unit/clients/lwa-auth-code-client-test.js +++ b/test/unit/clients/lwa-auth-code-client-test.js @@ -194,6 +194,7 @@ describe("# Clients test - LWA OAuth2 client test", () => { lwaClient.refreshToken(VALID_ACCESS_TOKEN, (err, res) => { const expectedOptions = { url: `${new URL(tokenPath, tokenHost)}`, + headers: {"content-type": "application/json"}, method: POST_REQUEST_METHOD, body: { grant_type: REFRESH_TOKEN_GRANT_TYPE, diff --git a/test/unit/clients/smapi-client-test/index.test.ts b/test/unit/clients/smapi-client-test/index.test.ts index ca4602df..471e913a 100644 --- a/test/unit/clients/smapi-client-test/index.test.ts +++ b/test/unit/clients/smapi-client-test/index.test.ts @@ -2,7 +2,7 @@ import {expect} from "chai"; import sinon from "sinon"; import {SmapiClientLateBound} from "../../../../lib/clients/smapi-client"; -import httpClient from "../../../../lib/clients/http-client"; +import * as httpClient from "../../../../lib/clients/http-client"; import AuthorizationController from "../../../../lib/controllers/authorization-controller"; import CONSTANTS from "../../../../lib/utils/constants"; @@ -208,7 +208,7 @@ describe("Clients test - smapi client test", () => { it("| input request options and the SMAPI returns error status code but without response object", (done) => { // setup tokenReadStub.callsArgWith(1, null, TEST_ACCESS_TOKEN.access_token); - httpRequestStub.callsArgWith(3, null, TEST_REQUEST_RESPONSE_ERROR_STATUS_CODE_WITHOUT_BODY); + httpRequestStub.callsArgWith(3, TEST_REQUEST_RESPONSE_ERROR_STATUS_CODE_WITHOUT_BODY, null); // call smapiClient._smapiRequest( { diff --git a/test/unit/clients/smapi-client-test/smapiApiClient-test.ts b/test/unit/clients/smapi-client-test/smapiApiClient-test.ts new file mode 100644 index 00000000..db4720b4 --- /dev/null +++ b/test/unit/clients/smapi-client-test/smapiApiClient-test.ts @@ -0,0 +1,96 @@ +import {expect} from "chai"; +import sinon, { SinonStub } from "sinon"; +import * as httpClient from "../../../../lib/clients/http-client"; +import { SmapiApiClient } from "../../../../lib/clients/smapi-client/smapiApiClient"; + +describe("SmapiApiClient invoke", () => { + let httpClientStub: SinonStub; + let smapiApiClientInstance: SmapiApiClient; + + const TEST_PROFILE = "testProfile"; + const TEST_DO_DEBUG = false; + const HTTP_CLIENT_RESPONSE_BODY_CONTENT = { + test: 'content', + } + const HTTP_CLIENT_RESPONSE_200 = { + statusCode: 200, + body: HTTP_CLIENT_RESPONSE_BODY_CONTENT, + headers: [] + }; + const TEST_FULL_RESPONSE = false; + const FAKE_URL = "FakeUrl"; + const TEST_ERROR = "TEST: error"; + const HEADER_CONTENT_TYPE_KEY = "content-type"; + const HEADER_CONTENT_TYPE_VALUE = "application/x-www-form-urlencoded"; + const HEADER_CONTENT_TYPE_JSON_VALUE = "application/json"; + const HEADER_2_KEY = "header2"; + const HEADER_2_VALUE = "value2"; + const API_CLIENT_REQUEST = { + body: '&this=is&Test=Content', + method: "GET", + headers: [ + { + key: HEADER_CONTENT_TYPE_KEY, + value: HEADER_CONTENT_TYPE_VALUE, + }, + { + key: HEADER_2_KEY, + value: HEADER_2_VALUE, + }, + ], + url: FAKE_URL, + } + + beforeEach(() => { + httpClientStub = sinon.stub(httpClient, "request").yields(null, HTTP_CLIENT_RESPONSE_200); + //httpClientStub.callsArgWith(3, null, HTTP_CLIENT_RESPONSE_200); + smapiApiClientInstance = new SmapiApiClient(TEST_DO_DEBUG, TEST_PROFILE, TEST_FULL_RESPONSE); + }); + + afterEach(() => { + sinon.restore(); + }); + + it("should return a valid response", (done) => { + const expectedHeaders: any = {}; + expectedHeaders[HEADER_CONTENT_TYPE_KEY]= HEADER_CONTENT_TYPE_JSON_VALUE; + expectedHeaders[HEADER_2_KEY]= HEADER_2_VALUE; + + smapiApiClientInstance.invoke(API_CLIENT_REQUEST).then(smapiApiClientResponse => { + expect(smapiApiClientResponse).to.not.be.null; + expect(smapiApiClientResponse.statusCode).to.equal(HTTP_CLIENT_RESPONSE_200.statusCode); + expect(smapiApiClientResponse.body).to.not.be.null; + expect(smapiApiClientResponse.body).to.deep.equal(JSON.stringify(HTTP_CLIENT_RESPONSE_BODY_CONTENT)); + expect(smapiApiClientResponse.headers).to.not.be.null; + expect(smapiApiClientResponse.headers).to.equal(HTTP_CLIENT_RESPONSE_200.headers); + expect(httpClientStub.calledOnce).to.be.true; + expect(httpClientStub.args[0][0]).to.deep.equal({ + url: API_CLIENT_REQUEST.url, + method: API_CLIENT_REQUEST.method, + headers: expectedHeaders, + body: { + this: 'is', + Test: 'Content' + }, + }); + expect(httpClientStub.args[0][1]).to.equal("SMAPI_API_CLIENT"); + expect(httpClientStub.args[0][2]).to.be.false; + + done(); + }).catch((err) =>{ + console.log(err); + }); + }); + + it("should reject the promise if httpClient request returns an error", (done) => { + httpClientStub.reset(); + httpClientStub.callsArgWith(3, TEST_ERROR); + smapiApiClientInstance.invoke(API_CLIENT_REQUEST).then(smapiApiClientResponse => { + console.log(smapiApiClientResponse); + }).catch((error) => { + expect(error).to.not.be.null; + expect(error.message).to.equal(TEST_ERROR); + done(); + }) + }) +}); \ No newline at end of file diff --git a/test/unit/commands/abstract-command-test.ts b/test/unit/commands/abstract-command-test.ts index 4815e066..f76fa246 100644 --- a/test/unit/commands/abstract-command-test.ts +++ b/test/unit/commands/abstract-command-test.ts @@ -1,7 +1,7 @@ import {expect} from "chai"; import sinon from "sinon"; import path from "path"; -import httpClient from "../../../lib/clients/http-client"; +import * as httpClient from "../../../lib/clients/http-client"; import {AbstractCommand} from "../../../lib/commands/abstract-command"; import AppConfig from "../../../lib/model/app-config"; import CONSTANTS from "../../../lib/utils/constants"; @@ -18,7 +18,7 @@ describe("Command test - AbstractCommand class", () => { const TEST_PROFILE = "profile"; const TEST_NPM_REGISTRY_DATA = (inputVersion: string) => { const result = { - body: JSON.stringify({version: inputVersion}), + body: {version: inputVersion}, }; return result; }; @@ -331,7 +331,7 @@ describe("Command test - AbstractCommand class", () => { it("| http client request error status code , should warn it out and pass the process", async () => { // setup - httpClientStub.yields(undefined, {statusCode: 400}); + httpClientStub.callsArgWith(3, {statusCode: 400}); // call await AbstractCommand.prototype._remindsIfNewVersion(TEST_DO_DEBUG_FALSE, undefined); // verify diff --git a/test/unit/commands/dialog/index.spec.ts b/test/unit/commands/dialog/index.spec.ts index b38091e5..bd6f32c3 100644 --- a/test/unit/commands/dialog/index.spec.ts +++ b/test/unit/commands/dialog/index.spec.ts @@ -6,10 +6,9 @@ import AuthorizationController from "../../../../lib/controllers/authorization-c import {DialogCommand} from "../../../../lib/commands/dialog"; import DialogReplayFile from "../../../../lib/model/dialog-replay-file"; import * as helper from "../../../../lib/commands/dialog/helper"; -import httpClient from "../../../../lib/clients/http-client"; +import * as httpClient from "../../../../lib/clients/http-client"; import {InteractiveMode} from "../../../../lib/commands/dialog/interactive-mode"; import ResourcesConfig from "../../../../lib/model/resources-config"; -import jsonView from "../../../../lib/view/json-view"; import CONSTANTS from "../../../../lib/utils/constants"; import profileHelper from "../../../../lib/utils/profile-helper"; import stringUtils from "../../../../lib/utils/string-utils"; @@ -36,9 +35,11 @@ describe("Commands Dialog test - command class test", () => { let errorStub: sinon.SinonStub; let infoStub: sinon.SinonStub; + let httpClientStub: sinon.SinonStub; beforeEach(() => { errorStub = sinon.stub(); infoStub = sinon.stub(); + httpClientStub = sinon.stub(httpClient, "request"); sinon.stub(Messenger, "getInstance").returns({ error: errorStub, info: infoStub, @@ -151,7 +152,7 @@ describe("Commands Dialog test - command class test", () => { replay: INVALID_DIALOG_REPLAY_FILE_JSON_PATH, }; sinon.stub(profileHelper, "runtimeProfile").returns(TEST_PROFILE); - sinon.stub(httpClient, "request").yields(null, {statusCode: 200, body: {manifest}}); + httpClientStub.yields(null, {statusCode: 200, body: {manifest}}); // call await expect(instance._getDialogConfig(TEST_CMD_WITH_VALUES)).rejectedWith("Replay file must contain skillId"); }); @@ -165,7 +166,7 @@ describe("Commands Dialog test - command class test", () => { const validateDialogArgsStub = sinon.stub(helper, "validateDialogArgs").resolves(); sinon.stub(profileHelper, "runtimeProfile").returns(TEST_PROFILE); sinon.stub(InteractiveMode.prototype, "start").resolves(); - sinon.stub(httpClient, "request").yields(null, {statusCode: 200, body: {manifest}}); + httpClientStub.yields(null, {statusCode: 200, body: {manifest}}); // call await instance.handle(TEST_CMD_WITH_VALUES); expect(validateDialogArgsStub).calledOnceWith(sinon.match({ @@ -181,7 +182,7 @@ describe("Commands Dialog test - command class test", () => { replay: INVALID_DIALOG_REPLAY_FILE_JSON_PATH, }; sinon.stub(profileHelper, "runtimeProfile").returns(TEST_PROFILE); - sinon.stub(httpClient, "request").yields(null, {statusCode: 200, body: {manifest}}); + httpClientStub.yields(null, {statusCode: 200, body: {manifest}}); const stringUtilsStub = sinon.stub(stringUtils, "isNonBlankString"); stringUtilsStub.onCall(0).returns(true); stringUtilsStub.onCall(1).returns(false); @@ -196,7 +197,7 @@ describe("Commands Dialog test - command class test", () => { replay: INVALID_DIALOG_REPLAY_FILE_JSON_PATH, }; sinon.stub(profileHelper, "runtimeProfile").returns(TEST_PROFILE); - sinon.stub(httpClient, "request").yields(null, {statusCode: 200, body: {manifest}}); + httpClientStub.yields(null, {statusCode: 200, body: {manifest}}); const stringUtilsStub = sinon.stub(stringUtils, "isNonBlankString"); stringUtilsStub.onCall(0).returns(true); stringUtilsStub.onCall(1).returns(true); @@ -211,7 +212,7 @@ describe("Commands Dialog test - command class test", () => { replay: DIALOG_REPLAY_FILE_JSON_PATH, }; sinon.stub(profileHelper, "runtimeProfile").returns(TEST_PROFILE); - sinon.stub(httpClient, "request").yields(null, {statusCode: 200, body: {manifest}}); + httpClientStub.yields(null, {statusCode: 200, body: {manifest}}); // call await expect(instance._getDialogConfig(TEST_CMD_WITH_VALUES)).eventually.fulfilled.deep.include({ debug: undefined, @@ -245,7 +246,7 @@ describe("Commands Dialog test - command class test", () => { }; const smapiError = "error"; sinon.stub(profileHelper, "runtimeProfile").returns(TEST_PROFILE); - sinon.stub(httpClient, "request").yields(smapiError); + httpClientStub.yields(smapiError); // call await expect(instance._getDialogConfig(TEST_CMD_WITH_VALUES)).rejectedWith(smapiError); }); @@ -257,14 +258,28 @@ describe("Commands Dialog test - command class test", () => { replay: DIALOG_REPLAY_FILE_JSON_PATH, }; const smapiError = "error"; + const mockedResponse = { + statusCode: 400, + headers: [], + body: { + message: smapiError + } + }; sinon.stub(profileHelper, "runtimeProfile").returns(TEST_PROFILE); - sinon.stub(httpClient, "request").yields(null, {statusCode: 400, body: {message: smapiError}}); + httpClientStub.yields(mockedResponse); // call - await expect(instance._getDialogConfig(TEST_CMD_WITH_VALUES)).rejectedWith(jsonView.toString({message: smapiError})); + await instance._getDialogConfig(TEST_CMD_WITH_VALUES).catch((error) => { + expect(error).to.deep.equal(mockedResponse); + }); }); }); describe("# test with default (interactive) option", () => { + + afterEach(() => { + delete process.env.ASK_DEFAULT_DEVICE_LOCALE; + }); + it("| no resources config file found", async () => { // setup const TEST_CMD_WITH_VALUES = {}; @@ -297,7 +312,7 @@ describe("Commands Dialog test - command class test", () => { // setup const TEST_CMD_WITH_VALUES = {}; sinon.stub(profileHelper, "runtimeProfile").returns(TEST_PROFILE); - sinon.stub(httpClient, "request").yields(null, {statusCode: 200, body: {manifest}}); + httpClientStub.yields(null, {statusCode: 200, body: {manifest}}); const pathJoinStub = sinon.stub(path, "join"); pathJoinStub.withArgs(process.cwd(), CONSTANTS.FILE_PATH.ASK_RESOURCES_JSON_CONFIG).returns(VALID_RESOURCES_CONFIG_JSON_PATH); pathJoinStub.withArgs("./skillPackage", CONSTANTS.FILE_PATH.SKILL_PACKAGE.MANIFEST).returns(VALID_MANIFEST_JSON_PATH); @@ -320,7 +335,7 @@ describe("Commands Dialog test - command class test", () => { const [expectedLocale] = Object.keys(manifest.publishingInformation?.locales || {}); const TEST_CMD_WITH_VALUES = {}; sinon.stub(profileHelper, "runtimeProfile").returns(TEST_PROFILE); - sinon.stub(httpClient, "request").yields(null, {statusCode: 200, body: {manifest}}); + httpClientStub.yields(null, {statusCode: 200, body: {manifest}}); const pathJoinStub = sinon.stub(path, "join"); pathJoinStub.withArgs(process.cwd(), CONSTANTS.FILE_PATH.ASK_RESOURCES_JSON_CONFIG).returns(VALID_RESOURCES_CONFIG_JSON_PATH); pathJoinStub.callThrough(); @@ -338,32 +353,16 @@ describe("Commands Dialog test - command class test", () => { expect(infoStub).calledOnceWith(`Defaulting locale to the first value from the skill manifest: ${expectedLocale}`); }); - - afterEach(() => { - sinon.restore(); - delete process.env.ASK_DEFAULT_DEVICE_LOCALE; - }); }); - afterEach(() => { - sinon.restore(); - }); }); describe("# test _validateUserInputs", () => { - let instance: DialogCommand; - - beforeEach(() => { - instance = new DialogCommand(new SmapiClientLateBound(), optionModel as OptionModel); - }); - it("| all valid inputs", () => { // setup const userInputs = [" open hello world ", "help"]; - // call - const validatedInputs = instance._validateUserInputs(userInputs); - + const validatedInputs = new DialogCommand(new SmapiClientLateBound(), optionModel as OptionModel)._validateUserInputs(userInputs); // verify expect(validatedInputs).deep.equal(["open hello world", "help"]); }); diff --git a/test/unit/commands/init/index-test.ts b/test/unit/commands/init/index-test.ts index b500222f..c6d0ddb8 100644 --- a/test/unit/commands/init/index-test.ts +++ b/test/unit/commands/init/index-test.ts @@ -4,9 +4,8 @@ import AuthorizationController from "../../../../lib/controllers/authorization-c import InitCommand from "../../../../lib/commands/init"; import helper from "../../../../lib/commands/init/helper"; import HostedSkillController from "../../../../lib/controllers/hosted-skill-controller"; -import httpClient from "../../../../lib/clients/http-client"; +import * as httpClient from "../../../../lib/clients/http-client"; import CliWarn from "../../../../lib/exceptions/cli-warn"; -import jsonView from "../../../../lib/view/json-view"; import optionModel from "../../../../lib/commands/option-model.json"; import Messenger from "../../../../lib/view/messenger"; import profileHelper from "../../../../lib/utils/profile-helper"; @@ -356,15 +355,18 @@ describe("Commands init test - command class test", () => { // setup const GET_MANIFEST_ERROR = { statusCode: 403, + headers: undefined, body: { - error: TEST_ERROR, + error: TEST_ERROR.toString(), // jsonView.toString(TEST_ERROR), }, }; - sinon.stub(httpClient, "request").callsArgWith(3, null, GET_MANIFEST_ERROR); // stub getManifest request + sinon.stub(httpClient, "request").callsArgWith(3, GET_MANIFEST_ERROR); // stub getManifest request // call - await expect(instance.handle(TEST_CMD)).rejectedWith(jsonView.toString({error: TEST_ERROR})); + await instance.handle(TEST_CMD).catch((error) => { + expect(error).to.deep.equal(GET_MANIFEST_ERROR); + }); // verify - expect(errorStub).calledOnceWith(jsonView.toString({error: TEST_ERROR})); + expect(errorStub.args[0][0]).to.deep.equal(GET_MANIFEST_ERROR); }); it("| get skill manifest succeed without locales, expect error thrown", async () => { diff --git a/test/unit/commands/new/template-helper-test.ts b/test/unit/commands/new/template-helper-test.ts index a4e80a93..c55846cf 100644 --- a/test/unit/commands/new/template-helper-test.ts +++ b/test/unit/commands/new/template-helper-test.ts @@ -1,7 +1,7 @@ import {expect, assert} from "chai"; import {beforeEach} from "mocha"; import sinon from "sinon"; -import httpClient from "../../../../lib/clients/http-client"; +import * as httpClient from "../../../../lib/clients/http-client"; import { CODE_LANGUAGE_JAVA, CODE_LANGUAGE_NODEJS, @@ -50,7 +50,7 @@ export const TEST_SAMPLE_IM_LAMBDA_JAVA: SampleTemplate = { url: "https://github.com/alexa/bar.git", desc: TEST_SAMPLE_DESCRIPTION_2, }; -const TEST_TEMPLATES = JSON.stringify({templates: [TEST_SAMPLE_1_IM_HOSTED_NODE, TEST_SAMPLE_2_AC_CFN_PYTHON]}); +const TEST_TEMPLATES = {templates: [TEST_SAMPLE_1_IM_HOSTED_NODE, TEST_SAMPLE_2_AC_CFN_PYTHON]}; describe("Commands new test - template helper test", () => { describe("getSampleTemplatesFromS3", () => { @@ -88,7 +88,7 @@ describe("Commands new test - template helper test", () => { }); it("| returns simplified error when debug is enabled and http request fails", async () => { - httpRequestStub.callsArgWith(3, null, TEST_HTTP_RESPONSE_400_ERROR); + httpRequestStub.callsArgWith(3, TEST_HTTP_RESPONSE_400_ERROR, null); doDebug = true; await getSampleTemplatesFromS3(doDebug) @@ -99,7 +99,7 @@ describe("Commands new test - template helper test", () => { }); it("| returns longer error message explaining to enable debug if debug is not enabled and http request fails", async () => { - httpRequestStub.callsArgWith(3, null, TEST_HTTP_RESPONSE_400_ERROR); + httpRequestStub.callsArgWith(3, TEST_HTTP_RESPONSE_400_ERROR, null); doDebug = false; await getSampleTemplatesFromS3(doDebug) diff --git a/test/unit/commands/skill/add-locales/helper-test.js b/test/unit/commands/skill/add-locales/helper-test.js index 7252f56c..146cf7dd 100644 --- a/test/unit/commands/skill/add-locales/helper-test.js +++ b/test/unit/commands/skill/add-locales/helper-test.js @@ -65,12 +65,12 @@ describe("Commands add-locales - helper test", () => { const TEST_TEMPLATE_BODY = {body: "template"}; const TEST_TEMPLATE_MAP = { statusCode: 200, - body: JSON.stringify({ + body: { INTERACTION_MODEL_BY_LANGUAGE: { es: "TEST_ES_URL", en: "TEST_EN_URL", }, - }), + }, }; new ResourcesConfig(FIXTURE_RESOURCES_CONFIG_FILE_PATH); new Manifest(FIXTURE_MANIFEST_FILE_PATH); @@ -96,7 +96,7 @@ describe("Commands add-locales - helper test", () => { httpClient.request.onFirstCall().callsArgWith(3, TEST_ERROR); // call helper.addLocales(["en-US"], TEST_PROFILE, TEST_DEBUG, (err, result) => { - expect(err).equal("Failed to retrieve the template list.\nError: error"); + expect(err).equal("Failed to retrieve the interaction model map template list.\nError: \"error\""); expect(result).equal(undefined); done(); }); @@ -104,11 +104,10 @@ describe("Commands add-locales - helper test", () => { it("| fail to get the template map with statusCode not correct", (done) => { // setup - httpClient.request.onFirstCall().callsArgWith(3, undefined, {statusCode: 401}); + httpClient.request.onFirstCall().callsArgWith(3, {statusCode: 401}); // call helper.addLocales(["en-US"], TEST_PROFILE, TEST_DEBUG, (err, result) => { - expect(err).equal(`Failed to retrieve the template list, please see the details from the error response. -${JSON.stringify({statusCode: 401}, null, 2)}`); + expect(err).equal(`Failed to retrieve the interaction model map template list.\nError: ${JSON.stringify({statusCode: 401}, null, 2)}`); expect(result).equal(undefined); done(); }); @@ -160,7 +159,7 @@ ${JSON.stringify({statusCode: 401}, null, 2)}`); httpClient.request.onFirstCall().callsArgWith(3, undefined, TEST_TEMPLATE_MAP); SkillMetadataController.prototype.getInteractionModelLocales.returns({"es-US": TEST_MODEL_PATH}); fs.existsSync.returns(false); - httpClient.request.onSecondCall().callsArgWith(3, null, {statusCode: 401}); + httpClient.request.onSecondCall().callsArgWith(3, {statusCode: 401}, null); // call helper.addLocales(["en-US"], TEST_PROFILE, TEST_DEBUG, (err, result) => { expect(err).equal(`Failed to retrieve the template list, please see the details from the error response. diff --git a/test/unit/commands/skill/skill-commander-test.ts b/test/unit/commands/skill/skill-commander-test.ts index 0c8d74e4..bd466503 100644 --- a/test/unit/commands/skill/skill-commander-test.ts +++ b/test/unit/commands/skill/skill-commander-test.ts @@ -2,7 +2,6 @@ import {commander} from "../../../../lib/commands/skill/skill-commander"; import AddlocalesCommand from "../../../../lib/commands/skill/add-locales"; import sinon from "sinon"; import Messenger from "../../../../lib/view/messenger"; -import httpClient from "../../../../lib/clients/http-client"; /** * Simple test which loads the skill commander while running tests. @@ -22,11 +21,11 @@ describe("Skill Commander Test", () => { dispose: sinon.stub(), }); sinon.stub(process, "exit"); - sinon.stub(httpClient, "request").yields({statusCode: 200}); }); it("loads and runs a command", async () => { sinon.stub(AddlocalesCommand.prototype, "handle").resolves(); + sinon.stub(AddlocalesCommand.prototype, "_remindsIfNewVersion").resolves(); await commander.parseAsync(["something", "something", "add-locales"]); }); diff --git a/test/unit/commands/smapi/appended-commands/export-package/index-test.ts b/test/unit/commands/smapi/appended-commands/export-package/index-test.ts index 8bf2e3cf..f2792b5d 100644 --- a/test/unit/commands/smapi/appended-commands/export-package/index-test.ts +++ b/test/unit/commands/smapi/appended-commands/export-package/index-test.ts @@ -5,7 +5,7 @@ import AuthorizationController from "../../../../../../lib/controllers/authoriza import CONSTANTS from "../../../../../../lib/utils/constants"; import ExportPackageCommand from "../../../../../../lib/commands/smapi/appended-commands/export-package"; import helper from "../../../../../../lib/commands/smapi/appended-commands/export-package/helper"; -import httpClient from "../../../../../../lib/clients/http-client"; +import * as httpClient from "../../../../../../lib/clients/http-client"; import jsonView from "../../../../../../lib/view/json-view"; import Messenger from "../../../../../../lib/view/messenger"; import optionModel from "../../../../../../lib/commands/option-model.json"; @@ -79,13 +79,13 @@ describe("Commands export-package test - command class test", () => { sinon.stub(fs, "existsSync").returns(true); // call await expect(instance.handle(TEST_CMD)).rejectedWith( - `A ${CONSTANTS.FILE_PATH.SKILL_PACKAGE.PACKAGE} fold already exists in the current working directory.`, + `A ${CONSTANTS.FILE_PATH.SKILL_PACKAGE.PACKAGE} folder already exists in the current working directory.`, ); // verify expect(errorStub).calledOnceWith( sinon.match({ - message: `A ${CONSTANTS.FILE_PATH.SKILL_PACKAGE.PACKAGE} ` + "fold already exists in the current working directory.", + message: `A ${CONSTANTS.FILE_PATH.SKILL_PACKAGE.PACKAGE} ` + "folder already exists in the current working directory.", }), ); expect(infoStub).not.called; @@ -119,9 +119,9 @@ describe("Commands export-package test - command class test", () => { it("| export skill package response with status code >= 300, expect throw error", async () => { // setup sinon.stub(fs, "existsSync").returns(false); - sinon.stub(httpClient, "request").callsArgWith(3, null, EXPORT_ERROR); // stub smapi request + sinon.stub(httpClient, "request").callsArgWith(3, EXPORT_ERROR, null); // stub smapi request // call - await expect(instance.handle(TEST_CMD)).rejectedWith(jsonView.toString({error: TEST_ERROR_MESSAGE})); + await expect(instance.handle(TEST_CMD)).rejectedWith(jsonView.toString(EXPORT_ERROR)); // verify expect(infoStub).not.called; diff --git a/test/unit/commands/smapi/appended-commands/get-task/index-test.ts b/test/unit/commands/smapi/appended-commands/get-task/index-test.ts index 245fb370..feb2f9bc 100644 --- a/test/unit/commands/smapi/appended-commands/get-task/index-test.ts +++ b/test/unit/commands/smapi/appended-commands/get-task/index-test.ts @@ -2,7 +2,7 @@ import {expect} from "chai"; import sinon from "sinon"; import AuthorizationController from "../../../../../../lib/controllers/authorization-controller"; import GetTaskCommand from "../../../../../../lib/commands/smapi/appended-commands/get-task"; -import httpClient from "../../../../../../lib/clients/http-client"; +import * as httpClient from "../../../../../../lib/clients/http-client"; import jsonView from "../../../../../../lib/view/json-view"; import Messenger from "../../../../../../lib/view/messenger"; import optionModel from "../../../../../../lib/commands/option-model.json"; @@ -55,10 +55,10 @@ describe("Command get-task test ", () => { }); it("| should display error thrown by smapi server", async () => { - const body = {message: "Bad request."}; - sinon.stub(httpClient, "request").yields(null, {body, statusCode: 400}); + const response = {message: "Bad request.", statusCode: 400, body: {}}; + sinon.stub(httpClient, "request").callsArgWith(3, response); - await expect(instance.handle(cmdOptions)).eventually.rejected.include('"message": "Bad request."'); + await expect(instance.handle(cmdOptions)).eventually.rejected.include(response); }); afterEach(() => { diff --git a/test/unit/commands/smapi/appended-commands/search-task/index-test.ts b/test/unit/commands/smapi/appended-commands/search-task/index-test.ts index 0f34b875..ba1d8bc3 100644 --- a/test/unit/commands/smapi/appended-commands/search-task/index-test.ts +++ b/test/unit/commands/smapi/appended-commands/search-task/index-test.ts @@ -2,7 +2,7 @@ import {expect} from "chai"; import sinon from "sinon"; import AuthorizationController from "../../../../../../lib/controllers/authorization-controller"; import SearchTaskCommand from "../../../../../../lib/commands/smapi/appended-commands/search-task"; -import httpClient from "../../../../../../lib/clients/http-client"; +import * as httpClient from "../../../../../../lib/clients/http-client"; import jsonView from "../../../../../../lib/view/json-view"; import Messenger from "../../../../../../lib/view/messenger"; import optionModel from "../../../../../../lib/commands/option-model.json"; @@ -72,10 +72,10 @@ describe("Command search-task test ", () => { }); it("| should display error thrown by smapi server", async () => { - const body = {message: "Bad request."}; - sinon.stub(httpClient, "request").yields(null, {body, statusCode: 400}); + const response = {message: "Bad request.", statusCode: 400, body: {}}; + sinon.stub(httpClient, "request").callsArgWith(3, response); - await expect(instance.handle(cmdOptions)).eventually.rejected.include('"message": "Bad request."'); + await expect(instance.handle(cmdOptions)).eventually.rejected.include(response); }); afterEach(() => { diff --git a/test/unit/commands/smapi/smapi-command-handler-test.js b/test/unit/commands/smapi/smapi-command-handler-test.js index 1d0dcdee..b20a4068 100644 --- a/test/unit/commands/smapi/smapi-command-handler-test.js +++ b/test/unit/commands/smapi/smapi-command-handler-test.js @@ -22,17 +22,13 @@ describe("Smapi test - smapiCommandHandler function", () => { const arrayValue = ["test", "test1", "test2"]; const arrayValueStr = arrayValue.join(ARRAY_SPLIT_DELIMITER); const fakeResponse = { - body: {someProperty: "x"}, - headers: [ - { - key: "x", - value: "y", - }, - { - key: "z", - value: "b", - }, - ], + body: { + someProperty: "x" + }, + headers: { + "x": "y", + "z": "b", + }, statusCode: 200, }; @@ -62,7 +58,9 @@ describe("Smapi test - smapiCommandHandler function", () => { }, _name: commandName, }; - sinon.stub(AuthorizationController.prototype, "_getAuthClientInstance").returns({config: {}}); + sinon + .stub(AuthorizationController.prototype, "_getAuthClientInstance") + .returns({config: {}, isValidToken: () => true, refreshToken: () => "testtoken"}); sinon.stub(profileHelper, "runtimeProfile").returns("test"); sinon.stub(AppConfig.prototype, "_validateFilePath"); sinon.stub(AppConfig.prototype, "read"); @@ -209,15 +207,21 @@ describe("Smapi test - smapiCommandHandler function", () => { describe("Smapi test - parseSmapiResponse function", () => { let warnStub; + beforeEach(() => { warnStub = sinon.stub(); sinon.stub(Messenger, "getInstance").returns({ warn: warnStub, }); }); + + afterEach(() => { + sinon.restore(); + }); + it("| should parse text/csv response", () => { const content = "foo bar\n foo"; - const response = {headers: [{key: "content-type", value: "text/csv"}], body: content}; + const response = {headers: {"content-type": "text/csv"}, body: content}; const result = parseSmapiResponse(response); @@ -226,15 +230,15 @@ describe("Smapi test - parseSmapiResponse function", () => { it("| should parse application/json response", () => { const content = {foo: "bar"}; - const response = {headers: [{key: "content-type", value: "application/json"}], body: content}; + const response = {headers: {"content-type": "application/json"}, body: content}; const result = parseSmapiResponse(response); - expect(result).eql(jsonView.toString(content)); + expect(result).deep.eql(JSON.stringify(content, null, 2)); }); it("| should return command executed successfully if not response body", () => { - const response = {headers: []}; + const response = {headers: {}}; const result = parseSmapiResponse(response); @@ -246,7 +250,7 @@ describe("Smapi test - parseSmapiResponse function", () => { const resource = "someResource"; const profile = "test"; const url = `/v1/skills/${skillId}/status?resource=${resource}`; - const response = {headers: [{key: "location", value: url}], statusCode: 202}; + const response = {headers: {"location": url}, statusCode: 202}; parseSmapiResponse(response, profile); expect(warnStub.firstCall.lastArg).eql( @@ -262,7 +266,7 @@ describe("Smapi test - parseSmapiResponse function", () => { sinon.stub(Map.prototype, "get").withArgs("vendorId").returns({skip: true}).withArgs("resource").returns("someCustomName"); const url = `/v1/skills/${skillId}/status?resource=${resource}&vendorId=${vendorId}`; - const response = {headers: [{key: "location", value: url}], statusCode: 202}; + const response = {headers: {"location": url}, statusCode: 202}; parseSmapiResponse(response); expect(warnStub.firstCall.lastArg).eql( @@ -273,13 +277,10 @@ describe("Smapi test - parseSmapiResponse function", () => { it("| should not show warning with status hint command when not able to find one", () => { const url = "/some-random-non-smapi-url"; - const response = {headers: [{key: "location", value: url}], statusCode: 202}; + const response = {headers: {"location": url}, statusCode: 202}; parseSmapiResponse(response); expect(warnStub.firstCall.lastArg).eql("This is an asynchronous operation. Check the progress " + `using the following url: ${url}`); }); - afterEach(() => { - sinon.restore(); - }); }); diff --git a/test/unit/commands/util/git-credentials-helper/index-test.ts b/test/unit/commands/util/git-credentials-helper/index-test.ts index e11717d3..d60bcfa3 100644 --- a/test/unit/commands/util/git-credentials-helper/index-test.ts +++ b/test/unit/commands/util/git-credentials-helper/index-test.ts @@ -3,8 +3,7 @@ import path from "path"; import sinon from "sinon"; import AuthorizationController from "../../../../../lib/controllers/authorization-controller"; import GitCredentialsHelperCommand from "../../../../../lib/commands/util/git-credentials-helper"; -import httpClient from "../../../../../lib/clients/http-client"; -import jsonView from "../../../../../lib/view/json-view"; +import * as httpClient from "../../../../../lib/clients/http-client"; import Messenger from "../../../../../lib/view/messenger"; import optionModel from "../../../../../lib/commands/option-model.json"; import profileHelper from "../../../../../lib/utils/profile-helper"; @@ -150,13 +149,14 @@ describe("Commands git-credentials-helper test - command class test", () => { body: { error: TEST_ERROR_MESSAGE, }, + headers: {}, }; sinon.stub(path, "join").returns(FIXTURE_RESOURCES_CONFIG_FILE_PATH); - sinon.stub(httpClient, "request").callsArgWith(3, null, GET_STATUS_ERROR); // stub getGitCredentials request + sinon.stub(httpClient, "request").callsArgWith(3, GET_STATUS_ERROR); // stub getGitCredentials request // call await expect(instance.handle(TEST_CMD, undefined)).rejected; //verify - expect(errorStub).calledOnceWith(jsonView.toString({error: TEST_ERROR_MESSAGE})); + expect(errorStub).calledOnceWith(GET_STATUS_ERROR); }); it("| get git credentials succeed, expect correct output", async () => { diff --git a/test/unit/commands/util/util-commander-test.ts b/test/unit/commands/util/util-commander-test.ts index 88514c11..80e50eca 100644 --- a/test/unit/commands/util/util-commander-test.ts +++ b/test/unit/commands/util/util-commander-test.ts @@ -2,7 +2,7 @@ import {commander} from "../../../../lib/commands/util/util-commander"; import UpdateProjectCommand from "../../../../lib/commands/util/upgrade-project"; import sinon from "sinon"; import Messenger from "../../../../lib/view/messenger"; -import httpClient from "../../../../lib/clients/http-client"; +import * as httpClient from "../../../../lib/clients/http-client"; /** * Simple test which loads the util commander while running tests. diff --git a/test/unit/controller/skill-metadata-controller-test.js b/test/unit/controller/skill-metadata-controller-test.js index 52476e3b..bd7809c9 100644 --- a/test/unit/controller/skill-metadata-controller-test.js +++ b/test/unit/controller/skill-metadata-controller-test.js @@ -274,7 +274,7 @@ describe("Controller test - skill metadata controller test", () => { }); }); - it("| callback error when getSkillEnablement return error", (done) => { + it("| callback error when getSkillEnablement return error", async () => { // setup const responseBody = { Message: "somehow fails", @@ -283,54 +283,52 @@ describe("Controller test - skill metadata controller test", () => { statusCode: 300, body: responseBody, }; - sinon.stub(httpClient, "request").callsArgWith(3, null, response); // stub smapi request - skillMetaController.enableSkill((err, res) => { + sinon.stub(httpClient, "request").callsArgWith(3, response); // stub smapi request + await skillMetaController.enableSkill((err, res) => { // verify expect(err).equal(jsonView.toString(responseBody)); expect(res).equal(undefined); - done(); }); }); - it("| when skill already enabled, can callback skip enablement message", (done) => { + it("| when skill already enabled, can callback skip enablement message", async () => { // setup const response = { statusCode: 200, }; sinon.stub(httpClient, "request").callsArgWith(3, null, response); // stub smapi request sinon.stub(Messenger.getInstance(), "info"); - skillMetaController.enableSkill((err, res) => { + await skillMetaController.enableSkill((err, res) => { // verify expect(err).equal(undefined); expect(res).equal(undefined); - expect(Messenger.getInstance().info.args[0][0]).equal("Skill is already enabled, skipping the enable process.\n"); - done(); + expect(Messenger.getInstance().info.args[0][0]).equal("The skill is already enabled, skipping skill enablement.\n"); }); }); - it("| when skill is not enabled, can callback error when enable skill fail", (done) => { + it("| when skill is not enabled, can callback error when enable skill fail", async () => { // setup const getEnablementResponse = { statusCode: 404, body: {}, }; - sinon.stub(httpClient, "request").withArgs(sinon.match.any, "get-skill-enablement").callsArgWith(3, null, getEnablementResponse); // stub smapi request + const httpClientRequestStub = sinon.stub(httpClient, "request"); + httpClientRequestStub.withArgs(sinon.match.any, "get-skill-enablement").callsArgWith(3, getEnablementResponse); // stub smapi request + httpClientRequestStub.withArgs(sinon.match.any, "enable-skill").callsArgWith(3, "enableSkillError"); // stub smapi request - httpClient.request.withArgs(sinon.match.any, "enable-skill").callsArgWith(3, "enableSkillError"); // stub smapi request - - skillMetaController.enableSkill((err, res) => { + await skillMetaController.enableSkill((err, res) => { // verify expect(err).equal("enableSkillError"); expect(res).equal(undefined); - done(); }); }); - it("| when skill is not enabled, can callback error when statusCode >= 300", (done) => { + it("| when skill is not enabled, can callback error when statusCode >= 300", async () => { // setup const getEnablementResponse = { statusCode: 404, body: {}, + Message: "not found", }; const enableSkillResponseBody = { Message: "somehow fail", @@ -338,20 +336,20 @@ describe("Controller test - skill metadata controller test", () => { const enableSkillResponse = { statusCode: 300, body: enableSkillResponseBody, + Message: enableSkillResponseBody.Message, }; - sinon.stub(httpClient, "request").withArgs(sinon.match.any, "get-skill-enablement").callsArgWith(3, null, getEnablementResponse); // stub smapi request - - httpClient.request.withArgs(sinon.match.any, "enable-skill").callsArgWith(3, null, enableSkillResponse); // stub smapi request + const httpClientRequestStub = sinon.stub(httpClient, "request"); + httpClientRequestStub.withArgs(sinon.match.any, "get-skill-enablement").callsArgWith(3, getEnablementResponse); // stub smapi request + httpClientRequestStub.withArgs(sinon.match.any, "enable-skill").callsArgWith(3, enableSkillResponse); // stub smapi request - skillMetaController.enableSkill((err, res) => { + await skillMetaController.enableSkill((err, res) => { // verify expect(err).equal(jsonView.toString(enableSkillResponseBody)); expect(res).equal(undefined); - done(); }); }); - it("| when skill is not enabled, can callback success enable skill message", (done) => { + it("| when skill is not enabled, can callback success enable skill message", async () => { // setup const getEnablementResponse = { statusCode: 404, @@ -361,16 +359,15 @@ describe("Controller test - skill metadata controller test", () => { statusCode: 200, }; sinon.stub(Messenger.getInstance(), "info"); - sinon.stub(httpClient, "request").withArgs(sinon.match.any, "get-skill-enablement").callsArgWith(3, null, getEnablementResponse); // stub smapi request + sinon.stub(httpClient, "request").withArgs(sinon.match.any, "get-skill-enablement").callsArgWith(3, getEnablementResponse, null); httpClient.request.withArgs(sinon.match.any, "enable-skill").callsArgWith(3, null, enableSkillResponse); // stub smapi request - skillMetaController.enableSkill((err, res) => { + await skillMetaController.enableSkill((err, res) => { // verify expect(err).equal(undefined); expect(res).equal(undefined); - expect(Messenger.getInstance().info.args[0][0]).equal("Skill is enabled successfully.\n"); - done(); + expect(Messenger.getInstance().info.args[0][0]).equal("The skill has been enabled.\n"); }); }); }); From 02c3a9fc03b23fca45f769882cfbac6fad9e1bb2 Mon Sep 17 00:00:00 2001 From: Mario Doiron <5252025+doiron@users.noreply.github.com> Date: Tue, 9 May 2023 20:10:25 -0700 Subject: [PATCH 2/5] chore: fix not calling enable skill when get enablement returned 404 --- lib/clients/http-client.js | 16 +++++++++++++--- lib/clients/lwa-auth-code-client/index.js | 22 +++++++++++----------- lib/clients/smapi-client/index.ts | 14 +++++++------- lib/clients/smapi-client/smapiApiClient.ts | 12 ++++++------ lib/commands/skill/add-locales/helper.js | 6 +++--- lib/utils/zip-utils.js | 8 ++++---- test/unit/clients/http-client-test.js | 8 ++++---- 7 files changed, 48 insertions(+), 38 deletions(-) diff --git a/lib/clients/http-client.js b/lib/clients/http-client.js index 52cf3dd8..01387bb2 100644 --- a/lib/clients/http-client.js +++ b/lib/clients/http-client.js @@ -56,10 +56,14 @@ export function request(options, operation, doDebug, callback) { loggerInstance().debug(debugContentForResponse(operation, null, response)); } if (!response) { - return callback(`The request to ${operation}, failed.\nPlease make sure "${requestOptions.url}" is responding.`); + return callback({ + errorMessage :`The request to ${operation}, failed.\nPlease make sure "${requestOptions.url}" is responding.`, + }); } if (!response.status) { - return callback(`Failed to access the statusCode from the request to ${operation}.`); + return callback({ + errorMessage :`Failed to access the statusCode from the request to ${operation}.`, + }); } return callback(null, { statusCode: response.status, @@ -74,7 +78,13 @@ export function request(options, operation, doDebug, callback) { if (doDebug) { loggerInstance().debug(debugContentForResponse(operation, error, response)); } - return callback(`The request to ${requestOptions.url} failed. Client Error: ${error}`, response); + + return callback({ + errorMessage : `The request to ${requestOptions.url} failed. Client Error: ${error}`, + statusCode: response.status, + ...(response.data ? {body: response.data} : {}), + ...(response.headers ? {headers: response.headers} : {}), + }, response); }); } /** diff --git a/lib/clients/lwa-auth-code-client/index.js b/lib/clients/lwa-auth-code-client/index.js index 788dd583..de8b19af 100644 --- a/lib/clients/lwa-auth-code-client/index.js +++ b/lib/clients/lwa-auth-code-client/index.js @@ -37,11 +37,11 @@ module.exports = class LWAAuthCodeClient { body, json: !!body, }; - httpClient.request(options, "GET_ACCESS_TOKEN", this.config.doDebug, (err, response) => { - if (err) { - return callback(err); + httpClient.request(options, "GET_ACCESS_TOKEN", this.config.doDebug, (requestError, requestResponse) => { + if (requestError) { + return callback(requestError.errorMessage || requestError); } - const tokenBody = R.clone(response.body); + const tokenBody = R.clone(requestResponse.body); if (tokenBody.error) { return callback(new CliError(tokenBody.error)); } @@ -69,20 +69,20 @@ module.exports = class LWAAuthCodeClient { }, json: true, }; - httpClient.request(options, "GET_ACCESS_TOKEN_USING_REFRESH_TOKEN", this.config.doDebug, (err, response) => { - if (err) { - return callback(err); + httpClient.request(options, "GET_ACCESS_TOKEN_USING_REFRESH_TOKEN", this.config.doDebug, (requestError, requestResponse) => { + if (requestError) { + return callback(requestError.message || requestError); } - const responseErr = R.view(R.lensPath(["body", "error"]), response); + const responseErr = R.view(R.lensPath(["body", "error"]), requestResponse); if (stringUtils.isNonBlankString(responseErr)) { return callback(`Refresh LWA tokens failed, please run "ask configure" to manually update your tokens. Error: ${responseErr}.`); } - const expiresIn = R.view(R.lensPath(["body", "expires_in"]), response); + const expiresIn = R.view(R.lensPath(["body", "expires_in"]), requestResponse); if (!expiresIn) { - return callback(`Received invalid response body from LWA without "expires_in":\n${jsonView.toString(response.body)}`); + return callback(`Received invalid response body from LWA without "expires_in":\n${jsonView.toString(requestResponse.body)}`); } - const tokenBody = R.clone(response.body); + const tokenBody = R.clone(requestResponse.body); if (tokenBody.error) { return callback(new CliError(tokenBody.error)); } diff --git a/lib/clients/smapi-client/index.ts b/lib/clients/smapi-client/index.ts index a77343dc..85d1838a 100644 --- a/lib/clients/smapi-client/index.ts +++ b/lib/clients/smapi-client/index.ts @@ -162,17 +162,17 @@ export class SmapiClientLateBound { body: payload, json: !!payload, }; - httpClient.request(requestOptions, apiName, configuration.doDebug, (reqErr: any, reqResponse: SmapiResponse) => { - if (reqErr && reqErr.statusCode ) { - return _normalizeSmapiResponse(reqErr, (normalizeErr, smapiResponse) => { + httpClient.request(requestOptions, apiName, configuration.doDebug, (requestError: any, requestResponse: SmapiResponse) => { + if (requestError && requestError.statusCode ) { + return _normalizeSmapiResponse(requestError, (normalizeErr, smapiResponse) => { return callback(normalizeErr || smapiResponse, smapiResponse || null); }); } - if (reqErr) { - return callback(reqErr); + if (requestError) { + return callback(requestError.errorMessage || requestError); } - return _normalizeSmapiResponse(reqResponse, (normalizeErr, smapiResponse) => { - return callback(normalizeErr, normalizeErr ? null : smapiResponse); + return _normalizeSmapiResponse(requestResponse, (normalizeError, smapiResponse) => { + return callback(normalizeError, normalizeError ? null : smapiResponse); }); }); }); diff --git a/lib/clients/smapi-client/smapiApiClient.ts b/lib/clients/smapi-client/smapiApiClient.ts index 4a9e5792..201c4547 100644 --- a/lib/clients/smapi-client/smapiApiClient.ts +++ b/lib/clients/smapi-client/smapiApiClient.ts @@ -50,16 +50,16 @@ export class SmapiApiClient implements ApiClient { body: data, }; - httpClient.request(requestOptions, "SMAPI_API_CLIENT", this.doDebug, (reqErr: any, reqResponse: SmapiResponse) => { - if (reqErr) { - return reject(new Error(reqErr)); + httpClient.request(requestOptions, "SMAPI_API_CLIENT", this.doDebug, (requestError: any, requestResponse: SmapiResponse) => { + if (requestError) { + return reject(new Error(requestError.errorMessage || requestError)); } - const dataContent = reqResponse?.body || {}; + const dataContent = requestResponse?.body || {}; resolve({ - statusCode: reqResponse?.statusCode!, + statusCode: requestResponse?.statusCode!, body: this.sanitizeDataContent(dataContent), - headers: reqResponse?.headers!, + headers: requestResponse?.headers!, }); }); }); diff --git a/lib/commands/skill/add-locales/helper.js b/lib/commands/skill/add-locales/helper.js index 0d3b856a..f263bf41 100644 --- a/lib/commands/skill/add-locales/helper.js +++ b/lib/commands/skill/add-locales/helper.js @@ -110,7 +110,7 @@ function _getNewLocaleModelUri(selectedLocales, profile, doDebug, callback) { doDebug, (error, templateMapResponse) => { if (error) { - return callback(`Failed to retrieve the interaction model map template list.\nError: ${JSON.stringify(error, null, 2)}`); + return callback(`Failed to retrieve the interaction model map template list.\nError: ${JSON.stringify(error.errorMessage || error, null, 2)}`); } const templateIndexMap = templateMapResponse.body; // assign for each locale @@ -158,10 +158,10 @@ function _retrieveTemplatesByLanguage(templateSet, doDebug, callback) { (error, response) => { if (error) { if (error.statusCode > 300) { - return loopCallback(`Failed to retrieve the template list, please see the details from the error response.\n${JSON.stringify(error, null, 2)}`); + return loopCallback(`Failed to retrieve the template list, please see the details from the error response.\n${JSON.stringify(error.errorMessage || error, null, 2)}`); } - return loopCallback(`Failed to retrieve the template list.\n${error}`); + return loopCallback(`Failed to retrieve the template list.\n${error.errorMessage || error}`); } result.set(templateUrl, response.body); diff --git a/lib/utils/zip-utils.js b/lib/utils/zip-utils.js index 0d039087..6a33999c 100644 --- a/lib/utils/zip-utils.js +++ b/lib/utils/zip-utils.js @@ -74,11 +74,11 @@ function unzipRemoteZipFile(url, targetPath, doDebug, callback) { }, "get-zip-file", doDebug, - (err, response) => { - if (err) { - return callback(err); + (requestError, requestResponse) => { + if (requestError) { + return callback(requestError.errorMessage || requestError); } - const zip = new AdmZip(response.body); + const zip = new AdmZip(requestResponse.body); try { zip.extractAllTo(targetPath, false); } catch (unzipErr) { diff --git a/test/unit/clients/http-client-test.js b/test/unit/clients/http-client-test.js index 24f0d830..49382d2c 100644 --- a/test/unit/clients/http-client-test.js +++ b/test/unit/clients/http-client-test.js @@ -189,7 +189,7 @@ describe("Clients test - cli http request client", () => { // call httpClient.request(VALID_OPTIONS, VALID_OPERATION, false, (err, response) => { // verify - expect(err).equal(`The request to ${VALID_OPTIONS.url} failed. Client Error: error`); + expect(err.errorMessage).equal(`The request to ${VALID_OPTIONS.url} failed. Client Error: error`); expect(response).deep.equal({}); done(); }); @@ -201,7 +201,7 @@ describe("Clients test - cli http request client", () => { // call httpClient.request(VALID_OPTIONS, VALID_OPERATION, false, (err, response) => { // verify - expect(err).equal(`The request to ${VALID_OPERATION}, failed.\nPlease make sure "${VALID_OPTIONS.url}" is responding.`); + expect(err.errorMessage).equal(`The request to ${VALID_OPERATION}, failed.\nPlease make sure "${VALID_OPTIONS.url}" is responding.`); expect(response).equal(undefined); done(); }); @@ -213,7 +213,7 @@ describe("Clients test - cli http request client", () => { // call httpClient.request(VALID_OPTIONS, VALID_OPERATION, false, (err, response) => { // verify - expect(err).equal(`Failed to access the statusCode from the request to ${VALID_OPERATION}.`); + expect(err.errorMessage).equal(`Failed to access the statusCode from the request to ${VALID_OPERATION}.`); expect(response).equal(undefined); done(); }); @@ -286,7 +286,7 @@ describe("Clients test - cli http request client", () => { expect(stubRequest.args[0][0].method).equal(HTTP_REQUEST.VERB.PUT); expect(stubRequest.args[0][0].data).equal(TEST_PAYLOAD); expect(res).deep.equal({}); - expect(err).equal(`The request to ${TEST_UPLOAD_URL} failed. Client Error: uploadErr`); + expect(err.errorMessage).equal(`The request to ${TEST_UPLOAD_URL} failed. Client Error: uploadErr`); done(); }); }); From 345b68759096d74feb2d20c610e0656e6f5a6b2f Mon Sep 17 00:00:00 2001 From: Mario Doiron <5252025+doiron@users.noreply.github.com> Date: Wed, 10 May 2023 16:01:54 -0700 Subject: [PATCH 3/5] fix: zip utilities not extracting hosted skill zip file --- lib/clients/http-client.js | 1 + lib/utils/zip-utils.js | 1 + 2 files changed, 2 insertions(+) diff --git a/lib/clients/http-client.js b/lib/clients/http-client.js index 01387bb2..fd5adfe8 100644 --- a/lib/clients/http-client.js +++ b/lib/clients/http-client.js @@ -43,6 +43,7 @@ export function request(options, operation, doDebug, callback) { url: options.url, headers: options.headers || {}, data: options.body, + ...(options.responseType ? {responseType: options.responseType} : {}), ...proxyConfig, }; diff --git a/lib/utils/zip-utils.js b/lib/utils/zip-utils.js index 6a33999c..7b90f60d 100644 --- a/lib/utils/zip-utils.js +++ b/lib/utils/zip-utils.js @@ -71,6 +71,7 @@ function unzipRemoteZipFile(url, targetPath, doDebug, callback) { url, method: CONSTANTS.HTTP_REQUEST.VERB.GET, encoding: null, + responseType : "arraybuffer", }, "get-zip-file", doDebug, From 5d2f46d7f94a910525fc1ab928e68bc35b4a3035 Mon Sep 17 00:00:00 2001 From: Mario Doiron <5252025+doiron@users.noreply.github.com> Date: Mon, 15 May 2023 11:53:11 -0700 Subject: [PATCH 4/5] chore: make debug log output explicit when request parameters are null --- lib/utils/logger-utility.js | 48 ++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/lib/utils/logger-utility.js b/lib/utils/logger-utility.js index adbad97d..0746acd1 100644 --- a/lib/utils/logger-utility.js +++ b/lib/utils/logger-utility.js @@ -27,34 +27,32 @@ module.exports = (function () { for (let item of logBuffer) { // display separators for each item before-hand except the first time if (item !== logBuffer[0]) { - console.warn("\n----------------------------------------"); + console.warn(); + console.warn("----------------------------------------"); } item = JSON.parse(item); - - console.warn("[" + item.time + "] - " + LEVEL_MAPPING[item.level] + " - " + item.activity.toUpperCase()); - if (item["request-id"]) { - console.warn("request-id: " + item["request-id"]); - } - if (item.request) { - console.warn(item.request.method + " " + item.request.url); - } - if (item.response) { - console.warn("status code: " + item.response.statusCode + " " + item.response.statusMessage); - } + const requestId = (item["request-id"])? item["request-id"] : ""; + const requestMethodUrl = (item.request)? item.request.method + " " + item.request.url : ""; + const statusCode = (item.response)? item.response.statusCode + " " + item.response.statusMessage : ""; + const requestHeaders = (item.request)? JSON.stringify(item.request.headers) : "{}"; + const requestbody = (item.request && item.request.body)? item.request.body : "{}"; + const responseHeaders = (item.response)? JSON.stringify(item.response.headers): "{}"; + const responseBody = (item.body)? JSON.stringify(item.body): "{}"; + console.warn("[%s] - %s - %s", item.time, LEVEL_MAPPING[item.level], item.activity.toUpperCase()); + console.warn("%s", requestMethodUrl); + console.warn("request-id: %s", requestId); + console.warn("status code: %s", statusCode); + console.warn(); + console.warn("Request headers: %s", requestHeaders); + console.warn(); + console.warn("Request body: %s", requestbody); + console.warn(); + console.warn("Response headers: %s", responseHeaders); + console.warn(); + console.warn("Response body: %s", responseBody); if (item.error) { - console.warn("\nerror: " + JSON.stringify(item.error)); - } - if (item.request) { - console.warn("\nRequest headers: " + JSON.stringify(item.request.headers)); - if (item.request.body) { - console.warn("\nRequest body: " + item.request.body); - } - } - if (item.response) { - console.warn("\nResponse headers: " + JSON.stringify(item.response.headers)); - } - if (item.body) { - console.warn("\nResponse body: " + JSON.stringify(item.body)); + console.warn(); + console.warn("error: %s", JSON.stringify(item.error)); } } console.warn(); From 194c61c740c3de39f5e009d9d477a3d13f7314cb Mon Sep 17 00:00:00 2001 From: Mario Doiron <5252025+doiron@users.noreply.github.com> Date: Mon, 15 May 2023 15:04:16 -0700 Subject: [PATCH 5/5] chore: correcting function syntax to match the code base, as per PR feedback --- lib/clients/smapi-client/smapiApiClient.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/clients/smapi-client/smapiApiClient.ts b/lib/clients/smapi-client/smapiApiClient.ts index 201c4547..7591fc27 100644 --- a/lib/clients/smapi-client/smapiApiClient.ts +++ b/lib/clients/smapi-client/smapiApiClient.ts @@ -67,7 +67,7 @@ export class SmapiApiClient implements ApiClient { private convertUrlEncodedToJson(urlEncoded: string | undefined): {[key: string]: string} { var result: {[key: string]: string} = {}; - urlEncoded?.split('&').forEach(function(entry) { + urlEncoded?.split('&').forEach((entry) => { const keyValueSplit = entry.split('='); if (keyValueSplit && keyValueSplit.length > 1) { result[keyValueSplit[0]] = decodeURIComponent(keyValueSplit[1] || '');