@oharness/sync 0.5.0 → 0.5.1

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.
package/README.md CHANGED
@@ -17,4 +17,7 @@ nothing on the request path depends on another service being up. Without a
17
17
  signing secret configured it degrades to a self-hosted mode: a `users.json` and
18
18
  tokens handed out by hand.
19
19
 
20
- Documentation: [Running your own sync server](../../docs/pages/self-hosted-sync.md)
20
+ Documentation:
21
+
22
+ - [Running your own sync server](../../docs/pages/self-hosted-sync.md)
23
+ - [Implementing the Sync protocol](../../docs/pages/sync-protocol.md)
package/dist/feed.d.ts CHANGED
@@ -65,4 +65,6 @@ export declare class Feed {
65
65
  private wake;
66
66
  }
67
67
  /** Projects anything has been pushed to, under one owner. */
68
+ /** Remove every feed an owner has. For account deletion; a missing directory is already gone. */
69
+ export declare function removeOwner(root: string, owner: Owner): Promise<boolean>;
68
70
  export declare function listProjects(root: string, owner: Owner): Promise<string[]>;
package/dist/feed.js CHANGED
@@ -1,4 +1,4 @@
1
- import { appendFile, mkdir, open, readdir } from "node:fs/promises";
1
+ import { appendFile, mkdir, open, readdir, rm } from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import { parseJson } from "@oharness/engine/util/json.ts";
4
4
  /** How often a byte offset is remembered, so a pull seeks instead of scans. */
@@ -128,6 +128,13 @@ export class Feed {
128
128
  }
129
129
  }
130
130
  /** Projects anything has been pushed to, under one owner. */
131
+ /** Remove every feed an owner has. For account deletion; a missing directory is already gone. */
132
+ export async function removeOwner(root, owner) {
133
+ const dir = path.join(root, "feed", ownerDir(owner));
134
+ const existed = (await readdir(dir).catch(() => undefined)) !== undefined;
135
+ await rm(dir, { recursive: true, force: true });
136
+ return existed;
137
+ }
131
138
  export async function listProjects(root, owner) {
132
139
  const dir = path.join(root, "feed", ownerDir(owner));
133
140
  const entries = await readdir(dir).catch(() => []);
package/dist/feed.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"feed.js","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feed.js","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":"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"}
package/dist/main.js CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { userPath } from "@oharness/engine/paths.ts";
3
3
  import { errorMessage } from "@oharness/engine/core/errors.ts";
4
+ import { memoryQuotaFromEnv } from "./memory-api.js";
4
5
  import { issueToken, readUsers, startSyncServer } from "./server.js";
5
6
  import { authConfiguration } from "./memory-auth.js";
6
7
  import { r2Configuration } from "./r2-memory-store.js";
@@ -50,6 +51,24 @@ Memory sync at /v1/memory/* additionally requires server-only environment:
50
51
  R2_ACCESS_KEY_ID bucket-scoped Object Read & Write credential
51
52
  R2_SECRET_ACCESS_KEY matching secret
52
53
 
54
+ Memory quotas, all optional (defaults in parentheses), announced to clients in every response:
55
+ OHARNESS_SYNC_MEMORY_MAX_NOTES live notes per project and per user (5000)
56
+ OHARNESS_SYNC_MEMORY_MAX_CHANGES changes per commit (500)
57
+ OHARNESS_SYNC_MEMORY_MAX_NOTE_BYTES bytes per note body (131072)
58
+ OHARNESS_SYNC_MEMORY_MAX_RESPONSE_BYTES note bytes per response (16777216)
59
+ OHARNESS_SYNC_MEMORY_MAX_REQUEST_BYTES request body bytes (4194304)
60
+ OHARNESS_SYNC_MEMORY_TOMBSTONE_DAYS days a deletion is kept (90)
61
+
62
+ Free accounts are also held to the plan limits in src/memory-entitlements.json, read
63
+ from the token's ent claim. Self-hosted Auth that writes no plan claims can set
64
+ OHARNESS_SYNC_MEMORY_ENTITLEMENTS=off every account gets paid limits
65
+
66
+ Account deletion, optional:
67
+ OHARNESS_SYNC_ADMIN_KEY key the account service sends to POST /v1/admin/erase,
68
+ which deletes a user's feeds and memory, or a team's
69
+ feeds, and refuses that account or team afterwards.
70
+ Unset: no such endpoint.
71
+
53
72
  Missing Memory configuration never disables the session feed or health endpoint.
54
73
 
55
74
  Locally issued tokens keep working either way.`;
@@ -77,7 +96,11 @@ function memoryLine(env) {
77
96
  const auth = authConfiguration(env);
78
97
  if (!auth)
79
98
  return "! memory off — OHARNESS_SYNC_AUTH_URL is not a bare https origin";
80
- return `memory ${store.bucket} · auth ${new URL(auth.origin).host}`;
99
+ const { quota, problems } = memoryQuotaFromEnv(env);
100
+ const plans = env["OHARNESS_SYNC_MEMORY_ENTITLEMENTS"] === "off" ? "plan limits off" : "plan limits on";
101
+ const limits = `${quota.maxNotes} notes · ${quota.tombstoneDays}d tombstones · ${plans}`;
102
+ return `memory ${store.bucket} · auth ${new URL(auth.origin).host} · ${limits}` +
103
+ (problems.length ? ` · ! ignored invalid ${problems.join(", ")}` : "");
81
104
  }
82
105
  async function main() {
83
106
  const argv = process.argv.slice(2);
@@ -126,6 +149,7 @@ async function main() {
126
149
  port,
127
150
  ...(host ? { host } : {}),
128
151
  ...(signedIn ? { jwt } : {}),
152
+ ...(env["OHARNESS_SYNC_ADMIN_KEY"] ? { adminKey: env["OHARNESS_SYNC_ADMIN_KEY"] } : {}),
129
153
  });
130
154
  const users = await readUsers(root);
131
155
  console.log(`\noharness sync · ${server.url}`);
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;;GAGG;AAEH,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+CA4CkC,CAAC;AAEhD;;;;;;;;;GASG;AACH,SAAS,UAAU,CAAC,GAAsB;IACxC,MAAM,KAAK,GAAG,CAAC,wBAAwB,EAAE,wBAAwB;QAC/D,eAAe,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,sBAAsB,CAAU,CAAC;IAC5F,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,oCAAoC,CAAC;IACnF,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,2BAA2B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3E,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,SAAS,IAAI,KAAK;QAAE,OAAO,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC;IAClE,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI;QAAE,OAAO,mEAAmE,CAAC;IACtF,OAAO,UAAU,KAAK,CAAC,MAAM,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AACtE,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,IAAY,EAAsB,EAAE;QAChD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACrC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACpE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnG,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,UAAU,KAAK,IAAI,CAAC,CAAC;QACpD,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACxB,MAAM,GAAG,GAAG;QACV,GAAG,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,GAAG,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,GAAG,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,GAAG,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,GAAG,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9F,CAAC;IACF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAEpD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACnC,IAAI;QACJ,IAAI;QACJ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7B,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IAEpC,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC;IAC/F,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IAC3D,CAAC;SAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,11 @@
1
+ import type { MemoryEntitlement } from './memory-entitlements.ts';
2
+ declare const TYPES: readonly ["user", "feedback", "project", "reference"];
1
3
  export interface Note {
2
4
  id: string;
3
5
  summary: string;
4
6
  body: string;
5
7
  tags: string[];
8
+ type?: (typeof TYPES)[number];
6
9
  createdAt: number;
7
10
  updatedAt?: number;
8
11
  }
@@ -15,14 +18,53 @@ export interface ObjectStore {
15
18
  match?: string;
16
19
  absent?: boolean;
17
20
  }, signal: AbortSignal): Promise<string>;
21
+ /** Remove every object under `users/<id>/`, for account deletion. Resolves with how many went. */
22
+ deletePrefix?(prefix: string, signal: AbortSignal): Promise<number>;
18
23
  }
19
24
  export declare class MemoryFailure extends Error {
20
25
  status: number;
21
- constructor(status: number, code: string);
26
+ /** Seconds a client should wait, sent as Retry-After. */
27
+ retryAfter?: number;
28
+ constructor(status: number, code: string, retryAfter?: number);
22
29
  }
30
+ /**
31
+ * What this server accepts. Owned by whoever runs it, announced to clients in
32
+ * every response, and never copied into a client: a client holding its own
33
+ * number rejects a manifest the server considers fine the day the number here
34
+ * changes.
35
+ */
36
+ export interface MemoryQuota {
37
+ /** Live notes per project, and for a user's own notes. Deletions always succeed. */
38
+ maxNotes: number;
39
+ /** Changes in one commit. */
40
+ maxChanges: number;
41
+ maxNoteBytes: number;
42
+ /** Serialized note bodies returned by one response. */
43
+ maxResponseBytes: number;
44
+ maxRequestBytes: number;
45
+ /** A deletion is remembered this long, then dropped from the manifest. */
46
+ tombstoneDays: number;
47
+ }
48
+ export declare const DEFAULT_MEMORY_QUOTA: MemoryQuota;
49
+ /** Quota from the environment. Unparseable values fall back to the default and are named in `problems`. */
50
+ export declare function memoryQuotaFromEnv(env?: NodeJS.ProcessEnv): {
51
+ quota: MemoryQuota;
52
+ problems: string[];
53
+ };
54
+ /** `type` takes part only when present, so notes from before the field keep their recorded hashes. */
23
55
  export declare function hashNote(note?: Note): string | null;
56
+ /** Who asked, and what their plan allows. A bare user id (embedding, tests) carries no plan limits. */
57
+ export type MemoryPrincipal = string | {
58
+ user: string;
59
+ entitlement?: MemoryEntitlement;
60
+ };
24
61
  /** No database table: immutable Markdown objects + one conditionally updated manifest. */
25
62
  export declare function createMemoryApi(options: {
26
63
  store(): ObjectStore;
27
- authenticate(token: string): Promise<string | undefined>;
64
+ authenticate(token: string): Promise<MemoryPrincipal | undefined>;
65
+ quota?: Partial<MemoryQuota>;
66
+ now?: () => number;
67
+ /** An account whose cloud data was erased. Its requests are refused, so a client still signed in cannot write it back. */
68
+ erased?(user: string): Promise<boolean>;
28
69
  }): (request: Request, action: string) => Promise<Response>;
70
+ export {};
@@ -1,20 +1,65 @@
1
1
  import { createHash, randomUUID } from 'node:crypto';
2
+ const TYPES = ['user', 'feedback', 'project', 'reference'];
2
3
  export class MemoryFailure extends Error {
3
4
  status;
4
- constructor(status, code) { super(code); this.status = status; }
5
+ /** Seconds a client should wait, sent as Retry-After. */
6
+ retryAfter;
7
+ constructor(status, code, retryAfter) { super(code); this.status = status; if (retryAfter !== undefined)
8
+ this.retryAfter = retryAfter; }
9
+ }
10
+ export const DEFAULT_MEMORY_QUOTA = {
11
+ maxNotes: 5000,
12
+ maxChanges: 500,
13
+ maxNoteBytes: 128 * 1024,
14
+ maxResponseBytes: 16 * 1024 * 1024,
15
+ maxRequestBytes: 4 * 1024 * 1024,
16
+ tombstoneDays: 90,
17
+ };
18
+ const QUOTA_ENV = [
19
+ ['maxNotes', 'OHARNESS_SYNC_MEMORY_MAX_NOTES'],
20
+ ['maxChanges', 'OHARNESS_SYNC_MEMORY_MAX_CHANGES'],
21
+ ['maxNoteBytes', 'OHARNESS_SYNC_MEMORY_MAX_NOTE_BYTES'],
22
+ ['maxResponseBytes', 'OHARNESS_SYNC_MEMORY_MAX_RESPONSE_BYTES'],
23
+ ['maxRequestBytes', 'OHARNESS_SYNC_MEMORY_MAX_REQUEST_BYTES'],
24
+ ['tombstoneDays', 'OHARNESS_SYNC_MEMORY_TOMBSTONE_DAYS'],
25
+ ];
26
+ /** Quota from the environment. Unparseable values fall back to the default and are named in `problems`. */
27
+ export function memoryQuotaFromEnv(env = process.env) {
28
+ const quota = { ...DEFAULT_MEMORY_QUOTA };
29
+ const problems = [];
30
+ for (const [key, name] of QUOTA_ENV) {
31
+ const raw = env[name];
32
+ if (raw === undefined || raw === '')
33
+ continue;
34
+ const value = Number(raw);
35
+ if (Number.isSafeInteger(value) && value > 0)
36
+ quota[key] = value;
37
+ else
38
+ problems.push(name);
39
+ }
40
+ return { quota, problems };
5
41
  }
6
42
  const validId = (x) => typeof x === 'string' && /^[a-zA-Z0-9_-]{1,128}$/.test(x) && !['__proto__', 'constructor', 'prototype'].includes(x);
7
43
  const object = (x) => !!x && typeof x === 'object' && !Array.isArray(x);
44
+ const HASH = /^[a-f0-9]{64}$/;
45
+ /** `type` takes part only when present, so notes from before the field keep their recorded hashes. */
8
46
  export function hashNote(note) {
9
- return note ? createHash('sha256').update(JSON.stringify([note.id, note.summary, note.body, note.tags, note.createdAt])).digest('hex') : null;
47
+ if (!note)
48
+ return null;
49
+ const fields = [note.id, note.summary, note.body, note.tags, note.createdAt];
50
+ if (note.type !== undefined)
51
+ fields.push(note.type);
52
+ return createHash('sha256').update(JSON.stringify(fields)).digest('hex');
10
53
  }
11
- function parseNote(value) {
54
+ function parseNote(value, maxNoteBytes) {
12
55
  if (!object(value) || !validId(value.id) || typeof value.summary !== 'string' || !value.summary.trim() || value.summary !== value.summary.trim() || value.summary.length > 500 || /[\r\n]/.test(value.summary) ||
13
- typeof value.body !== 'string' || Buffer.byteLength(value.body) > 128 * 1024 || value.body !== value.body.trim() ||
56
+ typeof value.body !== 'string' || Buffer.byteLength(value.body) > maxNoteBytes || value.body !== value.body.trim() ||
14
57
  !Array.isArray(value.tags) || value.tags.length > 30 || value.tags.some((tag) => typeof tag !== 'string' || !/^[^\s,\r\n]{1,64}$/.test(tag)) ||
15
- !Number.isSafeInteger(value.createdAt) || value.createdAt < 0)
58
+ !Number.isSafeInteger(value.createdAt) || value.createdAt < 0 ||
59
+ (value.type !== undefined && !TYPES.includes(value.type)))
16
60
  throw new MemoryFailure(400, 'invalid_note');
17
- return { id: value.id, summary: value.summary, body: value.body, tags: [...value.tags], createdAt: value.createdAt,
61
+ return { id: value.id, summary: value.summary, body: value.body, tags: [...value.tags],
62
+ ...(value.type !== undefined ? { type: value.type } : {}), createdAt: value.createdAt,
18
63
  ...(Number.isSafeInteger(value.updatedAt) && value.updatedAt >= 0 ? { updatedAt: value.updatedAt } : {}) };
19
64
  }
20
65
  function encode(note) { const { body, ...metadata } = note; return '---\n' + JSON.stringify(metadata) + '\n---\n' + body + '\n'; }
@@ -22,10 +67,11 @@ function decode(text) {
22
67
  const match = /^---\n([^\n]+)\n---\n([\s\S]*)$/.exec(text);
23
68
  if (!match)
24
69
  throw new MemoryFailure(502, 'invalid_memory_object');
25
- return parseNote({ ...JSON.parse(match[1]), body: match[2].trim() });
70
+ // Objects already stored were accepted under whatever limit applied then.
71
+ return parseNote({ ...JSON.parse(match[1]), body: match[2].trim() }, Number.MAX_SAFE_INTEGER);
26
72
  }
27
- const reply = (status, body) => Response.json(body, { status, headers: { 'cache-control': 'no-store', 'x-content-type-options': 'nosniff' } });
28
- async function readBody(request) {
73
+ const reply = (status, body, headers = {}) => Response.json(body, { status, headers: { 'cache-control': 'no-store', 'x-content-type-options': 'nosniff', ...headers } });
74
+ async function readBody(request, limit) {
29
75
  const reader = request.body?.getReader();
30
76
  if (!reader)
31
77
  throw new MemoryFailure(400, 'invalid_body');
@@ -37,7 +83,7 @@ async function readBody(request) {
37
83
  if (done)
38
84
  break;
39
85
  size += value.length;
40
- if (size > 3 * 1024 * 1024) {
86
+ if (size > limit) {
41
87
  await reader.cancel();
42
88
  throw new MemoryFailure(413, 'memory_quota_exceeded');
43
89
  }
@@ -52,6 +98,9 @@ async function readBody(request) {
52
98
  /** No database table: immutable Markdown objects + one conditionally updated manifest. */
53
99
  export function createMemoryApi(options) {
54
100
  const limits = new Map();
101
+ const quota = { ...DEFAULT_MEMORY_QUOTA, ...options.quota };
102
+ const announced = { maxNotes: quota.maxNotes, maxChanges: quota.maxChanges, maxNoteBytes: quota.maxNoteBytes, tombstoneDays: quota.tombstoneDays };
103
+ const clock = options.now ?? Date.now;
55
104
  return async (request, action) => {
56
105
  try {
57
106
  if (request.method !== 'POST' || !['identity', 'snapshot', 'commit'].includes(action))
@@ -59,9 +108,18 @@ export function createMemoryApi(options) {
59
108
  if (request.headers.has('origin'))
60
109
  throw new MemoryFailure(403, 'native_client_required');
61
110
  const token = /^Bearer ([^\s]{1,8192})$/i.exec(request.headers.get('authorization') ?? '')?.[1];
62
- const user = token ? await options.authenticate(token) : undefined;
111
+ const principal = token ? await options.authenticate(token) : undefined;
112
+ const user = typeof principal === 'string' ? principal : principal?.user;
63
113
  if (!validId(user))
64
114
  throw new MemoryFailure(401, 'sign_in_required');
115
+ if (await options.erased?.(user))
116
+ throw new MemoryFailure(403, 'account_deleted');
117
+ // A plan can only narrow the service's own quota (memory-entitlements.ts).
118
+ const entitlement = typeof principal === 'object' ? principal.entitlement : undefined;
119
+ const planNotes = entitlement?.maxNotes ?? null, planBytes = entitlement?.maxNoteBytes ?? null;
120
+ const maxNotes = planNotes === null ? quota.maxNotes : Math.min(quota.maxNotes, planNotes);
121
+ const maxNoteBytes = planBytes === null ? quota.maxNoteBytes : Math.min(quota.maxNoteBytes, planBytes);
122
+ const granted = { ...announced, maxNotes, maxNoteBytes, ...(entitlement ? { tier: entitlement.tier } : {}) };
65
123
  const now = Date.now();
66
124
  for (const [id, limit] of limits)
67
125
  if (now - limit.start > 60000)
@@ -69,38 +127,67 @@ export function createMemoryApi(options) {
69
127
  let limit = limits.get(user);
70
128
  if (!limit) {
71
129
  if (limits.size >= 5000)
72
- throw new MemoryFailure(429, 'rate_limited');
130
+ throw new MemoryFailure(429, 'rate_limited', 60);
73
131
  limit = { start: now, count: 0 };
74
132
  limits.set(user, limit);
75
133
  }
76
134
  if (++limit.count > 60)
77
- throw new MemoryFailure(429, 'rate_limited');
135
+ throw new MemoryFailure(429, 'rate_limited', Math.max(1, Math.ceil((limit.start + 60000 - now) / 1000)));
78
136
  if (request.headers.get('content-type')?.split(';')[0] !== 'application/json')
79
137
  throw new MemoryFailure(415, 'json_required');
80
- const input = await readBody(request);
138
+ const input = await readBody(request, quota.maxRequestBytes);
81
139
  if (!object(input) || input.expectedPrincipal !== user)
82
140
  throw new MemoryFailure(403, 'account_mismatch');
83
141
  // Reject attempts to select another tenant or arbitrary object path, even unused fields.
84
- const fields = action === 'identity' ? ['expectedPrincipal'] : action === 'snapshot' ? ['expectedPrincipal', 'project', 'knownEtag'] : ['expectedPrincipal', 'project', 'etag', 'changes'];
142
+ const fields = action === 'identity' ? ['expectedPrincipal']
143
+ : action === 'snapshot' ? ['expectedPrincipal', 'project', 'scope', 'knownEtag', 'have']
144
+ : ['expectedPrincipal', 'project', 'scope', 'etag', 'changes', 'have'];
85
145
  if (Object.keys(input).some((key) => !fields.includes(key)))
86
146
  throw new MemoryFailure(400, 'unknown_field');
87
147
  if (action === 'identity')
88
- return reply(200, { principal: user });
89
- if (!validId(input.project))
90
- throw new MemoryFailure(400, 'invalid_project');
148
+ return reply(200, { principal: user, quota: granted });
149
+ let prefix;
150
+ if (input.scope === 'user') {
151
+ // A user's own notes belong to no project; naming one alongside is a mistake, not a choice.
152
+ if (input.project !== undefined)
153
+ throw new MemoryFailure(400, 'invalid_project');
154
+ prefix = `users/${user}/memory/`;
155
+ }
156
+ else {
157
+ if (input.scope !== undefined)
158
+ throw new MemoryFailure(400, 'invalid_scope');
159
+ if (!validId(input.project))
160
+ throw new MemoryFailure(400, 'invalid_project');
161
+ prefix = `users/${user}/projects/${input.project}/memory/`;
162
+ }
163
+ let have;
164
+ if (input.have !== undefined) {
165
+ if (!object(input.have))
166
+ throw new MemoryFailure(400, 'invalid_have');
167
+ const keys = Object.keys(input.have);
168
+ if (keys.length > quota.maxNotes * 2 + 1000)
169
+ throw new MemoryFailure(413, 'memory_quota_exceeded');
170
+ have = new Map();
171
+ for (const key of keys) {
172
+ const value = input.have[key];
173
+ if (!validId(key) || typeof value !== 'string' || !HASH.test(value))
174
+ throw new MemoryFailure(400, 'invalid_have');
175
+ have.set(key, value);
176
+ }
177
+ }
91
178
  const store = options.store();
92
179
  const signal = AbortSignal.any([request.signal, AbortSignal.timeout(50000)]);
93
- const prefix = `users/${user}/projects/${input.project}/memory/`;
94
180
  const stored = await store.get(prefix + 'manifest.json', signal);
95
181
  if (action === 'snapshot' && stored && input.knownEtag === stored.etag)
96
- return reply(200, { principal: user, etag: stored.etag, unchanged: true });
182
+ return reply(200, { principal: user, etag: stored.etag, unchanged: true, quota: granted });
97
183
  let manifest = stored ? JSON.parse(stored.text) : { version: 1, entries: [] };
98
184
  const validate = (m) => {
99
- if (m.version !== 1 || !Array.isArray(m.entries) || m.entries.length > 500)
100
- throw new MemoryFailure(413, 'memory_quota_exceeded');
185
+ if (m.version !== 1 || !Array.isArray(m.entries))
186
+ throw new MemoryFailure(502, 'invalid_manifest');
101
187
  const seen = new Set();
102
188
  for (const entry of m.entries) {
103
- if (!validId(entry.id) || seen.has(entry.id) || !(entry.hash === null || typeof entry.hash === 'string' && /^[a-f0-9]{64}$/.test(entry.hash) && validId(entry.revision)))
189
+ if (!validId(entry.id) || seen.has(entry.id) || !(entry.hash === null || typeof entry.hash === 'string' && HASH.test(entry.hash) && validId(entry.revision)) ||
190
+ (entry.deletedAt !== undefined && !(Number.isSafeInteger(entry.deletedAt) && entry.deletedAt >= 0)))
104
191
  throw new MemoryFailure(502, 'invalid_manifest');
105
192
  seen.add(entry.id);
106
193
  }
@@ -111,28 +198,71 @@ export function createMemoryApi(options) {
111
198
  if (action === 'commit') {
112
199
  if (input.etag !== etag)
113
200
  throw new MemoryFailure(409, 'revision_conflict');
114
- if (!Array.isArray(input.changes) || !input.changes.length || input.changes.length > 500)
201
+ if (!Array.isArray(input.changes) || !input.changes.length || input.changes.length > quota.maxChanges)
115
202
  throw new MemoryFailure(400, 'invalid_changes');
116
203
  const entries = new Map(manifest.entries.map((entry) => [entry.id, entry]));
204
+ const live = (list) => { let n = 0; for (const entry of list)
205
+ if (entry.hash !== null)
206
+ n++; return n; };
207
+ const liveBefore = live(entries.values());
208
+ // Clients on case-insensitive file systems cannot hold both `A` and `a`.
209
+ const folded = new Map();
210
+ for (const entry of entries.values())
211
+ if (entry.hash !== null)
212
+ folded.set(entry.id.toLowerCase(), entry.id);
213
+ const at = clock();
117
214
  for (const change of input.changes) {
118
215
  if (!object(change) || !validId(change.id) || changed.has(change.id))
119
216
  throw new MemoryFailure(400, 'invalid_changes');
120
- const note = change.note === undefined ? undefined : parseNote(change.note);
217
+ if (planBytes !== null && object(change.note) && typeof change.note.body === 'string') {
218
+ const size = Buffer.byteLength(change.note.body);
219
+ if (size > planBytes && size <= quota.maxNoteBytes)
220
+ throw new MemoryFailure(413, 'memory_plan_limit');
221
+ }
222
+ const note = change.note === undefined ? undefined : parseNote(change.note, quota.maxNoteBytes);
121
223
  if ((note && note.id !== change.id) || hashNote(note) !== change.hash)
122
224
  throw new MemoryFailure(400, 'hash_mismatch');
225
+ const lower = change.id.toLowerCase();
226
+ if (note) {
227
+ const other = folded.get(lower);
228
+ if (other !== undefined && other !== change.id)
229
+ throw new MemoryFailure(400, 'id_case_conflict');
230
+ folded.set(lower, change.id);
231
+ }
232
+ else if (folded.get(lower) === change.id)
233
+ folded.delete(lower);
123
234
  changed.set(change.id, note);
124
- entries.set(change.id, { id: change.id, hash: change.hash, ...(note ? { revision: randomUUID() } : {}) });
235
+ entries.set(change.id, note ? { id: change.id, hash: change.hash, revision: randomUUID() } : { id: change.id, hash: null, deletedAt: at });
125
236
  }
126
- manifest = { version: 1, entries: [...entries.values()].sort((a, b) => a.id.localeCompare(b.id)) };
237
+ // A tombstone exists so machines that were offline learn of a deletion.
238
+ // Past the window, a machine that still has not synced reconciles on
239
+ // its own (see the client's handling of unlisted notes). Tombstones
240
+ // from before deletedAt existed start their clock now.
241
+ const cutoff = at - quota.tombstoneDays * 86_400_000;
242
+ const next = [...entries.values()]
243
+ .map((entry) => (entry.hash === null && entry.deletedAt === undefined ? { ...entry, deletedAt: at } : entry))
244
+ .filter((entry) => !(entry.hash === null && !changed.has(entry.id) && entry.deletedAt < cutoff));
245
+ const liveAfter = live(next);
246
+ // Over quota blocks growth only. A person over a lowered quota can still delete their way back under it.
247
+ if (liveAfter > maxNotes && liveAfter > liveBefore) {
248
+ throw new MemoryFailure(413, planNotes !== null && planNotes < quota.maxNotes ? 'memory_plan_limit' : 'memory_quota_exceeded');
249
+ }
250
+ manifest = { version: 1, entries: next.sort((a, b) => a.id.localeCompare(b.id)) };
127
251
  validate(manifest);
128
252
  }
129
253
  // Validate full result/quotas BEFORE writing any object or publishing the manifest.
130
254
  const output = [];
131
- // Bound concurrent reads: large manifests must not require 500 serial R2 round trips.
255
+ let bytes = 0;
256
+ // Bound concurrent reads: large manifests must not require thousands of serial R2 round trips.
132
257
  for (let offset = 0; offset < manifest.entries.length; offset += 8) {
133
258
  const batch = await Promise.all(manifest.entries.slice(offset, offset + 8).map(async (entry) => {
259
+ if (entry.hash === null)
260
+ return { id: entry.id, hash: null };
261
+ // The client already holds exactly this version; do not send, or even read, it again.
262
+ if (have?.get(entry.id) === entry.hash)
263
+ return { id: entry.id, hash: entry.hash };
134
264
  let note = changed.get(entry.id);
135
- if (entry.hash && !changed.has(entry.id)) {
265
+ if (!changed.has(entry.id)) {
136
266
  const item = await store.get(prefix + `objects/${entry.id}/${entry.revision}.md`, signal);
137
267
  if (!item)
138
268
  throw new MemoryFailure(502, 'missing_memory_object');
@@ -142,10 +272,13 @@ export function createMemoryApi(options) {
142
272
  throw new MemoryFailure(502, 'memory_integrity_error');
143
273
  return { id: entry.id, hash: entry.hash, ...(note ? { note } : {}) };
144
274
  }));
275
+ for (const item of batch) {
276
+ bytes += Buffer.byteLength(JSON.stringify(item));
277
+ if (bytes > quota.maxResponseBytes)
278
+ throw new MemoryFailure(413, 'memory_quota_exceeded');
279
+ }
145
280
  output.push(...batch);
146
281
  }
147
- if (Buffer.byteLength(JSON.stringify(output)) > 2 * 1024 * 1024)
148
- throw new MemoryFailure(413, 'memory_quota_exceeded');
149
282
  if (action === 'commit') {
150
283
  for (let offset = 0; offset < manifest.entries.length; offset += 8) {
151
284
  await Promise.all(manifest.entries.slice(offset, offset + 8).map(async (entry) => {
@@ -156,10 +289,12 @@ export function createMemoryApi(options) {
156
289
  }
157
290
  etag = await store.put(prefix + 'manifest.json', JSON.stringify(manifest), etag ? { match: etag } : { absent: true }, signal);
158
291
  }
159
- return reply(200, { principal: user, etag, entries: output });
292
+ return reply(200, { principal: user, etag, entries: output, quota: granted });
160
293
  }
161
294
  catch (error) {
162
- return error instanceof MemoryFailure ? reply(error.status, { code: error.message }) : reply(502, { code: 'memory_sync_failed' });
295
+ return error instanceof MemoryFailure
296
+ ? reply(error.status, { code: error.message }, error.retryAfter !== undefined ? { 'retry-after': String(error.retryAfter) } : {})
297
+ : reply(502, { code: 'memory_sync_failed' });
163
298
  }
164
299
  };
165
300
  }
@@ -1 +1 @@
1
- {"version":3,"file":"memory-api.js","sourceRoot":"","sources":["../src/memory-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-api.js","sourceRoot":"","sources":["../src/memory-api.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { MemoryEntitlement } from "./memory-entitlements.ts";
1
2
  /**
2
3
  * The Auth half of Memory's deployment configuration, resolved without a request.
3
4
  *
@@ -18,5 +19,13 @@ export declare function authConfiguration(env?: NodeJS.ProcessEnv): {
18
19
  /** Preserve online account validation: anonymous/deleted accounts cannot sync Memory.
19
20
  * Credentials and the Auth origin are deployment configuration, never client inputs.
20
21
  * Session feeds retain their existing JWT/local-token authentication.
22
+ *
23
+ * The plan comes from the `ent` claim of the same token, read only after Auth
24
+ * has accepted it, and only when its subject is the user Auth returned. A
25
+ * self-hosted service whose Auth writes no plan claims can set
26
+ * OHARNESS_SYNC_MEMORY_ENTITLEMENTS=off to treat every account as paid.
21
27
  */
22
- export declare function createMemoryAuthenticator(env?: NodeJS.ProcessEnv, http?: typeof fetch): (token: string) => Promise<string | undefined>;
28
+ export declare function createMemoryAuthenticator(env?: NodeJS.ProcessEnv, http?: typeof fetch): (token: string) => Promise<{
29
+ user: string;
30
+ entitlement: MemoryEntitlement;
31
+ } | undefined>;
@@ -1,4 +1,5 @@
1
1
  import { MemoryFailure } from "./memory-api.js";
2
+ import { MEMORY_ENTITLEMENTS, entitlementFromClaims, tokenClaims } from "./memory-entitlements.js";
2
3
  /**
3
4
  * The Auth half of Memory's deployment configuration, resolved without a request.
4
5
  *
@@ -33,6 +34,11 @@ export function authConfiguration(env = process.env) {
33
34
  /** Preserve online account validation: anonymous/deleted accounts cannot sync Memory.
34
35
  * Credentials and the Auth origin are deployment configuration, never client inputs.
35
36
  * Session feeds retain their existing JWT/local-token authentication.
37
+ *
38
+ * The plan comes from the `ent` claim of the same token, read only after Auth
39
+ * has accepted it, and only when its subject is the user Auth returned. A
40
+ * self-hosted service whose Auth writes no plan claims can set
41
+ * OHARNESS_SYNC_MEMORY_ENTITLEMENTS=off to treat every account as paid.
36
42
  */
37
43
  export function createMemoryAuthenticator(env = process.env, http = fetch) {
38
44
  return async (token) => {
@@ -71,7 +77,13 @@ export function createMemoryAuthenticator(env = process.env, http = fetch) {
71
77
  reader.releaseLock();
72
78
  }
73
79
  const user = JSON.parse(Buffer.concat(chunks).toString("utf8"));
74
- return user && user.is_anonymous !== true && typeof user.id === "string" ? user.id : undefined;
80
+ if (!user || user.is_anonymous === true || typeof user.id !== "string")
81
+ return undefined;
82
+ if (env["OHARNESS_SYNC_MEMORY_ENTITLEMENTS"] === "off")
83
+ return { user: user.id, entitlement: MEMORY_ENTITLEMENTS.paid };
84
+ const claims = tokenClaims(token);
85
+ const subject = claims && typeof claims === "object" ? claims.sub : undefined;
86
+ return { user: user.id, entitlement: subject === user.id ? entitlementFromClaims(claims) : MEMORY_ENTITLEMENTS.free };
75
87
  };
76
88
  }
77
89
  //# sourceMappingURL=memory-auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-auth.js","sourceRoot":"","sources":["../src/memory-auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-auth.js","sourceRoot":"","sources":["../src/memory-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * What each plan may keep in Memory cloud sync.
3
+ *
4
+ * The numbers live in memory-entitlements.json beside this file, which is also
5
+ * what the Cloud site's pricing page reads (through its docs vendoring), so the
6
+ * limit a page promises and the limit this service enforces are one value.
7
+ * The memory API applies them on top of the
8
+ * service's own quota (memory-api.ts), which still bounds every account, paid
9
+ * or not; a plan can only make that tighter. Clients hold no copy: every
10
+ * response announces the limits in force for the account that asked.
11
+ *
12
+ * Only cloud sync is limited. Notes on the user's own machine are not, and a
13
+ * free account over its limit keeps every local note and simply stops
14
+ * uploading new ones until it is under again or on a paid plan.
15
+ */
16
+ export interface MemoryEntitlement {
17
+ /** Announced to clients, so the Memory page can say why a limit applies. */
18
+ tier: "free" | "paid";
19
+ /**
20
+ * Live notes in one project's memory, and separately in the user's own
21
+ * notes. `null` means no plan limit.
22
+ */
23
+ maxNotes: number | null;
24
+ /** Bytes in one note body. `null` means no plan limit. */
25
+ maxNoteBytes: number | null;
26
+ }
27
+ /** Limits per plan, from memory-entitlements.json. */
28
+ export declare const MEMORY_ENTITLEMENTS: Readonly<Record<MemoryEntitlement["tier"], MemoryEntitlement>>;
29
+ /**
30
+ * Plan names that do not count as paid even though a subscription row names
31
+ * them. Compared lowercased.
32
+ */
33
+ export declare const UNPAID_PLANS: readonly string[];
34
+ /**
35
+ * The entitlement for a set of token claims.
36
+ *
37
+ * Reads the `ent` claim that Cloud's access-token hook writes
38
+ * (supabase/migrations/0012_team_billing.sql in OHarness_Cloud):
39
+ * `{ self: <plan or null>, teams: { <team id>: { role, plan, seats } } }`,
40
+ * where a plan is present only while its subscription is active or trialing.
41
+ * A paid plan of the user's own, or of any team they belong to, is paid.
42
+ * Anything else, including a token issued before the hook existed, is free.
43
+ */
44
+ export declare function entitlementFromClaims(claims: unknown): MemoryEntitlement;
45
+ /**
46
+ * The payload of a JWT, without checking its signature.
47
+ *
48
+ * Only safe on a token Auth has already accepted for this request, which is
49
+ * the only way the memory authenticator calls it. It never decides who the user
50
+ * is; that comes from Auth.
51
+ */
52
+ export declare function tokenClaims(token: string): unknown;
@@ -0,0 +1,84 @@
1
+ import { readFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ const FILE = path.join(path.dirname(fileURLToPath(import.meta.url)), "memory-entitlements.json");
5
+ function limit(value, name) {
6
+ if (value === null)
7
+ return null;
8
+ if (typeof value === "number" && Number.isSafeInteger(value) && value > 0)
9
+ return value;
10
+ throw new Error(`${FILE}: ${name} must be a positive integer or null`);
11
+ }
12
+ /**
13
+ * Read once, at startup. A malformed file stops the service rather than
14
+ * letting it enforce a limit nobody wrote.
15
+ */
16
+ function load() {
17
+ const raw = JSON.parse(readFileSync(FILE, "utf8"));
18
+ const plan = (key) => {
19
+ const value = raw[key];
20
+ if (!value || typeof value !== "object")
21
+ throw new Error(`${FILE}: missing "${key}"`);
22
+ const limits = value;
23
+ return { tier: key, maxNotes: limit(limits.maxNotes, `${key}.maxNotes`), maxNoteBytes: limit(limits.maxNoteBytes, `${key}.maxNoteBytes`) };
24
+ };
25
+ const unpaid = Array.isArray(raw.unpaidPlans)
26
+ ? raw.unpaidPlans.filter((name) => typeof name === "string").map((name) => name.trim().toLowerCase())
27
+ : [];
28
+ return { entitlements: { free: plan("free"), paid: plan("paid") }, unpaid };
29
+ }
30
+ const loaded = load();
31
+ /** Limits per plan, from memory-entitlements.json. */
32
+ export const MEMORY_ENTITLEMENTS = loaded.entitlements;
33
+ /**
34
+ * Plan names that do not count as paid even though a subscription row names
35
+ * them. Compared lowercased.
36
+ */
37
+ export const UNPAID_PLANS = loaded.unpaid;
38
+ const object = (x) => !!x && typeof x === "object" && !Array.isArray(x);
39
+ function paidPlan(plan) {
40
+ if (typeof plan !== "string")
41
+ return false;
42
+ const name = plan.trim().toLowerCase();
43
+ return name !== "" && !UNPAID_PLANS.includes(name);
44
+ }
45
+ /**
46
+ * The entitlement for a set of token claims.
47
+ *
48
+ * Reads the `ent` claim that Cloud's access-token hook writes
49
+ * (supabase/migrations/0012_team_billing.sql in OHarness_Cloud):
50
+ * `{ self: <plan or null>, teams: { <team id>: { role, plan, seats } } }`,
51
+ * where a plan is present only while its subscription is active or trialing.
52
+ * A paid plan of the user's own, or of any team they belong to, is paid.
53
+ * Anything else, including a token issued before the hook existed, is free.
54
+ */
55
+ export function entitlementFromClaims(claims) {
56
+ const ent = object(claims) ? claims.ent : undefined;
57
+ if (object(ent)) {
58
+ if (paidPlan(ent.self))
59
+ return MEMORY_ENTITLEMENTS.paid;
60
+ if (object(ent.teams) && Object.values(ent.teams).some((team) => object(team) && paidPlan(team.plan))) {
61
+ return MEMORY_ENTITLEMENTS.paid;
62
+ }
63
+ }
64
+ return MEMORY_ENTITLEMENTS.free;
65
+ }
66
+ /**
67
+ * The payload of a JWT, without checking its signature.
68
+ *
69
+ * Only safe on a token Auth has already accepted for this request, which is
70
+ * the only way the memory authenticator calls it. It never decides who the user
71
+ * is; that comes from Auth.
72
+ */
73
+ export function tokenClaims(token) {
74
+ const parts = token.split(".");
75
+ if (parts.length !== 3 || !parts[1])
76
+ return undefined;
77
+ try {
78
+ return JSON.parse(Buffer.from(parts[1], "base64url").toString("utf8"));
79
+ }
80
+ catch {
81
+ return undefined;
82
+ }
83
+ }
84
+ //# sourceMappingURL=memory-entitlements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-entitlements.js","sourceRoot":"","sources":["../src/memory-entitlements.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ {
2
+ "$comment": "What each plan may keep in Memory cloud sync. The sync service enforces these and the Cloud site's pricing page states them, both from this file. The free plan's numbers are PLACEHOLDERS until the plan is decided. null means no plan limit. Plans named in unpaidPlans never count as paid.",
3
+ "free": {
4
+ "maxNotes": 200,
5
+ "maxNoteBytes": 16384
6
+ },
7
+ "paid": {
8
+ "maxNotes": null,
9
+ "maxNoteBytes": null
10
+ },
11
+ "unpaidPlans": [
12
+ "free"
13
+ ]
14
+ }
@@ -22,5 +22,14 @@ export declare function r2Configuration(env?: NodeJS.ProcessEnv): {
22
22
  } | {
23
23
  problem: string;
24
24
  };
25
+ /**
26
+ * Keys the memory API may read or write: a project's notes, or a user's own.
27
+ *
28
+ * Checked here as well as in the API, so a mistake in building a prefix can
29
+ * reach only these two shapes and never another tenant's arbitrary object.
30
+ */
31
+ export declare function validMemoryKey(key: string): boolean;
32
+ /** The one prefix a deletion may name: everything a single account stored. */
33
+ export declare function validAccountPrefix(prefix: string): boolean;
25
34
  /** The only R2-specific layer. Never used by the desktop/browser bundle. */
26
35
  export declare function createR2MemoryStore(env?: NodeJS.ProcessEnv): ObjectStore;
@@ -1,4 +1,4 @@
1
- import { S3Client, GetObjectCommand, PutObjectCommand } from '@aws-sdk/client-s3';
1
+ import { S3Client, DeleteObjectsCommand, GetObjectCommand, ListObjectsV2Command, PutObjectCommand } from '@aws-sdk/client-s3';
2
2
  import { MemoryFailure } from "./memory-api.js";
3
3
  /**
4
4
  * The bucket half of Memory's deployment configuration, resolved without a request.
@@ -29,6 +29,19 @@ export function r2Configuration(env = process.env) {
29
29
  return { problem: 'R2_MEMORY_BUCKET is not a valid bucket name' };
30
30
  return { account, bucket, accessKeyId, secretAccessKey };
31
31
  }
32
+ /**
33
+ * Keys the memory API may read or write: a project's notes, or a user's own.
34
+ *
35
+ * Checked here as well as in the API, so a mistake in building a prefix can
36
+ * reach only these two shapes and never another tenant's arbitrary object.
37
+ */
38
+ export function validMemoryKey(key) {
39
+ return /^users\/[a-zA-Z0-9_-]+\/(projects\/[a-zA-Z0-9_-]+\/)?memory\/(manifest\.json|objects\/[a-zA-Z0-9_-]+\/[a-zA-Z0-9_-]+\.md)$/.test(key);
40
+ }
41
+ /** The one prefix a deletion may name: everything a single account stored. */
42
+ export function validAccountPrefix(prefix) {
43
+ return /^users\/[a-zA-Z0-9_-]{1,128}\/$/.test(prefix);
44
+ }
32
45
  /** The only R2-specific layer. Never used by the desktop/browser bundle. */
33
46
  export function createR2MemoryStore(env = process.env) {
34
47
  const configuration = r2Configuration(env);
@@ -38,7 +51,7 @@ export function createR2MemoryStore(env = process.env) {
38
51
  const client = new S3Client({ region: 'auto', endpoint: `https://${account}.r2.cloudflarestorage.com`, maxAttempts: 1,
39
52
  credentials: { accessKeyId, secretAccessKey } });
40
53
  const safeKey = (key) => {
41
- if (!/^users\/[a-zA-Z0-9_-]+\/projects\/[a-zA-Z0-9_-]+\/memory\/(manifest\.json|objects\/[a-zA-Z0-9_-]+\/[a-zA-Z0-9_-]+\.md)$/.test(key))
54
+ if (!validMemoryKey(key))
42
55
  throw new MemoryFailure(400, 'invalid_object_key');
43
56
  };
44
57
  return {
@@ -83,6 +96,27 @@ export function createR2MemoryStore(env = process.env) {
83
96
  throw error;
84
97
  }
85
98
  },
99
+ /**
100
+ * List and delete, a page at a time, until a listing comes back empty.
101
+ * Listing again from the start rather than following a continuation token
102
+ * also picks up an object written while the deletion was running.
103
+ */
104
+ async deletePrefix(prefix, signal) {
105
+ if (!validAccountPrefix(prefix))
106
+ throw new MemoryFailure(400, 'invalid_object_key');
107
+ let removed = 0;
108
+ for (let round = 0; round < 10_000; round++) {
109
+ const listed = await client.send(new ListObjectsV2Command({ Bucket: bucket, Prefix: prefix, MaxKeys: 1000 }), { abortSignal: signal });
110
+ const keys = (listed.Contents ?? []).map((item) => item.Key).filter((key) => !!key && key.startsWith(prefix));
111
+ if (!keys.length)
112
+ return removed;
113
+ const result = await client.send(new DeleteObjectsCommand({ Bucket: bucket, Delete: { Objects: keys.map((Key) => ({ Key })), Quiet: true } }), { abortSignal: signal });
114
+ if (result.Errors?.length)
115
+ throw new MemoryFailure(502, 'delete_failed');
116
+ removed += keys.length;
117
+ }
118
+ throw new MemoryFailure(502, 'delete_failed');
119
+ },
86
120
  };
87
121
  }
88
122
  //# sourceMappingURL=r2-memory-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"r2-memory-store.js","sourceRoot":"","sources":["../src/r2-memory-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"r2-memory-store.js","sourceRoot":"","sources":["../src/r2-memory-store.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { ObjectStore } from "./memory-api.ts";
1
+ import type { MemoryPrincipal, MemoryQuota, ObjectStore } from "./memory-api.ts";
2
2
  import type { JwtOptions } from "@oharness/engine/util/jwt.ts";
3
3
  /**
4
4
  * The optional half of sync.
@@ -50,8 +50,14 @@ export interface SyncServerOptions {
50
50
  /** Overrides for embedding/tests. Memory otherwise uses this service's Auth/R2 environment. */
51
51
  memory?: {
52
52
  store(): ObjectStore;
53
- authenticate(token: string): Promise<string | undefined>;
53
+ authenticate(token: string): Promise<MemoryPrincipal | undefined>;
54
+ quota?: Partial<MemoryQuota>;
54
55
  };
56
+ /**
57
+ * The key the account service holds to erase an account's data here, at
58
+ * `POST /v1/admin/erase`. Unset, the endpoint does not exist.
59
+ */
60
+ adminKey?: string;
55
61
  }
56
62
  export interface SyncServer {
57
63
  url: string;
package/dist/server.js CHANGED
@@ -1,23 +1,44 @@
1
1
  import { createHash, randomBytes, timingSafeEqual } from "node:crypto";
2
2
  import { createServer } from "node:http";
3
- import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
3
+ import { access, mkdir, readFile, rename, writeFile } from "node:fs/promises";
4
4
  import path from "node:path";
5
5
  import { Readable } from "node:stream";
6
- import { createMemoryApi } from "./memory-api.js";
6
+ import { MemoryFailure, createMemoryApi, memoryQuotaFromEnv } from "./memory-api.js";
7
7
  import { createMemoryAuthenticator } from "./memory-auth.js";
8
8
  import { createR2MemoryStore } from "./r2-memory-store.js";
9
9
  import { errorMessage } from "@oharness/engine/core/errors.ts";
10
10
  import { parseJson } from "@oharness/engine/util/json.ts";
11
- import { Feed, listProjects } from "./feed.js";
11
+ import { Feed, listProjects, removeOwner } from "./feed.js";
12
12
  import { JwtVerifier } from "@oharness/engine/util/jwt.ts";
13
13
  import { DEFAULT_PULL_LIMIT, MAX_BODY_BYTES, MAX_PUSH_RECORDS, MAX_WAIT_SECONDS, } from "./protocol.js";
14
14
  export async function startSyncServer(opts) {
15
15
  const host = opts.host ?? "127.0.0.1";
16
16
  const verifier = opts.jwt ? new JwtVerifier(opts.jwt) : undefined;
17
17
  let memoryStore;
18
- const memory = createMemoryApi(opts.memory ?? {
19
- store: () => memoryStore ??= createR2MemoryStore(),
20
- authenticate: createMemoryAuthenticator(),
18
+ const objectStore = opts.memory?.store ?? (() => memoryStore ??= createR2MemoryStore());
19
+ /**
20
+ * Accounts and teams whose data was erased. A marker file each, written
21
+ * before anything is deleted, so a device still holding a valid token (or a
22
+ * token still listing the team) cannot write the data back afterwards. Ids
23
+ * are never reused, so markers stay.
24
+ */
25
+ const erasedDirs = { user: path.join(opts.root, "erased"), team: path.join(opts.root, "erased-teams") };
26
+ const erasedIds = new Set();
27
+ const isErased = async (id, kind = "user") => {
28
+ if (erasedIds.has(`${kind}:${id}`))
29
+ return true;
30
+ if (!ACCOUNT_ID.test(id))
31
+ return false;
32
+ const found = await access(path.join(erasedDirs[kind], id)).then(() => true, () => false);
33
+ if (found)
34
+ erasedIds.add(`${kind}:${id}`);
35
+ return found;
36
+ };
37
+ const memory = createMemoryApi({
38
+ quota: memoryQuotaFromEnv().quota,
39
+ erased: (id) => isErased(id),
40
+ ...(opts.memory ?? { authenticate: createMemoryAuthenticator() }),
41
+ store: objectStore,
21
42
  });
22
43
  const feeds = new Map();
23
44
  const feed = (owner, project) => {
@@ -39,6 +60,54 @@ export async function startSyncServer(opts) {
39
60
  // health check nobody wires up.
40
61
  if (route === "GET /v1/health")
41
62
  return send(res, 200, { ok: true });
63
+ /**
64
+ * Erase everything one account or one team stored here.
65
+ *
66
+ * `{user}`: the account's session feeds and memory, when the account is
67
+ * deleted. `{team}`: the team's shared session feeds, when the team is
68
+ * deleted; teams hold no memory. Called by the account service with a key
69
+ * only it holds rather than a user's token, so it still works after the
70
+ * account or team is gone and can be retried. Idempotent.
71
+ */
72
+ if (route === "POST /v1/admin/erase") {
73
+ if (!opts.adminKey)
74
+ return send(res, 404, { error: "no such endpoint" });
75
+ const supplied = (req.headers.authorization ?? "").replace(/^Bearer\s+/i, "").trim();
76
+ const expected = Buffer.from(hash(opts.adminKey)), given = Buffer.from(hash(supplied));
77
+ if (!supplied || !timingSafeEqual(expected, given))
78
+ return send(res, 401, { error: "bad admin key" });
79
+ const body = await readJson(req);
80
+ const kind = typeof body.user === "string" && body.team === undefined ? "user"
81
+ : typeof body.team === "string" && body.user === undefined ? "team" : undefined;
82
+ const id = kind === "user" ? String(body.user) : kind === "team" ? String(body.team) : "";
83
+ if (!kind || !ACCOUNT_ID.test(id))
84
+ return send(res, 400, { error: "exactly one of user or team is required" });
85
+ await mkdir(erasedDirs[kind], { recursive: true });
86
+ await writeFile(path.join(erasedDirs[kind], id), `${new Date().toISOString()}\n`, "utf8");
87
+ erasedIds.add(`${kind}:${id}`);
88
+ const prefix = `${kind}\u0000${id}\u0000`;
89
+ for (const key of [...feeds.keys()])
90
+ if (key.startsWith(prefix))
91
+ feeds.delete(key);
92
+ const feedsRemoved = await removeOwner(opts.root, { kind, id });
93
+ if (kind === "team")
94
+ return send(res, 200, { team: id, feeds: feedsRemoved });
95
+ let memoryObjects;
96
+ try {
97
+ const store = objectStore();
98
+ if (!store.deletePrefix)
99
+ return send(res, 501, { error: "memory store cannot delete" });
100
+ memoryObjects = await store.deletePrefix(`users/${id}/`, AbortSignal.timeout(5 * 60_000));
101
+ }
102
+ catch (err) {
103
+ // No bucket configured means no memory was ever stored here.
104
+ if (err instanceof MemoryFailure && err.message === "r2_not_configured")
105
+ memoryObjects = "unconfigured";
106
+ else
107
+ return send(res, 502, { error: "memory erase failed", feeds: feedsRemoved });
108
+ }
109
+ return send(res, 200, { user: id, feeds: feedsRemoved, memoryObjects });
110
+ }
42
111
  // Memory uses the same sync process, but has a snapshot/CAS protocol rather
43
112
  // than the session feed's append/cursor protocol. Do not decode note bodies here.
44
113
  if (url.pathname.startsWith("/v1/memory/")) {
@@ -79,6 +148,8 @@ export async function startSyncServer(opts) {
79
148
  res.setHeader("www-authenticate", "Bearer");
80
149
  return send(res, 401, { error: "missing or bad token" });
81
150
  }
151
+ if (await isErased(user.id))
152
+ return send(res, 403, { error: "account deleted" });
82
153
  /**
83
154
  * Whose feed this request is for.
84
155
  *
@@ -98,6 +169,8 @@ export async function startSyncServer(opts) {
98
169
  const owner = owned(url.searchParams.get("team"));
99
170
  if (!owner)
100
171
  return send(res, 403, { error: "not a member of that team" });
172
+ if (owner.kind === "team" && await isErased(owner.id, "team"))
173
+ return send(res, 403, { error: "team deleted" });
101
174
  return send(res, 200, { projects: await listProjects(opts.root, owner) });
102
175
  }
103
176
  case "POST /v1/push": {
@@ -115,6 +188,8 @@ export async function startSyncServer(opts) {
115
188
  const owner = owned(typeof body.team === "string" ? body.team : undefined);
116
189
  if (!owner)
117
190
  return send(res, 403, { error: "not a member of that team" });
191
+ if (owner.kind === "team" && await isErased(owner.id, "team"))
192
+ return send(res, 403, { error: "team deleted" });
118
193
  const result = await feed(owner, project).append(records, sessions);
119
194
  return send(res, 200, result);
120
195
  }
@@ -128,6 +203,8 @@ export async function startSyncServer(opts) {
128
203
  const owner = owned(url.searchParams.get("team"));
129
204
  if (!owner)
130
205
  return send(res, 403, { error: "not a member of that team" });
206
+ if (owner.kind === "team" && await isErased(owner.id, "team"))
207
+ return send(res, 403, { error: "team deleted" });
131
208
  const target = feed(owner, project);
132
209
  // A long poll is how the second device sees a turn while it is being
133
210
  // typed rather than on the next timer.
@@ -198,6 +275,8 @@ export async function issueToken(root, id, teams = []) {
198
275
  await rename(temp, file);
199
276
  return token;
200
277
  }
278
+ /** An account id a marker file may be named after. */
279
+ const ACCOUNT_ID = /^[a-zA-Z0-9_-]{1,128}$/;
201
280
  function hash(token) {
202
281
  return createHash("sha256").update(token).digest("hex");
203
282
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oharness/sync",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "description": "The optional sync server: orders opaque transcript records so two machines can hand each other a session.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -45,10 +45,10 @@
45
45
  "dist"
46
46
  ],
47
47
  "scripts": {
48
- "build": "rm -rf dist && tsc -p tsconfig.build.json"
48
+ "build": "rm -rf dist && tsc -p tsconfig.build.json && cp src/memory-entitlements.json dist/memory-entitlements.json"
49
49
  },
50
50
  "dependencies": {
51
51
  "@aws-sdk/client-s3": "3.1125.0",
52
- "@oharness/engine": "0.5.0"
52
+ "@oharness/engine": "0.5.1"
53
53
  }
54
54
  }