share.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { App } from "../app";
  2. import { Bus } from "../bus";
  3. import { Session } from "../session/session";
  4. import { Storage } from "../storage/storage";
  5. import { Log } from "../util/log";
  6. export namespace Share {
  7. const log = Log.create({ service: "share" });
  8. const state = App.state("share", async () => {
  9. Bus.subscribe(Storage.Event.Write, async (payload) => {
  10. const [root, ...splits] = payload.properties.key.split("/");
  11. if (root !== "session") return;
  12. const [type, sessionID] = splits;
  13. const session = await Session.get(sessionID);
  14. if (!session.shareID) return;
  15. await fetch(`${URL}/share_sync`, {
  16. method: "POST",
  17. body: JSON.stringify({
  18. sessionID: sessionID,
  19. shareID: session.shareID,
  20. key: payload.properties.key,
  21. content: payload.properties.content,
  22. }),
  23. })
  24. .then((x) => x.text())
  25. .then(console.log);
  26. });
  27. });
  28. export async function init() {
  29. await state();
  30. }
  31. const URL = "https://api.dev.opencode.ai";
  32. export async function create(sessionID: string) {
  33. return fetch(`${URL}/share_create`, {
  34. method: "POST",
  35. body: JSON.stringify({ sessionID: sessionID }),
  36. })
  37. .then((x) => x.json())
  38. .then((x) => x.shareID);
  39. }
  40. }