summaryrefslogtreecommitdiffhomepage
path: root/js/src/share
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-05-26 23:04:40 -0400
committerDax Raad <[email protected]>2025-05-26 23:04:40 -0400
commit754cc667411cc1d652acd0a811c530dcc35f5927 (patch)
tree16e6d36d78e6d4ad96438fb95fae68adf2d6ec1a /js/src/share
parent6ef0b991ecf8031ada69db02ad5be4b585f66bea (diff)
downloadopencode-754cc667411cc1d652acd0a811c530dcc35f5927.tar.gz
opencode-754cc667411cc1d652acd0a811c530dcc35f5927.zip
Add automatic CONTEXT.md loading and improve share sync reliability
🤖 Generated with opencode Co-Authored-By: opencode <[email protected]>
Diffstat (limited to 'js/src/share')
-rw-r--r--js/src/share/share.ts30
1 files changed, 20 insertions, 10 deletions
diff --git a/js/src/share/share.ts b/js/src/share/share.ts
index a9b5ed8fd..db204ab97 100644
--- a/js/src/share/share.ts
+++ b/js/src/share/share.ts
@@ -8,6 +8,7 @@ export namespace Share {
const log = Log.create({ service: "share" });
let queue: Promise<void> = Promise.resolve();
+ const pending = new Map<string, any>();
const state = App.state("share", async () => {
Bus.subscribe(Storage.Event.Write, async (payload) => {
@@ -17,23 +18,32 @@ export namespace Share {
const session = await Session.get(sessionID);
if (!session.shareID) return;
+ const key = payload.properties.key;
+ pending.set(key, payload.properties.content);
+
queue = queue
- .then(() =>
- fetch(`${URL}/share_sync`, {
+ .then(async () => {
+ const content = pending.get(key);
+ if (content === undefined) return;
+ pending.delete(key);
+
+ return fetch(`${URL}/share_sync`, {
method: "POST",
body: JSON.stringify({
sessionID: sessionID,
shareID: session.shareID,
- key: payload.properties.key,
- content: JSON.stringify(payload.properties.content),
+ key: key,
+ content: JSON.stringify(content),
}),
- }),
- )
- .then((x) => {
- log.info("synced", {
- key: payload.properties.key,
- status: x.status,
});
+ })
+ .then((x) => {
+ if (x) {
+ log.info("synced", {
+ key: key,
+ status: x.status,
+ });
+ }
});
});
});