From d9146b69db72c99b82a95c0ccb4c5d1f8c3b4c62 Mon Sep 17 00:00:00 2001 From: Memona Amir <157165172+MemonaAmirAbdulHaq@users.noreply.github.com> Date: Tue, 27 Oct 2026 16:19:35 +0500 Subject: [PATCH 1/2] Add C3 cloud API contract v0.1.0 --- src/cloud-api.ts | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/index.ts | 1 + 2 files changed, 46 insertions(+) create mode 100644 src/cloud-api.ts diff --git a/src/cloud-api.ts b/src/cloud-api.ts new file mode 100644 index 0000000..772e53f --- /dev/null +++ b/src/cloud-api.ts @@ -0,0 +1,45 @@ +// cloud-api.ts ยท C3 Cloud API v0.1.0 + +export type RecordKind = + | "project" | "session" | "event" + | "memory" | "preference"; + +export interface CloudDevice { id: string; name: string; createdAt: string } + +export interface AuthResult { + userId: string; + device: CloudDevice; + deviceToken: string; // per laptop, revoked on logout +} + +export interface CloudAuth { + signUp(input: { githubCode: string; deviceName: string }): Promise; + logIn(input: { githubCode: string; deviceName: string }): Promise; + logOut(): Promise<{ ok: true }>; // revokes only this device's token +} + +export interface SyncChange { + kind: RecordKind; + id: string; // stable ID. Events: `${sessionId}:${seq}` + version: number; + deleted?: boolean; + data: Record; // never paths, secrets or raw output +} + +export interface PushRequest { changes: SyncChange[] } +export interface PushResult { + accepted: string[]; + rejected: { id: string; reason: "too_large" | "forbidden_field" | "illegal_move" | "stale" }[]; +} + +export interface PullRequest { cursor: string | null } +export interface PullResult { + changes: SyncChange[]; + nextCursor: string; + hasMore: boolean; +} + +export interface CloudSync { + push(req: PushRequest): Promise; + pull(req: PullRequest): Promise; +} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 3144a6a..93e4fe1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,3 +4,4 @@ export * from "./session.js"; export * from "./runner.js"; +export * from "./cloud-api.js" \ No newline at end of file From 4c404ad481a9f0d3aff3247f0b3d8ede001e3713 Mon Sep 17 00:00:00 2001 From: Memona Amir <157165172+MemonaAmirAbdulHaq@users.noreply.github.com> Date: Wed, 28 Oct 2026 15:02:25 +0500 Subject: [PATCH 2/2] Add device list and revoke to C3 --- src/cloud-api.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/cloud-api.ts b/src/cloud-api.ts index 772e53f..8330fd8 100644 --- a/src/cloud-api.ts +++ b/src/cloud-api.ts @@ -42,4 +42,9 @@ export interface PullResult { export interface CloudSync { push(req: PushRequest): Promise; pull(req: PullRequest): Promise; +} + +export interface CloudDevices { + listDevices(): Promise<{ devices: CloudDevice[] }>; + revokeDevice(id: string): Promise<{ ok: true }>; } \ No newline at end of file