summaryrefslogtreecommitdiffhomepage
path: root/js/src/share
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/share')
-rw-r--r--js/src/share/share.ts45
1 files changed, 45 insertions, 0 deletions
diff --git a/js/src/share/share.ts b/js/src/share/share.ts
new file mode 100644
index 000000000..6c0573e91
--- /dev/null
+++ b/js/src/share/share.ts
@@ -0,0 +1,45 @@
+import { App } from "../app";
+import { Bus } from "../bus";
+import { Session } from "../session/session";
+import { Storage } from "../storage/storage";
+
+export namespace Share {
+ const state = App.state("share", async () => {
+ Bus.subscribe(Storage.Event.Write, async (payload) => {
+ const [root, ...splits] = payload.properties.key.split("/");
+ if (root !== "session") return;
+ const [type, sessionID] = splits;
+ const session = await Session.get(sessionID);
+ if (!session.shareID) return;
+ console.log({
+ sessionID: sessionID,
+ shareID: session.shareID,
+ key: payload.properties.key,
+ content: payload.properties.content,
+ });
+ await fetch(`${URL}/share_sync`, {
+ method: "POST",
+ body: JSON.stringify({
+ sessionID: sessionID,
+ shareID: session.shareID,
+ key: payload.properties.key,
+ content: payload.properties.content,
+ }),
+ }).then(console.log);
+ });
+ });
+
+ export async function init() {
+ await state();
+ }
+
+ const URL = "https://api.dev.opencode.ai";
+ export async function create(sessionID: string) {
+ return fetch(`${URL}/share_create`, {
+ method: "POST",
+ body: JSON.stringify({ sessionID: sessionID }),
+ })
+ .then((x) => x.json())
+ .then((x) => x.shareID);
+ }
+}