client_context_func.go raw

   1  // This file is auto-generated, don't edit it. Thanks.
   2  package client
   3  
   4  import (
   5  	"context"
   6  	"encoding/hex"
   7  
   8  	spi "github.com/alibabacloud-go/alibabacloud-gateway-spi/client"
   9  	openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils"
  10  	"github.com/alibabacloud-go/tea/dara"
  11  )
  12  
  13  // Description:
  14  //
  15  // # Encapsulate the request and invoke the network
  16  //
  17  // @param action - api name
  18  //
  19  // @param version - product version
  20  //
  21  // @param protocol - http or https
  22  //
  23  // @param method - e.g. GET
  24  //
  25  // @param authType - authorization type e.g. AK
  26  //
  27  // @param bodyType - response body type e.g. String
  28  //
  29  // @param request - object of OpenApiRequest
  30  //
  31  // @param runtime - which controls some details of call api, such as retry times
  32  //
  33  // @return the response
  34  func (client *Client) DoRPCRequestWithCtx(ctx context.Context, action *string, version *string, protocol *string, method *string, authType *string, bodyType *string, request *openapiutil.OpenApiRequest, runtime *dara.RuntimeOptions) (_result map[string]interface{}, _err error) {
  35  	_runtime := dara.NewRuntimeObject(map[string]interface{}{
  36  		"key":            dara.ToString(dara.Default(dara.StringValue(runtime.Key), dara.StringValue(client.Key))),
  37  		"cert":           dara.ToString(dara.Default(dara.StringValue(runtime.Cert), dara.StringValue(client.Cert))),
  38  		"ca":             dara.ToString(dara.Default(dara.StringValue(runtime.Ca), dara.StringValue(client.Ca))),
  39  		"readTimeout":    dara.ForceInt(dara.Default(dara.IntValue(runtime.ReadTimeout), dara.IntValue(client.ReadTimeout))),
  40  		"connectTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ConnectTimeout), dara.IntValue(client.ConnectTimeout))),
  41  		"httpProxy":      dara.ToString(dara.Default(dara.StringValue(runtime.HttpProxy), dara.StringValue(client.HttpProxy))),
  42  		"httpsProxy":     dara.ToString(dara.Default(dara.StringValue(runtime.HttpsProxy), dara.StringValue(client.HttpsProxy))),
  43  		"noProxy":        dara.ToString(dara.Default(dara.StringValue(runtime.NoProxy), dara.StringValue(client.NoProxy))),
  44  		"socks5Proxy":    dara.ToString(dara.Default(dara.StringValue(runtime.Socks5Proxy), dara.StringValue(client.Socks5Proxy))),
  45  		"socks5NetWork":  dara.ToString(dara.Default(dara.StringValue(runtime.Socks5NetWork), dara.StringValue(client.Socks5NetWork))),
  46  		"maxIdleConns":   dara.ForceInt(dara.Default(dara.IntValue(runtime.MaxIdleConns), dara.IntValue(client.MaxIdleConns))),
  47  		"retryOptions":   client.RetryOptions,
  48  		"ignoreSSL":      dara.BoolValue(runtime.IgnoreSSL),
  49  		"httpClient":     client.HttpClient,
  50  		"tlsMinVersion":  dara.StringValue(client.TlsMinVersion),
  51  	})
  52  
  53  	var retryPolicyContext *dara.RetryPolicyContext
  54  	var request_ *dara.Request
  55  	var response_ *dara.Response
  56  	var _resultErr error
  57  	retriesAttempted := int(0)
  58  	retryPolicyContext = &dara.RetryPolicyContext{
  59  		RetriesAttempted: retriesAttempted,
  60  	}
  61  
  62  	_result = make(map[string]interface{})
  63  	for dara.ShouldRetry(_runtime.RetryOptions, retryPolicyContext) {
  64  		_resultErr = nil
  65  		_backoffDelayTime := dara.GetBackoffDelay(_runtime.RetryOptions, retryPolicyContext)
  66  		dara.Sleep(_backoffDelayTime)
  67  
  68  		request_ = dara.NewRequest()
  69  		request_.Protocol = dara.String(dara.ToString(dara.Default(dara.StringValue(client.Protocol), dara.StringValue(protocol))))
  70  		request_.Method = method
  71  		request_.Pathname = dara.String("/")
  72  		globalQueries := make(map[string]*string)
  73  		globalHeaders := make(map[string]*string)
  74  		if !dara.IsNil(client.GlobalParameters) {
  75  			globalParams := client.GlobalParameters
  76  			if !dara.IsNil(globalParams.Queries) {
  77  				globalQueries = globalParams.Queries
  78  			}
  79  
  80  			if !dara.IsNil(globalParams.Headers) {
  81  				globalHeaders = globalParams.Headers
  82  			}
  83  
  84  		}
  85  
  86  		extendsHeaders := make(map[string]*string)
  87  		extendsQueries := make(map[string]*string)
  88  		if !dara.IsNil(runtime.ExtendsParameters) {
  89  			extendsParameters := runtime.ExtendsParameters
  90  			if !dara.IsNil(extendsParameters.Headers) {
  91  				extendsHeaders = extendsParameters.Headers
  92  			}
  93  
  94  			if !dara.IsNil(extendsParameters.Queries) {
  95  				extendsQueries = extendsParameters.Queries
  96  			}
  97  
  98  		}
  99  
 100  		request_.Query = dara.Merge(map[string]*string{
 101  			"Action":         action,
 102  			"Format":         dara.String("json"),
 103  			"Version":        version,
 104  			"Timestamp":      openapiutil.GetTimestamp(),
 105  			"SignatureNonce": openapiutil.GetNonce(),
 106  		}, globalQueries,
 107  			extendsQueries,
 108  			request.Query)
 109  		headers, _err := client.GetRpcHeaders()
 110  		if _err != nil {
 111  			retriesAttempted++
 112  			retryPolicyContext = &dara.RetryPolicyContext{
 113  				RetriesAttempted: retriesAttempted,
 114  				HttpRequest:      request_,
 115  				HttpResponse:     response_,
 116  				Exception:        _err,
 117  			}
 118  			_resultErr = _err
 119  			continue
 120  		}
 121  
 122  		if dara.IsNil(headers) {
 123  			// endpoint is setted in product client
 124  			request_.Headers = dara.Merge(map[string]*string{
 125  				"host":          client.Endpoint,
 126  				"x-acs-version": version,
 127  				"x-acs-action":  action,
 128  				"user-agent":    openapiutil.GetUserAgent(client.UserAgent),
 129  			}, globalHeaders,
 130  				extendsHeaders,
 131  				request.Headers)
 132  		} else {
 133  			request_.Headers = dara.Merge(map[string]*string{
 134  				"host":          client.Endpoint,
 135  				"x-acs-version": version,
 136  				"x-acs-action":  action,
 137  				"user-agent":    openapiutil.GetUserAgent(client.UserAgent),
 138  			}, globalHeaders,
 139  				extendsHeaders,
 140  				request.Headers,
 141  				headers)
 142  		}
 143  
 144  		if !dara.IsNil(request.Body) {
 145  			m := dara.ToMap(request.Body)
 146  			tmp := dara.ToMap(openapiutil.Query(m))
 147  			request_.Body = dara.ToReader(dara.ToFormString(tmp))
 148  			request_.Headers["content-type"] = dara.String("application/x-www-form-urlencoded")
 149  		}
 150  
 151  		if dara.StringValue(authType) != "Anonymous" {
 152  			if dara.IsNil(client.Credential) {
 153  				_err = &ClientError{
 154  					Code:    dara.String("InvalidCredentials"),
 155  					Message: dara.String("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."),
 156  				}
 157  				if dara.BoolValue(client.DisableSDKError) != true {
 158  					_err = dara.TeaSDKError(_err)
 159  				}
 160  				return _result, _err
 161  			}
 162  
 163  			credentialModel, _err := client.Credential.GetCredential()
 164  			if _err != nil {
 165  				retriesAttempted++
 166  				retryPolicyContext = &dara.RetryPolicyContext{
 167  					RetriesAttempted: retriesAttempted,
 168  					HttpRequest:      request_,
 169  					HttpResponse:     response_,
 170  					Exception:        _err,
 171  				}
 172  				_resultErr = _err
 173  				continue
 174  			}
 175  
 176  			if !dara.IsNil(credentialModel.ProviderName) {
 177  				request_.Headers["x-acs-credentials-provider"] = credentialModel.ProviderName
 178  			}
 179  
 180  			credentialType := dara.StringValue(credentialModel.Type)
 181  			if credentialType == "bearer" {
 182  				bearerToken := dara.StringValue(credentialModel.BearerToken)
 183  				request_.Query["BearerToken"] = dara.String(bearerToken)
 184  				request_.Query["SignatureType"] = dara.String("BEARERTOKEN")
 185  			} else if credentialType == "id_token" {
 186  				idToken := dara.StringValue(credentialModel.SecurityToken)
 187  				request_.Headers["x-acs-zero-trust-idtoken"] = dara.String(idToken)
 188  			} else {
 189  				accessKeyId := dara.StringValue(credentialModel.AccessKeyId)
 190  				accessKeySecret := dara.StringValue(credentialModel.AccessKeySecret)
 191  				securityToken := dara.StringValue(credentialModel.SecurityToken)
 192  				if !dara.IsNil(dara.String(securityToken)) && securityToken != "" {
 193  					request_.Query["SecurityToken"] = dara.String(securityToken)
 194  				}
 195  
 196  				request_.Query["SignatureMethod"] = dara.String("HMAC-SHA1")
 197  				request_.Query["SignatureVersion"] = dara.String("1.0")
 198  				request_.Query["AccessKeyId"] = dara.String(accessKeyId)
 199  				var t map[string]interface{}
 200  				if !dara.IsNil(request.Body) {
 201  					t = dara.ToMap(request.Body)
 202  				}
 203  
 204  				signedParam := dara.Merge(request_.Query,
 205  					openapiutil.Query(t))
 206  				request_.Query["Signature"] = openapiutil.GetRPCSignature(signedParam, request_.Method, dara.String(accessKeySecret))
 207  			}
 208  
 209  		}
 210  
 211  		response_, _err := dara.DoRequestWithCtx(ctx, request_, _runtime)
 212  		if _err != nil {
 213  			retriesAttempted++
 214  			retryPolicyContext = &dara.RetryPolicyContext{
 215  				RetriesAttempted: retriesAttempted,
 216  				HttpRequest:      request_,
 217  				HttpResponse:     response_,
 218  				Exception:        _err,
 219  			}
 220  			_resultErr = _err
 221  			continue
 222  		}
 223  
 224  		_result, _err = doRPCRequestWithCtx_opResponse(response_, client, bodyType)
 225  		if _err != nil {
 226  			retriesAttempted++
 227  			retryPolicyContext = &dara.RetryPolicyContext{
 228  				RetriesAttempted: retriesAttempted,
 229  				HttpRequest:      request_,
 230  				HttpResponse:     response_,
 231  				Exception:        _err,
 232  			}
 233  			_resultErr = _err
 234  			continue
 235  		}
 236  
 237  		return _result, _err
 238  	}
 239  	if dara.BoolValue(client.DisableSDKError) != true {
 240  		_resultErr = dara.TeaSDKError(_resultErr)
 241  	}
 242  	return _result, _resultErr
 243  }
 244  
 245  // Description:
 246  //
 247  // # Encapsulate the request and invoke the network
 248  //
 249  // @param action - api name
 250  //
 251  // @param version - product version
 252  //
 253  // @param protocol - http or https
 254  //
 255  // @param method - e.g. GET
 256  //
 257  // @param authType - authorization type e.g. AK
 258  //
 259  // @param pathname - pathname of every api
 260  //
 261  // @param bodyType - response body type e.g. String
 262  //
 263  // @param request - object of OpenApiRequest
 264  //
 265  // @param runtime - which controls some details of call api, such as retry times
 266  //
 267  // @return the response
 268  func (client *Client) DoROARequestWithCtx(ctx context.Context, action *string, version *string, protocol *string, method *string, authType *string, pathname *string, bodyType *string, request *openapiutil.OpenApiRequest, runtime *dara.RuntimeOptions) (_result map[string]interface{}, _err error) {
 269  	_runtime := dara.NewRuntimeObject(map[string]interface{}{
 270  		"key":            dara.ToString(dara.Default(dara.StringValue(runtime.Key), dara.StringValue(client.Key))),
 271  		"cert":           dara.ToString(dara.Default(dara.StringValue(runtime.Cert), dara.StringValue(client.Cert))),
 272  		"ca":             dara.ToString(dara.Default(dara.StringValue(runtime.Ca), dara.StringValue(client.Ca))),
 273  		"readTimeout":    dara.ForceInt(dara.Default(dara.IntValue(runtime.ReadTimeout), dara.IntValue(client.ReadTimeout))),
 274  		"connectTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ConnectTimeout), dara.IntValue(client.ConnectTimeout))),
 275  		"httpProxy":      dara.ToString(dara.Default(dara.StringValue(runtime.HttpProxy), dara.StringValue(client.HttpProxy))),
 276  		"httpsProxy":     dara.ToString(dara.Default(dara.StringValue(runtime.HttpsProxy), dara.StringValue(client.HttpsProxy))),
 277  		"noProxy":        dara.ToString(dara.Default(dara.StringValue(runtime.NoProxy), dara.StringValue(client.NoProxy))),
 278  		"socks5Proxy":    dara.ToString(dara.Default(dara.StringValue(runtime.Socks5Proxy), dara.StringValue(client.Socks5Proxy))),
 279  		"socks5NetWork":  dara.ToString(dara.Default(dara.StringValue(runtime.Socks5NetWork), dara.StringValue(client.Socks5NetWork))),
 280  		"maxIdleConns":   dara.ForceInt(dara.Default(dara.IntValue(runtime.MaxIdleConns), dara.IntValue(client.MaxIdleConns))),
 281  		"retryOptions":   client.RetryOptions,
 282  		"ignoreSSL":      dara.BoolValue(runtime.IgnoreSSL),
 283  		"httpClient":     client.HttpClient,
 284  		"tlsMinVersion":  dara.StringValue(client.TlsMinVersion),
 285  	})
 286  
 287  	var retryPolicyContext *dara.RetryPolicyContext
 288  	var request_ *dara.Request
 289  	var response_ *dara.Response
 290  	var _resultErr error
 291  	retriesAttempted := int(0)
 292  	retryPolicyContext = &dara.RetryPolicyContext{
 293  		RetriesAttempted: retriesAttempted,
 294  	}
 295  
 296  	_result = make(map[string]interface{})
 297  	for dara.ShouldRetry(_runtime.RetryOptions, retryPolicyContext) {
 298  		_resultErr = nil
 299  		_backoffDelayTime := dara.GetBackoffDelay(_runtime.RetryOptions, retryPolicyContext)
 300  		dara.Sleep(_backoffDelayTime)
 301  
 302  		request_ = dara.NewRequest()
 303  		request_.Protocol = dara.String(dara.ToString(dara.Default(dara.StringValue(client.Protocol), dara.StringValue(protocol))))
 304  		request_.Method = method
 305  		request_.Pathname = pathname
 306  		globalQueries := make(map[string]*string)
 307  		globalHeaders := make(map[string]*string)
 308  		if !dara.IsNil(client.GlobalParameters) {
 309  			globalParams := client.GlobalParameters
 310  			if !dara.IsNil(globalParams.Queries) {
 311  				globalQueries = globalParams.Queries
 312  			}
 313  
 314  			if !dara.IsNil(globalParams.Headers) {
 315  				globalHeaders = globalParams.Headers
 316  			}
 317  
 318  		}
 319  
 320  		extendsHeaders := make(map[string]*string)
 321  		extendsQueries := make(map[string]*string)
 322  		if !dara.IsNil(runtime.ExtendsParameters) {
 323  			extendsParameters := runtime.ExtendsParameters
 324  			if !dara.IsNil(extendsParameters.Headers) {
 325  				extendsHeaders = extendsParameters.Headers
 326  			}
 327  
 328  			if !dara.IsNil(extendsParameters.Queries) {
 329  				extendsQueries = extendsParameters.Queries
 330  			}
 331  
 332  		}
 333  
 334  		request_.Headers = dara.Merge(map[string]*string{
 335  			"date":                    openapiutil.GetDateUTCString(),
 336  			"host":                    client.Endpoint,
 337  			"accept":                  dara.String("application/json"),
 338  			"x-acs-signature-nonce":   openapiutil.GetNonce(),
 339  			"x-acs-signature-method":  dara.String("HMAC-SHA1"),
 340  			"x-acs-signature-version": dara.String("1.0"),
 341  			"x-acs-version":           version,
 342  			"x-acs-action":            action,
 343  			"user-agent":              openapiutil.GetUserAgent(client.UserAgent),
 344  		}, globalHeaders,
 345  			extendsHeaders,
 346  			request.Headers)
 347  		if !dara.IsNil(request.Body) {
 348  			request_.Body = dara.ToReader(dara.Stringify(request.Body))
 349  			request_.Headers["content-type"] = dara.String("application/json; charset=utf-8")
 350  		}
 351  
 352  		request_.Query = dara.Merge(globalQueries,
 353  			extendsQueries)
 354  		if !dara.IsNil(request.Query) {
 355  			request_.Query = dara.Merge(request_.Query,
 356  				request.Query)
 357  		}
 358  
 359  		if dara.StringValue(authType) != "Anonymous" {
 360  			if dara.IsNil(client.Credential) {
 361  				_err = &ClientError{
 362  					Code:    dara.String("InvalidCredentials"),
 363  					Message: dara.String("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."),
 364  				}
 365  				if dara.BoolValue(client.DisableSDKError) != true {
 366  					_err = dara.TeaSDKError(_err)
 367  				}
 368  				return _result, _err
 369  			}
 370  
 371  			credentialModel, _err := client.Credential.GetCredential()
 372  			if _err != nil {
 373  				retriesAttempted++
 374  				retryPolicyContext = &dara.RetryPolicyContext{
 375  					RetriesAttempted: retriesAttempted,
 376  					HttpRequest:      request_,
 377  					HttpResponse:     response_,
 378  					Exception:        _err,
 379  				}
 380  				_resultErr = _err
 381  				continue
 382  			}
 383  
 384  			if !dara.IsNil(credentialModel.ProviderName) {
 385  				request_.Headers["x-acs-credentials-provider"] = credentialModel.ProviderName
 386  			}
 387  
 388  			credentialType := dara.StringValue(credentialModel.Type)
 389  			if credentialType == "bearer" {
 390  				bearerToken := dara.StringValue(credentialModel.BearerToken)
 391  				request_.Headers["x-acs-bearer-token"] = dara.String(bearerToken)
 392  				request_.Headers["x-acs-signature-type"] = dara.String("BEARERTOKEN")
 393  			} else if credentialType == "id_token" {
 394  				idToken := dara.StringValue(credentialModel.SecurityToken)
 395  				request_.Headers["x-acs-zero-trust-idtoken"] = dara.String(idToken)
 396  			} else {
 397  				accessKeyId := dara.StringValue(credentialModel.AccessKeyId)
 398  				accessKeySecret := dara.StringValue(credentialModel.AccessKeySecret)
 399  				securityToken := dara.StringValue(credentialModel.SecurityToken)
 400  				if !dara.IsNil(dara.String(securityToken)) && securityToken != "" {
 401  					request_.Headers["x-acs-accesskey-id"] = dara.String(accessKeyId)
 402  					request_.Headers["x-acs-security-token"] = dara.String(securityToken)
 403  				}
 404  
 405  				stringToSign := dara.StringValue(openapiutil.GetStringToSign(request_))
 406  				request_.Headers["authorization"] = dara.String("acs " + accessKeyId + ":" + dara.StringValue(openapiutil.GetROASignature(dara.String(stringToSign), dara.String(accessKeySecret))))
 407  			}
 408  
 409  		}
 410  
 411  		response_, _err := dara.DoRequestWithCtx(ctx, request_, _runtime)
 412  		if _err != nil {
 413  			retriesAttempted++
 414  			retryPolicyContext = &dara.RetryPolicyContext{
 415  				RetriesAttempted: retriesAttempted,
 416  				HttpRequest:      request_,
 417  				HttpResponse:     response_,
 418  				Exception:        _err,
 419  			}
 420  			_resultErr = _err
 421  			continue
 422  		}
 423  
 424  		_result, _err = doROARequestWithCtx_opResponse(response_, client, bodyType)
 425  		if _err != nil {
 426  			retriesAttempted++
 427  			retryPolicyContext = &dara.RetryPolicyContext{
 428  				RetriesAttempted: retriesAttempted,
 429  				HttpRequest:      request_,
 430  				HttpResponse:     response_,
 431  				Exception:        _err,
 432  			}
 433  			_resultErr = _err
 434  			continue
 435  		}
 436  
 437  		return _result, _err
 438  	}
 439  	if dara.BoolValue(client.DisableSDKError) != true {
 440  		_resultErr = dara.TeaSDKError(_resultErr)
 441  	}
 442  	return _result, _resultErr
 443  }
 444  
 445  // Description:
 446  //
 447  // # Encapsulate the request and invoke the network with form body
 448  //
 449  // @param action - api name
 450  //
 451  // @param version - product version
 452  //
 453  // @param protocol - http or https
 454  //
 455  // @param method - e.g. GET
 456  //
 457  // @param authType - authorization type e.g. AK
 458  //
 459  // @param pathname - pathname of every api
 460  //
 461  // @param bodyType - response body type e.g. String
 462  //
 463  // @param request - object of OpenApiRequest
 464  //
 465  // @param runtime - which controls some details of call api, such as retry times
 466  //
 467  // @return the response
 468  func (client *Client) DoROAFormRequestWithCtx(ctx context.Context, action *string, version *string, protocol *string, method *string, authType *string, pathname *string, bodyType *string, request *openapiutil.OpenApiRequest, runtime *dara.RuntimeOptions) (_result map[string]interface{}, _err error) {
 469  	_runtime := dara.NewRuntimeObject(map[string]interface{}{
 470  		"key":            dara.ToString(dara.Default(dara.StringValue(runtime.Key), dara.StringValue(client.Key))),
 471  		"cert":           dara.ToString(dara.Default(dara.StringValue(runtime.Cert), dara.StringValue(client.Cert))),
 472  		"ca":             dara.ToString(dara.Default(dara.StringValue(runtime.Ca), dara.StringValue(client.Ca))),
 473  		"readTimeout":    dara.ForceInt(dara.Default(dara.IntValue(runtime.ReadTimeout), dara.IntValue(client.ReadTimeout))),
 474  		"connectTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ConnectTimeout), dara.IntValue(client.ConnectTimeout))),
 475  		"httpProxy":      dara.ToString(dara.Default(dara.StringValue(runtime.HttpProxy), dara.StringValue(client.HttpProxy))),
 476  		"httpsProxy":     dara.ToString(dara.Default(dara.StringValue(runtime.HttpsProxy), dara.StringValue(client.HttpsProxy))),
 477  		"noProxy":        dara.ToString(dara.Default(dara.StringValue(runtime.NoProxy), dara.StringValue(client.NoProxy))),
 478  		"socks5Proxy":    dara.ToString(dara.Default(dara.StringValue(runtime.Socks5Proxy), dara.StringValue(client.Socks5Proxy))),
 479  		"socks5NetWork":  dara.ToString(dara.Default(dara.StringValue(runtime.Socks5NetWork), dara.StringValue(client.Socks5NetWork))),
 480  		"maxIdleConns":   dara.ForceInt(dara.Default(dara.IntValue(runtime.MaxIdleConns), dara.IntValue(client.MaxIdleConns))),
 481  		"retryOptions":   client.RetryOptions,
 482  		"ignoreSSL":      dara.BoolValue(runtime.IgnoreSSL),
 483  		"httpClient":     client.HttpClient,
 484  		"tlsMinVersion":  dara.StringValue(client.TlsMinVersion),
 485  	})
 486  
 487  	var retryPolicyContext *dara.RetryPolicyContext
 488  	var request_ *dara.Request
 489  	var response_ *dara.Response
 490  	var _resultErr error
 491  	retriesAttempted := int(0)
 492  	retryPolicyContext = &dara.RetryPolicyContext{
 493  		RetriesAttempted: retriesAttempted,
 494  	}
 495  
 496  	_result = make(map[string]interface{})
 497  	for dara.ShouldRetry(_runtime.RetryOptions, retryPolicyContext) {
 498  		_resultErr = nil
 499  		_backoffDelayTime := dara.GetBackoffDelay(_runtime.RetryOptions, retryPolicyContext)
 500  		dara.Sleep(_backoffDelayTime)
 501  
 502  		request_ = dara.NewRequest()
 503  		request_.Protocol = dara.String(dara.ToString(dara.Default(dara.StringValue(client.Protocol), dara.StringValue(protocol))))
 504  		request_.Method = method
 505  		request_.Pathname = pathname
 506  		globalQueries := make(map[string]*string)
 507  		globalHeaders := make(map[string]*string)
 508  		if !dara.IsNil(client.GlobalParameters) {
 509  			globalParams := client.GlobalParameters
 510  			if !dara.IsNil(globalParams.Queries) {
 511  				globalQueries = globalParams.Queries
 512  			}
 513  
 514  			if !dara.IsNil(globalParams.Headers) {
 515  				globalHeaders = globalParams.Headers
 516  			}
 517  
 518  		}
 519  
 520  		extendsHeaders := make(map[string]*string)
 521  		extendsQueries := make(map[string]*string)
 522  		if !dara.IsNil(runtime.ExtendsParameters) {
 523  			extendsParameters := runtime.ExtendsParameters
 524  			if !dara.IsNil(extendsParameters.Headers) {
 525  				extendsHeaders = extendsParameters.Headers
 526  			}
 527  
 528  			if !dara.IsNil(extendsParameters.Queries) {
 529  				extendsQueries = extendsParameters.Queries
 530  			}
 531  
 532  		}
 533  
 534  		request_.Headers = dara.Merge(map[string]*string{
 535  			"date":                    openapiutil.GetDateUTCString(),
 536  			"host":                    client.Endpoint,
 537  			"accept":                  dara.String("application/json"),
 538  			"x-acs-signature-nonce":   openapiutil.GetNonce(),
 539  			"x-acs-signature-method":  dara.String("HMAC-SHA1"),
 540  			"x-acs-signature-version": dara.String("1.0"),
 541  			"x-acs-version":           version,
 542  			"x-acs-action":            action,
 543  			"user-agent":              openapiutil.GetUserAgent(client.UserAgent),
 544  		}, globalHeaders,
 545  			extendsHeaders,
 546  			request.Headers)
 547  		if !dara.IsNil(request.Body) {
 548  			m := dara.ToMap(request.Body)
 549  			request_.Body = dara.ToReader(openapiutil.ToForm(m))
 550  			request_.Headers["content-type"] = dara.String("application/x-www-form-urlencoded")
 551  		}
 552  
 553  		request_.Query = dara.Merge(globalQueries,
 554  			extendsQueries)
 555  		if !dara.IsNil(request.Query) {
 556  			request_.Query = dara.Merge(request_.Query,
 557  				request.Query)
 558  		}
 559  
 560  		if dara.StringValue(authType) != "Anonymous" {
 561  			if dara.IsNil(client.Credential) {
 562  				_err = &ClientError{
 563  					Code:    dara.String("InvalidCredentials"),
 564  					Message: dara.String("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."),
 565  				}
 566  				if dara.BoolValue(client.DisableSDKError) != true {
 567  					_err = dara.TeaSDKError(_err)
 568  				}
 569  				return _result, _err
 570  			}
 571  
 572  			credentialModel, _err := client.Credential.GetCredential()
 573  			if _err != nil {
 574  				retriesAttempted++
 575  				retryPolicyContext = &dara.RetryPolicyContext{
 576  					RetriesAttempted: retriesAttempted,
 577  					HttpRequest:      request_,
 578  					HttpResponse:     response_,
 579  					Exception:        _err,
 580  				}
 581  				_resultErr = _err
 582  				continue
 583  			}
 584  
 585  			if !dara.IsNil(credentialModel.ProviderName) {
 586  				request_.Headers["x-acs-credentials-provider"] = credentialModel.ProviderName
 587  			}
 588  
 589  			credentialType := dara.StringValue(credentialModel.Type)
 590  			if credentialType == "bearer" {
 591  				bearerToken := dara.StringValue(credentialModel.BearerToken)
 592  				request_.Headers["x-acs-bearer-token"] = dara.String(bearerToken)
 593  				request_.Headers["x-acs-signature-type"] = dara.String("BEARERTOKEN")
 594  			} else if credentialType == "id_token" {
 595  				idToken := dara.StringValue(credentialModel.SecurityToken)
 596  				request_.Headers["x-acs-zero-trust-idtoken"] = dara.String(idToken)
 597  			} else {
 598  				accessKeyId := dara.StringValue(credentialModel.AccessKeyId)
 599  				accessKeySecret := dara.StringValue(credentialModel.AccessKeySecret)
 600  				securityToken := dara.StringValue(credentialModel.SecurityToken)
 601  				if !dara.IsNil(dara.String(securityToken)) && securityToken != "" {
 602  					request_.Headers["x-acs-accesskey-id"] = dara.String(accessKeyId)
 603  					request_.Headers["x-acs-security-token"] = dara.String(securityToken)
 604  				}
 605  
 606  				stringToSign := dara.StringValue(openapiutil.GetStringToSign(request_))
 607  				request_.Headers["authorization"] = dara.String("acs " + accessKeyId + ":" + dara.StringValue(openapiutil.GetROASignature(dara.String(stringToSign), dara.String(accessKeySecret))))
 608  			}
 609  
 610  		}
 611  
 612  		response_, _err := dara.DoRequestWithCtx(ctx, request_, _runtime)
 613  		if _err != nil {
 614  			retriesAttempted++
 615  			retryPolicyContext = &dara.RetryPolicyContext{
 616  				RetriesAttempted: retriesAttempted,
 617  				HttpRequest:      request_,
 618  				HttpResponse:     response_,
 619  				Exception:        _err,
 620  			}
 621  			_resultErr = _err
 622  			continue
 623  		}
 624  
 625  		_result, _err = doROAFormRequestWithCtx_opResponse(response_, client, bodyType)
 626  		if _err != nil {
 627  			retriesAttempted++
 628  			retryPolicyContext = &dara.RetryPolicyContext{
 629  				RetriesAttempted: retriesAttempted,
 630  				HttpRequest:      request_,
 631  				HttpResponse:     response_,
 632  				Exception:        _err,
 633  			}
 634  			_resultErr = _err
 635  			continue
 636  		}
 637  
 638  		return _result, _err
 639  	}
 640  	if dara.BoolValue(client.DisableSDKError) != true {
 641  		_resultErr = dara.TeaSDKError(_resultErr)
 642  	}
 643  	return _result, _resultErr
 644  }
 645  
 646  // Description:
 647  //
 648  // # Encapsulate the request and invoke the network
 649  //
 650  // @param action - api name
 651  //
 652  // @param version - product version
 653  //
 654  // @param protocol - http or https
 655  //
 656  // @param method - e.g. GET
 657  //
 658  // @param authType - authorization type e.g. AK
 659  //
 660  // @param bodyType - response body type e.g. String
 661  //
 662  // @param request - object of OpenApiRequest
 663  //
 664  // @param runtime - which controls some details of call api, such as retry times
 665  //
 666  // @return the response
 667  func (client *Client) DoRequestWithCtx(ctx context.Context, params *openapiutil.Params, request *openapiutil.OpenApiRequest, runtime *dara.RuntimeOptions) (_result map[string]interface{}, _err error) {
 668  	_runtime := dara.NewRuntimeObject(map[string]interface{}{
 669  		"key":            dara.ToString(dara.Default(dara.StringValue(runtime.Key), dara.StringValue(client.Key))),
 670  		"cert":           dara.ToString(dara.Default(dara.StringValue(runtime.Cert), dara.StringValue(client.Cert))),
 671  		"ca":             dara.ToString(dara.Default(dara.StringValue(runtime.Ca), dara.StringValue(client.Ca))),
 672  		"readTimeout":    dara.ForceInt(dara.Default(dara.IntValue(runtime.ReadTimeout), dara.IntValue(client.ReadTimeout))),
 673  		"connectTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ConnectTimeout), dara.IntValue(client.ConnectTimeout))),
 674  		"httpProxy":      dara.ToString(dara.Default(dara.StringValue(runtime.HttpProxy), dara.StringValue(client.HttpProxy))),
 675  		"httpsProxy":     dara.ToString(dara.Default(dara.StringValue(runtime.HttpsProxy), dara.StringValue(client.HttpsProxy))),
 676  		"noProxy":        dara.ToString(dara.Default(dara.StringValue(runtime.NoProxy), dara.StringValue(client.NoProxy))),
 677  		"socks5Proxy":    dara.ToString(dara.Default(dara.StringValue(runtime.Socks5Proxy), dara.StringValue(client.Socks5Proxy))),
 678  		"socks5NetWork":  dara.ToString(dara.Default(dara.StringValue(runtime.Socks5NetWork), dara.StringValue(client.Socks5NetWork))),
 679  		"maxIdleConns":   dara.ForceInt(dara.Default(dara.IntValue(runtime.MaxIdleConns), dara.IntValue(client.MaxIdleConns))),
 680  		"retryOptions":   client.RetryOptions,
 681  		"ignoreSSL":      dara.BoolValue(runtime.IgnoreSSL),
 682  		"httpClient":     client.HttpClient,
 683  		"tlsMinVersion":  dara.StringValue(client.TlsMinVersion),
 684  	})
 685  
 686  	var retryPolicyContext *dara.RetryPolicyContext
 687  	var request_ *dara.Request
 688  	var response_ *dara.Response
 689  	var _resultErr error
 690  	retriesAttempted := int(0)
 691  	retryPolicyContext = &dara.RetryPolicyContext{
 692  		RetriesAttempted: retriesAttempted,
 693  	}
 694  
 695  	_result = make(map[string]interface{})
 696  	for dara.ShouldRetry(_runtime.RetryOptions, retryPolicyContext) {
 697  		_resultErr = nil
 698  		_backoffDelayTime := dara.GetBackoffDelay(_runtime.RetryOptions, retryPolicyContext)
 699  		dara.Sleep(_backoffDelayTime)
 700  
 701  		request_ = dara.NewRequest()
 702  		request_.Protocol = dara.String(dara.ToString(dara.Default(dara.StringValue(client.Protocol), dara.StringValue(params.Protocol))))
 703  		request_.Method = params.Method
 704  		request_.Pathname = params.Pathname
 705  		globalQueries := make(map[string]*string)
 706  		globalHeaders := make(map[string]*string)
 707  		if !dara.IsNil(client.GlobalParameters) {
 708  			globalParams := client.GlobalParameters
 709  			if !dara.IsNil(globalParams.Queries) {
 710  				globalQueries = globalParams.Queries
 711  			}
 712  
 713  			if !dara.IsNil(globalParams.Headers) {
 714  				globalHeaders = globalParams.Headers
 715  			}
 716  
 717  		}
 718  
 719  		extendsHeaders := make(map[string]*string)
 720  		extendsQueries := make(map[string]*string)
 721  		if !dara.IsNil(runtime.ExtendsParameters) {
 722  			extendsParameters := runtime.ExtendsParameters
 723  			if !dara.IsNil(extendsParameters.Headers) {
 724  				extendsHeaders = extendsParameters.Headers
 725  			}
 726  
 727  			if !dara.IsNil(extendsParameters.Queries) {
 728  				extendsQueries = extendsParameters.Queries
 729  			}
 730  
 731  		}
 732  
 733  		request_.Query = dara.Merge(globalQueries,
 734  			extendsQueries,
 735  			request.Query)
 736  		// endpoint is setted in product client
 737  		request_.Headers = dara.Merge(map[string]*string{
 738  			"host":                  client.Endpoint,
 739  			"x-acs-version":         params.Version,
 740  			"x-acs-action":          params.Action,
 741  			"user-agent":            openapiutil.GetUserAgent(client.UserAgent),
 742  			"x-acs-date":            openapiutil.GetTimestamp(),
 743  			"x-acs-signature-nonce": openapiutil.GetNonce(),
 744  			"accept":                dara.String("application/json"),
 745  		}, globalHeaders,
 746  			extendsHeaders,
 747  			request.Headers)
 748  		if dara.StringValue(params.Style) == "RPC" {
 749  			headers, _err := client.GetRpcHeaders()
 750  			if _err != nil {
 751  				retriesAttempted++
 752  				retryPolicyContext = &dara.RetryPolicyContext{
 753  					RetriesAttempted: retriesAttempted,
 754  					HttpRequest:      request_,
 755  					HttpResponse:     response_,
 756  					Exception:        _err,
 757  				}
 758  				_resultErr = _err
 759  				continue
 760  			}
 761  
 762  			if !dara.IsNil(headers) {
 763  				request_.Headers = dara.Merge(request_.Headers,
 764  					headers)
 765  			}
 766  
 767  		}
 768  
 769  		signatureAlgorithm := dara.ToString(dara.Default(dara.StringValue(client.SignatureAlgorithm), "ACS3-HMAC-SHA256"))
 770  		hashedRequestPayload := openapiutil.Hash(dara.BytesFromString("", "utf-8"), dara.String(signatureAlgorithm))
 771  		if !dara.IsNil(request.Stream) {
 772  			tmp, _err := dara.ReadAsBytes(request.Stream)
 773  			if _err != nil {
 774  				retriesAttempted++
 775  				retryPolicyContext = &dara.RetryPolicyContext{
 776  					RetriesAttempted: retriesAttempted,
 777  					HttpRequest:      request_,
 778  					HttpResponse:     response_,
 779  					Exception:        _err,
 780  				}
 781  				_resultErr = _err
 782  				continue
 783  			}
 784  
 785  			hashedRequestPayload = openapiutil.Hash(tmp, dara.String(signatureAlgorithm))
 786  			request_.Body = dara.ToReader(tmp)
 787  			request_.Headers["content-type"] = dara.String("application/octet-stream")
 788  		} else {
 789  			if !dara.IsNil(request.Body) {
 790  				if dara.StringValue(params.ReqBodyType) == "byte" {
 791  					byteObj := []byte(dara.ToString(request.Body))
 792  					hashedRequestPayload = openapiutil.Hash(byteObj, dara.String(signatureAlgorithm))
 793  					request_.Body = dara.ToReader(byteObj)
 794  				} else if dara.StringValue(params.ReqBodyType) == "json" {
 795  					jsonObj := dara.Stringify(request.Body)
 796  					hashedRequestPayload = openapiutil.Hash(dara.ToBytes(jsonObj, "utf8"), dara.String(signatureAlgorithm))
 797  					request_.Body = dara.ToReader(dara.String(jsonObj))
 798  					request_.Headers["content-type"] = dara.String("application/json; charset=utf-8")
 799  				} else {
 800  					m := dara.ToMap(request.Body)
 801  					formObj := dara.StringValue(openapiutil.ToForm(m))
 802  					hashedRequestPayload = openapiutil.Hash(dara.ToBytes(formObj, "utf8"), dara.String(signatureAlgorithm))
 803  					request_.Body = dara.ToReader(dara.String(formObj))
 804  					request_.Headers["content-type"] = dara.String("application/x-www-form-urlencoded")
 805  				}
 806  
 807  			}
 808  
 809  		}
 810  
 811  		request_.Headers["x-acs-content-sha256"] = dara.String(hex.EncodeToString(hashedRequestPayload))
 812  		if dara.StringValue(params.AuthType) != "Anonymous" {
 813  			if dara.IsNil(client.Credential) {
 814  				_err = &ClientError{
 815  					Code:    dara.String("InvalidCredentials"),
 816  					Message: dara.String("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."),
 817  				}
 818  				if dara.BoolValue(client.DisableSDKError) != true {
 819  					_err = dara.TeaSDKError(_err)
 820  				}
 821  				return _result, _err
 822  			}
 823  
 824  			credentialModel, _err := client.Credential.GetCredential()
 825  			if _err != nil {
 826  				retriesAttempted++
 827  				retryPolicyContext = &dara.RetryPolicyContext{
 828  					RetriesAttempted: retriesAttempted,
 829  					HttpRequest:      request_,
 830  					HttpResponse:     response_,
 831  					Exception:        _err,
 832  				}
 833  				_resultErr = _err
 834  				continue
 835  			}
 836  
 837  			if !dara.IsNil(credentialModel.ProviderName) {
 838  				request_.Headers["x-acs-credentials-provider"] = credentialModel.ProviderName
 839  			}
 840  
 841  			authType := dara.StringValue(credentialModel.Type)
 842  			if authType == "bearer" {
 843  				bearerToken := dara.StringValue(credentialModel.BearerToken)
 844  				request_.Headers["x-acs-bearer-token"] = dara.String(bearerToken)
 845  				if dara.StringValue(params.Style) == "RPC" {
 846  					request_.Query["SignatureType"] = dara.String("BEARERTOKEN")
 847  				} else {
 848  					request_.Headers["x-acs-signature-type"] = dara.String("BEARERTOKEN")
 849  				}
 850  
 851  			} else if authType == "id_token" {
 852  				idToken := dara.StringValue(credentialModel.SecurityToken)
 853  				request_.Headers["x-acs-zero-trust-idtoken"] = dara.String(idToken)
 854  			} else {
 855  				accessKeyId := dara.StringValue(credentialModel.AccessKeyId)
 856  				accessKeySecret := dara.StringValue(credentialModel.AccessKeySecret)
 857  				securityToken := dara.StringValue(credentialModel.SecurityToken)
 858  				if !dara.IsNil(dara.String(securityToken)) && securityToken != "" {
 859  					request_.Headers["x-acs-accesskey-id"] = dara.String(accessKeyId)
 860  					request_.Headers["x-acs-security-token"] = dara.String(securityToken)
 861  				}
 862  
 863  				request_.Headers["Authorization"] = openapiutil.GetAuthorization(request_, dara.String(signatureAlgorithm), dara.String(hex.EncodeToString(hashedRequestPayload)), dara.String(accessKeyId), dara.String(accessKeySecret))
 864  			}
 865  
 866  		}
 867  
 868  		response_, _err := dara.DoRequestWithCtx(ctx, request_, _runtime)
 869  		if _err != nil {
 870  			retriesAttempted++
 871  			retryPolicyContext = &dara.RetryPolicyContext{
 872  				RetriesAttempted: retriesAttempted,
 873  				HttpRequest:      request_,
 874  				HttpResponse:     response_,
 875  				Exception:        _err,
 876  			}
 877  			_resultErr = _err
 878  			continue
 879  		}
 880  
 881  		_result, _err = doRequestWithCtx_opResponse(response_, client, params)
 882  		if _err != nil {
 883  			retriesAttempted++
 884  			retryPolicyContext = &dara.RetryPolicyContext{
 885  				RetriesAttempted: retriesAttempted,
 886  				HttpRequest:      request_,
 887  				HttpResponse:     response_,
 888  				Exception:        _err,
 889  			}
 890  			_resultErr = _err
 891  			continue
 892  		}
 893  
 894  		return _result, _err
 895  	}
 896  	if dara.BoolValue(client.DisableSDKError) != true {
 897  		_resultErr = dara.TeaSDKError(_resultErr)
 898  	}
 899  	return _result, _resultErr
 900  }
 901  
 902  // Description:
 903  //
 904  // # Encapsulate the request and invoke the network
 905  //
 906  // @param action - api name
 907  //
 908  // @param version - product version
 909  //
 910  // @param protocol - http or https
 911  //
 912  // @param method - e.g. GET
 913  //
 914  // @param authType - authorization type e.g. AK
 915  //
 916  // @param bodyType - response body type e.g. String
 917  //
 918  // @param request - object of OpenApiRequest
 919  //
 920  // @param runtime - which controls some details of call api, such as retry times
 921  //
 922  // @return the response
 923  func (client *Client) ExecuteWithCtx(ctx context.Context, params *openapiutil.Params, request *openapiutil.OpenApiRequest, runtime *dara.RuntimeOptions) (_result map[string]interface{}, _err error) {
 924  	_runtime := dara.NewRuntimeObject(map[string]interface{}{
 925  		"key":            dara.ToString(dara.Default(dara.StringValue(runtime.Key), dara.StringValue(client.Key))),
 926  		"cert":           dara.ToString(dara.Default(dara.StringValue(runtime.Cert), dara.StringValue(client.Cert))),
 927  		"ca":             dara.ToString(dara.Default(dara.StringValue(runtime.Ca), dara.StringValue(client.Ca))),
 928  		"readTimeout":    dara.ForceInt(dara.Default(dara.IntValue(runtime.ReadTimeout), dara.IntValue(client.ReadTimeout))),
 929  		"connectTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ConnectTimeout), dara.IntValue(client.ConnectTimeout))),
 930  		"httpProxy":      dara.ToString(dara.Default(dara.StringValue(runtime.HttpProxy), dara.StringValue(client.HttpProxy))),
 931  		"httpsProxy":     dara.ToString(dara.Default(dara.StringValue(runtime.HttpsProxy), dara.StringValue(client.HttpsProxy))),
 932  		"noProxy":        dara.ToString(dara.Default(dara.StringValue(runtime.NoProxy), dara.StringValue(client.NoProxy))),
 933  		"socks5Proxy":    dara.ToString(dara.Default(dara.StringValue(runtime.Socks5Proxy), dara.StringValue(client.Socks5Proxy))),
 934  		"socks5NetWork":  dara.ToString(dara.Default(dara.StringValue(runtime.Socks5NetWork), dara.StringValue(client.Socks5NetWork))),
 935  		"maxIdleConns":   dara.ForceInt(dara.Default(dara.IntValue(runtime.MaxIdleConns), dara.IntValue(client.MaxIdleConns))),
 936  		"retryOptions":   client.RetryOptions,
 937  		"ignoreSSL":      dara.BoolValue(runtime.IgnoreSSL),
 938  		"httpClient":     client.HttpClient,
 939  		"tlsMinVersion":  dara.StringValue(client.TlsMinVersion),
 940  		"disableHttp2":   dara.ForceBoolean(dara.Default(dara.BoolValue(client.DisableHttp2), false)),
 941  	})
 942  
 943  	var retryPolicyContext *dara.RetryPolicyContext
 944  	var request_ *dara.Request
 945  	var response_ *dara.Response
 946  	var _resultErr error
 947  	retriesAttempted := int(0)
 948  	retryPolicyContext = &dara.RetryPolicyContext{
 949  		RetriesAttempted: retriesAttempted,
 950  	}
 951  
 952  	_result = make(map[string]interface{})
 953  	for dara.ShouldRetry(_runtime.RetryOptions, retryPolicyContext) {
 954  		_resultErr = nil
 955  		_backoffDelayTime := dara.GetBackoffDelay(_runtime.RetryOptions, retryPolicyContext)
 956  		dara.Sleep(_backoffDelayTime)
 957  
 958  		request_ = dara.NewRequest()
 959  		// spi = new Gateway();//Gateway implements SPI,这一步在产品 SDK 中实例化
 960  		headers, _err := client.GetRpcHeaders()
 961  		if _err != nil {
 962  			retriesAttempted++
 963  			retryPolicyContext = &dara.RetryPolicyContext{
 964  				RetriesAttempted: retriesAttempted,
 965  				HttpRequest:      request_,
 966  				HttpResponse:     response_,
 967  				Exception:        _err,
 968  			}
 969  			_resultErr = _err
 970  			continue
 971  		}
 972  
 973  		globalQueries := make(map[string]*string)
 974  		globalHeaders := make(map[string]*string)
 975  		if !dara.IsNil(client.GlobalParameters) {
 976  			globalParams := client.GlobalParameters
 977  			if !dara.IsNil(globalParams.Queries) {
 978  				globalQueries = globalParams.Queries
 979  			}
 980  
 981  			if !dara.IsNil(globalParams.Headers) {
 982  				globalHeaders = globalParams.Headers
 983  			}
 984  
 985  		}
 986  
 987  		extendsHeaders := make(map[string]*string)
 988  		extendsQueries := make(map[string]*string)
 989  		if !dara.IsNil(runtime.ExtendsParameters) {
 990  			extendsParameters := runtime.ExtendsParameters
 991  			if !dara.IsNil(extendsParameters.Headers) {
 992  				extendsHeaders = extendsParameters.Headers
 993  			}
 994  
 995  			if !dara.IsNil(extendsParameters.Queries) {
 996  				extendsQueries = extendsParameters.Queries
 997  			}
 998  
 999  		}
1000  
1001  		requestContext := &spi.InterceptorContextRequest{
1002  			Headers: dara.Merge(globalHeaders,
1003  				extendsHeaders,
1004  				request.Headers,
1005  				headers),
1006  			Query: dara.Merge(globalQueries,
1007  				extendsQueries,
1008  				request.Query),
1009  			Body:               request.Body,
1010  			Stream:             request.Stream,
1011  			HostMap:            request.HostMap,
1012  			Pathname:           params.Pathname,
1013  			ProductId:          client.ProductId,
1014  			Action:             params.Action,
1015  			Version:            params.Version,
1016  			Protocol:           dara.String(dara.ToString(dara.Default(dara.StringValue(client.Protocol), dara.StringValue(params.Protocol)))),
1017  			Method:             dara.String(dara.ToString(dara.Default(dara.StringValue(client.Method), dara.StringValue(params.Method)))),
1018  			AuthType:           params.AuthType,
1019  			BodyType:           params.BodyType,
1020  			ReqBodyType:        params.ReqBodyType,
1021  			Style:              params.Style,
1022  			Credential:         client.Credential,
1023  			SignatureVersion:   client.SignatureVersion,
1024  			SignatureAlgorithm: client.SignatureAlgorithm,
1025  			UserAgent:          openapiutil.GetUserAgent(client.UserAgent),
1026  		}
1027  		configurationContext := &spi.InterceptorContextConfiguration{
1028  			RegionId:     client.RegionId,
1029  			Endpoint:     dara.String(dara.ToString(dara.Default(dara.StringValue(request.EndpointOverride), dara.StringValue(client.Endpoint)))),
1030  			EndpointRule: client.EndpointRule,
1031  			EndpointMap:  client.EndpointMap,
1032  			EndpointType: client.EndpointType,
1033  			Network:      client.Network,
1034  			Suffix:       client.Suffix,
1035  		}
1036  		interceptorContext := &spi.InterceptorContext{
1037  			Request:       requestContext,
1038  			Configuration: configurationContext,
1039  		}
1040  		attributeMap := &spi.AttributeMap{}
1041  		if !dara.IsNil(client.AttributeMap) {
1042  			attributeMap = client.AttributeMap
1043  		}
1044  
1045  		// 1. spi.modifyConfiguration(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
1046  		_err = client.Spi.ModifyConfiguration(interceptorContext, attributeMap)
1047  		if _err != nil {
1048  			retriesAttempted++
1049  			retryPolicyContext = &dara.RetryPolicyContext{
1050  				RetriesAttempted: retriesAttempted,
1051  				HttpRequest:      request_,
1052  				HttpResponse:     response_,
1053  				Exception:        _err,
1054  			}
1055  			_resultErr = _err
1056  			continue
1057  		}
1058  
1059  		// 2. spi.modifyRequest(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
1060  		_err = client.Spi.ModifyRequest(interceptorContext, attributeMap)
1061  		if _err != nil {
1062  			retriesAttempted++
1063  			retryPolicyContext = &dara.RetryPolicyContext{
1064  				RetriesAttempted: retriesAttempted,
1065  				HttpRequest:      request_,
1066  				HttpResponse:     response_,
1067  				Exception:        _err,
1068  			}
1069  			_resultErr = _err
1070  			continue
1071  		}
1072  
1073  		request_.Protocol = interceptorContext.Request.Protocol
1074  		request_.Method = interceptorContext.Request.Method
1075  		request_.Pathname = interceptorContext.Request.Pathname
1076  		request_.Query = interceptorContext.Request.Query
1077  		request_.Body = interceptorContext.Request.Stream
1078  		request_.Headers = interceptorContext.Request.Headers
1079  		response_, _err := dara.DoRequestWithCtx(ctx, request_, _runtime)
1080  		if _err != nil {
1081  			retriesAttempted++
1082  			retryPolicyContext = &dara.RetryPolicyContext{
1083  				RetriesAttempted: retriesAttempted,
1084  				HttpRequest:      request_,
1085  				HttpResponse:     response_,
1086  				Exception:        _err,
1087  			}
1088  			_resultErr = _err
1089  			continue
1090  		}
1091  
1092  		responseContext := &spi.InterceptorContextResponse{
1093  			StatusCode: response_.StatusCode,
1094  			Headers:    response_.Headers,
1095  			Body:       response_.Body,
1096  		}
1097  		interceptorContext.Response = responseContext
1098  		// 3. spi.modifyResponse(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
1099  		_err = client.Spi.ModifyResponse(interceptorContext, attributeMap)
1100  		if _err != nil {
1101  			retriesAttempted++
1102  			retryPolicyContext = &dara.RetryPolicyContext{
1103  				RetriesAttempted: retriesAttempted,
1104  				HttpRequest:      request_,
1105  				HttpResponse:     response_,
1106  				Exception:        _err,
1107  			}
1108  			_resultErr = _err
1109  			continue
1110  		}
1111  
1112  		_err = dara.Convert(map[string]interface{}{
1113  			"headers":    interceptorContext.Response.Headers,
1114  			"statusCode": dara.IntValue(interceptorContext.Response.StatusCode),
1115  			"body":       interceptorContext.Response.DeserializedBody,
1116  		}, &_result)
1117  
1118  		return _result, _err
1119  	}
1120  	if dara.BoolValue(client.DisableSDKError) != true {
1121  		_resultErr = dara.TeaSDKError(_resultErr)
1122  	}
1123  	return _result, _resultErr
1124  }
1125  
1126  func (client *Client) CallSSEApiWithCtx(ctx context.Context, params *openapiutil.Params, request *openapiutil.OpenApiRequest, runtime *dara.RuntimeOptions, _yield chan *SSEResponse, _yieldErr chan error) {
1127  	defer close(_yield)
1128  	defer close(_yieldErr)
1129  	_runtime := dara.NewRuntimeObject(map[string]interface{}{
1130  		"key":            dara.ToString(dara.Default(dara.StringValue(runtime.Key), dara.StringValue(client.Key))),
1131  		"cert":           dara.ToString(dara.Default(dara.StringValue(runtime.Cert), dara.StringValue(client.Cert))),
1132  		"ca":             dara.ToString(dara.Default(dara.StringValue(runtime.Ca), dara.StringValue(client.Ca))),
1133  		"readTimeout":    dara.ForceInt(dara.Default(dara.IntValue(runtime.ReadTimeout), dara.IntValue(client.ReadTimeout))),
1134  		"connectTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ConnectTimeout), dara.IntValue(client.ConnectTimeout))),
1135  		"httpProxy":      dara.ToString(dara.Default(dara.StringValue(runtime.HttpProxy), dara.StringValue(client.HttpProxy))),
1136  		"httpsProxy":     dara.ToString(dara.Default(dara.StringValue(runtime.HttpsProxy), dara.StringValue(client.HttpsProxy))),
1137  		"noProxy":        dara.ToString(dara.Default(dara.StringValue(runtime.NoProxy), dara.StringValue(client.NoProxy))),
1138  		"socks5Proxy":    dara.ToString(dara.Default(dara.StringValue(runtime.Socks5Proxy), dara.StringValue(client.Socks5Proxy))),
1139  		"socks5NetWork":  dara.ToString(dara.Default(dara.StringValue(runtime.Socks5NetWork), dara.StringValue(client.Socks5NetWork))),
1140  		"maxIdleConns":   dara.ForceInt(dara.Default(dara.IntValue(runtime.MaxIdleConns), dara.IntValue(client.MaxIdleConns))),
1141  		"retryOptions":   client.RetryOptions,
1142  		"ignoreSSL":      dara.BoolValue(runtime.IgnoreSSL),
1143  		"httpClient":     client.HttpClient,
1144  		"tlsMinVersion":  dara.StringValue(client.TlsMinVersion),
1145  	})
1146  
1147  	var retryPolicyContext *dara.RetryPolicyContext
1148  	var request_ *dara.Request
1149  	var response_ *dara.Response
1150  	var _resultErr error
1151  	retriesAttempted := int(0)
1152  	retryPolicyContext = &dara.RetryPolicyContext{
1153  		RetriesAttempted: retriesAttempted,
1154  	}
1155  
1156  	for dara.ShouldRetry(_runtime.RetryOptions, retryPolicyContext) {
1157  		_resultErr = nil
1158  		_backoffDelayTime := dara.GetBackoffDelay(_runtime.RetryOptions, retryPolicyContext)
1159  		dara.Sleep(_backoffDelayTime)
1160  
1161  		request_ = dara.NewRequest()
1162  		request_.Protocol = dara.String(dara.ToString(dara.Default(dara.StringValue(client.Protocol), dara.StringValue(params.Protocol))))
1163  		request_.Method = params.Method
1164  		request_.Pathname = params.Pathname
1165  		globalQueries := make(map[string]*string)
1166  		globalHeaders := make(map[string]*string)
1167  		if !dara.IsNil(client.GlobalParameters) {
1168  			globalParams := client.GlobalParameters
1169  			if !dara.IsNil(globalParams.Queries) {
1170  				globalQueries = globalParams.Queries
1171  			}
1172  
1173  			if !dara.IsNil(globalParams.Headers) {
1174  				globalHeaders = globalParams.Headers
1175  			}
1176  
1177  		}
1178  
1179  		extendsHeaders := make(map[string]*string)
1180  		extendsQueries := make(map[string]*string)
1181  		if !dara.IsNil(runtime.ExtendsParameters) {
1182  			extendsParameters := runtime.ExtendsParameters
1183  			if !dara.IsNil(extendsParameters.Headers) {
1184  				extendsHeaders = extendsParameters.Headers
1185  			}
1186  
1187  			if !dara.IsNil(extendsParameters.Queries) {
1188  				extendsQueries = extendsParameters.Queries
1189  			}
1190  
1191  		}
1192  
1193  		request_.Query = dara.Merge(globalQueries,
1194  			extendsQueries,
1195  			request.Query)
1196  		// endpoint is setted in product client
1197  		request_.Headers = dara.Merge(map[string]*string{
1198  			"host":                  client.Endpoint,
1199  			"x-acs-version":         params.Version,
1200  			"x-acs-action":          params.Action,
1201  			"user-agent":            openapiutil.GetUserAgent(client.UserAgent),
1202  			"x-acs-date":            openapiutil.GetTimestamp(),
1203  			"x-acs-signature-nonce": openapiutil.GetNonce(),
1204  			"accept":                dara.String("application/json"),
1205  		}, extendsHeaders,
1206  			globalHeaders,
1207  			request.Headers)
1208  		if dara.StringValue(params.Style) == "RPC" {
1209  			headers, _err := client.GetRpcHeaders()
1210  			if _err != nil {
1211  				retriesAttempted++
1212  				retryPolicyContext = &dara.RetryPolicyContext{
1213  					RetriesAttempted: retriesAttempted,
1214  					HttpRequest:      request_,
1215  					HttpResponse:     response_,
1216  					Exception:        _err,
1217  				}
1218  				_resultErr = _err
1219  				continue
1220  			}
1221  
1222  			if !dara.IsNil(headers) {
1223  				request_.Headers = dara.Merge(request_.Headers,
1224  					headers)
1225  			}
1226  
1227  		}
1228  
1229  		signatureAlgorithm := dara.ToString(dara.Default(dara.StringValue(client.SignatureAlgorithm), "ACS3-HMAC-SHA256"))
1230  		hashedRequestPayload := openapiutil.Hash(dara.BytesFromString("", "utf-8"), dara.String(signatureAlgorithm))
1231  		if !dara.IsNil(request.Stream) {
1232  			tmp, _err := dara.ReadAsBytes(request.Stream)
1233  			if _err != nil {
1234  				retriesAttempted++
1235  				retryPolicyContext = &dara.RetryPolicyContext{
1236  					RetriesAttempted: retriesAttempted,
1237  					HttpRequest:      request_,
1238  					HttpResponse:     response_,
1239  					Exception:        _err,
1240  				}
1241  				_resultErr = _err
1242  				continue
1243  			}
1244  
1245  			hashedRequestPayload = openapiutil.Hash(tmp, dara.String(signatureAlgorithm))
1246  			request_.Body = dara.ToReader(tmp)
1247  			request_.Headers["content-type"] = dara.String("application/octet-stream")
1248  		} else {
1249  			if !dara.IsNil(request.Body) {
1250  				if dara.StringValue(params.ReqBodyType) == "byte" {
1251  					byteObj := []byte(dara.ToString(request.Body))
1252  					hashedRequestPayload = openapiutil.Hash(byteObj, dara.String(signatureAlgorithm))
1253  					request_.Body = dara.ToReader(byteObj)
1254  				} else if dara.StringValue(params.ReqBodyType) == "json" {
1255  					jsonObj := dara.Stringify(request.Body)
1256  					hashedRequestPayload = openapiutil.Hash(dara.ToBytes(jsonObj, "utf8"), dara.String(signatureAlgorithm))
1257  					request_.Body = dara.ToReader(dara.String(jsonObj))
1258  					request_.Headers["content-type"] = dara.String("application/json; charset=utf-8")
1259  				} else {
1260  					m := dara.ToMap(request.Body)
1261  					formObj := dara.StringValue(openapiutil.ToForm(m))
1262  					hashedRequestPayload = openapiutil.Hash(dara.ToBytes(formObj, "utf8"), dara.String(signatureAlgorithm))
1263  					request_.Body = dara.ToReader(dara.String(formObj))
1264  					request_.Headers["content-type"] = dara.String("application/x-www-form-urlencoded")
1265  				}
1266  
1267  			}
1268  
1269  		}
1270  
1271  		request_.Headers["x-acs-content-sha256"] = dara.String(hex.EncodeToString(hashedRequestPayload))
1272  		if dara.StringValue(params.AuthType) != "Anonymous" {
1273  			credentialModel, _err := client.Credential.GetCredential()
1274  			if _err != nil {
1275  				retriesAttempted++
1276  				retryPolicyContext = &dara.RetryPolicyContext{
1277  					RetriesAttempted: retriesAttempted,
1278  					HttpRequest:      request_,
1279  					HttpResponse:     response_,
1280  					Exception:        _err,
1281  				}
1282  				_resultErr = _err
1283  				continue
1284  			}
1285  
1286  			if !dara.IsNil(credentialModel.ProviderName) {
1287  				request_.Headers["x-acs-credentials-provider"] = credentialModel.ProviderName
1288  			}
1289  
1290  			authType := dara.StringValue(credentialModel.Type)
1291  			if authType == "bearer" {
1292  				bearerToken := dara.StringValue(credentialModel.BearerToken)
1293  				request_.Headers["x-acs-bearer-token"] = dara.String(bearerToken)
1294  			} else if authType == "id_token" {
1295  				idToken := dara.StringValue(credentialModel.SecurityToken)
1296  				request_.Headers["x-acs-zero-trust-idtoken"] = dara.String(idToken)
1297  			} else {
1298  				accessKeyId := dara.StringValue(credentialModel.AccessKeyId)
1299  				accessKeySecret := dara.StringValue(credentialModel.AccessKeySecret)
1300  				securityToken := dara.StringValue(credentialModel.SecurityToken)
1301  				if !dara.IsNil(dara.String(securityToken)) && securityToken != "" {
1302  					request_.Headers["x-acs-accesskey-id"] = dara.String(accessKeyId)
1303  					request_.Headers["x-acs-security-token"] = dara.String(securityToken)
1304  				}
1305  
1306  				request_.Headers["Authorization"] = openapiutil.GetAuthorization(request_, dara.String(signatureAlgorithm), dara.String(hex.EncodeToString(hashedRequestPayload)), dara.String(accessKeyId), dara.String(accessKeySecret))
1307  			}
1308  
1309  		}
1310  
1311  		response_, _err := dara.DoRequestWithCtx(ctx, request_, _runtime)
1312  		if _err != nil {
1313  			retriesAttempted++
1314  			retryPolicyContext = &dara.RetryPolicyContext{
1315  				RetriesAttempted: retriesAttempted,
1316  				HttpRequest:      request_,
1317  				HttpResponse:     response_,
1318  				Exception:        _err,
1319  			}
1320  			_resultErr = _err
1321  			continue
1322  		}
1323  		callSSEApiWithCtx_opResponse(ctx, _yield, _yieldErr, response_)
1324  		return
1325  	}
1326  	_yieldErr <- _resultErr
1327  	return
1328  }
1329  
1330  func (client *Client) CallApiWithCtx(ctx context.Context, params *openapiutil.Params, request *openapiutil.OpenApiRequest, runtime *dara.RuntimeOptions) (_result map[string]interface{}, _err error) {
1331  	if dara.IsNil(params) {
1332  		_err = &ClientError{
1333  			Code:    dara.String("ParameterMissing"),
1334  			Message: dara.String("'params' can not be unset"),
1335  		}
1336  		return _result, _err
1337  	}
1338  
1339  	if dara.IsNil(client.SignatureVersion) || dara.StringValue(client.SignatureVersion) != "v4" {
1340  		if dara.IsNil(client.SignatureAlgorithm) || dara.StringValue(client.SignatureAlgorithm) != "v2" {
1341  			_body, _err := client.DoRequestWithCtx(ctx, params, request, runtime)
1342  			if _err != nil {
1343  				return _result, _err
1344  			}
1345  			_result = _body
1346  			return _result, _err
1347  		} else if (dara.StringValue(params.Style) == "ROA") && (dara.StringValue(params.ReqBodyType) == "json") {
1348  			_body, _err := client.DoROARequestWithCtx(ctx, params.Action, params.Version, params.Protocol, params.Method, params.AuthType, params.Pathname, params.BodyType, request, runtime)
1349  			if _err != nil {
1350  				return _result, _err
1351  			}
1352  			_result = _body
1353  			return _result, _err
1354  		} else if dara.StringValue(params.Style) == "ROA" {
1355  			_body, _err := client.DoROAFormRequestWithCtx(ctx, params.Action, params.Version, params.Protocol, params.Method, params.AuthType, params.Pathname, params.BodyType, request, runtime)
1356  			if _err != nil {
1357  				return _result, _err
1358  			}
1359  			_result = _body
1360  			return _result, _err
1361  		} else {
1362  			_body, _err := client.DoRPCRequestWithCtx(ctx, params.Action, params.Version, params.Protocol, params.Method, params.AuthType, params.BodyType, request, runtime)
1363  			if _err != nil {
1364  				return _result, _err
1365  			}
1366  			_result = _body
1367  			return _result, _err
1368  		}
1369  
1370  	} else {
1371  		_body, _err := client.ExecuteWithCtx(ctx, params, request, runtime)
1372  		if _err != nil {
1373  			return _result, _err
1374  		}
1375  		_result = _body
1376  		return _result, _err
1377  	}
1378  
1379  }
1380  
1381  func doRPCRequestWithCtx_opResponse(response_ *dara.Response, client *Client, bodyType *string) (_result map[string]interface{}, _err error) {
1382  	if (dara.IntValue(response_.StatusCode) >= 400) && (dara.IntValue(response_.StatusCode) < 600) {
1383  		_res, _err := dara.ReadAsJSON(response_.Body)
1384  		if _err != nil {
1385  			return _result, _err
1386  		}
1387  
1388  		err := dara.ToMap(_res)
1389  		requestId := dara.Default(err["RequestId"], err["requestId"])
1390  		code := dara.Default(err["Code"], err["code"])
1391  		if (dara.ToString(code) == "Throttling") || (dara.ToString(code) == "Throttling.User") || (dara.ToString(code) == "Throttling.Api") {
1392  			_err = &ThrottlingError{
1393  				StatusCode:  response_.StatusCode,
1394  				Code:        dara.String(dara.ToString(code)),
1395  				Message:     dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + dara.ToString(requestId)),
1396  				Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1397  				RetryAfter:  openapiutil.GetThrottlingTimeLeft(response_.Headers),
1398  				Data:        err,
1399  				RequestId:   dara.String(dara.ToString(requestId)),
1400  			}
1401  			return _result, _err
1402  		} else if (dara.IntValue(response_.StatusCode) >= 400) && (dara.IntValue(response_.StatusCode) < 500) {
1403  			_err = &ClientError{
1404  				StatusCode:         response_.StatusCode,
1405  				Code:               dara.String(dara.ToString(code)),
1406  				Message:            dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + dara.ToString(requestId)),
1407  				Description:        dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1408  				Data:               err,
1409  				AccessDeniedDetail: client.GetAccessDeniedDetail(err),
1410  				RequestId:          dara.String(dara.ToString(requestId)),
1411  			}
1412  			return _result, _err
1413  		} else {
1414  			_err = &ServerError{
1415  				StatusCode:  response_.StatusCode,
1416  				Code:        dara.String(dara.ToString(code)),
1417  				Message:     dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + dara.ToString(requestId)),
1418  				Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1419  				Data:        err,
1420  				RequestId:   dara.String(dara.ToString(requestId)),
1421  			}
1422  			return _result, _err
1423  		}
1424  
1425  	}
1426  
1427  	if dara.StringValue(bodyType) == "binary" {
1428  		resp := map[string]interface{}{
1429  			"body":       response_.Body,
1430  			"headers":    response_.Headers,
1431  			"statusCode": dara.IntValue(response_.StatusCode),
1432  		}
1433  		_result = resp
1434  		return _result, _err
1435  	} else if dara.StringValue(bodyType) == "byte" {
1436  		byt, _err := dara.ReadAsBytes(response_.Body)
1437  		if _err != nil {
1438  			return _result, _err
1439  		}
1440  
1441  		_err = dara.Convert(map[string]interface{}{
1442  			"body":       byt,
1443  			"headers":    response_.Headers,
1444  			"statusCode": dara.IntValue(response_.StatusCode),
1445  		}, &_result)
1446  
1447  		return _result, _err
1448  	} else if dara.StringValue(bodyType) == "string" {
1449  		_str, _err := dara.ReadAsString(response_.Body)
1450  		if _err != nil {
1451  			return _result, _err
1452  		}
1453  
1454  		_err = dara.Convert(map[string]interface{}{
1455  			"body":       _str,
1456  			"headers":    response_.Headers,
1457  			"statusCode": dara.IntValue(response_.StatusCode),
1458  		}, &_result)
1459  
1460  		return _result, _err
1461  	} else if dara.StringValue(bodyType) == "json" {
1462  		obj, _err := dara.ReadAsJSON(response_.Body)
1463  		if _err != nil {
1464  			return _result, _err
1465  		}
1466  
1467  		res := dara.ToMap(obj)
1468  		_err = dara.Convert(map[string]interface{}{
1469  			"body":       res,
1470  			"headers":    response_.Headers,
1471  			"statusCode": dara.IntValue(response_.StatusCode),
1472  		}, &_result)
1473  
1474  		return _result, _err
1475  	} else if dara.StringValue(bodyType) == "array" {
1476  		arr, _err := dara.ReadAsJSON(response_.Body)
1477  		if _err != nil {
1478  			return _result, _err
1479  		}
1480  
1481  		_err = dara.Convert(map[string]interface{}{
1482  			"body":       arr,
1483  			"headers":    response_.Headers,
1484  			"statusCode": dara.IntValue(response_.StatusCode),
1485  		}, &_result)
1486  
1487  		return _result, _err
1488  	} else {
1489  		_err = dara.Convert(map[string]interface{}{
1490  			"headers":    response_.Headers,
1491  			"statusCode": dara.IntValue(response_.StatusCode),
1492  		}, &_result)
1493  
1494  		return _result, _err
1495  	}
1496  
1497  }
1498  
1499  func doROARequestWithCtx_opResponse(response_ *dara.Response, client *Client, bodyType *string) (_result map[string]interface{}, _err error) {
1500  	if dara.IntValue(response_.StatusCode) == 204 {
1501  		_err = dara.Convert(map[string]map[string]*string{
1502  			"headers": response_.Headers,
1503  		}, &_result)
1504  
1505  		return _result, _err
1506  	}
1507  
1508  	if (dara.IntValue(response_.StatusCode) >= 400) && (dara.IntValue(response_.StatusCode) < 600) {
1509  		_res, _err := dara.ReadAsJSON(response_.Body)
1510  		if _err != nil {
1511  			return _result, _err
1512  		}
1513  
1514  		err := dara.ToMap(_res)
1515  		requestId := dara.ToString(dara.Default(err["RequestId"], err["requestId"]))
1516  		requestId = dara.ToString(dara.Default(requestId, err["requestid"]))
1517  		code := dara.ToString(dara.Default(err["Code"], err["code"]))
1518  		if (code == "Throttling") || (code == "Throttling.User") || (code == "Throttling.Api") {
1519  			_err = &ThrottlingError{
1520  				StatusCode:  response_.StatusCode,
1521  				Code:        dara.String(code),
1522  				Message:     dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + requestId),
1523  				Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1524  				RetryAfter:  openapiutil.GetThrottlingTimeLeft(response_.Headers),
1525  				Data:        err,
1526  				RequestId:   dara.String(requestId),
1527  			}
1528  			return _result, _err
1529  		} else if (dara.IntValue(response_.StatusCode) >= 400) && (dara.IntValue(response_.StatusCode) < 500) {
1530  			_err = &ClientError{
1531  				StatusCode:         response_.StatusCode,
1532  				Code:               dara.String(code),
1533  				Message:            dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + requestId),
1534  				Description:        dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1535  				Data:               err,
1536  				AccessDeniedDetail: client.GetAccessDeniedDetail(err),
1537  				RequestId:          dara.String(requestId),
1538  			}
1539  			return _result, _err
1540  		} else {
1541  			_err = &ServerError{
1542  				StatusCode:  response_.StatusCode,
1543  				Code:        dara.String(code),
1544  				Message:     dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + requestId),
1545  				Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1546  				Data:        err,
1547  				RequestId:   dara.String(requestId),
1548  			}
1549  			return _result, _err
1550  		}
1551  
1552  	}
1553  
1554  	if dara.StringValue(bodyType) == "binary" {
1555  		resp := map[string]interface{}{
1556  			"body":       response_.Body,
1557  			"headers":    response_.Headers,
1558  			"statusCode": dara.IntValue(response_.StatusCode),
1559  		}
1560  		_result = resp
1561  		return _result, _err
1562  	} else if dara.StringValue(bodyType) == "byte" {
1563  		byt, _err := dara.ReadAsBytes(response_.Body)
1564  		if _err != nil {
1565  			return _result, _err
1566  		}
1567  
1568  		_err = dara.Convert(map[string]interface{}{
1569  			"body":       byt,
1570  			"headers":    response_.Headers,
1571  			"statusCode": dara.IntValue(response_.StatusCode),
1572  		}, &_result)
1573  
1574  		return _result, _err
1575  	} else if dara.StringValue(bodyType) == "string" {
1576  		_str, _err := dara.ReadAsString(response_.Body)
1577  		if _err != nil {
1578  			return _result, _err
1579  		}
1580  
1581  		_err = dara.Convert(map[string]interface{}{
1582  			"body":       _str,
1583  			"headers":    response_.Headers,
1584  			"statusCode": dara.IntValue(response_.StatusCode),
1585  		}, &_result)
1586  
1587  		return _result, _err
1588  	} else if dara.StringValue(bodyType) == "json" {
1589  		obj, _err := dara.ReadAsJSON(response_.Body)
1590  		if _err != nil {
1591  			return _result, _err
1592  		}
1593  
1594  		res := dara.ToMap(obj)
1595  		_err = dara.Convert(map[string]interface{}{
1596  			"body":       res,
1597  			"headers":    response_.Headers,
1598  			"statusCode": dara.IntValue(response_.StatusCode),
1599  		}, &_result)
1600  
1601  		return _result, _err
1602  	} else if dara.StringValue(bodyType) == "array" {
1603  		arr, _err := dara.ReadAsJSON(response_.Body)
1604  		if _err != nil {
1605  			return _result, _err
1606  		}
1607  
1608  		_err = dara.Convert(map[string]interface{}{
1609  			"body":       arr,
1610  			"headers":    response_.Headers,
1611  			"statusCode": dara.IntValue(response_.StatusCode),
1612  		}, &_result)
1613  
1614  		return _result, _err
1615  	} else {
1616  		_err = dara.Convert(map[string]interface{}{
1617  			"headers":    response_.Headers,
1618  			"statusCode": dara.IntValue(response_.StatusCode),
1619  		}, &_result)
1620  
1621  		return _result, _err
1622  	}
1623  
1624  }
1625  
1626  func doROAFormRequestWithCtx_opResponse(response_ *dara.Response, client *Client, bodyType *string) (_result map[string]interface{}, _err error) {
1627  	if dara.IntValue(response_.StatusCode) == 204 {
1628  		_err = dara.Convert(map[string]map[string]*string{
1629  			"headers": response_.Headers,
1630  		}, &_result)
1631  
1632  		return _result, _err
1633  	}
1634  
1635  	if (dara.IntValue(response_.StatusCode) >= 400) && (dara.IntValue(response_.StatusCode) < 600) {
1636  		_res, _err := dara.ReadAsJSON(response_.Body)
1637  		if _err != nil {
1638  			return _result, _err
1639  		}
1640  
1641  		err := dara.ToMap(_res)
1642  		requestId := dara.ToString(dara.Default(err["RequestId"], err["requestId"]))
1643  		code := dara.ToString(dara.Default(err["Code"], err["code"]))
1644  		if (code == "Throttling") || (code == "Throttling.User") || (code == "Throttling.Api") {
1645  			_err = &ThrottlingError{
1646  				StatusCode:  response_.StatusCode,
1647  				Code:        dara.String(code),
1648  				Message:     dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + requestId),
1649  				Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1650  				RetryAfter:  openapiutil.GetThrottlingTimeLeft(response_.Headers),
1651  				Data:        err,
1652  				RequestId:   dara.String(requestId),
1653  			}
1654  			return _result, _err
1655  		} else if (dara.IntValue(response_.StatusCode) >= 400) && (dara.IntValue(response_.StatusCode) < 500) {
1656  			_err = &ClientError{
1657  				StatusCode:         response_.StatusCode,
1658  				Code:               dara.String(code),
1659  				Message:            dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + requestId),
1660  				Description:        dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1661  				Data:               err,
1662  				AccessDeniedDetail: client.GetAccessDeniedDetail(err),
1663  				RequestId:          dara.String(requestId),
1664  			}
1665  			return _result, _err
1666  		} else {
1667  			_err = &ServerError{
1668  				StatusCode:  response_.StatusCode,
1669  				Code:        dara.String(code),
1670  				Message:     dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + requestId),
1671  				Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1672  				Data:        err,
1673  				RequestId:   dara.String(requestId),
1674  			}
1675  			return _result, _err
1676  		}
1677  
1678  	}
1679  
1680  	if dara.StringValue(bodyType) == "binary" {
1681  		resp := map[string]interface{}{
1682  			"body":       response_.Body,
1683  			"headers":    response_.Headers,
1684  			"statusCode": dara.IntValue(response_.StatusCode),
1685  		}
1686  		_result = resp
1687  		return _result, _err
1688  	} else if dara.StringValue(bodyType) == "byte" {
1689  		byt, _err := dara.ReadAsBytes(response_.Body)
1690  		if _err != nil {
1691  			return _result, _err
1692  		}
1693  
1694  		_err = dara.Convert(map[string]interface{}{
1695  			"body":       byt,
1696  			"headers":    response_.Headers,
1697  			"statusCode": dara.IntValue(response_.StatusCode),
1698  		}, &_result)
1699  
1700  		return _result, _err
1701  	} else if dara.StringValue(bodyType) == "string" {
1702  		_str, _err := dara.ReadAsString(response_.Body)
1703  		if _err != nil {
1704  			return _result, _err
1705  		}
1706  
1707  		_err = dara.Convert(map[string]interface{}{
1708  			"body":       _str,
1709  			"headers":    response_.Headers,
1710  			"statusCode": dara.IntValue(response_.StatusCode),
1711  		}, &_result)
1712  
1713  		return _result, _err
1714  	} else if dara.StringValue(bodyType) == "json" {
1715  		obj, _err := dara.ReadAsJSON(response_.Body)
1716  		if _err != nil {
1717  			return _result, _err
1718  		}
1719  
1720  		res := dara.ToMap(obj)
1721  		_err = dara.Convert(map[string]interface{}{
1722  			"body":       res,
1723  			"headers":    response_.Headers,
1724  			"statusCode": dara.IntValue(response_.StatusCode),
1725  		}, &_result)
1726  
1727  		return _result, _err
1728  	} else if dara.StringValue(bodyType) == "array" {
1729  		arr, _err := dara.ReadAsJSON(response_.Body)
1730  		if _err != nil {
1731  			return _result, _err
1732  		}
1733  
1734  		_err = dara.Convert(map[string]interface{}{
1735  			"body":       arr,
1736  			"headers":    response_.Headers,
1737  			"statusCode": dara.IntValue(response_.StatusCode),
1738  		}, &_result)
1739  
1740  		return _result, _err
1741  	} else {
1742  		_err = dara.Convert(map[string]interface{}{
1743  			"headers":    response_.Headers,
1744  			"statusCode": dara.IntValue(response_.StatusCode),
1745  		}, &_result)
1746  
1747  		return _result, _err
1748  	}
1749  
1750  }
1751  
1752  func doRequestWithCtx_opResponse(response_ *dara.Response, client *Client, params *openapiutil.Params) (_result map[string]interface{}, _err error) {
1753  	if (dara.IntValue(response_.StatusCode) >= 400) && (dara.IntValue(response_.StatusCode) < 600) {
1754  		err := map[string]interface{}{}
1755  		if !dara.IsNil(response_.Headers["content-type"]) && dara.StringValue(response_.Headers["content-type"]) == "text/xml;charset=utf-8" {
1756  			_str, _err := dara.ReadAsString(response_.Body)
1757  			if _err != nil {
1758  				return _result, _err
1759  			}
1760  
1761  			respMap := dara.ParseXml(_str, nil)
1762  			err = dara.ToMap(respMap["Error"])
1763  		} else {
1764  			_res, _err := dara.ReadAsJSON(response_.Body)
1765  			if _err != nil {
1766  				return _result, _err
1767  			}
1768  
1769  			err = dara.ToMap(_res)
1770  		}
1771  
1772  		requestId := dara.ToString(dara.Default(err["RequestId"], err["requestId"]))
1773  		code := dara.ToString(dara.Default(err["Code"], err["code"]))
1774  		if (code == "Throttling") || (code == "Throttling.User") || (code == "Throttling.Api") {
1775  			_err = &ThrottlingError{
1776  				StatusCode:  response_.StatusCode,
1777  				Code:        dara.String(code),
1778  				Message:     dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + requestId),
1779  				Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1780  				RetryAfter:  openapiutil.GetThrottlingTimeLeft(response_.Headers),
1781  				Data:        err,
1782  				RequestId:   dara.String(requestId),
1783  			}
1784  			return _result, _err
1785  		} else if (dara.IntValue(response_.StatusCode) >= 400) && (dara.IntValue(response_.StatusCode) < 500) {
1786  			_err = &ClientError{
1787  				StatusCode:         response_.StatusCode,
1788  				Code:               dara.String(code),
1789  				Message:            dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + requestId),
1790  				Description:        dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1791  				Data:               err,
1792  				AccessDeniedDetail: client.GetAccessDeniedDetail(err),
1793  				RequestId:          dara.String(requestId),
1794  			}
1795  			return _result, _err
1796  		} else {
1797  			_err = &ServerError{
1798  				StatusCode:  response_.StatusCode,
1799  				Code:        dara.String(code),
1800  				Message:     dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + requestId),
1801  				Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1802  				Data:        err,
1803  				RequestId:   dara.String(requestId),
1804  			}
1805  			return _result, _err
1806  		}
1807  
1808  	}
1809  
1810  	if dara.StringValue(params.BodyType) == "binary" {
1811  		resp := map[string]interface{}{
1812  			"body":       response_.Body,
1813  			"headers":    response_.Headers,
1814  			"statusCode": dara.IntValue(response_.StatusCode),
1815  		}
1816  		_result = resp
1817  		return _result, _err
1818  	} else if dara.StringValue(params.BodyType) == "byte" {
1819  		byt, _err := dara.ReadAsBytes(response_.Body)
1820  		if _err != nil {
1821  			return _result, _err
1822  		}
1823  
1824  		_err = dara.Convert(map[string]interface{}{
1825  			"body":       byt,
1826  			"headers":    response_.Headers,
1827  			"statusCode": dara.IntValue(response_.StatusCode),
1828  		}, &_result)
1829  
1830  		return _result, _err
1831  	} else if dara.StringValue(params.BodyType) == "string" {
1832  		respStr, _err := dara.ReadAsString(response_.Body)
1833  		if _err != nil {
1834  			return _result, _err
1835  		}
1836  
1837  		_err = dara.Convert(map[string]interface{}{
1838  			"body":       respStr,
1839  			"headers":    response_.Headers,
1840  			"statusCode": dara.IntValue(response_.StatusCode),
1841  		}, &_result)
1842  
1843  		return _result, _err
1844  	} else if dara.StringValue(params.BodyType) == "json" {
1845  		obj, _err := dara.ReadAsJSON(response_.Body)
1846  		if _err != nil {
1847  			return _result, _err
1848  		}
1849  
1850  		res := dara.ToMap(obj)
1851  		_err = dara.Convert(map[string]interface{}{
1852  			"body":       res,
1853  			"headers":    response_.Headers,
1854  			"statusCode": dara.IntValue(response_.StatusCode),
1855  		}, &_result)
1856  
1857  		return _result, _err
1858  	} else if dara.StringValue(params.BodyType) == "array" {
1859  		arr, _err := dara.ReadAsJSON(response_.Body)
1860  		if _err != nil {
1861  			return _result, _err
1862  		}
1863  
1864  		_err = dara.Convert(map[string]interface{}{
1865  			"body":       arr,
1866  			"headers":    response_.Headers,
1867  			"statusCode": dara.IntValue(response_.StatusCode),
1868  		}, &_result)
1869  
1870  		return _result, _err
1871  	} else {
1872  		anything, _err := dara.ReadAsString(response_.Body)
1873  		if _err != nil {
1874  			return _result, _err
1875  		}
1876  
1877  		_err = dara.Convert(map[string]interface{}{
1878  			"body":       anything,
1879  			"headers":    response_.Headers,
1880  			"statusCode": dara.IntValue(response_.StatusCode),
1881  		}, &_result)
1882  
1883  		return _result, _err
1884  	}
1885  
1886  }
1887  
1888  func callSSEApiWithCtx_opResponse(ctx context.Context, _yield chan *SSEResponse, _yieldErr chan error, response_ *dara.Response) {
1889  	if (dara.IntValue(response_.StatusCode) >= 400) && (dara.IntValue(response_.StatusCode) < 600) {
1890  		err := map[string]interface{}{}
1891  		if !dara.IsNil(response_.Headers["content-type"]) && dara.StringValue(response_.Headers["content-type"]) == "text/xml;charset=utf-8" {
1892  			_str, _err := dara.ReadAsString(response_.Body)
1893  			if _err != nil {
1894  				_yieldErr <- _err
1895  				return
1896  			}
1897  
1898  			respMap := dara.ParseXml(_str, nil)
1899  			err = dara.ToMap(respMap["Error"])
1900  		} else {
1901  			_res, _err := dara.ReadAsJSON(response_.Body)
1902  			if _err != nil {
1903  				_yieldErr <- _err
1904  				return
1905  			}
1906  
1907  			err = dara.ToMap(_res)
1908  		}
1909  
1910  		err["statusCode"] = response_.StatusCode
1911  		_err := dara.NewSDKError(map[string]interface{}{
1912  			"code":               dara.ToString(dara.Default(err["Code"], err["code"])),
1913  			"message":            "code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + dara.ToString(dara.Default(err["RequestId"], err["requestId"])),
1914  			"data":               err,
1915  			"description":        dara.ToString(dara.Default(err["Description"], err["description"])),
1916  			"accessDeniedDetail": dara.Default(err["AccessDeniedDetail"], err["accessDeniedDetail"]),
1917  		})
1918  		_yieldErr <- _err
1919  		return
1920  	}
1921  
1922  	events := make(chan *dara.SSEEvent, 1)
1923  	dara.ReadAsSSEWithContext(ctx, response_.Body, events, _yieldErr)
1924  	for event := range events {
1925  		_yield <- &SSEResponse{
1926  			StatusCode: response_.StatusCode,
1927  			Headers:    response_.Headers,
1928  			Event:      event,
1929  		}
1930  	}
1931  	return
1932  }
1933