main.tea (1,346 lines of code) (raw):

/** * This is for OpenApi SDK */ import './utils' OpenApiUtil; import Credential; import SPI; @go("type Config = models.Config type GlobalParameters = models.GlobalParameters type Params = models.Params type OpenApiRequest = models.OpenApiRequest ") @pythonModel({ header = "from ..utils_models import Params, Config, GlobalParameters, OpenApiRequest\n", exports = ["Params", "Config", "GlobalParameters", "OpenApiRequest"] }) type @endpoint = string type @regionId = string type @protocol = string type @method = string type @userAgent = string type @endpointRule = string type @endpointMap = map[string]string type @suffix = string type @readTimeout = integer type @connectTimeout = integer type @httpProxy = string type @httpsProxy = string type @socks5Proxy = string type @socks5NetWork = string type @noProxy = string type @network = string type @productId = string type @maxIdleConns = integer type @endpointType = string type @openPlatformEndpoint = string type @credential = Credential type @signatureVersion = string type @signatureAlgorithm = string type @headers = map[string]string type @spi = SPI type @globalParameters = OpenApiUtil.GlobalParameters type @key = string type @cert = string type @ca = string type @disableHttp2 = boolean type @retryOptions = $RetryOptions type @tlsMinVersion = string model SSEResponse { headers: map[string]string, statusCode: number(description='HTTP Status Code'), event: $SSEEvent } exception AlibabaCloud extends $ResponseError { statusCode?: number(description='HTTP Status Code'), code?: string(description="Error Code"), message?: string(description="Error Message"), description?: string(description="Error Description"), requestId?: string(description="Request ID"), } exception Client extends AlibabaCloud { accessDeniedDetail?: map[string]any(description="Access Denied Detail"), } exception Server extends AlibabaCloud { } exception Throttling extends AlibabaCloud { retryAfter?: long(description="Retry After(ms)"), } /** * Init client with Config * @param config config contains the necessary information to create a client */ init(config: OpenApiUtil.Config) { if ($isNull(config)) { throw new Client { code = 'ParameterMissing', message = '\'config\' can not be unset' }; } if((!$isNull(config.accessKeyId) && config.accessKeyId != "") && (!$isNull(config.accessKeySecret) && config.accessKeySecret != "")){ if (!$isNull(config.securityToken) && config.securityToken != "") { config.type = 'sts'; } else { config.type = 'access_key'; } var credentialConfig = new Credential.Config{ accessKeyId = config.accessKeyId, type = config.type, accessKeySecret = config.accessKeySecret }; credentialConfig.securityToken = config.securityToken; @credential = new Credential(credentialConfig); } else if (!$isNull(config.bearerToken) && config.bearerToken != "") { var cc = new Credential.Config{ type = 'bearer', bearerToken = config.bearerToken }; @credential = new Credential(cc); } else if(!$isNull(config.credential)) { @credential = config.credential; } @endpoint = config.endpoint; @endpointType = config.endpointType; @network = config.network; @suffix = config.suffix; @protocol = config.protocol; @method = config.method; @regionId = config.regionId; @userAgent = config.userAgent; @readTimeout = config.readTimeout; @connectTimeout = config.connectTimeout; @httpProxy = config.httpProxy; @httpsProxy = config.httpsProxy; @noProxy = config.noProxy; @socks5Proxy = config.socks5Proxy; @socks5NetWork = config.socks5NetWork; @maxIdleConns = config.maxIdleConns; @signatureVersion = config.signatureVersion; @signatureAlgorithm = config.signatureAlgorithm; @globalParameters = config.globalParameters; @key = config.key; @cert = config.cert; @ca = config.ca; @disableHttp2 = config.disableHttp2; @retryOptions = config.retryOptions; @tlsMinVersion = config.tlsMinVersion; } /** * Encapsulate the request and invoke the network * @param action api name * @param version product version * @param protocol http or https * @param method e.g. GET * @param authType authorization type e.g. AK * @param bodyType response body type e.g. String * @param request object of OpenApiRequest * @param runtime which controls some details of call api, such as retry times * @return the response */ api doRPCRequest(action: string, version: string, protocol: string, method: string, authType: string, bodyType: string, request: OpenApiUtil.OpenApiRequest, runtime: $RuntimeOptions): object { __request.protocol = $string($default(@protocol, protocol)); __request.method = method; __request.pathname = '/'; var globalQueries : map[string]string = {}; var globalHeaders : map[string]string = {}; if (!$isNull(@globalParameters)) { var globalParams = @globalParameters; if (!$isNull(globalParams.queries)) { globalQueries = globalParams.queries; } if (!$isNull(globalParams.headers)) { globalHeaders = globalParams.headers; } } var extendsHeaders : map[string]string = {}; var extendsQueries : map[string]string = {}; if (!$isNull(runtime.extendsParameters)) { var extendsParameters = runtime.extendsParameters; if (!$isNull(extendsParameters.headers)) { extendsHeaders = extendsParameters.headers; } if (!$isNull(extendsParameters.queries)) { extendsQueries = extendsParameters.queries; } } __request.query = { Action = action, Format = 'json', Version = version, Timestamp = OpenApiUtil.getTimestamp(), SignatureNonce = OpenApiUtil.getNonce(), ...globalQueries, ...extendsQueries, ...request.query }; var headers = getRpcHeaders(); if($isNull(headers)){ // endpoint is setted in product client __request.headers = { host = @endpoint, x-acs-version = version, x-acs-action = action, user-agent = OpenApiUtil.getUserAgent(@userAgent), ...globalHeaders, ...extendsHeaders, ...request.headers }; } else { __request.headers = { host = @endpoint, x-acs-version = version, x-acs-action = action, user-agent = OpenApiUtil.getUserAgent(@userAgent), ...globalHeaders, ...extendsHeaders, ...request.headers, ...headers }; } if (!$isNull(request.body)) { var m = $object(request.body); var tmp = $object(OpenApiUtil.query(m)); __request.body = $Form.toFormString(tmp); __request.headers.content-type = 'application/x-www-form-urlencoded'; } if (authType != 'Anonymous') { if ($isNull(@credential)) { throw new Client{ code = `InvalidCredentials`, message = `Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly. See https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems for more details.` } } var credentialModel = @credential.getCredential(); if (!$isNull(credentialModel.providerName)) { __request.headers.x-acs-credentials-provider = credentialModel.providerName; } var credentialType = credentialModel.type; if (credentialType == 'bearer') { var bearerToken = credentialModel.bearerToken; __request.query.BearerToken = bearerToken; __request.query.SignatureType = 'BEARERTOKEN'; } else { var accessKeyId = credentialModel.accessKeyId; var accessKeySecret = credentialModel.accessKeySecret; var securityToken = credentialModel.securityToken; if (!$isNull(securityToken) && securityToken != "") { __request.query.SecurityToken = securityToken; } __request.query.SignatureMethod = 'HMAC-SHA1'; __request.query.SignatureVersion = '1.0'; __request.query.AccessKeyId = accessKeyId; var t : map[string]any = null; if (!$isNull(request.body)) { t = $object(request.body); } var signedParam = { ...__request.query, ...OpenApiUtil.query(t) }; __request.query.Signature = OpenApiUtil.getRPCSignature(signedParam, __request.method, accessKeySecret); } } } returns { if ((__response.statusCode >= 400) && (__response.statusCode < 600)) { var _res = $Stream.readAsJSON(__response.body); var err = $object(_res); var requestId = $default(err.RequestId, err.requestId); var code = $default(err.Code, err.code); if ((`${code}` == 'Throttling') || (`${code}` == 'Throttling.User') || (`${code}` == 'Throttling.Api')) { throw new Throttling{ statusCode = __response.statusCode, code = `${code}`, message = `code: ${__response.statusCode}, ${$default(err.Message, err.message)} request id: ${requestId}`, description = `${$default(err.Description, err.description)}`, retryAfter = OpenApiUtil.getThrottlingTimeLeft(__response.headers), data = err, requestId = `${requestId}`, }; } else if ((__response.statusCode >= 400) && (__response.statusCode < 500)) { throw new Client{ statusCode = __response.statusCode, code = `${code}`, message = `code: ${__response.statusCode}, ${$default(err.Message, err.message)} request id: ${requestId}`, description = `${$default(err.Description, err.description)}`, data = err, accessDeniedDetail = getAccessDeniedDetail(err), requestId = `${requestId}`, }; } else { throw new Server{ statusCode = __response.statusCode, code = `${code}`, message = `code: ${__response.statusCode}, ${$default(err.Message, err.message)} request id: ${requestId}`, description = `${$default(err.Description, err.description)}`, data = err, requestId = `${requestId}`, }; } } if (bodyType == 'binary') { var resp = { body = __response.body, headers = __response.headers, statusCode = __response.statusCode }; return resp; } else if (bodyType == 'byte') { var byt = $Stream.readAsBytes(__response.body); return { body = byt, headers = __response.headers, statusCode = __response.statusCode }; } else if (bodyType == 'string') { var _str = $Stream.readAsString(__response.body); return { body = _str, headers = __response.headers, statusCode = __response.statusCode }; } else if (bodyType == 'json'){ var obj = $Stream.readAsJSON(__response.body); var res = $object(obj); return { body = res, headers = __response.headers, statusCode = __response.statusCode }; } else if (bodyType == 'array'){ var arr = $Stream.readAsJSON(__response.body); return { body = arr, headers = __response.headers, statusCode = __response.statusCode }; } else { return { headers = __response.headers, statusCode = __response.statusCode }; } } runtime { key = $string($default(runtime.key, @key)), cert = $string($default(runtime.cert, @cert)), ca = $string($default(runtime.ca, @ca)), readTimeout = $number($default(runtime.readTimeout, @readTimeout)), connectTimeout = $number($default(runtime.connectTimeout, @connectTimeout)), httpProxy = $string($default(runtime.httpProxy, @httpProxy)), httpsProxy = $string($default(runtime.httpsProxy, @httpsProxy)), noProxy = $string($default(runtime.noProxy, @noProxy)), socks5Proxy = $string($default(runtime.socks5Proxy, @socks5Proxy)), socks5NetWork = $string($default(runtime.socks5NetWork, @socks5NetWork)), maxIdleConns = $number($default(runtime.maxIdleConns, @maxIdleConns)), retryOptions = @retryOptions, ignoreSSL = runtime.ignoreSSL, tlsMinVersion = @tlsMinVersion } /** * Encapsulate the request and invoke the network * @param action api name * @param version product version * @param protocol http or https * @param method e.g. GET * @param authType authorization type e.g. AK * @param pathname pathname of every api * @param bodyType response body type e.g. String * @param request object of OpenApiRequest * @param runtime which controls some details of call api, such as retry times * @return the response */ api doROARequest(action: string, version: string, protocol: string, method: string, authType: string, pathname: string, bodyType: string, request: OpenApiUtil.OpenApiRequest, runtime: $RuntimeOptions): object { __request.protocol = $string($default(@protocol, protocol)); __request.method = method; __request.pathname = pathname; var globalQueries : map[string]string = {}; var globalHeaders : map[string]string = {}; if (!$isNull(@globalParameters)) { var globalParams = @globalParameters; if (!$isNull(globalParams.queries)) { globalQueries = globalParams.queries; } if (!$isNull(globalParams.headers)) { globalHeaders = globalParams.headers; } } var extendsHeaders : map[string]string = {}; var extendsQueries : map[string]string = {}; if (!$isNull(runtime.extendsParameters)) { var extendsParameters = runtime.extendsParameters; if (!$isNull(extendsParameters.headers)) { extendsHeaders = extendsParameters.headers; } if (!$isNull(extendsParameters.queries)) { extendsQueries = extendsParameters.queries; } } __request.headers = { date = OpenApiUtil.getDateUTCString(), host = @endpoint, accept = 'application/json', x-acs-signature-nonce = OpenApiUtil.getNonce(), x-acs-signature-method = 'HMAC-SHA1', x-acs-signature-version = '1.0', x-acs-version = version, x-acs-action = action, user-agent = OpenApiUtil.getUserAgent(@userAgent), ...globalHeaders, ...extendsHeaders, ...request.headers }; if (!$isNull(request.body)) { __request.body = $JSON.stringify(request.body); __request.headers.content-type = 'application/json; charset=utf-8'; } __request.query = { ...globalQueries, ...extendsQueries, }; if (!$isNull(request.query)) { __request.query = { ...__request.query, ...request.query }; } if (authType != 'Anonymous') { if ($isNull(@credential)) { throw new Client{ code = `InvalidCredentials`, message = `Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly. See https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems for more details.` } } var credentialModel = @credential.getCredential(); if (!$isNull(credentialModel.providerName)) { __request.headers.x-acs-credentials-provider = credentialModel.providerName; } var credentialType = credentialModel.type; if (credentialType == 'bearer') { var bearerToken = credentialModel.bearerToken; __request.headers.x-acs-bearer-token = bearerToken; __request.headers.x-acs-signature-type = 'BEARERTOKEN'; } else { var accessKeyId = credentialModel.accessKeyId; var accessKeySecret = credentialModel.accessKeySecret; var securityToken = credentialModel.securityToken; if (!$isNull(securityToken) && securityToken != "") { __request.headers.x-acs-accesskey-id = accessKeyId; __request.headers.x-acs-security-token = securityToken; } var stringToSign = OpenApiUtil.getStringToSign(__request); __request.headers.authorization = `acs ${accessKeyId}:${OpenApiUtil.getROASignature(stringToSign, accessKeySecret)}`; } } } returns { if (__response.statusCode == 204) { return { headers = __response.headers }; } if ((__response.statusCode >= 400) && (__response.statusCode < 600)) { var _res = $Stream.readAsJSON(__response.body); var err = $object(_res); var requestId = $string($default(err.RequestId, err.requestId)); requestId = $string($default(requestId, err.requestid)); var code = $string($default(err.Code, err.code)); if ((`${code}` == 'Throttling') || (`${code}` == 'Throttling.User') || (`${code}` == 'Throttling.Api')) { throw new Throttling{ statusCode = __response.statusCode, code = `${code}`, message = `code: ${__response.statusCode}, ${$default(err.Message, err.message)} request id: ${requestId}`, description = `${$default(err.Description, err.description)}`, retryAfter = OpenApiUtil.getThrottlingTimeLeft(__response.headers), data = err, requestId = `${requestId}`, }; } else if ((__response.statusCode >= 400) && (__response.statusCode < 500)) { throw new Client{ statusCode = __response.statusCode, code = `${code}`, message = `code: ${__response.statusCode}, ${$default(err.Message, err.message)} request id: ${requestId}`, description = `${$default(err.Description, err.description)}`, data = err, accessDeniedDetail = getAccessDeniedDetail(err), requestId = `${requestId}`, }; } else { throw new Server{ statusCode = __response.statusCode, code = `${code}`, message = `code: ${__response.statusCode}, ${$default(err.Message, err.message)} request id: ${requestId}`, description = `${$default(err.Description, err.description)}`, data = err, requestId = `${requestId}`, }; } } if (bodyType == 'binary') { var resp = { body = __response.body, headers = __response.headers, statusCode = __response.statusCode }; return resp; } else if (bodyType == 'byte') { var byt = $Stream.readAsBytes(__response.body); return { body = byt, headers = __response.headers, statusCode = __response.statusCode }; } else if (bodyType == 'string') { var _str = $Stream.readAsString(__response.body); return { body = _str, headers = __response.headers, statusCode = __response.statusCode }; } else if (bodyType == 'json'){ var obj = $Stream.readAsJSON(__response.body); var res = $object(obj); return { body = res, headers = __response.headers, statusCode = __response.statusCode }; } else if (bodyType == 'array'){ var arr = $Stream.readAsJSON(__response.body); return { body = arr, headers = __response.headers, statusCode = __response.statusCode }; } else { return { headers = __response.headers, statusCode = __response.statusCode }; } } runtime { key = $string($default(runtime.key, @key)), cert = $string($default(runtime.cert, @cert)), ca = $string($default(runtime.ca, @ca)), readTimeout = $number($default(runtime.readTimeout, @readTimeout)), connectTimeout = $number($default(runtime.connectTimeout, @connectTimeout)), httpProxy = $string($default(runtime.httpProxy, @httpProxy)), httpsProxy = $string($default(runtime.httpsProxy, @httpsProxy)), noProxy = $string($default(runtime.noProxy, @noProxy)), socks5Proxy = $string($default(runtime.socks5Proxy, @socks5Proxy)), socks5NetWork = $string($default(runtime.socks5NetWork, @socks5NetWork)), maxIdleConns = $number($default(runtime.maxIdleConns, @maxIdleConns)), retryOptions = @retryOptions, ignoreSSL = runtime.ignoreSSL, tlsMinVersion = @tlsMinVersion } /** * Encapsulate the request and invoke the network with form body * @param action api name * @param version product version * @param protocol http or https * @param method e.g. GET * @param authType authorization type e.g. AK * @param pathname pathname of every api * @param bodyType response body type e.g. String * @param request object of OpenApiRequest * @param runtime which controls some details of call api, such as retry times * @return the response */ api doROARequestWithForm(action: string, version: string, protocol: string, method: string, authType: string, pathname: string, bodyType: string, request: OpenApiUtil.OpenApiRequest, runtime: $RuntimeOptions): object { __request.protocol = $string($default(@protocol, protocol)); __request.method = method; __request.pathname = pathname; var globalQueries : map[string]string = {}; var globalHeaders : map[string]string = {}; if (!$isNull(@globalParameters)) { var globalParams = @globalParameters; if (!$isNull(globalParams.queries)) { globalQueries = globalParams.queries; } if (!$isNull(globalParams.headers)) { globalHeaders = globalParams.headers; } } var extendsHeaders : map[string]string = {}; var extendsQueries : map[string]string = {}; if (!$isNull(runtime.extendsParameters)) { var extendsParameters = runtime.extendsParameters; if (!$isNull(extendsParameters.headers)) { extendsHeaders = extendsParameters.headers; } if (!$isNull(extendsParameters.queries)) { extendsQueries = extendsParameters.queries; } } __request.headers = { date = OpenApiUtil.getDateUTCString(), host = @endpoint, accept = 'application/json', x-acs-signature-nonce = OpenApiUtil.getNonce(), x-acs-signature-method = 'HMAC-SHA1', x-acs-signature-version = '1.0', x-acs-version = version, x-acs-action = action, user-agent = OpenApiUtil.getUserAgent(@userAgent), ...globalHeaders, ...extendsHeaders, ...request.headers }; if (!$isNull(request.body)) { var m = $object(request.body); __request.body = OpenApiUtil.toForm(m); __request.headers.content-type = 'application/x-www-form-urlencoded'; } __request.query = { ...globalQueries, ...extendsQueries, }; if (!$isNull(request.query)) { __request.query = { ...__request.query, ...request.query }; } if (authType != 'Anonymous') { if ($isNull(@credential)) { throw new Client{ code = `InvalidCredentials`, message = `Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly. See https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems for more details.` } } var credentialModel = @credential.getCredential(); if (!$isNull(credentialModel.providerName)) { __request.headers.x-acs-credentials-provider = credentialModel.providerName; } var credentialType = credentialModel.type; if (credentialType == 'bearer') { var bearerToken = credentialModel.bearerToken; __request.headers.x-acs-bearer-token = bearerToken; __request.headers.x-acs-signature-type = 'BEARERTOKEN'; } else { var accessKeyId = credentialModel.accessKeyId; var accessKeySecret = credentialModel.accessKeySecret; var securityToken = credentialModel.securityToken; if (!$isNull(securityToken) && securityToken != "") { __request.headers.x-acs-accesskey-id = accessKeyId; __request.headers.x-acs-security-token = securityToken; } var stringToSign = OpenApiUtil.getStringToSign(__request); __request.headers.authorization = `acs ${accessKeyId}:${OpenApiUtil.getROASignature(stringToSign, accessKeySecret)}`; } } } returns { if (__response.statusCode == 204) { return { headers = __response.headers }; } if ((__response.statusCode >= 400) && (__response.statusCode < 600)) { var _res = $Stream.readAsJSON(__response.body); var err = $object(_res); var requestId = $string($default(err.RequestId, err.requestId)); var code = $string($default(err.Code, err.code)); if ((`${code}` == 'Throttling') || (`${code}` == 'Throttling.User') || (`${code}` == 'Throttling.Api')) { throw new Throttling{ statusCode = __response.statusCode, code = `${code}`, message = `code: ${__response.statusCode}, ${$default(err.Message, err.message)} request id: ${requestId}`, description = `${$default(err.Description, err.description)}`, retryAfter = OpenApiUtil.getThrottlingTimeLeft(__response.headers), data = err, requestId = `${requestId}`, }; } else if ((__response.statusCode >= 400) && (__response.statusCode < 500)) { throw new Client{ statusCode = __response.statusCode, code = `${code}`, message = `code: ${__response.statusCode}, ${$default(err.Message, err.message)} request id: ${requestId}`, description = `${$default(err.Description, err.description)}`, data = err, accessDeniedDetail = getAccessDeniedDetail(err), requestId = `${requestId}`, }; } else { throw new Server{ statusCode = __response.statusCode, code = `${code}`, message = `code: ${__response.statusCode}, ${$default(err.Message, err.message)} request id: ${requestId}`, description = `${$default(err.Description, err.description)}`, data = err, requestId = `${requestId}`, }; } } if (bodyType == 'binary') { var resp = { body = __response.body, headers = __response.headers, statusCode = __response.statusCode }; return resp; } else if (bodyType == 'byte') { var byt = $Stream.readAsBytes(__response.body); return { body = byt, headers = __response.headers, statusCode = __response.statusCode }; } else if (bodyType == 'string') { var _str = $Stream.readAsString(__response.body); return { body = _str, headers = __response.headers, statusCode = __response.statusCode }; } else if (bodyType == 'json'){ var obj = $Stream.readAsJSON(__response.body); var res = $object(obj); return { body = res, headers = __response.headers, statusCode = __response.statusCode }; } else if (bodyType == 'array'){ var arr = $Stream.readAsJSON(__response.body); return { body = arr, headers = __response.headers, statusCode = __response.statusCode }; } else { return { headers = __response.headers, statusCode = __response.statusCode }; } } runtime { key = $string($default(runtime.key, @key)), cert = $string($default(runtime.cert, @cert)), ca = $string($default(runtime.ca, @ca)), readTimeout = $number($default(runtime.readTimeout, @readTimeout)), connectTimeout = $number($default(runtime.connectTimeout, @connectTimeout)), httpProxy = $string($default(runtime.httpProxy, @httpProxy)), httpsProxy = $string($default(runtime.httpsProxy, @httpsProxy)), noProxy = $string($default(runtime.noProxy, @noProxy)), socks5Proxy = $string($default(runtime.socks5Proxy, @socks5Proxy)), socks5NetWork = $string($default(runtime.socks5NetWork, @socks5NetWork)), maxIdleConns = $number($default(runtime.maxIdleConns, @maxIdleConns)), retryOptions = @retryOptions, ignoreSSL = runtime.ignoreSSL, tlsMinVersion = @tlsMinVersion } async function callApi(params: OpenApiUtil.Params, request: OpenApiUtil.OpenApiRequest, runtime: $RuntimeOptions): object { if ($isNull(params)) { throw new Client { code = 'ParameterMissing', message = '\'params\' can not be unset' }; } if ($isNull(@signatureVersion) || @signatureVersion != 'v4') { if ($isNull(@signatureAlgorithm) || @signatureAlgorithm != 'v2') { return doRequest(params, request, runtime); } else if ((params.style == 'ROA') && (params.reqBodyType == 'json')) { return doROARequest(params.action, params.version, params.protocol, params.method, params.authType, params.pathname, params.bodyType, request, runtime); } else if (params.style == 'ROA') { return doROARequestWithForm(params.action, params.version, params.protocol, params.method, params.authType, params.pathname, params.bodyType, request, runtime); } else { return doRPCRequest(params.action, params.version, params.protocol, params.method, params.authType, params.bodyType, request, runtime); } } else { return execute(params, request, runtime); } } /** * Encapsulate the request and invoke the network * @param action api name * @param version product version * @param protocol http or https * @param method e.g. GET * @param authType authorization type e.g. AK * @param bodyType response body type e.g. String * @param request object of OpenApiRequest * @param runtime which controls some details of call api, such as retry times * @return the response */ api doRequest(params: OpenApiUtil.Params, request: OpenApiUtil.OpenApiRequest, runtime: $RuntimeOptions): object { __request.protocol = $string($default(@protocol, params.protocol)); __request.method = params.method; __request.pathname = params.pathname; var globalQueries : map[string]string = {}; var globalHeaders : map[string]string = {}; if (!$isNull(@globalParameters)) { var globalParams = @globalParameters; if (!$isNull(globalParams.queries)) { globalQueries = globalParams.queries; } if (!$isNull(globalParams.headers)) { globalHeaders = globalParams.headers; } } var extendsHeaders : map[string]string = {}; var extendsQueries : map[string]string = {}; if (!$isNull(runtime.extendsParameters)) { var extendsParameters = runtime.extendsParameters; if (!$isNull(extendsParameters.headers)) { extendsHeaders = extendsParameters.headers; } if (!$isNull(extendsParameters.queries)) { extendsQueries = extendsParameters.queries; } } __request.query = { ...globalQueries, ...extendsQueries, ...request.query, }; // endpoint is setted in product client __request.headers = { host = @endpoint, x-acs-version = params.version, x-acs-action = params.action, user-agent = OpenApiUtil.getUserAgent(@userAgent), x-acs-date= OpenApiUtil.getTimestamp(), x-acs-signature-nonce = OpenApiUtil.getNonce(), accept = 'application/json', ...globalHeaders, ...extendsHeaders, ...request.headers, }; if (params.style == 'RPC') { var headers = getRpcHeaders(); if (!$isNull(headers)) { __request.headers = { ...__request.headers, ...headers }; } } var signatureAlgorithm = $string($default(@signatureAlgorithm, 'ACS3-HMAC-SHA256')); var hashedRequestPayload = OpenApiUtil.hash($Bytes.from('', 'utf-8'), signatureAlgorithm); if (!$isNull(request.stream)) { var tmp = $Stream.readAsBytes(request.stream); hashedRequestPayload = OpenApiUtil.hash(tmp, signatureAlgorithm); __request.body = tmp; __request.headers.content-type = 'application/octet-stream'; } else { if (!$isNull(request.body)) { if (params.reqBodyType == 'byte') { var byteObj = $bytes(request.body); hashedRequestPayload = OpenApiUtil.hash(byteObj, signatureAlgorithm); __request.body = byteObj; } else if (params.reqBodyType == 'json') { var jsonObj = $JSON.stringify(request.body); hashedRequestPayload = OpenApiUtil.hash(jsonObj.toBytes('utf8'), signatureAlgorithm); __request.body = jsonObj; __request.headers.content-type = 'application/json; charset=utf-8'; } else { var m = $object(request.body); var formObj = OpenApiUtil.toForm(m); hashedRequestPayload = OpenApiUtil.hash(formObj.toBytes('utf8'), signatureAlgorithm); __request.body = formObj; __request.headers.content-type = 'application/x-www-form-urlencoded'; } } } __request.headers.x-acs-content-sha256 = hashedRequestPayload.toHex(); if (params.authType != 'Anonymous') { if ($isNull(@credential)) { throw new Client{ code = `InvalidCredentials`, message = `Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly. See https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems for more details.` } } var credentialModel = @credential.getCredential(); if (!$isNull(credentialModel.providerName)) { __request.headers.x-acs-credentials-provider = credentialModel.providerName; } var authType = credentialModel.type; if (authType == 'bearer') { var bearerToken = credentialModel.bearerToken; __request.headers.x-acs-bearer-token = bearerToken; if (params.style == 'RPC') { __request.query.SignatureType = 'BEARERTOKEN'; } else { __request.headers.x-acs-signature-type = 'BEARERTOKEN'; } } else { var accessKeyId = credentialModel.accessKeyId; var accessKeySecret = credentialModel.accessKeySecret; var securityToken = credentialModel.securityToken; if (!$isNull(securityToken) && securityToken != "") { __request.headers.x-acs-accesskey-id = accessKeyId; __request.headers.x-acs-security-token = securityToken; } __request.headers.Authorization = OpenApiUtil.getAuthorization(__request, signatureAlgorithm, hashedRequestPayload.toHex(), accessKeyId, accessKeySecret); } } } returns { if ((__response.statusCode >= 400) && (__response.statusCode < 600)) { var err : map[string]any = {}; if (!$isNull(__response.headers.content-type) && __response.headers.content-type == 'text/xml;charset=utf-8') { var _str = $Stream.readAsString(__response.body); var respMap = $XML.parseXml(_str, null); err = $object(respMap.Error); } else { var _res = $Stream.readAsJSON(__response.body); err = $object(_res); } var requestId = $string($default(err.RequestId, err.requestId)); var code = $string($default(err.Code, err.code)); if ((`${code}` == 'Throttling') || (`${code}` == 'Throttling.User') || (`${code}` == 'Throttling.Api')) { throw new Throttling{ statusCode = __response.statusCode, code = `${code}`, message = `code: ${__response.statusCode}, ${$default(err.Message, err.message)} request id: ${requestId}`, description = `${$default(err.Description, err.description)}`, retryAfter = OpenApiUtil.getThrottlingTimeLeft(__response.headers), data = err, requestId = `${requestId}`, }; } else if ((__response.statusCode >= 400) && (__response.statusCode < 500)) { throw new Client{ statusCode = __response.statusCode, code = `${code}`, message = `code: ${__response.statusCode}, ${$default(err.Message, err.message)} request id: ${requestId}`, description = `${$default(err.Description, err.description)}`, data = err, accessDeniedDetail = getAccessDeniedDetail(err), requestId = `${requestId}`, }; } else { throw new Server{ statusCode = __response.statusCode, code = `${code}`, message = `code: ${__response.statusCode}, ${$default(err.Message, err.message)} request id: ${requestId}`, description = `${$default(err.Description, err.description)}`, data = err, requestId = `${requestId}`, }; } } if (params.bodyType == 'binary') { var resp = { body = __response.body, headers = __response.headers, statusCode = __response.statusCode }; return resp; } else if (params.bodyType == 'byte') { var byt = $Stream.readAsBytes(__response.body); return { body = byt, headers = __response.headers, statusCode = __response.statusCode }; } else if (params.bodyType == 'string') { var respStr = $Stream.readAsString(__response.body); return { body = respStr, headers = __response.headers, statusCode = __response.statusCode }; } else if (params.bodyType == 'json'){ var obj = $Stream.readAsJSON(__response.body); var res = $object(obj); return { body = res, headers = __response.headers, statusCode = __response.statusCode }; } else if (params.bodyType == 'array'){ var arr = $Stream.readAsJSON(__response.body); return { body = arr, headers = __response.headers, statusCode = __response.statusCode }; } else { var anything = $Stream.readAsString(__response.body); return { body = anything, headers = __response.headers, statusCode = __response.statusCode }; } } runtime { key = $string($default(runtime.key, @key)), cert = $string($default(runtime.cert, @cert)), ca = $string($default(runtime.ca, @ca)), readTimeout = $number($default(runtime.readTimeout, @readTimeout)), connectTimeout = $number($default(runtime.connectTimeout, @connectTimeout)), httpProxy = $string($default(runtime.httpProxy, @httpProxy)), httpsProxy = $string($default(runtime.httpsProxy, @httpsProxy)), noProxy = $string($default(runtime.noProxy, @noProxy)), socks5Proxy = $string($default(runtime.socks5Proxy, @socks5Proxy)), socks5NetWork = $string($default(runtime.socks5NetWork, @socks5NetWork)), maxIdleConns = $number($default(runtime.maxIdleConns, @maxIdleConns)), retryOptions = @retryOptions, ignoreSSL = runtime.ignoreSSL, tlsMinVersion = @tlsMinVersion } /** * Encapsulate the request and invoke the network * @param action api name * @param version product version * @param protocol http or https * @param method e.g. GET * @param authType authorization type e.g. AK * @param bodyType response body type e.g. String * @param request object of OpenApiRequest * @param runtime which controls some details of call api, such as retry times * @return the response */ api execute(params: OpenApiUtil.Params, request: OpenApiUtil.OpenApiRequest, runtime: $RuntimeOptions): object { // spi = new Gateway();//Gateway implements SPI,这一步在产品 SDK 中实例化 var headers = getRpcHeaders(); var globalQueries : map[string]string = {}; var globalHeaders : map[string]string = {}; if (!$isNull(@globalParameters)) { var globalParams = @globalParameters; if (!$isNull(globalParams.queries)) { globalQueries = globalParams.queries; } if (!$isNull(globalParams.headers)) { globalHeaders = globalParams.headers; } } var extendsHeaders : map[string]string = {}; var extendsQueries : map[string]string = {}; if (!$isNull(runtime.extendsParameters)) { var extendsParameters = runtime.extendsParameters; if (!$isNull(extendsParameters.headers)) { extendsHeaders = extendsParameters.headers; } if (!$isNull(extendsParameters.queries)) { extendsQueries = extendsParameters.queries; } } var requestContext = new SPI.InterceptorContext.request{ headers = { ...globalHeaders, ...extendsHeaders, ...request.headers, ...headers }, query = { ...globalQueries, ...extendsQueries, ...request.query, }, body = request.body, stream = request.stream, hostMap = request.hostMap, pathname = params.pathname, productId = @productId, action = params.action, version = params.version, protocol = $string($default(@protocol, params.protocol)), method = $string($default(@method, params.method)), authType = params.authType, bodyType = params.bodyType, reqBodyType = params.reqBodyType, style = params.style, credential = @credential, signatureVersion = @signatureVersion, signatureAlgorithm = @signatureAlgorithm, userAgent = OpenApiUtil.getUserAgent(@userAgent) }; var configurationContext = new SPI.InterceptorContext.configuration{ regionId = @regionId, endpoint = $string($default(request.endpointOverride, @endpoint)), endpointRule = @endpointRule, endpointMap = @endpointMap, endpointType = @endpointType, network = @network, suffix = @suffix }; var interceptorContext = new SPI.InterceptorContext{ request = requestContext, configuration = configurationContext }; var attributeMap = new SPI.AttributeMap{}; // 1. spi.modifyConfiguration(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap); @spi.modifyConfiguration(interceptorContext, attributeMap); // 2. spi.modifyRequest(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap); @spi.modifyRequest(interceptorContext, attributeMap); __request.protocol = interceptorContext.request.protocol; __request.method = interceptorContext.request.method; __request.pathname = interceptorContext.request.pathname; __request.query = interceptorContext.request.query; __request.body = interceptorContext.request.stream; __request.headers = interceptorContext.request.headers; } returns { var responseContext = new SPI.InterceptorContext.response{ statusCode = __response.statusCode, headers = __response.headers, body = __response.body }; interceptorContext.response = responseContext; // 3. spi.modifyResponse(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap); @spi.modifyResponse(interceptorContext, attributeMap); return { headers = interceptorContext.response.headers, statusCode = interceptorContext.response.statusCode, body = interceptorContext.response.deserializedBody }; } runtime { key = $string($default(runtime.key, @key)), cert = $string($default(runtime.cert, @cert)), ca = $string($default(runtime.ca, @ca)), readTimeout = $number($default(runtime.readTimeout, @readTimeout)), connectTimeout = $number($default(runtime.connectTimeout, @connectTimeout)), httpProxy = $string($default(runtime.httpProxy, @httpProxy)), httpsProxy = $string($default(runtime.httpsProxy, @httpsProxy)), noProxy = $string($default(runtime.noProxy, @noProxy)), socks5Proxy = $string($default(runtime.socks5Proxy, @socks5Proxy)), socks5NetWork = $string($default(runtime.socks5NetWork, @socks5NetWork)), maxIdleConns = $number($default(runtime.maxIdleConns, @maxIdleConns)), retryOptions = @retryOptions, ignoreSSL = runtime.ignoreSSL, tlsMinVersion = @tlsMinVersion, disableHttp2 = $boolean($default(@disableHttp2, false)) } @sse(true) api callSSEApi(params: OpenApiUtil.Params, request: OpenApiUtil.OpenApiRequest, runtime: $RuntimeOptions): asyncIterator[SSEResponse] { __request.protocol = $string($default(@protocol, params.protocol)); __request.method = params.method; __request.pathname = params.pathname; var globalQueries : map[string]string = {}; var globalHeaders : map[string]string = {}; if (!$isNull(@globalParameters)) { var globalParams = @globalParameters; if (!$isNull(globalParams.queries)) { globalQueries = globalParams.queries; } if (!$isNull(globalParams.headers)) { globalHeaders = globalParams.headers; } } var extendsHeaders : map[string]string = {}; var extendsQueries : map[string]string = {}; if (!$isNull(runtime.extendsParameters)) { var extendsParameters = runtime.extendsParameters; if (!$isNull(extendsParameters.headers)) { extendsHeaders = extendsParameters.headers; } if (!$isNull(extendsParameters.queries)) { extendsQueries = extendsParameters.queries; } } __request.query = { ...globalQueries, ...extendsQueries, ...request.query, }; // endpoint is setted in product client __request.headers = { host = @endpoint, x-acs-version = params.version, x-acs-action = params.action, user-agent = OpenApiUtil.getUserAgent(@userAgent), x-acs-date= OpenApiUtil.getTimestamp(), x-acs-signature-nonce = OpenApiUtil.getNonce(), accept = 'application/json', ...extendsHeaders, ...globalHeaders, ...request.headers, }; if (params.style == 'RPC') { var headers = getRpcHeaders(); if (!$isNull(headers)) { __request.headers = { ...__request.headers, ...headers }; } } var signatureAlgorithm = $string($default(@signatureAlgorithm, 'ACS3-HMAC-SHA256')); var hashedRequestPayload = OpenApiUtil.hash($Bytes.from('', 'utf-8'), signatureAlgorithm); if (!$isNull(request.stream)) { var tmp = $Stream.readAsBytes(request.stream); hashedRequestPayload = OpenApiUtil.hash(tmp, signatureAlgorithm); __request.body = tmp; __request.headers.content-type = 'application/octet-stream'; } else { if (!$isNull(request.body)) { if (params.reqBodyType == 'byte') { var byteObj = $bytes(request.body); hashedRequestPayload = OpenApiUtil.hash(byteObj, signatureAlgorithm); __request.body = byteObj; } else if (params.reqBodyType == 'json') { var jsonObj = $JSON.stringify(request.body); hashedRequestPayload = OpenApiUtil.hash(jsonObj.toBytes('utf8'), signatureAlgorithm); __request.body = jsonObj; __request.headers.content-type = 'application/json; charset=utf-8'; } else { var m = $object(request.body); var formObj = OpenApiUtil.toForm(m); hashedRequestPayload = OpenApiUtil.hash(formObj.toBytes('utf8'), signatureAlgorithm); __request.body = formObj; __request.headers.content-type = 'application/x-www-form-urlencoded'; } } } __request.headers.x-acs-content-sha256 = hashedRequestPayload.toHex(); if (params.authType != 'Anonymous') { var credentialModel = @credential.getCredential(); if (!$isNull(credentialModel.providerName)) { __request.headers.x-acs-credentials-provider = credentialModel.providerName; } var authType = credentialModel.type; if (authType == 'bearer') { var bearerToken = credentialModel.bearerToken; __request.headers.x-acs-bearer-token = bearerToken; } else { var accessKeyId = credentialModel.accessKeyId; var accessKeySecret = credentialModel.accessKeySecret; var securityToken = credentialModel.securityToken; if (!$isNull(securityToken) && securityToken != "") { __request.headers.x-acs-accesskey-id = accessKeyId; __request.headers.x-acs-security-token = securityToken; } __request.headers.Authorization = OpenApiUtil.getAuthorization(__request, signatureAlgorithm, hashedRequestPayload.toHex(), accessKeyId, accessKeySecret); } } } returns { if ((__response.statusCode >= 400) && (__response.statusCode < 600)) { var err : map[string]any = {}; if (!$isNull(__response.headers.content-type) && __response.headers.content-type == 'text/xml;charset=utf-8') { var _str = $Stream.readAsString(__response.body); var respMap = $XML.parseXml(_str, null); err = $object(respMap.Error); } else { var _res = $Stream.readAsJSON(__response.body); err = $object(_res); } err.statusCode = __response.statusCode; throw { code = `${$default(err.Code, err.code)}`, message = `code: ${__response.statusCode}, ${$default(err.Message, err.message)} request id: ${$default(err.RequestId, err.requestId)}`, data = err, description = `${$default(err.Description, err.description)}`, accessDeniedDetail = $default(err.AccessDeniedDetail, err.accessDeniedDetail), }; } var events = $Stream.readAsSSE(__response.body); for(var event : events) { yield new SSEResponse{ statusCode = __response.statusCode, headers = __response.headers, event = event, }; } return null; } runtime { key = $string($default(runtime.key, @key)), cert = $string($default(runtime.cert, @cert)), ca = $string($default(runtime.ca, @ca)), readTimeout = $number($default(runtime.readTimeout, @readTimeout)), connectTimeout = $number($default(runtime.connectTimeout, @connectTimeout)), httpProxy = $string($default(runtime.httpProxy, @httpProxy)), httpsProxy = $string($default(runtime.httpsProxy, @httpsProxy)), noProxy = $string($default(runtime.noProxy, @noProxy)), socks5Proxy = $string($default(runtime.socks5Proxy, @socks5Proxy)), socks5NetWork = $string($default(runtime.socks5NetWork, @socks5NetWork)), maxIdleConns = $number($default(runtime.maxIdleConns, @maxIdleConns)), retryOptions = @retryOptions, ignoreSSL = runtime.ignoreSSL, tlsMinVersion = @tlsMinVersion } /** * Get accesskey id by using credential * @return accesskey id */ async function getAccessKeyId(): string { if ($isNull(@credential)) { return ''; } var accessKeyId = @credential.getAccessKeyId(); return accessKeyId; } /** * Get accesskey secret by using credential * @return accesskey secret */ async function getAccessKeySecret(): string { if ($isNull(@credential)) { return ''; } var secret = @credential.getAccessKeySecret(); return secret; } /** * Get security token by using credential * @return security token */ async function getSecurityToken(): string { if ($isNull(@credential)) { return ''; } var token = @credential.getSecurityToken(); return token; } /** * Get bearer token by credential * @return bearer token */ async function getBearerToken(): string { if ($isNull(@credential)) { return ''; } var token = @credential.getBearerToken(); return token; } /** * Get credential type by credential * @return credential type e.g. access_key */ async function getType(): string { if ($isNull(@credential)) { return ''; } var authType = @credential.getType(); return authType; } /** * If the endpointRule and config.endpoint are empty, throw error * @param config config contains the necessary information to create a client */ function checkConfig(config: OpenApiUtil.Config)throws : void { if ($isNull(@endpointRule) && $isNull(config.endpoint)) { throw new Client { code = 'ParameterMissing', message = '\'config.endpoint\' can not be empty' }; } } /** * set gateway client * @param spi. */ function setGatewayClient(spi: SPI)throws : void { @spi = spi; } /** * set RPC header for debug * @param headers headers for debug, this header can be used only once. */ function setRpcHeaders(headers: map[string] string)throws : void { @headers = headers; } /** * get RPC header for debug */ function getRpcHeaders() throws : map[string] string { var headers: map[string] string = @headers; @headers = null; return headers; } function getAccessDeniedDetail(err: map[string] any): map[string] any { var accessDeniedDetail : map[string] any = null; if (!$isNull(err.AccessDeniedDetail)) { var detail1 = $object(err.AccessDeniedDetail); accessDeniedDetail = detail1; } else if (!$isNull(err.accessDeniedDetail)) { var detail2 = $object(err.accessDeniedDetail); accessDeniedDetail = detail2; } return accessDeniedDetail; }