@okostream/mcp 0.13.1 → 0.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/server.js +14 -4
  2. package/package.json +1 -1
package/dist/server.js CHANGED
@@ -116230,6 +116230,15 @@ if (!env.firebase.chatDatabaseURL) {
116230
116230
  throw new Error("OKO MCP: chat database URL is not configured. Set OKO_FIREBASE_CHAT_DB_URL (or keep the bundled default) \u2014 chat paths do not exist in the main database.");
116231
116231
  }
116232
116232
  var chatRtdb = getDatabase(firebaseApp, env.firebase.chatDatabaseURL);
116233
+ async function serverNowMs(db = chatRtdb) {
116234
+ const offset = await new Promise((resolve3) => {
116235
+ onValue(ref(db, ".info/serverTimeOffset"), (snap) => {
116236
+ const v = snap.val();
116237
+ resolve3(typeof v === "number" && Number.isFinite(v) ? v : 0);
116238
+ }, () => resolve3(0), { onlyOnce: true });
116239
+ });
116240
+ return Date.now() + offset;
116241
+ }
116233
116242
  var functions = getFunctions(firebaseApp, "us-central1");
116234
116243
 
116235
116244
  // build/scopes.js
@@ -116291,7 +116300,7 @@ function sanitizeScopes(scopes) {
116291
116300
  }
116292
116301
 
116293
116302
  // build/version.js
116294
- var OKO_MCP_VERSION = "0.13.1";
116303
+ var OKO_MCP_VERSION = "0.13.2";
116295
116304
 
116296
116305
  // build/auth.js
116297
116306
  var state = null;
@@ -118346,7 +118355,7 @@ function registerChatTools(server2) {
118346
118355
  const { uid } = await authed(["chat:moderate"]);
118347
118356
  await readEvent(eventId, uid, "moderate");
118348
118357
  requireConfirm(confirm, "oko_delete_chat_message", { eventId, messageId });
118349
- await set(ref(chatRtdb, `mod/deleted/${eventId}/${messageId}`), { deletedAt: serverTimestamp(), ts: Date.now(), by: uid, reason: "manual" });
118358
+ await set(ref(chatRtdb, `mod/deleted/${eventId}/${messageId}`), { deletedAt: serverTimestamp(), ts: await serverNowMs(), by: uid, reason: "manual" });
118350
118359
  return textResult({ eventId, messageId, deleted: true });
118351
118360
  });
118352
118361
  server2.registerTool("oko_mute_user", {
@@ -118364,7 +118373,7 @@ function registerChatTools(server2) {
118364
118373
  const actor = await authed(["chat:moderate"]);
118365
118374
  await readEvent(eventId, actor.uid, "moderate");
118366
118375
  requireConfirm(confirm, "oko_mute_user", { eventId, targetUid, minutes });
118367
- await set(ref(chatRtdb, `mutes/${eventId}/${targetUid}`), { until: Date.now() + minutes * 6e4, by: actor.uid, reason: "manual" });
118376
+ await set(ref(chatRtdb, `mutes/${eventId}/${targetUid}`), { until: await serverNowMs() + minutes * 6e4, by: actor.uid, reason: "manual" });
118368
118377
  return textResult({ eventId, targetUid, mutedMinutes: minutes });
118369
118378
  });
118370
118379
  server2.registerTool("oko_ban_user", {
@@ -118386,9 +118395,10 @@ function registerChatTools(server2) {
118386
118395
  const messagesSnap = await get(query(ref(chatRtdb, `messages/${eventId}`), limitToLast(500)));
118387
118396
  const messages = messagesSnap.val() ?? {};
118388
118397
  const deletes = {};
118398
+ const nowMs = await serverNowMs();
118389
118399
  for (const [messageId, message] of Object.entries(messages)) {
118390
118400
  if (message.uid === targetUid)
118391
- deletes[`mod/deleted/${eventId}/${messageId}`] = { deletedAt: serverTimestamp(), ts: Date.now(), by: actor.uid, reason: "ban" };
118401
+ deletes[`mod/deleted/${eventId}/${messageId}`] = { deletedAt: serverTimestamp(), ts: nowMs, by: actor.uid, reason: "ban" };
118392
118402
  }
118393
118403
  if (Object.keys(deletes).length > 0)
118394
118404
  await update(ref(chatRtdb), deletes);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@okostream/mcp",
3
- "version": "0.13.1",
3
+ "version": "0.13.2",
4
4
  "description": "Control OKO Stream webinars from Claude, Codex, and other MCP clients.",
5
5
  "license": "UNLICENSED",
6
6
  "author": {