diff --git a/helpers/codegen/__tests__/__snapshots__/codegen.spec.js.snap b/helpers/codegen/__tests__/__snapshots__/codegen.spec.js.snap index dbfc1a8cf..ec7b93a46 100644 --- a/helpers/codegen/__tests__/__snapshots__/codegen.spec.js.snap +++ b/helpers/codegen/__tests__/__snapshots__/codegen.spec.js.snap @@ -1002,6 +1002,84 @@ else end" `; +exports[`generate request for Salesforce Apex generate GET request 1`] = ` +"HttpRequest request = new HttpRequest(); +request.setMethod('GET'); +request.setEndpoint('https://httpbin.org/path/to?a=b'); + +request.setHeader('Authorization', 'Basic bW9ja1VzZXI6bW9ja1Bhc3N3b3Jk'); +request.setHeader('h1', 'h1v'); +request.setHeader('h2', 'h2v'); + +try { + Http client = new Http(); + HttpResponse response = client.send(request); + System.debug(response.getBody()); +} catch (CalloutException ex) { + System.debug('An error occured ' + ex.getMessage()); +}" +`; + +exports[`generate request for Salesforce Apex generate POST request for JSON 1`] = ` +"HttpRequest request = new HttpRequest(); +request.setMethod('POST'); +request.setEndpoint('https://httpbin.org/path/to?a=b'); + +request.setHeader('Authorization', 'Bearer abcdefghijklmn'); +request.setHeader('Content-Type', 'application/json'); +request.setHeader('h1', 'h1v'); +request.setHeader('h2', 'h2v'); + +request.setBody('{\\"foo\\": \\"bar\\", \\"baz\\": \\"qux\\"}'); + +try { + Http client = new Http(); + HttpResponse response = client.send(request); + System.debug(response.getBody()); +} catch (CalloutException ex) { + System.debug('An error occured ' + ex.getMessage()); +}" +`; + +exports[`generate request for Salesforce Apex generate POST request for XML 1`] = ` +"HttpRequest request = new HttpRequest(); +request.setMethod('POST'); +request.setEndpoint('https://httpbin.org/path/to?a=b'); + +request.setHeader('Authorization', 'Bearer abcdefghijklmn'); +request.setHeader('Content-Type', 'application/xml'); +request.setHeader('h1', 'h1v'); +request.setHeader('h2', 'h2v'); + +request.setBody('\\\\n\\\\n \\\\n'); + +try { + Http client = new Http(); + HttpResponse response = client.send(request); + System.debug(response.getBody()); +} catch (CalloutException ex) { + System.debug('An error occured ' + ex.getMessage()); +}" +`; + +exports[`generate request for Salesforce Apex generate PUT request for www-form-urlencoded 1`] = ` +"HttpRequest request = new HttpRequest(); +request.setMethod('PUT'); +request.setEndpoint('https://httpbin.org/path/to?a=b'); + +request.setHeader('Content-Type', 'application/x-www-form-urlencoded'); + +request.setBody('foo=bar&baz=qux'); + +try { + Http client = new Http(); + HttpResponse response = client.send(request); + System.debug(response.getBody()); +} catch (CalloutException ex) { + System.debug('An error occured ' + ex.getMessage()); +}" +`; + exports[`generate request for cURL generate GET request 1`] = ` "curl -X GET \\\\ 'https://httpbin.org/path/to?a=b' \\\\ diff --git a/helpers/codegen/codegen.js b/helpers/codegen/codegen.js index a365db8c3..a1dfc1882 100644 --- a/helpers/codegen/codegen.js +++ b/helpers/codegen/codegen.js @@ -13,6 +13,7 @@ import { PythonHttpClientCodegen } from "./generators/python-http-client" import { WgetCodegen } from "./generators/wget" import { CsRestSharpCodegen } from "./generators/cs-restsharp" import { RubyNetHttpCodeGen } from "./generators/ruby-net-http" +import { SalesforceApexCodegen } from "./generators/salesforce-apex" /* Register code generators here. * A code generator is defined as an object with the following structure. @@ -37,6 +38,7 @@ export const codegens = [ PythonRequestsCodegen, PythonHttpClientCodegen, RubyNetHttpCodeGen, + SalesforceApexCodegen, WgetCodegen, ] diff --git a/helpers/codegen/generators/salesforce-apex.js b/helpers/codegen/generators/salesforce-apex.js new file mode 100644 index 000000000..d05b95762 --- /dev/null +++ b/helpers/codegen/generators/salesforce-apex.js @@ -0,0 +1,77 @@ +export const SalesforceApexCodegen = { + id: "salesforce-apex", + name: "Salesforce Apex", + generator: ({ + url, + pathName, + queryString, + auth, + httpUser, + httpPassword, + bearerToken, + method, + rawInput, + rawParams, + rawRequestBody, + contentType, + headers, + }) => { + const requestString = [] + + // initial request setup + let requestBody = rawInput ? rawParams : rawRequestBody + requestBody = JSON.stringify(requestBody) + .replace(/^"|"$/g, "") + .replace(/\\"/g, '"') + .replace(/'/g, "\\'") // Apex uses single quotes for strings + + // create request + requestString.push(`HttpRequest request = new HttpRequest();\n`) + requestString.push(`request.setMethod('${method}');\n`) + requestString.push(`request.setEndpoint('${url}${pathName}${queryString}');\n\n`) + + // authentification + if (auth === "Basic Auth") { + const basic = `${httpUser}:${httpPassword}` + requestString.push( + `request.setHeader('Authorization', 'Basic ${window.btoa( + unescape(encodeURIComponent(basic)) + )}');\n` + ) + } else if (auth === "Bearer Token" || auth === "OAuth 2.0") { + requestString.push(`request.setHeader('Authorization', 'Bearer ${bearerToken}');\n`) + } + + // content type + if (contentType) { + requestString.push(`request.setHeader('Content-Type', '${contentType}');\n`) + } + + // custom headers + if (headers) { + headers.forEach(({ key, value }) => { + if (key) { + requestString.push(`request.setHeader('${key}', '${value}');\n`) + } + }) + } + + requestString.push(`\n`) + + // set body + if (["POST", "PUT", "PATCH", "DELETE"].includes(method)) { + requestString.push(`request.setBody('${requestBody}');\n\n`) + } + + // process + requestString.push(`try {\n`) + requestString.push(` Http client = new Http();\n`) + requestString.push(` HttpResponse response = client.send(request);\n`) + requestString.push(` System.debug(response.getBody());\n`) + requestString.push(`} catch (CalloutException ex) {\n`) + requestString.push(` System.debug('An error occured ' + ex.getMessage());\n`) + requestString.push(`}`) + + return requestString.join("") + }, +}