Jsk Studio F95zone May 2026
## Download [Get the build here]($downloadUrl)
/** * Pull unread replies (used for badge count). */ export async function getUnreadCount( threadId: string, token: string ): Promise<number> const data = await authFetch( `https://api.f95zone.to/v1/threads/$threadId/replies?unread=true`, token ); return data.unreadCount ?? 0;
| Use‑case | How the Bridge helps | |----------|----------------------| | on F95Zone when a build is published from JSK Studio. | Generates a markdown‑ready post with title, description, version, changelog, cover‑art and download link. | | Sync changelog & screenshots whenever a new commit is pushed to the project repo. | Updates the existing thread (or creates a new “Update” post) with the latest screenshots and release notes. | | Two‑way notification – get forum replies or private messages inside the JSK Studio UI. | Shows a badge in the IDE with the count of unread forum replies; clicking opens a small chat‑like panel. | | User‑based access control – only allow verified developers to post on behalf of the game. | OAuth2 login via F95Zone’s API (or a custom token flow) stores a short‑lived access token per developer. | | Analytics dashboard – view page‑views, download clicks, and “likes” directly in the studio. | Pulls public statistics from F95Zone (or parses the thread HTML) and visualises them in a tab. | 2️⃣ High‑Level Architecture +-------------------+ +----------------------+ +-------------------+ | JSK Studio IDE | HTTP | JSK‑F95Connector | HTTP | F95Zone API / | | (plugin UI) +--------->| (Node/TS backend) +--------->| Webhooks / HTML | +-------------------+ +----------------------+ +-------------------+ jsk studio f95zone
export interface F95Post title: string; body: string; // markdown category: string; // e.g., "Adult Game" tags?: string[];
/** * Helper – perform an authorized request. */ async function authFetch( url: string, token: string, init: RequestInit = {} ) { const res = await fetch(url, { ...init, headers: { ...(init.headers ?? {}), Authorization: `Bearer $token`, "Content-Type": "application/json", }, }); ## Download [Get the build here]($downloadUrl) /** *
// store threadId for later updates await context.state.set("f95_thread_id", threadId); context.ui.notify(`Thread created: $url`);
if (!res.ok) const txt = await res.text(); throw new Error(`F95Zone error $res.status: $txt`); return res.json(); } | Generates a markdown‑ready post with title, description,
import createThread, appendComment, buildReleaseMarkdown, from "./f95Client";