@haverstack/server 0.11.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/app.d.ts.map +1 -1
  2. package/dist/app.js +2 -0
  3. package/dist/app.js.map +1 -1
  4. package/dist/lib/canonicalJson.d.ts +7 -0
  5. package/dist/lib/canonicalJson.d.ts.map +1 -0
  6. package/dist/lib/canonicalJson.js +18 -0
  7. package/dist/lib/canonicalJson.js.map +1 -0
  8. package/dist/lib/historyPage.d.ts +12 -0
  9. package/dist/lib/historyPage.d.ts.map +1 -0
  10. package/dist/lib/historyPage.js +24 -0
  11. package/dist/lib/historyPage.js.map +1 -0
  12. package/dist/lib/ifMatch.d.ts +11 -0
  13. package/dist/lib/ifMatch.d.ts.map +1 -0
  14. package/dist/lib/ifMatch.js +11 -0
  15. package/dist/lib/ifMatch.js.map +1 -0
  16. package/dist/lib/installRequestStore.d.ts +46 -0
  17. package/dist/lib/installRequestStore.d.ts.map +1 -0
  18. package/dist/lib/installRequestStore.js +102 -0
  19. package/dist/lib/installRequestStore.js.map +1 -0
  20. package/dist/lib/queryWorker/protocol.d.ts +1 -1
  21. package/dist/lib/queryWorker/worker.js +1 -1
  22. package/dist/lib/queryWorker/worker.js.map +1 -1
  23. package/dist/lib/resumeBuffer.d.ts +0 -1
  24. package/dist/lib/resumeBuffer.d.ts.map +1 -1
  25. package/dist/lib/resumeBuffer.js +2 -1
  26. package/dist/lib/resumeBuffer.js.map +1 -1
  27. package/dist/lib/selfService.d.ts +2 -0
  28. package/dist/lib/selfService.d.ts.map +1 -0
  29. package/dist/lib/selfService.js +6 -0
  30. package/dist/lib/selfService.js.map +1 -0
  31. package/dist/middleware/auth.d.ts +10 -9
  32. package/dist/middleware/auth.d.ts.map +1 -1
  33. package/dist/middleware/auth.js +21 -10
  34. package/dist/middleware/auth.js.map +1 -1
  35. package/dist/middleware/errors.js +1 -1
  36. package/dist/middleware/errors.js.map +1 -1
  37. package/dist/middleware/params.d.ts +3 -5
  38. package/dist/middleware/params.d.ts.map +1 -1
  39. package/dist/middleware/params.js +3 -12
  40. package/dist/middleware/params.js.map +1 -1
  41. package/dist/routes/attachments.d.ts.map +1 -1
  42. package/dist/routes/attachments.js +5 -5
  43. package/dist/routes/attachments.js.map +1 -1
  44. package/dist/routes/auth.d.ts.map +1 -1
  45. package/dist/routes/auth.js +9 -20
  46. package/dist/routes/auth.js.map +1 -1
  47. package/dist/routes/changes.d.ts.map +1 -1
  48. package/dist/routes/changes.js +6 -7
  49. package/dist/routes/changes.js.map +1 -1
  50. package/dist/routes/entity.d.ts.map +1 -1
  51. package/dist/routes/entity.js +9 -11
  52. package/dist/routes/entity.js.map +1 -1
  53. package/dist/routes/installs.d.ts +13 -0
  54. package/dist/routes/installs.d.ts.map +1 -0
  55. package/dist/routes/installs.js +101 -0
  56. package/dist/routes/installs.js.map +1 -0
  57. package/dist/routes/records.d.ts.map +1 -1
  58. package/dist/routes/records.js +105 -165
  59. package/dist/routes/records.js.map +1 -1
  60. package/dist/routes/types.d.ts.map +1 -1
  61. package/dist/routes/types.js +7 -39
  62. package/dist/routes/types.js.map +1 -1
  63. package/dist/routes/wellknown.d.ts.map +1 -1
  64. package/dist/routes/wellknown.js +2 -0
  65. package/dist/routes/wellknown.js.map +1 -1
  66. package/dist/shutdown.d.ts.map +1 -1
  67. package/dist/shutdown.js +1 -0
  68. package/dist/shutdown.js.map +1 -1
  69. package/dist/stack.d.ts +2 -0
  70. package/dist/stack.d.ts.map +1 -1
  71. package/dist/stack.js +28 -6
  72. package/dist/stack.js.map +1 -1
  73. package/dist/testing.d.ts.map +1 -1
  74. package/dist/testing.js +13 -2
  75. package/dist/testing.js.map +1 -1
  76. package/package.json +6 -6
  77. package/dist/lib/queryLimit.d.ts +0 -6
  78. package/dist/lib/queryLimit.d.ts.map +0 -1
  79. package/dist/lib/queryLimit.js +0 -20
  80. package/dist/lib/queryLimit.js.map +0 -1
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAczC,YAAY,EAAE,MAAM,EAAE,CAAC;AAEvB,wBAAgB,SAAS,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CA8DzF"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAezC,YAAY,EAAE,MAAM,EAAE,CAAC;AAEvB,wBAAgB,SAAS,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CA+DzF"}
package/dist/app.js CHANGED
@@ -13,6 +13,7 @@ import { attachmentRoutes } from './routes/attachments.js';
13
13
  import { entityRoutes } from './routes/entity.js';
14
14
  import { tokenRoutes } from './routes/tokens.js';
15
15
  import { authRoutes } from './routes/auth.js';
16
+ import { installRoutes } from './routes/installs.js';
16
17
  import { wireError } from './wireError.js';
17
18
  export function createApp(ctx, config, logger) {
18
19
  const app = new Hono();
@@ -64,6 +65,7 @@ export function createApp(ctx, config, logger) {
64
65
  app.route('/entity', entityRoutes(ctx));
65
66
  app.route('/tokens', tokenRoutes(ctx));
66
67
  app.route('/auth', authRoutes(ctx, config.authOrigin, logger));
68
+ app.route('/installs', installRoutes(ctx));
67
69
  app.notFound((c) => wireError(c, 404, 'not_found', 'Not found'));
68
70
  return app;
69
71
  }
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * JSON with every object's keys in sorted order, so two values that mean
3
+ * the same thing serialize the same way whatever order a client wrote
4
+ * their keys in. Array order is kept, since it is part of the value.
5
+ */
6
+ export declare function canonicalJson(value: unknown): string;
7
+ //# sourceMappingURL=canonicalJson.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonicalJson.d.ts","sourceRoot":"","sources":["../../src/lib/canonicalJson.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * JSON with every object's keys in sorted order, so two values that mean
3
+ * the same thing serialize the same way whatever order a client wrote
4
+ * their keys in. Array order is kept, since it is part of the value.
5
+ */
6
+ export function canonicalJson(value) {
7
+ return JSON.stringify(sortKeys(value));
8
+ }
9
+ function sortKeys(value) {
10
+ if (Array.isArray(value))
11
+ return value.map(sortKeys);
12
+ if (value === null || typeof value !== 'object')
13
+ return value;
14
+ return Object.fromEntries(Object.keys(value)
15
+ .sort()
16
+ .map((key) => [key, sortKeys(value[key])]));
17
+ }
18
+ //# sourceMappingURL=canonicalJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonicalJson.js","sourceRoot":"","sources":["../../src/lib/canonicalJson.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;SACf,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAE,KAAiC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAC1E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare const MAX_HISTORY_PAGE = 500;
2
+ /**
3
+ * Reads one page of a history, one row past it to learn whether anything
4
+ * follows, so `cursor` is null exactly when the history is exhausted. A
5
+ * `limit` below 1 is passed through as given: whether it is in range is
6
+ * `Stack`'s to judge.
7
+ */
8
+ export declare function readHistoryPage<T>(limit: number | undefined, read: (limit: number) => Promise<T[]>, cursorOf: (row: T) => number): Promise<{
9
+ rows: T[];
10
+ cursor: number | null;
11
+ }>;
12
+ //# sourceMappingURL=historyPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"historyPage.d.ts","sourceRoot":"","sources":["../../src/lib/historyPage.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,EACrC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAC3B,OAAO,CAAC;IAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAO/C"}
@@ -0,0 +1,24 @@
1
+ // A record's version history and its journal are the two reads with no
2
+ // ceiling when `limit` is omitted: omitting it reads everything by
3
+ // contract, so a page size can't be supplied on the caller's behalf
4
+ // without silently truncating exactly the caller reading the whole thing.
5
+ // This server bounds a page and says so in `cursor` instead, as the spec
6
+ // lets it. See docs/spec/wire-format.md § Versions and § Journal.
7
+ export const MAX_HISTORY_PAGE = 500;
8
+ /**
9
+ * Reads one page of a history, one row past it to learn whether anything
10
+ * follows, so `cursor` is null exactly when the history is exhausted. A
11
+ * `limit` below 1 is passed through as given: whether it is in range is
12
+ * `Stack`'s to judge.
13
+ */
14
+ export async function readHistoryPage(limit, read, cursorOf) {
15
+ const page = Math.min(limit ?? MAX_HISTORY_PAGE, MAX_HISTORY_PAGE);
16
+ if (page < 1)
17
+ return { rows: await read(page), cursor: null };
18
+ const rows = await read(page + 1);
19
+ if (rows.length <= page)
20
+ return { rows, cursor: null };
21
+ const kept = rows.slice(0, page);
22
+ return { rows: kept, cursor: cursorOf(kept[kept.length - 1]) };
23
+ }
24
+ //# sourceMappingURL=historyPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"historyPage.js","sourceRoot":"","sources":["../../src/lib/historyPage.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,mEAAmE;AACnE,oEAAoE;AACpE,0EAA0E;AAC1E,yEAAyE;AACzE,kEAAkE;AAClE,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAyB,EACzB,IAAqC,EACrC,QAA4B;IAE5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;IACnE,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC9D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAClC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACvD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACjC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,EAAE,CAAC;AAClE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Context } from 'hono';
2
+ import type { IfVersionOptions } from '@haverstack/core';
3
+ import type { AppEnv } from '../types.js';
4
+ /**
5
+ * The `ifVersion` an `If-Match` header carries. Every record write reads
6
+ * one and checks it when present; a malformed header is core's 400, never a
7
+ * fallthrough to unconditional. See docs/spec/wire-format.md
8
+ * § Optimistic concurrency.
9
+ */
10
+ export declare function ifMatchVersion(c: Context<AppEnv>): IfVersionOptions;
11
+ //# sourceMappingURL=ifMatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ifMatch.d.ts","sourceRoot":"","sources":["../../src/lib/ifMatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAEnE"}
@@ -0,0 +1,11 @@
1
+ import { parseIfMatch } from '@haverstack/core/wire';
2
+ /**
3
+ * The `ifVersion` an `If-Match` header carries. Every record write reads
4
+ * one and checks it when present; a malformed header is core's 400, never a
5
+ * fallthrough to unconditional. See docs/spec/wire-format.md
6
+ * § Optimistic concurrency.
7
+ */
8
+ export function ifMatchVersion(c) {
9
+ return { ifVersion: parseIfMatch(c.req.header('If-Match')) };
10
+ }
11
+ //# sourceMappingURL=ifMatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ifMatch.js","sourceRoot":"","sources":["../../src/lib/ifMatch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,CAAkB;IAC/C,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { AppManifest, EntityId } from '@haverstack/core';
2
+ /** Conventional sibling path for the install request store beside a stack's main .db file. */
3
+ export declare const defaultInstallRequestStorePath: (dbPath: string) => string;
4
+ export type InstallRequestEntry = {
5
+ /** Names this manifest as sent; a key sending a different one gets a new id. */
6
+ id: string;
7
+ /** The key asking to be installed — the session's principal. */
8
+ did: EntityId;
9
+ manifest: AppManifest;
10
+ requestedAt: Date;
11
+ expiresAt: Date;
12
+ };
13
+ /**
14
+ * Install requests awaiting the owner, one per key: the app's half of an
15
+ * install (POST /installs) leaves one here, and the owner's half
16
+ * (/installs/requests) reviews and approves it. A request is not an
17
+ * approval, so it lives with the server rather than in the stack — a key
18
+ * that merely authenticated writes nothing into the owner's data. Its own
19
+ * sibling file, like AuthNonceStore. See docs/spec/apps.md § Over the wire.
20
+ */
21
+ export declare class InstallRequestStore {
22
+ private readonly db;
23
+ private constructor();
24
+ static open(path: string): InstallRequestStore;
25
+ /**
26
+ * Records `manifest` as `did`'s pending request, replacing any other it
27
+ * had. Re-sending the same manifest — compared as canonical JSON, so key
28
+ * order is not a difference — keeps its id and refreshes its expiry, so
29
+ * an id the owner reviewed always names what they reviewed.
30
+ */
31
+ put(did: EntityId, manifest: AppManifest): InstallRequestEntry;
32
+ get(id: string): InstallRequestEntry | null;
33
+ /** Every live request, oldest first. */
34
+ list(): InstallRequestEntry[];
35
+ /** The pending request `did` holds, if any. */
36
+ forKey(did: EntityId): InstallRequestEntry | null;
37
+ /**
38
+ * Removes the request `id` names — once it is installed or declined, there
39
+ * is nothing left to ask. A request its key has since replaced has a new
40
+ * id, so removing the old one leaves the new one standing.
41
+ */
42
+ remove(id: string): void;
43
+ private sweepExpired;
44
+ close(): void;
45
+ }
46
+ //# sourceMappingURL=installRequestStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installRequestStore.d.ts","sourceRoot":"","sources":["../../src/lib/installRequestStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAI9D,8FAA8F;AAC9F,eAAO,MAAM,8BAA8B,GAAI,QAAQ,MAAM,KAAG,MAA8B,CAAC;AAE/F,MAAM,MAAM,mBAAmB,GAAG;IAChC,gFAAgF;IAChF,EAAE,EAAE,MAAM,CAAC;IACX,gEAAgE;IAChE,GAAG,EAAE,QAAQ,CAAC;IACd,QAAQ,EAAE,WAAW,CAAC;IACtB,WAAW,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;CACjB,CAAC;AAIF;;;;;;;GAOG;AACH,qBAAa,mBAAmB;IACV,OAAO,CAAC,QAAQ,CAAC,EAAE;IAAvC,OAAO;IAEP,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB;IAkB9C;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,GAAG,mBAAmB;IAuB9D,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAO3C,wCAAwC;IACxC,IAAI,IAAI,mBAAmB,EAAE;IAO7B,+CAA+C;IAC/C,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,mBAAmB,GAAG,IAAI;IAOjD;;;;OAIG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIxB,OAAO,CAAC,YAAY;IAIpB,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,102 @@
1
+ import { DatabaseSync } from 'node:sqlite';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { canonicalJson } from './canonicalJson.js';
4
+ import { SELF_SERVICE_TTL_MS } from './selfService.js';
5
+ /** Conventional sibling path for the install request store beside a stack's main .db file. */
6
+ export const defaultInstallRequestStorePath = (dbPath) => `${dbPath}.installs`;
7
+ /**
8
+ * Install requests awaiting the owner, one per key: the app's half of an
9
+ * install (POST /installs) leaves one here, and the owner's half
10
+ * (/installs/requests) reviews and approves it. A request is not an
11
+ * approval, so it lives with the server rather than in the stack — a key
12
+ * that merely authenticated writes nothing into the owner's data. Its own
13
+ * sibling file, like AuthNonceStore. See docs/spec/apps.md § Over the wire.
14
+ */
15
+ export class InstallRequestStore {
16
+ db;
17
+ constructor(db) {
18
+ this.db = db;
19
+ }
20
+ static open(path) {
21
+ const db = new DatabaseSync(path);
22
+ db.exec('PRAGMA journal_mode = WAL;');
23
+ db.exec(`CREATE TABLE IF NOT EXISTS install_requests (
24
+ did TEXT PRIMARY KEY,
25
+ id TEXT NOT NULL UNIQUE,
26
+ manifest TEXT NOT NULL,
27
+ requestedAt INTEGER NOT NULL,
28
+ expiresAt INTEGER NOT NULL
29
+ );`);
30
+ db.exec('CREATE INDEX IF NOT EXISTS idx_install_requests_expiresAt ON install_requests (expiresAt);');
31
+ return new InstallRequestStore(db);
32
+ }
33
+ /**
34
+ * Records `manifest` as `did`'s pending request, replacing any other it
35
+ * had. Re-sending the same manifest — compared as canonical JSON, so key
36
+ * order is not a difference — keeps its id and refreshes its expiry, so
37
+ * an id the owner reviewed always names what they reviewed.
38
+ */
39
+ put(did, manifest) {
40
+ this.sweepExpired();
41
+ const json = canonicalJson(manifest);
42
+ const now = Date.now();
43
+ const expiresAt = now + SELF_SERVICE_TTL_MS;
44
+ const existing = this.db.prepare('SELECT * FROM install_requests WHERE did = ?').get(did);
45
+ if (existing && existing.manifest === json) {
46
+ this.db
47
+ .prepare('UPDATE install_requests SET expiresAt = ? WHERE did = ?')
48
+ .run(expiresAt, did);
49
+ return toEntry({ ...existing, expiresAt });
50
+ }
51
+ const row = { id: randomUUID(), did, manifest: json, requestedAt: now, expiresAt };
52
+ this.db
53
+ .prepare(`INSERT OR REPLACE INTO install_requests (did, id, manifest, requestedAt, expiresAt)
54
+ VALUES (?, ?, ?, ?, ?)`)
55
+ .run(row.did, row.id, row.manifest, row.requestedAt, row.expiresAt);
56
+ return toEntry(row);
57
+ }
58
+ get(id) {
59
+ const row = this.db
60
+ .prepare('SELECT * FROM install_requests WHERE id = ? AND expiresAt >= ?')
61
+ .get(id, Date.now());
62
+ return row ? toEntry(row) : null;
63
+ }
64
+ /** Every live request, oldest first. */
65
+ list() {
66
+ const rows = this.db
67
+ .prepare('SELECT * FROM install_requests WHERE expiresAt >= ? ORDER BY requestedAt, id')
68
+ .all(Date.now());
69
+ return rows.map(toEntry);
70
+ }
71
+ /** The pending request `did` holds, if any. */
72
+ forKey(did) {
73
+ const row = this.db
74
+ .prepare('SELECT * FROM install_requests WHERE did = ? AND expiresAt >= ?')
75
+ .get(did, Date.now());
76
+ return row ? toEntry(row) : null;
77
+ }
78
+ /**
79
+ * Removes the request `id` names — once it is installed or declined, there
80
+ * is nothing left to ask. A request its key has since replaced has a new
81
+ * id, so removing the old one leaves the new one standing.
82
+ */
83
+ remove(id) {
84
+ this.db.prepare('DELETE FROM install_requests WHERE id = ?').run(id);
85
+ }
86
+ sweepExpired() {
87
+ this.db.prepare('DELETE FROM install_requests WHERE expiresAt < ?').run(Date.now());
88
+ }
89
+ close() {
90
+ this.db.close();
91
+ }
92
+ }
93
+ function toEntry(row) {
94
+ return {
95
+ id: row.id,
96
+ did: row.did,
97
+ manifest: JSON.parse(row.manifest),
98
+ requestedAt: new Date(row.requestedAt),
99
+ expiresAt: new Date(row.expiresAt),
100
+ };
101
+ }
102
+ //# sourceMappingURL=installRequestStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installRequestStore.js","sourceRoot":"","sources":["../../src/lib/installRequestStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,8FAA8F;AAC9F,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,GAAG,MAAM,WAAW,CAAC;AAc/F;;;;;;;GAOG;AACH,MAAM,OAAO,mBAAmB;IACO;IAArC,YAAqC,EAAgB;QAAhB,OAAE,GAAF,EAAE,CAAc;IAAG,CAAC;IAEzD,MAAM,CAAC,IAAI,CAAC,IAAY;QACtB,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QAClC,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACtC,EAAE,CAAC,IAAI,CACL;;;;;;SAMG,CACJ,CAAC;QACF,EAAE,CAAC,IAAI,CACL,4FAA4F,CAC7F,CAAC;QACF,OAAO,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,GAAa,EAAE,QAAqB;QACtC,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,GAAG,GAAG,mBAAmB,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC,GAAG,CAAC,GAAG,CACvE,CAAC;QAClB,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC3C,IAAI,CAAC,EAAE;iBACJ,OAAO,CAAC,yDAAyD,CAAC;iBAClE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACvB,OAAO,OAAO,CAAC,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,GAAG,GAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;QACxF,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;gCACwB,CACzB;aACA,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QACtE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,gEAAgE,CAAC;aACzE,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAoB,CAAC;QAC1C,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC;IAED,wCAAwC;IACxC,IAAI;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CAAC,8EAA8E,CAAC;aACvF,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAU,CAAC;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,+CAA+C;IAC/C,MAAM,CAAC,GAAa;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,iEAAiE,CAAC;aAC1E,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAoB,CAAC;QAC3C,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,EAAU;QACf,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF;AAED,SAAS,OAAO,CAAC,GAAQ;IACvB,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAgB;QACjD,WAAW,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;QACtC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;KACnC,CAAC;AACJ,CAAC"}
@@ -14,7 +14,7 @@ import type { WireError } from '@haverstack/wire-types';
14
14
  * Passed as `workerData` when a query worker is spawned. dbPath is the
15
15
  * whole of it: a worker calls LocalAdapter.open(), which reads timezone
16
16
  * (and the rest of the stack config) out of the database itself — only
17
- * the initialize path takes one as input, and workers never initialize.
17
+ * creating a store takes one as input, and workers never create one.
18
18
  */
19
19
  export type QueryWorkerInit = {
20
20
  dbPath: string;
@@ -24,7 +24,7 @@ if (!parentPort) {
24
24
  const init = workerData;
25
25
  // The database already exists — the main thread's initStack() created or
26
26
  // opened it, and seeded system types, before any worker is spawned (see
27
- // pool.ts). open() (not openOrInitialize()) reflects that: there is no
27
+ // pool.ts). open()'s default `create: 'never'` reflects that: there is no
28
28
  // first-run path to handle here.
29
29
  const adapter = await LocalAdapter.open({ path: init.dbPath });
30
30
  const stack = await Stack.open(adapter);
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/lib/queryWorker/worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,IAAI,CAAC,UAAU,EAAE,CAAC;IAChB,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,IAAI,GAAG,UAA6B,CAAC;AAE3C,yEAAyE;AACzE,wEAAwE;AACxE,uEAAuE;AACvE,iCAAiC;AACjC,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/D,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAExC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAiB,EAAE,EAAE;IACnD,MAAM,IAAI,GAAG,UAAW,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAA0B,CAAC,CAAC;IAC7E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC;YACf,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,EAAE,EAAE,KAAK;YACT,IAAI;YACJ,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SAClC,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/lib/queryWorker/worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,IAAI,CAAC,UAAU,EAAE,CAAC;IAChB,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,IAAI,GAAG,UAA6B,CAAC;AAE3C,yEAAyE;AACzE,wEAAwE;AACxE,0EAA0E;AAC1E,iCAAiC;AACjC,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/D,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAExC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAiB,EAAE,EAAE;IACnD,MAAM,IAAI,GAAG,UAAW,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAA0B,CAAC,CAAC;IAC7E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC;YACf,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,EAAE,EAAE,KAAK;YACT,IAAI;YACJ,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SAClC,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -71,7 +71,6 @@ export type ResumeBufferKeyParts = {
71
71
  subjectId: string | null;
72
72
  filter: ChangeFilter;
73
73
  includeRecords: boolean;
74
- includeUnlisted: boolean;
75
74
  };
76
75
  /**
77
76
  * Reproducible across a reconnect that re-sends the same query params —
@@ -1 +1 @@
1
- {"version":3,"file":"resumeBuffer.d.ts","sourceRoot":"","sources":["../../src/lib/resumeBuffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEhF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,MAAM,MAAM,WAAW,GAAG;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,KAAK,EAAE,gBAAgB,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE;AAC1C,4FAA4F;GAC1F;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE;AACxB,2EAA2E;GACzE;IAAE,MAAM,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAEjC,wGAAwG;AACxG,qBAAa,YAAY;IAYX,OAAO,CAAC,QAAQ,CAAC,KAAK;IAXlC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAuB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2C;IAErE,wEAAwE;IACxE,SAAS,SAAK;IACd,2EAA2E;IAC3E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAER,KAAK,EAAE,MAAM;IAE1C,+EAA+E;IAC/E,UAAU,IAAI,MAAM;IAIpB;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,WAAW;IAmBzC,6DAA6D;IAC7D,aAAa,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI;IAOjE;;;;OAIG;IACH,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,kBAAkB;CAK5C;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,6CAA6C;IAC7C,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAuBnE;AAQD,MAAM,MAAM,2BAA2B,GAAG;IACxC,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,6GAA6G;IAC7G,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,oBAAoB;IAanB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAZjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAC/D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqC;IACpE;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4C;gBAEzC,IAAI,EAAE,2BAA2B;IAE9D;;;;;;;;;;OAUG;IACG,OAAO,CACX,GAAG,EAAE,MAAM,EACX,gBAAgB,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,KAAK,OAAO,CAAC,WAAW,CAAC,GACnF,OAAO,CAAC,YAAY,CAAC;IAuCxB,uGAAuG;IACvG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAW1B,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,KAAK;IASb,kEAAkE;IAClE,QAAQ,IAAI,IAAI;CAQjB"}
1
+ {"version":3,"file":"resumeBuffer.d.ts","sourceRoot":"","sources":["../../src/lib/resumeBuffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEhF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,MAAM,MAAM,WAAW,GAAG;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,KAAK,EAAE,gBAAgB,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE;AAC1C,4FAA4F;GAC1F;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE;AACxB,2EAA2E;GACzE;IAAE,MAAM,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAEjC,wGAAwG;AACxG,qBAAa,YAAY;IAYX,OAAO,CAAC,QAAQ,CAAC,KAAK;IAXlC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAuB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2C;IAErE,wEAAwE;IACxE,SAAS,SAAK;IACd,2EAA2E;IAC3E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAER,KAAK,EAAE,MAAM;IAE1C,+EAA+E;IAC/E,UAAU,IAAI,MAAM;IAIpB;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,WAAW;IAmBzC,6DAA6D;IAC7D,aAAa,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI;IAOjE;;;;OAIG;IACH,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,kBAAkB;CAK5C;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,6CAA6C;IAC7C,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAwBnE;AAQD,MAAM,MAAM,2BAA2B,GAAG;IACxC,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,6GAA6G;IAC7G,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,oBAAoB;IAanB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAZjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAC/D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqC;IACpE;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4C;gBAEzC,IAAI,EAAE,2BAA2B;IAE9D;;;;;;;;;;OAUG;IACG,OAAO,CACX,GAAG,EAAE,MAAM,EACX,gBAAgB,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,KAAK,OAAO,CAAC,WAAW,CAAC,GACnF,OAAO,CAAC,YAAY,CAAC;IAuCxB,uGAAuG;IACvG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAW1B,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,KAAK;IASb,kEAAkE;IAClE,QAAQ,IAAI,IAAI;CAQjB"}
@@ -101,7 +101,8 @@ export function resumeBufferKey(parts) {
101
101
  principalId: parts.principalId,
102
102
  subjectId: parts.subjectId,
103
103
  includeRecords: parts.includeRecords,
104
- includeUnlisted: parts.includeUnlisted,
104
+ // Absent and `false` both exclude unlisted records, so they key alike.
105
+ includeUnlisted: filter.includeUnlisted === true,
105
106
  ...(typeId !== undefined && { typeId }),
106
107
  ...(baseId !== undefined && { baseId }),
107
108
  ...(filter.parentId !== undefined && { parentId: filter.parentId }),
@@ -1 +1 @@
1
- {"version":3,"file":"resumeBuffer.js","sourceRoot":"","sources":["../../src/lib/resumeBuffer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resumeBuffer.js","sourceRoot":"","sources":["../../src/lib/resumeBuffer.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAiBjD,wGAAwG;AACxG,MAAM,OAAO,YAAY;IAYM;IAXpB,EAAE,GAAW,MAAM,CAAC,UAAU,EAAE,CAAC;IACzB,OAAO,GAAkB,EAAE,CAAC;IACrC,QAAQ,GAAG,CAAC,CAAC;IACb,WAAW,GAAG,CAAC,CAAC;IACP,SAAS,GAAG,IAAI,GAAG,EAAgC,CAAC;IAErE,wEAAwE;IACxE,SAAS,GAAG,CAAC,CAAC;IACd,2EAA2E;IAC3E,cAAc,GAAkB,IAAI,CAAC;IAErC,YAA6B,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;IAE9C,+EAA+E;IAC/E,UAAU;QACR,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,MAAoB;QACzB,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACrD,MAAM,KAAK,GAAgB;YACzB,CAAC,EAAE,IAAI,CAAC,QAAQ;YAChB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,QAAQ;YACjC,KAAK;SACN,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,OAAO;gBAAE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS;YAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6DAA6D;IAC7D,aAAa,CAAC,QAAsC;QAClD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,CAAS;QACpB,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;QACpE,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QACxD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IACxE,CAAC;CACF;AAUD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACzB,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAClE,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACtE,2EAA2E;IAC3E,MAAM,SAAS,GACb,gBAAgB,IAAI,kBAAkB;QACpC,CAAC,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE;QAClE,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,uEAAuE;QACvE,eAAe,EAAE,MAAM,CAAC,eAAe,KAAK,IAAI;QAChD,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;QACvC,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;QACvC,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QACnE,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;QAC7C,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC;KACtC,CAAC,CAAC;AACL,CAAC;AAED,kFAAkF;AAClF,SAAS,WAAW,CAAmB,KAA0B;IAC/D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9D,CAAC;AASD;;;;;GAKG;AACH,MAAM,OAAO,oBAAoB;IAaF;IAZZ,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC1C,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC9C,cAAc,GAAG,IAAI,GAAG,EAA0B,CAAC;IACpE;;;;;;OAMG;IACc,SAAS,GAAG,IAAI,GAAG,EAAiC,CAAC;IAEtE,YAA6B,IAAiC;QAAjC,SAAI,GAAJ,IAAI,CAA6B;IAAG,CAAC;IAElE;;;;;;;;;;OAUG;IACH,KAAK,CAAC,OAAO,CACX,GAAW,EACX,gBAAoF;QAEpF,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YACzB,QAAQ,CAAC,SAAS,IAAI,CAAC,CAAC;YACxB,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC;YAC/B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;YAC9B,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;YACtB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;YAC1B,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjD,iEAAiE;YACjE,mEAAmE;YACnE,mEAAmE;YACnE,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,CAAC,MAAM,EAAE,EAAE;gBACpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YACxC,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,EAAE,CAAC;QACL,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAEjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC7B,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;YACtB,OAAO,MAAM,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,uGAAuG;IACvG,OAAO,CAAC,GAAW;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QACrD,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC;YAAE,OAAO;QACjC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/E,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAChB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAEO,cAAc,CAAC,GAAW;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,KAAK,EAAE,CAAC;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,GAAW,EAAE,MAAoB;QAC7C,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM;YAAE,OAAO,CAAC,mBAAmB;QACjE,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC;YAAE,OAAO,CAAC,qCAAqC;QACvE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,kEAAkE;IAClE,QAAQ;QACN,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACtE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAAE,WAAW,EAAE,CAAC;QACpE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export declare const SELF_SERVICE_TTL_MS: number;
2
+ //# sourceMappingURL=selfService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selfService.d.ts","sourceRoot":"","sources":["../../src/lib/selfService.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,mBAAmB,QAA0B,CAAC"}
@@ -0,0 +1,6 @@
1
+ // What any key that completes the DID handshake can leave behind on its own
2
+ // — a bearer token, a pending install request — lives at most this long
3
+ // unless it is renewed. Self-service state owes a bounded lifetime, and one
4
+ // bound for all of it keeps a stranger's footprint a single number.
5
+ export const SELF_SERVICE_TTL_MS = 7 * 24 * 60 * 60 * 1000;
6
+ //# sourceMappingURL=selfService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selfService.js","sourceRoot":"","sources":["../../src/lib/selfService.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,wEAAwE;AACxE,4EAA4E;AAC5E,oEAAoE;AACpE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC"}
@@ -1,5 +1,4 @@
1
1
  import type { MiddlewareHandler } from 'hono';
2
- import type { TokenSession } from '@haverstack/core/wire';
3
2
  import type { AppEnv } from '../types.js';
4
3
  import type { StackContext } from '../stack.js';
5
4
  /**
@@ -12,14 +11,16 @@ export declare function safeCompare(a: string, b: string): boolean;
12
11
  export declare function authMiddleware(ownerToken: string, ctx: StackContext): MiddlewareHandler<AppEnv>;
13
12
  export declare function requireAuth(): MiddlewareHandler<AppEnv>;
14
13
  /**
15
- * Whether a session is the stack owner acting alone: undelegated, and
16
- * authenticated as the owner rather than merely delegated for it. Being the
17
- * owner is never on its own sufficient under delegation — a delegated
18
- * session with the owner as principal still fails this, matching
19
- * `ScopedStack`'s own owner-only gates (e.g. purge). See
20
- * docs/spec/access-control.md § Delegation.
14
+ * Gates a route to the owner acting alone: undelegated, and authenticated
15
+ * as the owner rather than merely delegated for it — the same test
16
+ * `ScopedStack`'s own owner-only gates apply. See
17
+ * docs/spec/access-control.md § Delegation: principal and subject.
21
18
  */
22
- export declare function isOwnerActingAlone(auth: TokenSession | null, ownerEntityId: string): boolean;
23
- /** Gates a route to the owner acting alone; see `isOwnerActingAlone()`. */
24
19
  export declare function requireOwner(ownerEntityId: string): MiddlewareHandler<AppEnv>;
20
+ /**
21
+ * Gates a route to a session acting as itself — not a principal acting
22
+ * for someone else. Checked before the body is read, like requireOwner(),
23
+ * so a refused identity is refused whatever it sent.
24
+ */
25
+ export declare function requireActingAlone(): MiddlewareHandler<AppEnv>;
25
26
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAIzD;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAyB/F;AAED,wBAAgB,WAAW,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAKvD;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAE5F;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAS7E"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAG9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAIzD;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAyB/F;AAED,wBAAgB,WAAW,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAKvD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAS7E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAS9D"}
@@ -1,5 +1,6 @@
1
1
  import { timingSafeEqual } from 'node:crypto';
2
2
  import { StackPermissionError } from '@haverstack/core';
3
+ import { isOwnerActingAlone } from '@haverstack/core/wire';
3
4
  import { wireError } from '../wireError.js';
4
5
  /**
5
6
  * Constant-time string equality, for comparing a presented credential
@@ -49,17 +50,11 @@ export function requireAuth() {
49
50
  };
50
51
  }
51
52
  /**
52
- * Whether a session is the stack owner acting alone: undelegated, and
53
- * authenticated as the owner rather than merely delegated for it. Being the
54
- * owner is never on its own sufficient under delegation — a delegated
55
- * session with the owner as principal still fails this, matching
56
- * `ScopedStack`'s own owner-only gates (e.g. purge). See
57
- * docs/spec/access-control.md § Delegation.
53
+ * Gates a route to the owner acting alone: undelegated, and authenticated
54
+ * as the owner rather than merely delegated for it — the same test
55
+ * `ScopedStack`'s own owner-only gates apply. See
56
+ * docs/spec/access-control.md § Delegation: principal and subject.
58
57
  */
59
- export function isOwnerActingAlone(auth, ownerEntityId) {
60
- return auth?.principalId === ownerEntityId && auth?.subjectId === ownerEntityId;
61
- }
62
- /** Gates a route to the owner acting alone; see `isOwnerActingAlone()`. */
63
58
  export function requireOwner(ownerEntityId) {
64
59
  return async (c, next) => {
65
60
  const auth = c.get('auth');
@@ -71,4 +66,20 @@ export function requireOwner(ownerEntityId) {
71
66
  await next();
72
67
  };
73
68
  }
69
+ /**
70
+ * Gates a route to a session acting as itself — not a principal acting
71
+ * for someone else. Checked before the body is read, like requireOwner(),
72
+ * so a refused identity is refused whatever it sent.
73
+ */
74
+ export function requireActingAlone() {
75
+ return async (c, next) => {
76
+ const auth = c.get('auth');
77
+ if (!auth)
78
+ return wireError(c, 401, 'unauthorized', 'Missing or invalid bearer token');
79
+ if (auth.principalId !== auth.subjectId) {
80
+ throw new StackPermissionError('This request must come from the key acting as itself');
81
+ }
82
+ await next();
83
+ };
84
+ }
74
85
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,CAAS,EAAE,CAAS;IAC9C,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,GAAiB;IAClE,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC;IAE9C,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC7C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtB,CAAC;aAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,iEAAiE;YACjE,0DAA0D;YAC1D,OAAO,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,iCAAiC,CAAC,CAAC;QAC9E,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;gBACnC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACpD,gEAAgE;gBAChE,0DAA0D;gBAC1D,IAAI,CAAC,OAAO;oBAAE,OAAO,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,iCAAiC,CAAC,CAAC;gBAC1F,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,iCAAiC,CAAC,CAAC;QAChG,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB;IAChD,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,iCAAiC,CAAC,CAAC;QACvF,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,oBAAoB,CAAC,uBAAuB,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,iCAAiC,CAAC,CAAC;QACvF,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACxC,MAAM,IAAI,oBAAoB,CAAC,sDAAsD,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
@@ -36,7 +36,7 @@ export function errorMiddleware(logger, stack) {
36
36
  if (err instanceof StackNotFoundError && auth) {
37
37
  const recordId = c.req.param('id');
38
38
  if (recordId) {
39
- const existing = await stack.get(recordId);
39
+ const existing = await stack.get(recordId, { includeDeleted: true });
40
40
  logger.debug({
41
41
  requestId: c.get('requestId'),
42
42
  principalId: auth.principalId,
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/middleware/errors.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAc,MAAM,kBAAkB,CAAC;AAExF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,KAAY;IAC1D,OAAO,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,IAAI,EAAE,CAAC;YACT,kEAAkE;YAClE,+DAA+D;YAC/D,mEAAmE;YACnE,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,GAAG,YAAY,oBAAoB,IAAI,IAAI,EAAE,CAAC;gBAChD,MAAM,CAAC,IAAI,CACT;oBACE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;oBAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC1B,EACD,6BAA6B,CAC9B,CAAC;YACJ,CAAC;YACD,mEAAmE;YACnE,6DAA6D;YAC7D,kEAAkE;YAClE,mEAAmE;YACnE,oEAAoE;YACpE,sEAAsE;YACtE,yCAAyC;YACzC,IAAI,GAAG,YAAY,kBAAkB,IAAI,IAAI,EAAE,CAAC;gBAC9C,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnC,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAC3C,MAAM,CAAC,KAAK,CACV;wBACE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;wBAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,QAAQ;wBACR,OAAO,EAAE,QAAQ,KAAK,IAAI;wBAC1B,6DAA6D;wBAC7D,4DAA4D;wBAC5D,KAAK,EAAE,MAAM;qBACd,EACD,oCAAoC,CACrC,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,+DAA+D;YAC/D,qEAAqE;YACrE,mEAAmE;YACnE,gEAAgE;YAChE,mEAAmE;YACnE,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI;gBAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;YACzE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAA8B,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,yBAAyB,CAAC,CAAC;QAChF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,uBAAuB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IACxF,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/middleware/errors.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAc,MAAM,kBAAkB,CAAC;AAExF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,KAAY;IAC1D,OAAO,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,IAAI,EAAE,CAAC;YACT,kEAAkE;YAClE,+DAA+D;YAC/D,mEAAmE;YACnE,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,GAAG,YAAY,oBAAoB,IAAI,IAAI,EAAE,CAAC;gBAChD,MAAM,CAAC,IAAI,CACT;oBACE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;oBAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC1B,EACD,6BAA6B,CAC9B,CAAC;YACJ,CAAC;YACD,mEAAmE;YACnE,6DAA6D;YAC7D,kEAAkE;YAClE,mEAAmE;YACnE,oEAAoE;YACpE,sEAAsE;YACtE,yCAAyC;YACzC,IAAI,GAAG,YAAY,kBAAkB,IAAI,IAAI,EAAE,CAAC;gBAC9C,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnC,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;oBACrE,MAAM,CAAC,KAAK,CACV;wBACE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;wBAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,QAAQ;wBACR,OAAO,EAAE,QAAQ,KAAK,IAAI;wBAC1B,6DAA6D;wBAC7D,4DAA4D;wBAC5D,KAAK,EAAE,MAAM;qBACd,EACD,oCAAoC,CACrC,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,+DAA+D;YAC/D,qEAAqE;YACrE,mEAAmE;YACnE,gEAAgE;YAChE,mEAAmE;YACnE,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI;gBAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;YACzE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAA8B,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,yBAAyB,CAAC,CAAC;QAChF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,uBAAuB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IACxF,CAAC,CAAC;AACJ,CAAC"}
@@ -2,11 +2,9 @@ import type { MiddlewareHandler } from 'hono';
2
2
  import type { AppEnv } from '../types.js';
3
3
  /**
4
4
  * Refuse any query param the route doesn't define, for the same reason
5
- * `rejectUnknownKeys()` refuses body keys. Routes whose params core's wire
6
- * parsers read (`GET /records`, `GET /changes`, the journal) leave the
7
- * check to those parsers.
5
+ * `rejectUnknownKeys()` refuses body keys. A route whose params one of
6
+ * core's wire parsers reads leaves the check to that parser; this is for
7
+ * the rest. See docs/spec/wire-format.md § Unrecognized input.
8
8
  */
9
9
  export declare function knownParams(...names: string[]): MiddlewareHandler<AppEnv>;
10
- /** A boolean query param: absent is false, and anything but `true`/`false` is refused. */
11
- export declare function booleanParam(url: URL, name: string): boolean;
12
10
  //# sourceMappingURL=params.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../src/middleware/params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAE9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAazE;AAED,0FAA0F;AAC1F,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAK5D"}
1
+ {"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../src/middleware/params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAE9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAazE"}
@@ -1,9 +1,9 @@
1
1
  import { StackBadRequestError } from '@haverstack/core';
2
2
  /**
3
3
  * Refuse any query param the route doesn't define, for the same reason
4
- * `rejectUnknownKeys()` refuses body keys. Routes whose params core's wire
5
- * parsers read (`GET /records`, `GET /changes`, the journal) leave the
6
- * check to those parsers.
4
+ * `rejectUnknownKeys()` refuses body keys. A route whose params one of
5
+ * core's wire parsers reads leaves the check to that parser; this is for
6
+ * the rest. See docs/spec/wire-format.md § Unrecognized input.
7
7
  */
8
8
  export function knownParams(...names) {
9
9
  return async (c, next) => {
@@ -15,13 +15,4 @@ export function knownParams(...names) {
15
15
  await next();
16
16
  };
17
17
  }
18
- /** A boolean query param: absent is false, and anything but `true`/`false` is refused. */
19
- export function booleanParam(url, name) {
20
- const value = url.searchParams.get(name);
21
- if (value === null || value === 'false')
22
- return false;
23
- if (value === 'true')
24
- return true;
25
- throw new StackBadRequestError(`Invalid ${name}: expected true or false, got "${value}"`);
26
- }
27
18
  //# sourceMappingURL=params.js.map