@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 +4 -1
- package/dist/feed.d.ts +2 -0
- package/dist/feed.js +8 -1
- package/dist/feed.js.map +1 -1
- package/dist/main.js +25 -1
- package/dist/main.js.map +1 -1
- package/dist/memory-api.d.ts +44 -2
- package/dist/memory-api.js +168 -33
- package/dist/memory-api.js.map +1 -1
- package/dist/memory-auth.d.ts +10 -1
- package/dist/memory-auth.js +13 -1
- package/dist/memory-auth.js.map +1 -1
- package/dist/memory-entitlements.d.ts +52 -0
- package/dist/memory-entitlements.js +84 -0
- package/dist/memory-entitlements.js.map +1 -0
- package/dist/memory-entitlements.json +14 -0
- package/dist/r2-memory-store.d.ts +9 -0
- package/dist/r2-memory-store.js +36 -2
- package/dist/r2-memory-store.js.map +1 -1
- package/dist/server.d.ts +8 -2
- package/dist/server.js +85 -6
- package/dist/server.js.map +1 -1
- package/package.json +3 -3
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:
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"feed.js","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAqB1D,+EAA+E;AAC/E,MAAM,gBAAgB,GAAG,GAAG,CAAC;AA0B7B,MAAM,UAAU,QAAQ,CAAC,KAAY;IACnC,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,OAAO,IAAI;IACE,IAAI,CAAS;IACtB,KAAK,CAA6B;IAC1C,6EAA6E;IACrE,IAAI,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAClC,OAAO,GAAG,IAAI,GAAG,EAAc,CAAC;IAEjD,YAAY,IAAY,EAAE,KAAY,EAAE,OAAe;QACrD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjF,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC;IACxC,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,OAAqB,EAAE,QAAuB;QACnD,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;YACrB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,KAAK,GAAY,EAAE,CAAC;YAC1B,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;YAE9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBAC7C,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAClC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACpB,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC9D,CAAC;YAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5C,iEAAiE;gBACjE,yDAAyD;gBACzD,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG;oBACjC,CAAC,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;oBAAE,SAAS;gBAC/E,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;gBACnF,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAChE,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;gBACzE,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;gBAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC7D,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;wBAC3D,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBACtE,CAAC;gBACH,CAAC;gBACD,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;gBAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC;YAED,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAC9D,CAAC,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtC,2EAA2E;QAC3E,iCAAiC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8CAA8C;IAC9C,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,KAAa;QACtC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,KAAK,IAAI,KAAK,CAAC,UAAU;YAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAEnE,yEAAyE;QACzE,6EAA6E;QAC7E,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK;gBAAE,MAAM;YAChC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACxB,CAAC;QAED,MAAM,OAAO,GAAY,EAAE,CAAC;QAC5B,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,KAAK,MAAM,IAAI,IAAI,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,SAAS,CAAQ,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK;gBAAE,SAAS;YACzD,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;gBAC5B,IAAI,GAAG,IAAI,CAAC;gBACZ,MAAM;YACR,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,2EAA2E;IAC3E,IAAI,CAAC,KAAa,EAAE,OAAe;QACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,IAAI,GAAG,KAAK,CAAC;YACjB,MAAM,MAAM,GAAG,GAAG,EAAE;gBAClB,IAAI,IAAI;oBAAE,OAAO;gBACjB,IAAI,GAAG,IAAI,CAAC;gBACZ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC5B,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC;YACjD,yEAAyE;YACzE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACzB,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC9B,IAAI,GAAG,GAAG,KAAK;oBAAE,MAAM,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,IAAI;QACV,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,EAAE,CAAC;IACnD,CAAC;CACF;AAED,6DAA6D;AAC7D,iGAAiG;AACjG,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,KAAY;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,SAAS,CAAC;IAC1E,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,KAAY;IAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAc,CAAC,CAAC;IAC/D,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACnG,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,IAAI,CAAC,IAAY;IAC9B,MAAM,KAAK,GAAU;QACnB,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,EAAE;QACf,IAAI,EAAE,IAAI,GAAG,EAAE;QACf,QAAQ,EAAE,IAAI,GAAG,EAAE;QACnB,IAAI,EAAE,CAAC;KACR,CAAC;IAEF,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,GAAG,KAAK,GAAI,KAAgB,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/B,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC1C,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;oBAAE,SAAS;gBACjC,MAAM,MAAM,GAAG,SAAS,CAAQ,IAAI,CAAC,CAAC;gBACtC,kEAAkE;gBAClE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ;oBAAE,SAAS;gBACpE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,SAAS,CAAQ,KAAK,CAAC,CAAC;YACvC,IAAI,MAAM,CAAC,EAAE,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACzD,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,KAAY,EAAE,KAAY;IAC1C,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5D,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5E,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7D,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;QAC5D,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,MAAc;IAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACnC,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,IAAI,CAAC,EAAU;IACtB,MAAM,OAAO,GAAG,EAAE;SACf,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;QACjC,0EAA0E;QAC1E,2EAA2E;QAC3E,6DAA6D;SAC5D,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACvB,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;AACtC,CAAC"}
|
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
|
-
|
|
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
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/dist/memory-api.d.ts
CHANGED
|
@@ -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
|
-
|
|
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<
|
|
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 {};
|
package/dist/memory-api.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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) >
|
|
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],
|
|
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
|
-
|
|
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 >
|
|
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
|
|
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']
|
|
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
|
-
|
|
90
|
-
|
|
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)
|
|
100
|
-
throw new MemoryFailure(
|
|
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' &&
|
|
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 >
|
|
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
|
-
|
|
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,
|
|
235
|
+
entries.set(change.id, note ? { id: change.id, hash: change.hash, revision: randomUUID() } : { id: change.id, hash: null, deletedAt: at });
|
|
125
236
|
}
|
|
126
|
-
|
|
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
|
-
|
|
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 (
|
|
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
|
|
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
|
}
|
package/dist/memory-api.js.map
CHANGED
|
@@ -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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"}
|
package/dist/memory-auth.d.ts
CHANGED
|
@@ -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<
|
|
28
|
+
export declare function createMemoryAuthenticator(env?: NodeJS.ProcessEnv, http?: typeof fetch): (token: string) => Promise<{
|
|
29
|
+
user: string;
|
|
30
|
+
entitlement: MemoryEntitlement;
|
|
31
|
+
} | undefined>;
|
package/dist/memory-auth.js
CHANGED
|
@@ -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
|
-
|
|
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
|
package/dist/memory-auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-auth.js","sourceRoot":"","sources":["../src/memory-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
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;
|
package/dist/r2-memory-store.js
CHANGED
|
@@ -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 (
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"r2-memory-store.js","sourceRoot":"","sources":["../src/r2-memory-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC9H,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,eAAe,CAAC,MAAyB,OAAO,CAAC,GAAG;IAElE,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,EAAE,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC;IACjE,MAAM,WAAW,GAAG,GAAG,CAAC,gBAAgB,EAAE,eAAe,GAAG,GAAG,CAAC,oBAAoB,CAAC;IACrF,MAAM,MAAM,GAAG,CAAC,CAAC,eAAe,EAAE,OAAO,CAAC,EAAE,CAAC,kBAAkB,EAAE,MAAM,CAAC;QACtE,CAAC,kBAAkB,EAAE,WAAW,CAAC,EAAE,CAAC,sBAAsB,EAAE,eAAe,CAAC,CAAU,CAAC;IACzF,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5D,OAAO,EAAE,OAAO,EAAE,WAAW,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACzG,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAAC;IAC1G,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,6CAA6C,EAAE,CAAC;IACzH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AAC3D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,4HAA4H,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,OAAO,iCAAiC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,mBAAmB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACtE,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,SAAS,IAAI,aAAa;QAAE,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAClF,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,aAAa,CAAC;IACxE,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,OAAO,2BAA2B,EAAE,WAAW,EAAE,CAAC;QACnH,WAAW,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,EAAE;QAC9B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAC/E,CAAC,CAAC;IACF,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM;YACnB,OAAO,CAAC,GAAG,CAAC,CAAC;YACb,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC9G,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI;oBAAE,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;gBACjF,MAAM,KAAK,GAAiB,EAAE,CAAC;gBAAC,IAAI,IAAI,GAAG,CAAC,CAAC;gBAC7C,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,MAAM,CAAC,IAAiC,EAAE,CAAC;oBAClE,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC;oBACpB,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;wBAAE,MAAM,CAAC,IAAY,CAAC,OAAO,EAAE,EAAE,CAAC;wBAAC,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;oBAAC,CAAC;oBAC9G,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5E,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAK,KAAa,EAAE,IAAI,KAAK,WAAW;oBAAE,OAAO,SAAS,CAAC;gBAC3D,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM;YACpC,OAAO,CAAC,GAAG,CAAC,CAAC;YACb,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI;oBAC1F,WAAW,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,kBAAkB,EAAE,YAAY,EAAE,UAAU;oBAChH,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5G,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC7B,IAAI,CAAC,MAAM,CAAC,IAAI;oBAAE,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;gBAC/D,OAAO,MAAM,CAAC,IAAI,CAAC;YACrB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,EAAC,GAAG,CAAC,CAAC,QAAQ,CAAE,KAAa,EAAE,SAAS,EAAE,cAAc,CAAC;oBAAE,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;gBACrH,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD;;;;WAIG;QACH,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM;YAC/B,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;YACpF,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC5C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;gBACvI,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC7H,IAAI,CAAC,IAAI,CAAC,MAAM;oBAAE,OAAO,OAAO,CAAC;gBACjC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;gBACxK,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM;oBAAE,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;gBACzE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;YACzB,CAAC;YACD,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QAChD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
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<
|
|
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
|
|
19
|
-
|
|
20
|
-
|
|
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
|
}
|
package/dist/server.js.map
CHANGED
|
@@ -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.
|
|
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.
|
|
52
|
+
"@oharness/engine": "0.5.1"
|
|
53
53
|
}
|
|
54
54
|
}
|