swift/Sources/AlibabacloudOpenApi/Client.swift (1,121 lines of code) (raw):

import Foundation import Tea import TeaUtils import AlibabaCloudCredentials import AlibabaCloudOpenApiUtil import AlibabacloudGatewaySPI import DarabonbaXML open class Client { public var _endpoint: String? public var _regionId: String? public var _protocol: String? public var _method: String? public var _userAgent: String? public var _endpointRule: String? public var _endpointMap: [String: String]? public var _suffix: String? public var _readTimeout: Int? public var _connectTimeout: Int? public var _httpProxy: String? public var _httpsProxy: String? public var _socks5Proxy: String? public var _socks5NetWork: String? public var _noProxy: String? public var _network: String? public var _productId: String? public var _maxIdleConns: Int? public var _endpointType: String? public var _openPlatformEndpoint: String? public var _credential: AlibabaCloudCredentials.Client? public var _signatureVersion: String? public var _signatureAlgorithm: String? public var _headers: [String: String]? public var _spi: AlibabacloudGatewaySPI.Client? public var _globalParameters: GlobalParameters? public var _key: String? public var _cert: String? public var _ca: String? public var _disableHttp2: Bool? public init(_ config: Config) throws { if (TeaUtils.Client.isUnset(config)) { throw Tea.ReuqestError([ "code": "ParameterMissing", "message": "'config' can not be unset" ]) } if (!TeaUtils.Client.empty(config.accessKeyId) && !TeaUtils.Client.empty(config.accessKeySecret)) { if (!TeaUtils.Client.empty(config.securityToken)) { config.type = "sts" } else { config.type = "access_key" } var credentialConfig: AlibabaCloudCredentials.Config = AlibabaCloudCredentials.Config([ "accessKeyId": config.accessKeyId ?? "", "type": config.type ?? "", "accessKeySecret": config.accessKeySecret ?? "" ]) credentialConfig.securityToken = config.securityToken self._credential = try AlibabaCloudCredentials.Client(credentialConfig) } else if (!TeaUtils.Client.empty(config.bearerToken)) { var cc: AlibabaCloudCredentials.Config = AlibabaCloudCredentials.Config([ "type": "bearer", "bearerToken": config.bearerToken ?? "" ]) self._credential = try AlibabaCloudCredentials.Client(cc) } else if (!TeaUtils.Client.isUnset(config.credential)) { self._credential = config.credential } self._endpoint = config.endpoint self._endpointType = config.endpointType self._network = config.network self._suffix = config.suffix self._protocol = config.protocol_ self._method = config.method self._regionId = config.regionId self._userAgent = config.userAgent self._readTimeout = config.readTimeout self._connectTimeout = config.connectTimeout self._httpProxy = config.httpProxy self._httpsProxy = config.httpsProxy self._noProxy = config.noProxy self._socks5Proxy = config.socks5Proxy self._socks5NetWork = config.socks5NetWork self._maxIdleConns = config.maxIdleConns self._signatureVersion = config.signatureVersion self._signatureAlgorithm = config.signatureAlgorithm self._globalParameters = config.globalParameters self._key = config.key self._cert = config.cert self._ca = config.ca self._disableHttp2 = config.disableHttp2 } @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) public func doRPCRequest(_ action: String, _ version: String, _ protocol_: String, _ method: String, _ authType: String, _ bodyType: String, _ request: OpenApiRequest, _ runtime: TeaUtils.RuntimeOptions) async throws -> [String: Any] { try request.validate() try runtime.validate() var _runtime: [String: Any] = [ "timeouted": "retry", "key": TeaUtils.Client.defaultString(runtime.key, self._key), "cert": TeaUtils.Client.defaultString(runtime.cert, self._cert), "ca": TeaUtils.Client.defaultString(runtime.ca, self._ca), "readTimeout": TeaUtils.Client.defaultNumber(runtime.readTimeout, self._readTimeout), "connectTimeout": TeaUtils.Client.defaultNumber(runtime.connectTimeout, self._connectTimeout), "httpProxy": TeaUtils.Client.defaultString(runtime.httpProxy, self._httpProxy), "httpsProxy": TeaUtils.Client.defaultString(runtime.httpsProxy, self._httpsProxy), "noProxy": TeaUtils.Client.defaultString(runtime.noProxy, self._noProxy), "socks5Proxy": TeaUtils.Client.defaultString(runtime.socks5Proxy, self._socks5Proxy), "socks5NetWork": TeaUtils.Client.defaultString(runtime.socks5NetWork, self._socks5NetWork), "maxIdleConns": TeaUtils.Client.defaultNumber(runtime.maxIdleConns, self._maxIdleConns), "retry": [ "retryable": runtime.autoretry!, "maxAttempts": TeaUtils.Client.defaultNumber(runtime.maxAttempts, 3) ], "backoff": [ "policy": TeaUtils.Client.defaultString(runtime.backoffPolicy, "no"), "period": TeaUtils.Client.defaultNumber(runtime.backoffPeriod, 1) ], "ignoreSSL": Client.defaultAny(runtime.ignoreSSL, false) ] var _lastRequest: Tea.TeaRequest? = nil var _lastException: Tea.TeaError? = nil var _now: Int32 = Tea.TeaCore.timeNow() var _retryTimes: Int32 = 0 while (Tea.TeaCore.allowRetry(_runtime["retry"], _retryTimes, _now)) { if (_retryTimes > 0) { var _backoffTime: Int32 = Tea.TeaCore.getBackoffTime(_runtime["backoff"], _retryTimes) if (_backoffTime > 0) { Tea.TeaCore.sleep(_backoffTime) } } _retryTimes = _retryTimes + 1 do { var _request: Tea.TeaRequest = Tea.TeaRequest() _request.protocol_ = TeaUtils.Client.defaultString(self._protocol, protocol_) _request.method = method as! String _request.pathname = "/" var globalQueries: [String: String] = [:] var globalHeaders: [String: String] = [:] if (!TeaUtils.Client.isUnset(self._globalParameters)) { var globalParams: GlobalParameters = self._globalParameters! if (!TeaUtils.Client.isUnset(globalParams.queries)) { globalQueries = globalParams.queries ?? [:] } if (!TeaUtils.Client.isUnset(globalParams.headers)) { globalHeaders = globalParams.headers ?? [:] } } var extendsHeaders: [String: String] = [:] var extendsQueries: [String: String] = [:] if (!TeaUtils.Client.isUnset(runtime.extendsParameters)) { var extendsParameters: TeaUtils.ExtendsParameters = runtime.extendsParameters! if (!TeaUtils.Client.isUnset(extendsParameters.headers)) { extendsHeaders = extendsParameters.headers ?? [:] } if (!TeaUtils.Client.isUnset(extendsParameters.queries)) { extendsQueries = extendsParameters.queries ?? [:] } } _request.query = Tea.TeaConverter.merge([ "Action": action as! String, "Format": "json", "Version": version as! String, "Timestamp": AlibabaCloudOpenApiUtil.Client.getTimestamp(), "SignatureNonce": TeaUtils.Client.getNonce() ], globalQueries, extendsQueries, request.query ?? [:]) var headers: [String: String] = try getRpcHeaders() if (TeaUtils.Client.isUnset(headers)) { _request.headers = Tea.TeaConverter.merge([ "host": self._endpoint ?? "", "x-acs-version": version as! String, "x-acs-action": action as! String, "user-agent": getUserAgent() ], globalHeaders, extendsHeaders) } else { _request.headers = Tea.TeaConverter.merge([ "host": self._endpoint ?? "", "x-acs-version": version as! String, "x-acs-action": action as! String, "user-agent": getUserAgent() ], globalHeaders, extendsHeaders, headers) } if (!TeaUtils.Client.isUnset(request.body)) { var m: [String: Any] = try TeaUtils.Client.assertAsMap(request.body) var tmp: [String: Any] = TeaUtils.Client.anyifyMapValue(AlibabaCloudOpenApiUtil.Client.query(m)) _request.body = Tea.TeaCore.toReadable(TeaUtils.Client.toFormString(tmp)) _request.headers["content-type"] = "application/x-www-form-urlencoded"; } if (!TeaUtils.Client.equalString(authType, "Anonymous")) { if (TeaUtils.Client.isUnset(self._credential)) { throw Tea.ReuqestError([ "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 credentialType: String = try await getType() if (TeaUtils.Client.equalString(credentialType, "bearer")) { var bearerToken: String = try await getBearerToken() _request.query["BearerToken"] = bearerToken as! String; _request.query["SignatureType"] = "BEARERTOKEN"; } else { var accessKeyId: String = try await getAccessKeyId() var accessKeySecret: String = try await getAccessKeySecret() var securityToken: String = try await getSecurityToken() if (!TeaUtils.Client.empty(securityToken)) { _request.query["SecurityToken"] = securityToken as! String; } _request.query["SignatureMethod"] = "HMAC-SHA1"; _request.query["SignatureVersion"] = "1.0"; _request.query["AccessKeyId"] = accessKeyId as! String; var t: [String: Any]? = nil if (!TeaUtils.Client.isUnset(request.body)) { t = try TeaUtils.Client.assertAsMap(request.body) } var signedParam: [String: String] = Tea.TeaConverter.merge([:], _request.query, AlibabaCloudOpenApiUtil.Client.query(t)) _request.query["Signature"] = AlibabaCloudOpenApiUtil.Client.getRPCSignature(signedParam, _request.method, accessKeySecret); } } _lastRequest = _request var _response: Tea.TeaResponse = try await Tea.TeaCore.doAction(_request, _runtime) if (TeaUtils.Client.is4xx(_response.statusCode) || TeaUtils.Client.is5xx(_response.statusCode)) { var _res: Any = try await TeaUtils.Client.readAsJSON(_response.body) var err: [String: Any] = try TeaUtils.Client.assertAsMap(_res) var requestId: Any = Client.defaultAny(err["RequestId"], err["requestId"]) err["statusCode"] = _response.statusCode throw Tea.ReuqestError([ "code": Client.defaultAny(err["Code"], err["code"]), "message": "code: \(_response.statusCode), \(Client.defaultAny(err["Message"], err["message"])) request id: \(requestId)", "data": err, "description": Client.defaultAny(err["Description"], err["description"]), "accessDeniedDetail": Client.defaultAny(err["AccessDeniedDetail"], err["accessDeniedDetail"]) ]) } if (TeaUtils.Client.equalString(bodyType, "binary")) { var resp: [String: Any] = [ "body": _response.body, "headers": _response.headers, "statusCode": _response.statusCode ] return resp as! [String: Any] } else if (TeaUtils.Client.equalString(bodyType, "byte")) { var byt: [UInt8] = try await TeaUtils.Client.readAsBytes(_response.body) return [ "body": byt as! [UInt8], "headers": _response.headers, "statusCode": _response.statusCode ] } else if (TeaUtils.Client.equalString(bodyType, "string")) { var str: String = try await TeaUtils.Client.readAsString(_response.body) return [ "body": str as! String, "headers": _response.headers, "statusCode": _response.statusCode ] } else if (TeaUtils.Client.equalString(bodyType, "json")) { var obj: Any = try await TeaUtils.Client.readAsJSON(_response.body) var res: [String: Any] = try TeaUtils.Client.assertAsMap(obj) return [ "body": res as! [String: Any], "headers": _response.headers, "statusCode": _response.statusCode ] } else if (TeaUtils.Client.equalString(bodyType, "array")) { var arr: Any = try await TeaUtils.Client.readAsJSON(_response.body) return [ "body": arr as! Any, "headers": _response.headers, "statusCode": _response.statusCode ] } else { return [ "headers": _response.headers, "statusCode": _response.statusCode ] } } catch { if (Tea.TeaCore.isRetryable(error)) { _lastException = error as! Tea.RetryableError continue } throw error } } throw Tea.UnretryableError(_lastRequest, _lastException) } @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) public func doROARequest(_ action: String, _ version: String, _ protocol_: String, _ method: String, _ authType: String, _ pathname: String, _ bodyType: String, _ request: OpenApiRequest, _ runtime: TeaUtils.RuntimeOptions) async throws -> [String: Any] { try request.validate() try runtime.validate() var _runtime: [String: Any] = [ "timeouted": "retry", "key": TeaUtils.Client.defaultString(runtime.key, self._key), "cert": TeaUtils.Client.defaultString(runtime.cert, self._cert), "ca": TeaUtils.Client.defaultString(runtime.ca, self._ca), "readTimeout": TeaUtils.Client.defaultNumber(runtime.readTimeout, self._readTimeout), "connectTimeout": TeaUtils.Client.defaultNumber(runtime.connectTimeout, self._connectTimeout), "httpProxy": TeaUtils.Client.defaultString(runtime.httpProxy, self._httpProxy), "httpsProxy": TeaUtils.Client.defaultString(runtime.httpsProxy, self._httpsProxy), "noProxy": TeaUtils.Client.defaultString(runtime.noProxy, self._noProxy), "socks5Proxy": TeaUtils.Client.defaultString(runtime.socks5Proxy, self._socks5Proxy), "socks5NetWork": TeaUtils.Client.defaultString(runtime.socks5NetWork, self._socks5NetWork), "maxIdleConns": TeaUtils.Client.defaultNumber(runtime.maxIdleConns, self._maxIdleConns), "retry": [ "retryable": Client.defaultAny(runtime.autoretry, false), "maxAttempts": TeaUtils.Client.defaultNumber(runtime.maxAttempts, 3) ], "backoff": [ "policy": TeaUtils.Client.defaultString(runtime.backoffPolicy, "no"), "period": TeaUtils.Client.defaultNumber(runtime.backoffPeriod, 1) ], "ignoreSSL": Client.defaultAny(runtime.ignoreSSL, false) ] var _lastRequest: Tea.TeaRequest? = nil var _lastException: Tea.TeaError? = nil var _now: Int32 = Tea.TeaCore.timeNow() var _retryTimes: Int32 = 0 while (Tea.TeaCore.allowRetry(_runtime["retry"], _retryTimes, _now)) { if (_retryTimes > 0) { var _backoffTime: Int32 = Tea.TeaCore.getBackoffTime(_runtime["backoff"], _retryTimes) if (_backoffTime > 0) { Tea.TeaCore.sleep(_backoffTime) } } _retryTimes = _retryTimes + 1 do { var _request: Tea.TeaRequest = Tea.TeaRequest() _request.protocol_ = TeaUtils.Client.defaultString(self._protocol, protocol_) _request.method = method as! String _request.pathname = pathname as! String var globalQueries: [String: String] = [:] var globalHeaders: [String: String] = [:] if (!TeaUtils.Client.isUnset(self._globalParameters)) { var globalParams: GlobalParameters = self._globalParameters! if (!TeaUtils.Client.isUnset(globalParams.queries)) { globalQueries = globalParams.queries ?? [:] } if (!TeaUtils.Client.isUnset(globalParams.headers)) { globalHeaders = globalParams.headers ?? [:] } } var extendsHeaders: [String: String] = [:] var extendsQueries: [String: String] = [:] if (!TeaUtils.Client.isUnset(runtime.extendsParameters)) { var extendsParameters: TeaUtils.ExtendsParameters = runtime.extendsParameters! if (!TeaUtils.Client.isUnset(extendsParameters.headers)) { extendsHeaders = extendsParameters.headers ?? [:] } if (!TeaUtils.Client.isUnset(extendsParameters.queries)) { extendsQueries = extendsParameters.queries ?? [:] } } _request.headers = Tea.TeaConverter.merge([ "date": TeaUtils.Client.getDateUTCString(), "host": self._endpoint ?? "", "accept": "application/json", "x-acs-signature-nonce": TeaUtils.Client.getNonce(), "x-acs-signature-method": "HMAC-SHA1", "x-acs-signature-version": "1.0", "x-acs-version": version as! String, "x-acs-action": action as! String, "user-agent": TeaUtils.Client.getUserAgent(self._userAgent) ], globalHeaders, extendsHeaders, request.headers ?? [:]) if (!TeaUtils.Client.isUnset(request.body)) { _request.body = Tea.TeaCore.toReadable(TeaUtils.Client.toJSONString(request.body)) _request.headers["content-type"] = "application/json; charset=utf-8"; } _request.query = Tea.TeaConverter.merge([:], globalQueries, extendsQueries) if (!TeaUtils.Client.isUnset(request.query)) { _request.query = Tea.TeaConverter.merge([:], _request.query, request.query ?? [:]) } if (!TeaUtils.Client.equalString(authType, "Anonymous")) { if (TeaUtils.Client.isUnset(self._credential)) { throw Tea.ReuqestError([ "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 credentialType: String = try await getType() if (TeaUtils.Client.equalString(credentialType, "bearer")) { var bearerToken: String = try await getBearerToken() _request.headers["x-acs-bearer-token"] = bearerToken as! String; _request.headers["x-acs-signature-type"] = "BEARERTOKEN"; } else { var accessKeyId: String = try await getAccessKeyId() var accessKeySecret: String = try await getAccessKeySecret() var securityToken: String = try await getSecurityToken() if (!TeaUtils.Client.empty(securityToken)) { _request.headers["x-acs-accesskey-id"] = accessKeyId as! String; _request.headers["x-acs-security-token"] = securityToken as! String; } var stringToSign: String = AlibabaCloudOpenApiUtil.Client.getStringToSign(_request) _request.headers["authorization"] = "acs " + (accessKeyId as! String) + ":" + (AlibabaCloudOpenApiUtil.Client.getROASignature(stringToSign, accessKeySecret)); } } _lastRequest = _request var _response: Tea.TeaResponse = try await Tea.TeaCore.doAction(_request, _runtime) if (TeaUtils.Client.equalNumber(_response.statusCode, 204)) { return [ "headers": _response.headers ] } if (TeaUtils.Client.is4xx(_response.statusCode) || TeaUtils.Client.is5xx(_response.statusCode)) { var _res: Any = try await TeaUtils.Client.readAsJSON(_response.body) var err: [String: Any] = try TeaUtils.Client.assertAsMap(_res) var requestId: Any = Client.defaultAny(err["RequestId"], err["requestId"]) requestId = Client.defaultAny(requestId, err["requestid"]) err["statusCode"] = _response.statusCode throw Tea.ReuqestError([ "code": Client.defaultAny(err["Code"], err["code"]), "message": "code: \(_response.statusCode), \(Client.defaultAny(err["Message"], err["message"])) request id: \(requestId)", "data": err, "description": Client.defaultAny(err["Description"], err["description"]), "accessDeniedDetail": Client.defaultAny(err["AccessDeniedDetail"], err["accessDeniedDetail"]) ]) } if (TeaUtils.Client.equalString(bodyType, "binary")) { var resp: [String: Any] = [ "body": _response.body, "headers": _response.headers, "statusCode": _response.statusCode ] return resp as! [String: Any] } else if (TeaUtils.Client.equalString(bodyType, "byte")) { var byt: [UInt8] = try await TeaUtils.Client.readAsBytes(_response.body) return [ "body": byt as! [UInt8], "headers": _response.headers, "statusCode": _response.statusCode ] } else if (TeaUtils.Client.equalString(bodyType, "string")) { var str: String = try await TeaUtils.Client.readAsString(_response.body) return [ "body": str as! String, "headers": _response.headers, "statusCode": _response.statusCode ] } else if (TeaUtils.Client.equalString(bodyType, "json")) { var obj: Any = try await TeaUtils.Client.readAsJSON(_response.body) var res: [String: Any] = try TeaUtils.Client.assertAsMap(obj) return [ "body": res as! [String: Any], "headers": _response.headers, "statusCode": _response.statusCode ] } else if (TeaUtils.Client.equalString(bodyType, "array")) { var arr: Any = try await TeaUtils.Client.readAsJSON(_response.body) return [ "body": arr as! Any, "headers": _response.headers, "statusCode": _response.statusCode ] } else { return [ "headers": _response.headers, "statusCode": _response.statusCode ] } } catch { if (Tea.TeaCore.isRetryable(error)) { _lastException = error as! Tea.RetryableError continue } throw error } } throw Tea.UnretryableError(_lastRequest, _lastException) } @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) public func doROARequestWithForm(_ action: String, _ version: String, _ protocol_: String, _ method: String, _ authType: String, _ pathname: String, _ bodyType: String, _ request: OpenApiRequest, _ runtime: TeaUtils.RuntimeOptions) async throws -> [String: Any] { try request.validate() try runtime.validate() var _runtime: [String: Any] = [ "timeouted": "retry", "key": TeaUtils.Client.defaultString(runtime.key, self._key), "cert": TeaUtils.Client.defaultString(runtime.cert, self._cert), "ca": TeaUtils.Client.defaultString(runtime.ca, self._ca), "readTimeout": TeaUtils.Client.defaultNumber(runtime.readTimeout, self._readTimeout), "connectTimeout": TeaUtils.Client.defaultNumber(runtime.connectTimeout, self._connectTimeout), "httpProxy": TeaUtils.Client.defaultString(runtime.httpProxy, self._httpProxy), "httpsProxy": TeaUtils.Client.defaultString(runtime.httpsProxy, self._httpsProxy), "noProxy": TeaUtils.Client.defaultString(runtime.noProxy, self._noProxy), "socks5Proxy": TeaUtils.Client.defaultString(runtime.socks5Proxy, self._socks5Proxy), "socks5NetWork": TeaUtils.Client.defaultString(runtime.socks5NetWork, self._socks5NetWork), "maxIdleConns": TeaUtils.Client.defaultNumber(runtime.maxIdleConns, self._maxIdleConns), "retry": [ "retryable": Client.defaultAny(runtime.autoretry, false), "maxAttempts": TeaUtils.Client.defaultNumber(runtime.maxAttempts, 3) ], "backoff": [ "policy": TeaUtils.Client.defaultString(runtime.backoffPolicy, "no"), "period": TeaUtils.Client.defaultNumber(runtime.backoffPeriod, 1) ], "ignoreSSL": Client.defaultAny(runtime.ignoreSSL, false) ] var _lastRequest: Tea.TeaRequest? = nil var _lastException: Tea.TeaError? = nil var _now: Int32 = Tea.TeaCore.timeNow() var _retryTimes: Int32 = 0 while (Tea.TeaCore.allowRetry(_runtime["retry"], _retryTimes, _now)) { if (_retryTimes > 0) { var _backoffTime: Int32 = Tea.TeaCore.getBackoffTime(_runtime["backoff"], _retryTimes) if (_backoffTime > 0) { Tea.TeaCore.sleep(_backoffTime) } } _retryTimes = _retryTimes + 1 do { var _request: Tea.TeaRequest = Tea.TeaRequest() _request.protocol_ = TeaUtils.Client.defaultString(self._protocol, protocol_) _request.method = method as! String _request.pathname = pathname as! String var globalQueries: [String: String] = [:] var globalHeaders: [String: String] = [:] if (!TeaUtils.Client.isUnset(self._globalParameters)) { var globalParams: GlobalParameters = self._globalParameters! if (!TeaUtils.Client.isUnset(globalParams.queries)) { globalQueries = globalParams.queries ?? [:] } if (!TeaUtils.Client.isUnset(globalParams.headers)) { globalHeaders = globalParams.headers ?? [:] } } var extendsHeaders: [String: String] = [:] var extendsQueries: [String: String] = [:] if (!TeaUtils.Client.isUnset(runtime.extendsParameters)) { var extendsParameters: TeaUtils.ExtendsParameters = runtime.extendsParameters! if (!TeaUtils.Client.isUnset(extendsParameters.headers)) { extendsHeaders = extendsParameters.headers ?? [:] } if (!TeaUtils.Client.isUnset(extendsParameters.queries)) { extendsQueries = extendsParameters.queries ?? [:] } } _request.headers = Tea.TeaConverter.merge([ "date": TeaUtils.Client.getDateUTCString(), "host": self._endpoint ?? "", "accept": "application/json", "x-acs-signature-nonce": TeaUtils.Client.getNonce(), "x-acs-signature-method": "HMAC-SHA1", "x-acs-signature-version": "1.0", "x-acs-version": version as! String, "x-acs-action": action as! String, "user-agent": TeaUtils.Client.getUserAgent(self._userAgent) ], globalHeaders, extendsHeaders, request.headers ?? [:]) if (!TeaUtils.Client.isUnset(request.body)) { var m: [String: Any] = try TeaUtils.Client.assertAsMap(request.body) _request.body = Tea.TeaCore.toReadable(AlibabaCloudOpenApiUtil.Client.toForm(m)) _request.headers["content-type"] = "application/x-www-form-urlencoded"; } _request.query = Tea.TeaConverter.merge([:], globalQueries, extendsQueries) if (!TeaUtils.Client.isUnset(request.query)) { _request.query = Tea.TeaConverter.merge([:], _request.query, request.query ?? [:]) } if (!TeaUtils.Client.equalString(authType, "Anonymous")) { if (TeaUtils.Client.isUnset(self._credential)) { throw Tea.ReuqestError([ "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 credentialType: String = try await getType() if (TeaUtils.Client.equalString(credentialType, "bearer")) { var bearerToken: String = try await getBearerToken() _request.headers["x-acs-bearer-token"] = bearerToken as! String; _request.headers["x-acs-signature-type"] = "BEARERTOKEN"; } else { var accessKeyId: String = try await getAccessKeyId() var accessKeySecret: String = try await getAccessKeySecret() var securityToken: String = try await getSecurityToken() if (!TeaUtils.Client.empty(securityToken)) { _request.headers["x-acs-accesskey-id"] = accessKeyId as! String; _request.headers["x-acs-security-token"] = securityToken as! String; } var stringToSign: String = AlibabaCloudOpenApiUtil.Client.getStringToSign(_request) _request.headers["authorization"] = "acs " + (accessKeyId as! String) + ":" + (AlibabaCloudOpenApiUtil.Client.getROASignature(stringToSign, accessKeySecret)); } } _lastRequest = _request var _response: Tea.TeaResponse = try await Tea.TeaCore.doAction(_request, _runtime) if (TeaUtils.Client.equalNumber(_response.statusCode, 204)) { return [ "headers": _response.headers ] } if (TeaUtils.Client.is4xx(_response.statusCode) || TeaUtils.Client.is5xx(_response.statusCode)) { var _res: Any = try await TeaUtils.Client.readAsJSON(_response.body) var err: [String: Any] = try TeaUtils.Client.assertAsMap(_res) err["statusCode"] = _response.statusCode throw Tea.ReuqestError([ "code": Client.defaultAny(err["Code"], err["code"]), "message": "code: \(_response.statusCode), \(Client.defaultAny(err["Message"], err["message"])) request id: \(Client.defaultAny(err["RequestId"], err["requestId"]))", "data": err, "description": Client.defaultAny(err["Description"], err["description"]), "accessDeniedDetail": Client.defaultAny(err["AccessDeniedDetail"], err["accessDeniedDetail"]) ]) } if (TeaUtils.Client.equalString(bodyType, "binary")) { var resp: [String: Any] = [ "body": _response.body, "headers": _response.headers, "statusCode": _response.statusCode ] return resp as! [String: Any] } else if (TeaUtils.Client.equalString(bodyType, "byte")) { var byt: [UInt8] = try await TeaUtils.Client.readAsBytes(_response.body) return [ "body": byt as! [UInt8], "headers": _response.headers, "statusCode": _response.statusCode ] } else if (TeaUtils.Client.equalString(bodyType, "string")) { var str: String = try await TeaUtils.Client.readAsString(_response.body) return [ "body": str as! String, "headers": _response.headers, "statusCode": _response.statusCode ] } else if (TeaUtils.Client.equalString(bodyType, "json")) { var obj: Any = try await TeaUtils.Client.readAsJSON(_response.body) var res: [String: Any] = try TeaUtils.Client.assertAsMap(obj) return [ "body": res as! [String: Any], "headers": _response.headers, "statusCode": _response.statusCode ] } else if (TeaUtils.Client.equalString(bodyType, "array")) { var arr: Any = try await TeaUtils.Client.readAsJSON(_response.body) return [ "body": arr as! Any, "headers": _response.headers, "statusCode": _response.statusCode ] } else { return [ "headers": _response.headers, "statusCode": _response.statusCode ] } } catch { if (Tea.TeaCore.isRetryable(error)) { _lastException = error as! Tea.RetryableError continue } throw error } } throw Tea.UnretryableError(_lastRequest, _lastException) } @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) public func doRequest(_ params: Params, _ request: OpenApiRequest, _ runtime: TeaUtils.RuntimeOptions) async throws -> [String: Any] { try params.validate() try request.validate() try runtime.validate() var _runtime: [String: Any] = [ "timeouted": "retry", "key": TeaUtils.Client.defaultString(runtime.key, self._key), "cert": TeaUtils.Client.defaultString(runtime.cert, self._cert), "ca": TeaUtils.Client.defaultString(runtime.ca, self._ca), "readTimeout": TeaUtils.Client.defaultNumber(runtime.readTimeout, self._readTimeout), "connectTimeout": TeaUtils.Client.defaultNumber(runtime.connectTimeout, self._connectTimeout), "httpProxy": TeaUtils.Client.defaultString(runtime.httpProxy, self._httpProxy), "httpsProxy": TeaUtils.Client.defaultString(runtime.httpsProxy, self._httpsProxy), "noProxy": TeaUtils.Client.defaultString(runtime.noProxy, self._noProxy), "socks5Proxy": TeaUtils.Client.defaultString(runtime.socks5Proxy, self._socks5Proxy), "socks5NetWork": TeaUtils.Client.defaultString(runtime.socks5NetWork, self._socks5NetWork), "maxIdleConns": TeaUtils.Client.defaultNumber(runtime.maxIdleConns, self._maxIdleConns), "retry": [ "retryable": Client.defaultAny(runtime.autoretry, false), "maxAttempts": TeaUtils.Client.defaultNumber(runtime.maxAttempts, 3) ], "backoff": [ "policy": TeaUtils.Client.defaultString(runtime.backoffPolicy, "no"), "period": TeaUtils.Client.defaultNumber(runtime.backoffPeriod, 1) ], "ignoreSSL": Client.defaultAny(runtime.ignoreSSL, false) ] var _lastRequest: Tea.TeaRequest? = nil var _lastException: Tea.TeaError? = nil var _now: Int32 = Tea.TeaCore.timeNow() var _retryTimes: Int32 = 0 while (Tea.TeaCore.allowRetry(_runtime["retry"], _retryTimes, _now)) { if (_retryTimes > 0) { var _backoffTime: Int32 = Tea.TeaCore.getBackoffTime(_runtime["backoff"], _retryTimes) if (_backoffTime > 0) { Tea.TeaCore.sleep(_backoffTime) } } _retryTimes = _retryTimes + 1 do { var _request: Tea.TeaRequest = Tea.TeaRequest() _request.protocol_ = TeaUtils.Client.defaultString(self._protocol, params.protocol_) _request.method = params.method ?? "" _request.pathname = params.pathname ?? "" var globalQueries: [String: String] = [:] var globalHeaders: [String: String] = [:] if (!TeaUtils.Client.isUnset(self._globalParameters)) { var globalParams: GlobalParameters = self._globalParameters! if (!TeaUtils.Client.isUnset(globalParams.queries)) { globalQueries = globalParams.queries ?? [:] } if (!TeaUtils.Client.isUnset(globalParams.headers)) { globalHeaders = globalParams.headers ?? [:] } } var extendsHeaders: [String: String] = [:] var extendsQueries: [String: String] = [:] if (!TeaUtils.Client.isUnset(runtime.extendsParameters)) { var extendsParameters: TeaUtils.ExtendsParameters = runtime.extendsParameters! if (!TeaUtils.Client.isUnset(extendsParameters.headers)) { extendsHeaders = extendsParameters.headers ?? [:] } if (!TeaUtils.Client.isUnset(extendsParameters.queries)) { extendsQueries = extendsParameters.queries ?? [:] } } _request.query = Tea.TeaConverter.merge([:], globalQueries, extendsQueries, request.query ?? [:]) _request.headers = Tea.TeaConverter.merge([ "host": self._endpoint ?? "", "x-acs-version": params.version ?? "", "x-acs-action": params.action ?? "", "user-agent": getUserAgent(), "x-acs-date": AlibabaCloudOpenApiUtil.Client.getTimestamp(), "x-acs-signature-nonce": TeaUtils.Client.getNonce(), "accept": "application/json" ], globalHeaders, extendsHeaders, request.headers ?? [:]) if (TeaUtils.Client.equalString(params.style, "RPC")) { var headers: [String: String] = try getRpcHeaders() if (!TeaUtils.Client.isUnset(headers)) { _request.headers = Tea.TeaConverter.merge([:], _request.headers, headers) } } var signatureAlgorithm: String = TeaUtils.Client.defaultString(self._signatureAlgorithm, "ACS3-HMAC-SHA256") var hashedRequestPayload: String = AlibabaCloudOpenApiUtil.Client.hexEncode(AlibabaCloudOpenApiUtil.Client.hash(TeaUtils.Client.toBytes(""), signatureAlgorithm)) if (!TeaUtils.Client.isUnset(request.stream)) { var tmp: [UInt8] = try await TeaUtils.Client.readAsBytes(request.stream) hashedRequestPayload = AlibabaCloudOpenApiUtil.Client.hexEncode(AlibabaCloudOpenApiUtil.Client.hash(tmp, signatureAlgorithm)) _request.body = Tea.TeaCore.toReadable(tmp as! [UInt8]) _request.headers["content-type"] = "application/octet-stream"; } else { if (!TeaUtils.Client.isUnset(request.body)) { if (TeaUtils.Client.equalString(params.reqBodyType, "byte")) { var byteObj: [UInt8] = try TeaUtils.Client.assertAsBytes(request.body) hashedRequestPayload = AlibabaCloudOpenApiUtil.Client.hexEncode(AlibabaCloudOpenApiUtil.Client.hash(byteObj, signatureAlgorithm)) _request.body = Tea.TeaCore.toReadable(byteObj as! [UInt8]) } else if (TeaUtils.Client.equalString(params.reqBodyType, "json")) { var jsonObj: String = TeaUtils.Client.toJSONString(request.body) hashedRequestPayload = AlibabaCloudOpenApiUtil.Client.hexEncode(AlibabaCloudOpenApiUtil.Client.hash(TeaUtils.Client.toBytes(jsonObj), signatureAlgorithm)) _request.body = Tea.TeaCore.toReadable(jsonObj as! String) _request.headers["content-type"] = "application/json; charset=utf-8"; } else { var m: [String: Any] = try TeaUtils.Client.assertAsMap(request.body) var formObj: String = AlibabaCloudOpenApiUtil.Client.toForm(m) hashedRequestPayload = AlibabaCloudOpenApiUtil.Client.hexEncode(AlibabaCloudOpenApiUtil.Client.hash(TeaUtils.Client.toBytes(formObj), signatureAlgorithm)) _request.body = Tea.TeaCore.toReadable(formObj as! String) _request.headers["content-type"] = "application/x-www-form-urlencoded"; } } } _request.headers["x-acs-content-sha256"] = hashedRequestPayload as! String; if (!TeaUtils.Client.equalString(params.authType, "Anonymous")) { if (TeaUtils.Client.isUnset(self._credential)) { throw Tea.ReuqestError([ "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 authType: String = try await getType() if (TeaUtils.Client.equalString(authType, "bearer")) { var bearerToken: String = try await getBearerToken() _request.headers["x-acs-bearer-token"] = bearerToken as! String; if (TeaUtils.Client.equalString(params.style, "RPC")) { _request.query["SignatureType"] = "BEARERTOKEN"; } else { _request.headers["x-acs-signature-type"] = "BEARERTOKEN"; } } else { var accessKeyId: String = try await getAccessKeyId() var accessKeySecret: String = try await getAccessKeySecret() var securityToken: String = try await getSecurityToken() if (!TeaUtils.Client.empty(securityToken)) { _request.headers["x-acs-accesskey-id"] = accessKeyId as! String; _request.headers["x-acs-security-token"] = securityToken as! String; } _request.headers["Authorization"] = AlibabaCloudOpenApiUtil.Client.getAuthorization(_request, signatureAlgorithm, hashedRequestPayload, accessKeyId, accessKeySecret); } } _lastRequest = _request var _response: Tea.TeaResponse = try await Tea.TeaCore.doAction(_request, _runtime) if (TeaUtils.Client.is4xx(_response.statusCode) || TeaUtils.Client.is5xx(_response.statusCode)) { var err: [String: Any] = [:] if (!TeaUtils.Client.isUnset(_response.headers["content-type"]) && TeaUtils.Client.equalString(_response.headers["content-type"], "text/xml;charset=utf-8")) { var _str: String = try await TeaUtils.Client.readAsString(_response.body) var respMap: [String: Any] = DarabonbaXML.Client.parseXml(_str, nil) err = try TeaUtils.Client.assertAsMap(respMap["Error"]) } else { var _res: Any = try await TeaUtils.Client.readAsJSON(_response.body) err = try TeaUtils.Client.assertAsMap(_res) } err["statusCode"] = _response.statusCode throw Tea.ReuqestError([ "code": Client.defaultAny(err["Code"], err["code"]), "message": "code: \(_response.statusCode), \(Client.defaultAny(err["Message"], err["message"])) request id: \(Client.defaultAny(err["RequestId"], err["requestId"]))", "data": err, "description": Client.defaultAny(err["Description"], err["description"]), "accessDeniedDetail": Client.defaultAny(err["AccessDeniedDetail"], err["accessDeniedDetail"]) ]) } if (TeaUtils.Client.equalString(params.bodyType, "binary")) { var resp: [String: Any] = [ "body": _response.body, "headers": _response.headers, "statusCode": _response.statusCode ] return resp as! [String: Any] } else if (TeaUtils.Client.equalString(params.bodyType, "byte")) { var byt: [UInt8] = try await TeaUtils.Client.readAsBytes(_response.body) return [ "body": byt as! [UInt8], "headers": _response.headers, "statusCode": _response.statusCode ] } else if (TeaUtils.Client.equalString(params.bodyType, "string")) { var str: String = try await TeaUtils.Client.readAsString(_response.body) return [ "body": str as! String, "headers": _response.headers, "statusCode": _response.statusCode ] } else if (TeaUtils.Client.equalString(params.bodyType, "json")) { var obj: Any = try await TeaUtils.Client.readAsJSON(_response.body) var res: [String: Any] = try TeaUtils.Client.assertAsMap(obj) return [ "body": res as! [String: Any], "headers": _response.headers, "statusCode": _response.statusCode ] } else if (TeaUtils.Client.equalString(params.bodyType, "array")) { var arr: Any = try await TeaUtils.Client.readAsJSON(_response.body) return [ "body": arr as! Any, "headers": _response.headers, "statusCode": _response.statusCode ] } else { var anything: String = try await TeaUtils.Client.readAsString(_response.body) return [ "body": anything as! String, "headers": _response.headers, "statusCode": _response.statusCode ] } } catch { if (Tea.TeaCore.isRetryable(error)) { _lastException = error as! Tea.RetryableError continue } throw error } } throw Tea.UnretryableError(_lastRequest, _lastException) } @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) public func execute(_ params: Params, _ request: OpenApiRequest, _ runtime: TeaUtils.RuntimeOptions) async throws -> [String: Any] { try params.validate() try request.validate() try runtime.validate() var _runtime: [String: Any] = [ "timeouted": "retry", "key": TeaUtils.Client.defaultString(runtime.key, self._key), "cert": TeaUtils.Client.defaultString(runtime.cert, self._cert), "ca": TeaUtils.Client.defaultString(runtime.ca, self._ca), "readTimeout": TeaUtils.Client.defaultNumber(runtime.readTimeout, self._readTimeout), "connectTimeout": TeaUtils.Client.defaultNumber(runtime.connectTimeout, self._connectTimeout), "httpProxy": TeaUtils.Client.defaultString(runtime.httpProxy, self._httpProxy), "httpsProxy": TeaUtils.Client.defaultString(runtime.httpsProxy, self._httpsProxy), "noProxy": TeaUtils.Client.defaultString(runtime.noProxy, self._noProxy), "socks5Proxy": TeaUtils.Client.defaultString(runtime.socks5Proxy, self._socks5Proxy), "socks5NetWork": TeaUtils.Client.defaultString(runtime.socks5NetWork, self._socks5NetWork), "maxIdleConns": TeaUtils.Client.defaultNumber(runtime.maxIdleConns, self._maxIdleConns), "retry": [ "retryable": Client.defaultAny(runtime.autoretry, false), "maxAttempts": TeaUtils.Client.defaultNumber(runtime.maxAttempts, 3) ], "backoff": [ "policy": TeaUtils.Client.defaultString(runtime.backoffPolicy, "no"), "period": TeaUtils.Client.defaultNumber(runtime.backoffPeriod, 1) ], "ignoreSSL": Client.defaultAny(runtime.ignoreSSL, false), "disableHttp2": Client.defaultAny(self._disableHttp2, false) ] var _lastRequest: Tea.TeaRequest? = nil var _lastException: Tea.TeaError? = nil var _now: Int32 = Tea.TeaCore.timeNow() var _retryTimes: Int32 = 0 while (Tea.TeaCore.allowRetry(_runtime["retry"], _retryTimes, _now)) { if (_retryTimes > 0) { var _backoffTime: Int32 = Tea.TeaCore.getBackoffTime(_runtime["backoff"], _retryTimes) if (_backoffTime > 0) { Tea.TeaCore.sleep(_backoffTime) } } _retryTimes = _retryTimes + 1 do { var _request: Tea.TeaRequest = Tea.TeaRequest() var headers: [String: String] = try getRpcHeaders() var globalQueries: [String: String] = [:] var globalHeaders: [String: String] = [:] if (!TeaUtils.Client.isUnset(self._globalParameters)) { var globalParams: GlobalParameters = self._globalParameters! if (!TeaUtils.Client.isUnset(globalParams.queries)) { globalQueries = globalParams.queries ?? [:] } if (!TeaUtils.Client.isUnset(globalParams.headers)) { globalHeaders = globalParams.headers ?? [:] } } var extendsHeaders: [String: String] = [:] var extendsQueries: [String: String] = [:] if (!TeaUtils.Client.isUnset(runtime.extendsParameters)) { var extendsParameters: TeaUtils.ExtendsParameters = runtime.extendsParameters! if (!TeaUtils.Client.isUnset(extendsParameters.headers)) { extendsHeaders = extendsParameters.headers ?? [:] } if (!TeaUtils.Client.isUnset(extendsParameters.queries)) { extendsQueries = extendsParameters.queries ?? [:] } } var requestContext: AlibabacloudGatewaySPI.InterceptorContext.Request = AlibabacloudGatewaySPI.InterceptorContext.Request([ "headers": Tea.TeaConverter.merge([:], globalHeaders, extendsHeaders, request.headers ?? [:], headers), "query": Tea.TeaConverter.merge([:], globalQueries, extendsQueries, request.query ?? [:]), "body": request.body!, "stream": request.stream!, "hostMap": request.hostMap ?? [:], "pathname": params.pathname ?? "", "productId": self._productId ?? "", "action": params.action ?? "", "version": params.version ?? "", "protocol": TeaUtils.Client.defaultString(self._protocol, params.protocol_), "method": TeaUtils.Client.defaultString(self._method, params.method), "authType": params.authType ?? "", "bodyType": params.bodyType ?? "", "reqBodyType": params.reqBodyType ?? "", "style": params.style ?? "", "credential": self._credential!, "signatureVersion": self._signatureVersion ?? "", "signatureAlgorithm": self._signatureAlgorithm ?? "", "userAgent": getUserAgent() ]) var configurationContext: AlibabacloudGatewaySPI.InterceptorContext.Configuration = AlibabacloudGatewaySPI.InterceptorContext.Configuration([ "regionId": self._regionId ?? "", "endpoint": TeaUtils.Client.defaultString(request.endpointOverride, self._endpoint), "endpointRule": self._endpointRule ?? "", "endpointMap": self._endpointMap ?? [:], "endpointType": self._endpointType ?? "", "network": self._network ?? "", "suffix": self._suffix ?? "" ]) var interceptorContext: AlibabacloudGatewaySPI.InterceptorContext = AlibabacloudGatewaySPI.InterceptorContext([ "request": requestContext as! AlibabacloudGatewaySPI.InterceptorContext.Request, "configuration": configurationContext as! AlibabacloudGatewaySPI.InterceptorContext.Configuration ]) var attributeMap: AlibabacloudGatewaySPI.AttributeMap = AlibabacloudGatewaySPI.AttributeMap([:]) try await self._spi!.modifyConfiguration(interceptorContext as! AlibabacloudGatewaySPI.InterceptorContext, attributeMap as! AlibabacloudGatewaySPI.AttributeMap) try await self._spi!.modifyRequest(interceptorContext as! AlibabacloudGatewaySPI.InterceptorContext, attributeMap as! AlibabacloudGatewaySPI.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 ?? [:] _lastRequest = _request var _response: Tea.TeaResponse = try await Tea.TeaCore.doAction(_request, _runtime) var responseContext: AlibabacloudGatewaySPI.InterceptorContext.Response = AlibabacloudGatewaySPI.InterceptorContext.Response([ "statusCode": _response.statusCode, "headers": _response.headers, "body": _response.body ]) interceptorContext.response = responseContext try await self._spi!.modifyResponse(interceptorContext as! AlibabacloudGatewaySPI.InterceptorContext, attributeMap as! AlibabacloudGatewaySPI.AttributeMap) return [ "headers": interceptorContext.response!.headers ?? [:], "statusCode": interceptorContext.response!.statusCode!, "body": interceptorContext.response!.deserializedBody! ] } catch { if (Tea.TeaCore.isRetryable(error)) { _lastException = error as! Tea.RetryableError continue } throw error } } throw Tea.UnretryableError(_lastRequest, _lastException) } @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) public func callApi(_ params: Params, _ request: OpenApiRequest, _ runtime: TeaUtils.RuntimeOptions) async throws -> [String: Any] { if (TeaUtils.Client.isUnset(params)) { throw Tea.ReuqestError([ "code": "ParameterMissing", "message": "'params' can not be unset" ]) } if (TeaUtils.Client.isUnset(self._signatureAlgorithm) || !TeaUtils.Client.equalString(self._signatureAlgorithm, "v2")) { return try await doRequest(params as! Params, request as! OpenApiRequest, runtime as! TeaUtils.RuntimeOptions) } else if (TeaUtils.Client.equalString(params.style, "ROA") && TeaUtils.Client.equalString(params.reqBodyType, "json")) { return try await doROARequest(params.action ?? "", params.version ?? "", params.protocol_ ?? "", params.method ?? "", params.authType ?? "", params.pathname ?? "", params.bodyType ?? "", request as! OpenApiRequest, runtime as! TeaUtils.RuntimeOptions) } else if (TeaUtils.Client.equalString(params.style, "ROA")) { return try await doROARequestWithForm(params.action ?? "", params.version ?? "", params.protocol_ ?? "", params.method ?? "", params.authType ?? "", params.pathname ?? "", params.bodyType ?? "", request as! OpenApiRequest, runtime as! TeaUtils.RuntimeOptions) } else { return try await doRPCRequest(params.action ?? "", params.version ?? "", params.protocol_ ?? "", params.method ?? "", params.authType ?? "", params.bodyType ?? "", request as! OpenApiRequest, runtime as! TeaUtils.RuntimeOptions) } } public func getUserAgent() -> String { var userAgent: String = TeaUtils.Client.getUserAgent(self._userAgent) return userAgent as! String } @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) public func getAccessKeyId() async throws -> String { if (TeaUtils.Client.isUnset(self._credential)) { return "" } var accessKeyId: String = try await self._credential!.getAccessKeyId() return accessKeyId as! String } @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) public func getAccessKeySecret() async throws -> String { if (TeaUtils.Client.isUnset(self._credential)) { return "" } var secret: String = try await self._credential!.getAccessKeySecret() return secret as! String } @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) public func getSecurityToken() async throws -> String { if (TeaUtils.Client.isUnset(self._credential)) { return "" } var token: String = try await self._credential!.getSecurityToken() return token as! String } @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) public func getBearerToken() async throws -> String { if (TeaUtils.Client.isUnset(self._credential)) { return "" } var token: String = self._credential!.getBearerToken() return token as! String } @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) public func getType() async throws -> String { if (TeaUtils.Client.isUnset(self._credential)) { return "" } var authType: String = self._credential!.getType() return authType as! String } public static func defaultAny(_ inputValue: Any?, _ defaultValue: Any?) -> Any { if (TeaUtils.Client.isUnset(inputValue)) { return defaultValue as! Any } return inputValue as! Any } public func checkConfig(_ config: Config) throws -> Void { if (TeaUtils.Client.empty(self._endpointRule) && TeaUtils.Client.empty(config.endpoint)) { throw Tea.ReuqestError([ "code": "ParameterMissing", "message": "'config.endpoint' can not be empty" ]) } } public func setGatewayClient(_ spi: AlibabacloudGatewaySPI.Client) throws -> Void { self._spi = spi } public func setRpcHeaders(_ headers: [String: String]) throws -> Void { self._headers = headers } public func getRpcHeaders() throws -> [String: String] { var headers: [String: String] = self._headers ?? [:] self._headers = nil return headers as! [String: String] } }