Note: This is just for people that want to run their own collaboration server. You don't need to use this to collaborate with the Universal Data Tool, because there's a builtin public server.
This project runs a collaboration server that can be used with the Universal Data Tool. To use a custom collaboration server,
go into the UDT and open a project. Under Setup > Advanced
, you'll see a button for "Custom Collaboration Server". Put in
the address to the server this project runs and you should be able to collaborate with anyone else on that server.
npm install -g udt-collaboration-server
udt-collaboration-server --port 80
const runCollaborationServer = require("udt-collaboration-server")
const server = runCollaborationServer({ port: 3000 })
// Later...
server.close()
Join the Universal Data Tool Slack if you run into any issues!
You may find the UDT docs helpful as well!
hashOfLatestState
Check out the API Sequence Diagram here.
This server exposes the following endpoints:
POST /api/session
: Creates a link to a UDT session. Whoever initiates collaboration mode calls this. It is called exactly once to start a session. A session lasts indefinitely. Returns the url to the session.GET /api/session/<session_id>
: Gets the latest version of the UDT JSON file by getting the latest session_state (see DB Architecture)GET /api/session/<session_id>/diffs
: Gets recent diffs for the JSON file
since=<ISODATE>
indicating that they would like the diffs since the last time they polled.{ patches: Array<JSONDiffPatch>, hashOfLatestState, latestVersion }
PATCH /api/session/<session_id>
: Sends a JSONDiffPatch object with changes
{ patch, mySessionStateId }
patch
is applied against the latest session state to generate a new session state.mySessionStateId
isn't used (for now){ hashOfLatestState, latestVersion }
Check the schema.js