GMOD / jbrowse-components

Source code for JBrowse 2, a modern React-based genome browser
https://jbrowse.org/jb2
Apache License 2.0
206 stars 62 forks source link

Organization management of sessions #3659

Closed JoshuaFortriede closed 1 year ago

JoshuaFortriede commented 1 year ago

Is your feature request related to a problem? Please describe.

When creating sessions for inclusion in publications, websites, etc, there is often the need to update the session with different views, tracks, etc. The current public saving of sessions at share.jbrowse.org does not allow updating of sessions. This is most likely so you do not need to implement authentication, permissions, etc. However, for JBrowse Implementers, we might want this functionality, or at least to be able to update the session content on the backend.

Describe the solution you'd like

The solution would be to allow the defaultURL of the share URL to be configurable. This would allow an implementer to specify their own endpoint, and possibly enhance the functionality by adding additional information.

Describe alternatives you've considered

Additional context

There is the jbrowse-aws-lambda-functions code. Is there a SAM template that is used to specify deployment, roles, permissions, etc? This would be very helpful when trying to spin up a self-hosted session management service.

Another benefit to this would be the ability to custom query the session database and to build a session share table similar to that discussed in #1384. This would benefit from additional metadata being stored with the session (e.g. Dataset ID, Publication, Category).

cmdcolin commented 1 year ago

We don't have any examples of it, but the 'shareURL' configuration slot is designed for this purpose, it potentially lets developers use non-jbrowse share URL endpoints. You can say

{
   "configuration": {
      "shareURL": "https://yoururl/"
   },
   ...
}

and it'll add e.g. 'share' onto the end of it when creating a session

It may be difficult to substantially change the share logic e.g. it would still just encrypt and send it off, and so if you wanted to update it manually, you may need to basically implement that same encryption logic https://github.com/GMOD/jbrowse-components/blob/bump_deps/products/jbrowse-web/src/sessionSharing.ts

Is there anything particular about wanting the share URL to be stable? you could make a new share URL any time you are updating. as you see, the shareURLs are pretty one-time-use as it currently stands

the aspect where you want to query and have a list of pre-defined sessions is sort of similar to https://github.com/GMOD/jbrowse-components/issues/1384

If I was maintaining something like this myself, i would possibly have a separate webpage (or maybe a plugin if trying to do make the links in-app) that maintains a list of links to the jbrowse sessions, and update the share links over time, but definitely there are many ways to do it

JoshuaFortriede commented 1 year ago

I will certainly look into this. In the repo, I see your lambda functions for the sharing code. Do you by any chance have a SAM template for deploying this that can also be shared? this would make setting up a sharing instance much easier.

cmdcolin commented 1 year ago

currently we don't have a SAM template, we just copy and paste code into the little code box on the aws web portal and i think it's basically just pretty default (paste code into lambda, add a API gateway 'trigger'), but I have used SAM templates before...would be good to do

cmdcolin commented 1 year ago

I think the shareURL config variable is probably the solution for this issue. we would welcome any SAM type template if you come up with one as a pr