static async {{&methodName}}(
{{#hasParameters}}
  parameters: {
    {{#parameters}}
      {{^isSingleton}}'{{&camelCaseName}}'{{&cardinality}}: {{#flowType}}{{> type}}{{/flowType}},{{/isSingleton}}
    {{/parameters}}
  }
{{/hasParameters}}
): Promise<{{#methodResponse}}"{{&methodResponse}}"{{/methodResponse}}{{#methodFlowType}}{{> type}}{{/methodFlowType}}> {
  let path = '{{&path}}';
  let body;
  let query = {};
  {{#parameters}}
    {{#required}}
      if(parameters['{{&camelCaseName}}'] === undefined) {
        throw new Error('Missing required {{&paramType}} parameter: {{&camelCaseName}}');
      }
    {{/required}}

    {{#isPathParameter}}
      path = path.replace('{{=<% %>=}}{<%&name%>}<%={{ }}=%>', `${parameters['{{&camelCaseName}}']}`);
    {{/isPathParameter}}

    {{#isBodyParameter}}
      if(parameters['{{&camelCaseName}}'] !== undefined) {
        body = parameters['{{&camelCaseName}}'];
      }
    {{/isBodyParameter}}

    {{#isQueryParameter}}
      if(parameters['{{&camelCaseName}}'] !== undefined) {
        query['{{&name}}'] = parameters['{{&camelCaseName}}'];
      }
    {{/isQueryParameter}}

  {{/parameters}}

  return await this.request(path, '{{method}}', query, body);
}
