Can my forge app make a POST request to my external API?

Hi,

I’m working on my master’s degree developing a privacy plugin that needs to send information to my framework by API. I’m developing a Forge Application and now I’m trying to send that information by POST, I added the permissions below and everything seems well but, nothing is happening. What I’m doing is it possible? Does someone have some tips?

This is my function:

  function sendToOrchestrator(message){
    api.fetch(`####.compute.amazonaws.com:5000/send`,
      {
        body:message,
        method: "post",
        headers: { 'Content-Type': 'application/json' },
      }
    )
    console.log("Message:"+message)
  };

This is manifest.yml:

permissions:
  scopes:
    - read:jira-work
    - storage:app
  external:
    fetch:
      backend:
        - '*.amazonaws.com'
      client:
        - '*.amazonaws.com'

Hi @paulohsilva! Try to await the promise returned by api.fetch. Otherwise, the function returns before the request is sent:

async function sendToOrchestrator(message) {
  await api.fetch(...);
  ...
}
2 Likes

Hi, @klaussner. Thanks, now a warnig has appeared in the first request I do, probably because of your explanations, but I haven’t managed to send the “message” to my API. What is been shown to me in the terminal is:

(node:8) [DEP0118] DeprecationWarning: The provided hostname “” is not a valid hostname, and is supported in the dns module solely for compatibility.
(Use node --trace-deprecation ... to show where the warning was created)

Also, during my tries, I added to URL the protocol “HTTP”, when I did it the bellow suggestion from lint appeared. The lint added the complete URL to manifest.yml.
After I deploy and upgrade the installation I try again but nothing is sent to my API. Do you have suggestions or tips?

/app/src/index.jsx
91:32 error The domain http://*****.us-east-2.compute.amazonaws.com:5000/send is not included in the external permissions of your app manifest egress-permission-required

X 1 issue (1 error, 0 warnings)
Run forge lint --fix to automatically fix 1 error and 0 warnings.

This is the current function where the external API is called

 async function sendToOrchestrator(message){
    const res = await api.fetch('*****.compute.amazonaws.com:5000/send',
      {
        body:JSON.stringify(message),
        method: 'post',
        headers: { 'Content-Type': 'application/json' },
      }
    )
    const data = await res.json();
    console.log("Message:"+data)
  };

This is the current manifest.yml

modules:
  jira:issuePanel:
    - key: framework-plugin-hello-world-panel
      function: main
      title: Forge App for Master Degree
      icon: https://developer.atlassian.com/platform/forge/images/icons/issue-panel-icon.svg
  function:
    - key: main
      handler: index.run
app:
  id: ari:cloud:ecosystem::app/e4e5dc8e-fc27-4e99-804b-4b6167ce073a
permissions:
  scopes:
    - read:jira-work
    - storage:app
  external:
    fetch:
      backend:
        - ITWASADDEDAFTERLINT.us-east-2.compute.amazonaws.com
        - "*.us-east-2.compute.amazonaws.com"
        - "*.amazonaws.com"
      client:
        - "*.amazonaws.com"
        - "*.us-east-2.compute.amazonaws.com"

I’m not sure but maybe the port must be included in the external permission.