Integration between a Forge app and a Connect app

Hello there,

We have some Forge native apps in the Marketplace. We have received a customer feedback to integrate one of those (Budgety) with another app (eazyBI). For that customer, this is a MUST for they business before they can start using the app.

The use case is to be able to create reports in eazyBI by pulling Budgety data. So, the Forge app needs to provide a way to collect data for the Connect app.

We have experience integrating Connect apps via REST API, but with a Forge native app I guess we do not have the same option so easily.

Has anyone been able to do something like that between a Forge native app and a Connect app? I will love to have some success path for that.

I believe that Forge webtriggers are not as powerful as we need here. On the other hand, do anyone know if there is any plan to be able to support reading Forge storage data from a Third party Connect app?

Thanks in advance!

Hi @alvaro.aranda

I have integrated my Jenkins Integration for Jira app with Jenkins for Compass, where the Jira app is the data provider for the Compass app.
The Jira app is build on Connect and Compass on Forge. Using Forge Remote I was able to configure the Jira app as remote for Compass.

The Connect app provides REST APIs that Compass can call, this is used to forward events like component links, lifecycle. During the request - response flow initiated by Compass the Jira app use the GraphQL API to directly access the data store of the Compass app, for other access the Compass app provides a Webtrigger that the Jira app uses to push data to Compass.

If this should like something useful to you, then I’m happy to connect and talk more details.
Just in case, I’ll also be in Barcelona in case you want to meetup and talk details in person.

Cheers,
Mark

1 Like

Currently the only way to get data out of Forge storage and into another app would be to pull the data via a web trigger, or to push the data out using Forge Remote/fetch calls.

Web triggers don’t have all the bells and whistles of what you would like when it comes to implementing a RESTful API, but IMO it would be probably enough to get the job done.

Hello @HeyJoe ,

Maybe I have misunderstood something about webtriggers. This are some of the key points I have in mind:

  • A webtrigger has a different URL per customer.
  • A webtrigger has the ability to connect to Forge storage for this customer.
  • A webtrigger has no security by default and should be implemented by the app.
  • There is no way to define the URL of a webtrigger.

For that, I believe the path to have it working with a third party app (which is not from us, is from a different vendor) can be:

  • Create a page in the Forge app where the customer can see the webtrigger URL
  • The customer should inform the Connect app about the webtrigger URL
  • Then the Connect app will be able to call the webtrigger URL to pull data
  • The Forge app needs to implement the security (via a week static token or something more robust) and the Connect app will call the webtrigger URL providing this security
  • The Forge app will validate the security and block non valid requests
  • The Forge app will be able to collect Forge storage data directly from the webtrigger and return it to the Connect app
  • The Connect app will get the data from the Forge app and the integration has worked as expected

Let me know if you think I’m missing something in the process. Having the ability to create JWT tokens or something may be more complicated using webtriggers so implementing security may be also a pain in the neck. Feedback will be also supervaluable here :slight_smile:

Thanks!

Thanks for sharing your use case @markrekveld !

In this case, we are in the opposite situation, the Forge app will be the data provider and the Connect app is the one that pulls the data.

We have done something similar using a Connect in Forge architecture approach in one of our apps, but here it is nos possible as the Connect app is from other vendor.

Cheers!

Ok yeah that will make it a bit more interesting and complex to handle.

Maybe a close partnership to develop the integration can work out. as Joe mentioned webtrigger could be a starting point, but it doesn’t need to be the collector and returner of data. In an sync approach you could create the integration so that the connect app calls the webtrigger, and that the webtrigger calls a Forge Remote function of the Connect app. This can pass a user or system token and will give you access to Forge Storage for an hour (token limit)
This could also limit the complexity of the security implementation in the webtrigger.

Hey @alvaro.aranda

That sounds about right. If you are able to collaborate with the Connect app developer, you could simplify this process a bit by having them publish a well-known endpoint for registering new connections with your Forge app.

Then, you could eliminate the first couple of steps requiring user interaction and the Forge app could “phone home” to the Connect app upon installation using the installed event (https://developer.atlassian.com/platform/forge/events-reference/life-cycle/#installation).

Yes, you would need to implement a shared secret or something similar to ensure access to the web trigger is authentic.

Depending on the relationship with the other app, you could also explore declaring it as a “remote” - https://developer.atlassian.com/platform/forge/remote/essentials/ - which would give you the ability to send and receive secure requests to the app using the Forge Invocation Token.

1 Like