gateway-iot/main.tea (97 lines of code) (raw):

import Url; import Util; import OpenApiUtil; import Credential; import Number; import Map; import Array; import EncodeUtil; import SignatureUtil; model Config { appKey: string, appSecret: string, endpoint: string, } model OpenApiRequest { headers?: map[string]string, query?: map[string]string, body?: any, pathname?: string, method?: string, } type @appKey = string; type @appSecret = string; type @endpoint = string; init(config: Config) { @appKey = config.appKey; @appSecret = config.appSecret; @endpoint = config.endpoint; } static function sign(method: string, appSecret: string, params: map[string]string): string { var keys : [string] = Map.keySet(params); var sortedKeys = Array.ascSort(keys); var canonicalizedResource : string = ''; var separator : string = ''; for(var key : sortedKeys) { canonicalizedResource = `${canonicalizedResource}${separator}${EncodeUtil.percentEncode(key)}`; if (!Util.empty(params[key])) { canonicalizedResource = `${canonicalizedResource}=${EncodeUtil.percentEncode(params[key])}`; } separator = '&'; } var signToString = `${method}&${EncodeUtil.percentEncode('/')}&${EncodeUtil.percentEncode(canonicalizedResource)}`; var signData = SignatureUtil.HmacSHA1Sign(signToString, `${appSecret}&`); return EncodeUtil.base64EncodeToString(signData); } api execute(request: OpenApiRequest, runtime: Util.RuntimeOptions): string { var method : string = Util.defaultString(request.method, 'POST'); __request.method = method; var url = Url.parseUrl(@endpoint); __request.protocol = url.scheme; __request.pathname = Util.defaultString(request.pathname, url.path.pathname); __request.port = Number.parseInt(url.host.port); __request.headers = { host = url.host.hostname, ...request.headers }; var params : map[string]string = {}; if (!Util.isUnset(request.body)) { var tmp = Util.assertAsMap(request.body); params = OpenApiUtil.query(tmp); } params = { AppKey = @appKey, ...request.query, ...params }; params.Signature = sign(method, @appSecret, params); if (Util.equalString(method, 'GET')) { __request.query = params; } else { var formObj = Util.toFormString(params); __request.body = formObj; __request.headers.content-type = 'application/x-www-form-urlencoded'; } } returns { if (Util.is4xx(__response.statusCode) || Util.is5xx(__response.statusCode)) { var res = Util.readAsJSON(__response.body); var err = Util.assertAsMap(res); err.statusCode = __response.statusCode; throw { code = `${err.Code}`, message = `statusCode: ${err.statusCode}, errorMessage: ${err.ErrorMessage}, requestId: ${err.RequestId}`, data = err, }; } return Util.readAsString(__response.body); } runtime { timeouted = 'retry', readTimeout = runtime.readTimeout, connectTimeout = runtime.connectTimeout, maxIdleConns = runtime.maxIdleConns, retry = { retryable = runtime.autoretry, maxAttempts = runtime.maxAttempts }, ignoreSSL = runtime.ignoreSSL }