@x12i/memorix-service 3.0.2 → 3.0.4

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 (59) hide show
  1. package/README.md +26 -10
  2. package/dist/access-gate.d.ts +15 -0
  3. package/dist/access-gate.d.ts.map +1 -0
  4. package/dist/access-gate.js +38 -0
  5. package/dist/access-gate.js.map +1 -0
  6. package/dist/app.d.ts.map +1 -1
  7. package/dist/app.js +4 -0
  8. package/dist/app.js.map +1 -1
  9. package/dist/callback-grant.d.ts +16 -0
  10. package/dist/callback-grant.d.ts.map +1 -0
  11. package/dist/callback-grant.js +72 -0
  12. package/dist/callback-grant.js.map +1 -0
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +1 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/isolation.d.ts +9 -25
  18. package/dist/isolation.d.ts.map +1 -1
  19. package/dist/isolation.js +19 -59
  20. package/dist/isolation.js.map +1 -1
  21. package/dist/known-packs.d.ts +1 -1
  22. package/dist/known-packs.d.ts.map +1 -1
  23. package/dist/known-packs.js +3 -2
  24. package/dist/known-packs.js.map +1 -1
  25. package/dist/live.d.ts +8 -0
  26. package/dist/live.d.ts.map +1 -1
  27. package/dist/live.js +49 -0
  28. package/dist/live.js.map +1 -1
  29. package/dist/openapi/openapi.json +1465 -213
  30. package/dist/platform.d.ts +20 -1
  31. package/dist/platform.d.ts.map +1 -1
  32. package/dist/platform.js +134 -9
  33. package/dist/platform.js.map +1 -1
  34. package/dist/relationships/operator-links.d.ts +1 -1
  35. package/dist/relationships/operator-links.js +1 -1
  36. package/dist/routes/connector-invocations.d.ts +7 -0
  37. package/dist/routes/connector-invocations.d.ts.map +1 -0
  38. package/dist/routes/connector-invocations.js +216 -0
  39. package/dist/routes/connector-invocations.js.map +1 -0
  40. package/dist/routes/data.d.ts.map +1 -1
  41. package/dist/routes/data.js +4 -0
  42. package/dist/routes/data.js.map +1 -1
  43. package/dist/routes/memory.d.ts.map +1 -1
  44. package/dist/routes/memory.js +719 -7
  45. package/dist/routes/memory.js.map +1 -1
  46. package/dist/routes/metadata.d.ts.map +1 -1
  47. package/dist/routes/metadata.js +2 -1
  48. package/dist/routes/metadata.js.map +1 -1
  49. package/dist/routes/operations.d.ts.map +1 -1
  50. package/dist/routes/operations.js +3 -1
  51. package/dist/routes/operations.js.map +1 -1
  52. package/dist/routes/pipelines.d.ts.map +1 -1
  53. package/dist/routes/pipelines.js +67 -0
  54. package/dist/routes/pipelines.js.map +1 -1
  55. package/dist/routes/relationships.d.ts.map +1 -1
  56. package/dist/routes/relationships.js +3 -0
  57. package/dist/routes/relationships.js.map +1 -1
  58. package/openapi/openapi.json +1465 -213
  59. package/package.json +15 -13
package/README.md CHANGED
@@ -7,10 +7,10 @@ Remote apps should **call** this service over HTTP — not reinvent wiring by in
7
7
  ## Install / run
8
8
 
9
9
  ```bash
10
- npm install @x12i/memorix-service@3.0.0 # composition library / CLI
10
+ npm install @x12i/memorix-service@3.0.3 # composition library / CLI
11
11
  ```
12
12
 
13
- Prefer the monorepo stack (service + Studio + ops-source):
13
+ Prefer the monorepo stack (service + Studio + opx-source):
14
14
 
15
15
  ```bash
16
16
  # from repo root
@@ -26,8 +26,12 @@ MEMORIX_SERVICE_MODE=dev npm run dev # metadata in-memory; durable routes 503
26
26
 
27
27
  | | |
28
28
  |--|--|
29
- | Default port | **5100** (`MEMORIX_SERVICE_PORT`) |
29
+ | Default port | **5100** (`MEMORIX_SERVICE_PORT`, zone `memorix`) |
30
30
  | OpenAPI | `GET /api/openapi.json` |
31
+ | Live view | `GET /_live` (`@x12i/core-service` → `@x12i/api-live-view`) |
32
+ | Health | `GET /health` |
33
+
34
+ Compliance: this process uses **`@x12i/core-service`** (zone port, health, live view, correlation-id).
31
35
 
32
36
  ## Library exports
33
37
 
@@ -46,8 +50,8 @@ import {
46
50
  Every `/api/*` request requires:
47
51
 
48
52
  ```http
49
- x-memorix-org-id: g12ops-demo
50
- x-memorix-agent-ids: ops
53
+ x-memorix-org-id: sandboxdemo
54
+ x-memorix-agent-ids: opx
51
55
  ```
52
56
 
53
57
  Singular `agentId` headers are rejected. `agentIds[]` selects **effective metadata**; `orgId` selects the **data** universe.
@@ -57,8 +61,8 @@ Singular `agentId` headers are rejected. `agentIds[]` selects **effective metada
57
61
  ```bash
58
62
  curl -s http://127.0.0.1:5100/health
59
63
  curl -s http://127.0.0.1:5100/api/diagnostics/scope \
60
- -H 'x-memorix-org-id: g12ops-demo' \
61
- -H 'x-memorix-agent-ids: ops'
64
+ -H 'x-memorix-org-id: sandboxdemo' \
65
+ -H 'x-memorix-agent-ids: opx'
62
66
  ```
63
67
 
64
68
  ## Route families
@@ -68,13 +72,24 @@ curl -s http://127.0.0.1:5100/api/diagnostics/scope \
68
72
  | `/api/metadata` | Kinds, definitions, install/publish |
69
73
  | `/api/data` | Content get/list/write, compose, abstract |
70
74
  | `/api/relationships` | Query / discover / verify / rebuild (**no** ad-hoc link PUT) |
71
- | `/api/memory` | Pull, raw, sources, runs |
75
+ | `/api/memory` | Pull, raw, sources, **checkpoints**, schedules, runs, `commit-page`, connection probe |
72
76
  | `/api/pipelines` | Definitions, start, runs, retry/resume |
73
77
  | `/api/operations` | Operational helpers |
74
78
  | `/api/workflow` | Workflow sibling content |
75
79
  | `/api/intelligence` | Profiles / proposals (never auto-install) |
76
80
  | `/api/data-journey` | Evidence cone + expected-vs-filled coverage |
77
81
 
82
+ ### Memory (operator + called-service)
83
+
84
+ | Method | Path | Notes |
85
+ |--------|------|-------|
86
+ | `GET` | `/api/memory/sources/{sourceId}/connection` | Probe configured URL |
87
+ | `GET`/`PUT`/`POST` | `…/checkpoints` (+ `/reset`) | Source position per OT × route |
88
+ | `POST` | `…/commit-page` | Model B atomic land + checkpoint |
89
+ | `POST` | `/api/memory/pull` | **Operator-only** — rejected when `x-memorix-invocation-grant` is present |
90
+
91
+ Called services with `memorixAccess` receive an HMAC grant scoped to `explore` · `checkpoints` · `raw`. Prefer **`@x12i/memorix-sdk`** (`/client` / `/worker`) over raw fetch.
92
+
78
93
  ### Data journey (read-only)
79
94
 
80
95
  | Method | Path |
@@ -98,5 +113,6 @@ curl -s http://127.0.0.1:5100/api/diagnostics/scope \
98
113
  ## Docs
99
114
 
100
115
  - [`documentation/http-api.md`](../documentation/http-api.md) · OpenAPI in-repo [`openapi/openapi.json`](./openapi/openapi.json)
101
- - Ebooks: [Platform Overview](../new-ebooks/00-platform-overview/) · [Services](../new-ebooks/07-services/) · [Runtime Data Client](../new-ebooks/02-runtime-data-client/)
102
- - Hub: [https://ebooks.memorix.x12i.com](https://ebooks.memorix.x12i.com)
116
+ - Capability SDK: [`@x12i/memorix-sdk`](../memorix-sdk/) · HTTP client: [`@x12i/memorix-client`](../memorix-client/)
117
+ - Ebooks: [Platform Overview](../memorix-docs/00-platform-overview/) · [Services](../memorix-docs/07-services/) · [Runtime Data Client](../memorix-docs/02-runtime-data-client/)
118
+ - Hub: [https://docs.memorix.x12i.com](https://docs.memorix.x12i.com) · npm `@x12i/memorix-docs`
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Enforce callback grants on Explore / Memory / checkpoint routes.
3
+ * Product hosts without a grant keep full org-scoped access.
4
+ */
5
+ import type { FastifyRequest } from "fastify";
6
+ import type { MemorixServiceAccess } from "@x12i/memorix-pipeline/v2";
7
+ import { type CallbackGrantPayload } from "./callback-grant.js";
8
+ export declare function readInvocationGrant(req: FastifyRequest): CallbackGrantPayload | null;
9
+ export declare function requireCallbackAccess(req: FastifyRequest, surface: MemorixServiceAccess): void;
10
+ /**
11
+ * Operator/platform-only routes (e.g. Memory pull). Called-service grants
12
+ * never include pull — reject whenever an invocation grant is present.
13
+ */
14
+ export declare function forbidCallbackGrant(req: FastifyRequest): void;
15
+ //# sourceMappingURL=access-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-gate.d.ts","sourceRoot":"","sources":["../src/access-gate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;AAG7B,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,cAAc,GAClB,oBAAoB,GAAG,IAAI,CAK7B;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,oBAAoB,GAC5B,IAAI,CA2BN;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAQ7D"}
@@ -0,0 +1,38 @@
1
+ import { ServiceError } from "./errors.js";
2
+ import { grantHasAccess, verifyCallbackGrant, } from "./callback-grant.js";
3
+ import { resolveScope } from "./request-scope.js";
4
+ export function readInvocationGrant(req) {
5
+ const raw = req.headers["x-memorix-invocation-grant"];
6
+ const token = Array.isArray(raw) ? raw[0] : raw;
7
+ if (!token || typeof token !== "string")
8
+ return null;
9
+ return verifyCallbackGrant(token);
10
+ }
11
+ export function requireCallbackAccess(req, surface) {
12
+ const grant = readInvocationGrant(req);
13
+ if (!grant)
14
+ return; // product host — no grant restriction
15
+ const scope = resolveScope(req);
16
+ if (grant.orgId !== scope.orgId) {
17
+ throw new ServiceError("ACCESS_DENIED", "invocation grant orgId mismatch", 403);
18
+ }
19
+ const grantAgents = [...grant.agentIds].sort().join(",");
20
+ const scopeAgents = [...scope.agentIds].sort().join(",");
21
+ if (grantAgents !== scopeAgents) {
22
+ throw new ServiceError("ACCESS_DENIED", "invocation grant agentIds mismatch", 403);
23
+ }
24
+ if (!grantHasAccess(grant, surface)) {
25
+ throw new ServiceError("ACCESS_DENIED", `invocation grant does not include "${surface}"`, 403);
26
+ }
27
+ }
28
+ /**
29
+ * Operator/platform-only routes (e.g. Memory pull). Called-service grants
30
+ * never include pull — reject whenever an invocation grant is present.
31
+ */
32
+ export function forbidCallbackGrant(req) {
33
+ const grant = readInvocationGrant(req);
34
+ if (!grant)
35
+ return;
36
+ throw new ServiceError("ACCESS_DENIED", "invocation grant cannot call operator-only Memory pull; use explore / checkpoints / raw / commit-page", 403);
37
+ }
38
+ //# sourceMappingURL=access-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-gate.js","sourceRoot":"","sources":["../src/access-gate.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,cAAc,EACd,mBAAmB,GAEpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,UAAU,mBAAmB,CACjC,GAAmB;IAEnB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAChD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,GAAmB,EACnB,OAA6B;IAE7B,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,sCAAsC;IAC1D,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,IAAI,YAAY,CACpB,eAAe,EACf,iCAAiC,EACjC,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;QAChC,MAAM,IAAI,YAAY,CACpB,eAAe,EACf,oCAAoC,EACpC,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,YAAY,CACpB,eAAe,EACf,sCAAsC,OAAO,GAAG,EAChD,GAAG,CACJ,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAmB;IACrD,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,MAAM,IAAI,YAAY,CACpB,eAAe,EACf,uGAAuG,EACvG,GAAG,CACJ,CAAC;AACJ,CAAC"}
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAIA,OAAO,OAAO,EAAE,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAIxD,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAevB,MAAM,MAAM,8BAA8B,GAAG,YAAY,GAAG;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B,CAAC;AAEF,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,8BAA8B,GACnC,OAAO,CAAC;IAAE,GAAG,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAsD5E;AAED,MAAM,MAAM,0BAA0B,GAAG,8BAA8B,GAAG;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,0BAA0B;;;;;GAM7E"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAIA,OAAO,OAAO,EAAE,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAIxD,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAgBvB,MAAM,MAAM,8BAA8B,GAAG,YAAY,GAAG;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B,CAAC;AAEF,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,8BAA8B,GACnC,OAAO,CAAC;IAAE,GAAG,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CA0D5E;AAED,MAAM,MAAM,0BAA0B,GAAG,8BAA8B,GAAG;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,0BAA0B;;;;;GAM7E"}
package/dist/app.js CHANGED
@@ -12,6 +12,7 @@ import { registerMetadataRoutes } from "./routes/metadata.js";
12
12
  import { registerDataRoutes } from "./routes/data.js";
13
13
  import { registerRelationshipRoutes } from "./routes/relationships.js";
14
14
  import { registerMemoryRoutes } from "./routes/memory.js";
15
+ import { registerConnectorInvocationRoutes } from "./routes/connector-invocations.js";
15
16
  import { registerPipelineRoutes } from "./routes/pipelines.js";
16
17
  import { registerOperationsRoutes } from "./routes/operations.js";
17
18
  import { registerWorkflowRoutes } from "./routes/workflow.js";
@@ -60,11 +61,14 @@ export async function createMemorixServiceApp(opts) {
60
61
  await registerDataRoutes(app, platform);
61
62
  await registerRelationshipRoutes(app, platform);
62
63
  await registerMemoryRoutes(app, platform);
64
+ await registerConnectorInvocationRoutes(app, platform);
63
65
  await registerPipelineRoutes(app, platform);
64
66
  await registerOperationsRoutes(app, platform);
65
67
  await registerWorkflowRoutes(app, platform);
66
68
  await registerIntelligenceRoutes(app, platform);
67
69
  await registerDataJourneyRoutes(app, platform);
70
+ // Minute-resolution Memory pull schedule ticker (collector-only; not pipelines).
71
+ platform.startMemoryScheduleTicker({ intervalMs: 60_000 });
68
72
  return { app, platform, port: core.port };
69
73
  }
70
74
  export async function startMemorixServiceHttp(opts) {
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,16 @@
1
+ import type { MemorixServiceAccess } from "@x12i/memorix-pipeline/v2";
2
+ export type CallbackGrantPayload = {
3
+ orgId: string;
4
+ agentIds: string[];
5
+ access: MemorixServiceAccess[];
6
+ runId: string;
7
+ stepId: string;
8
+ exp: number;
9
+ };
10
+ export declare function resolveCallbackHmacSecret(): string;
11
+ export declare function issueCallbackGrant(input: Omit<CallbackGrantPayload, "exp"> & {
12
+ ttlMs?: number;
13
+ }, secret?: string): string;
14
+ export declare function verifyCallbackGrant(token: string, secret?: string): CallbackGrantPayload | null;
15
+ export declare function grantHasAccess(grant: CallbackGrantPayload, surface: MemorixServiceAccess): boolean;
16
+ //# sourceMappingURL=callback-grant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callback-grant.d.ts","sourceRoot":"","sources":["../src/callback-grant.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAIF,wBAAgB,yBAAyB,IAAI,MAAM,CAMlD;AAiBD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7D,MAAM,SAA8B,GACnC,MAAM,CAcR;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,MAAM,SAA8B,GACnC,oBAAoB,GAAG,IAAI,CA0B7B;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,oBAAoB,EAC3B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAET"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Server-issued HMAC callback grants for bi-directional workers.
3
+ * The grant is the source of truth; clients must not escalate access by mutating arrays.
4
+ */
5
+ import { createHmac, timingSafeEqual } from "node:crypto";
6
+ const DEFAULT_TTL_MS = 60 * 60 * 1000;
7
+ export function resolveCallbackHmacSecret() {
8
+ return (process.env.MEMORIX_CALLBACK_HMAC_SECRET?.trim() ||
9
+ process.env.MEMORIX_SERVICE_SECRET?.trim() ||
10
+ "memorix-dev-callback-secret");
11
+ }
12
+ function b64url(buf) {
13
+ const b = typeof buf === "string" ? Buffer.from(buf, "utf8") : buf;
14
+ return b
15
+ .toString("base64")
16
+ .replace(/\+/g, "-")
17
+ .replace(/\//g, "_")
18
+ .replace(/=+$/, "");
19
+ }
20
+ function fromB64url(s) {
21
+ const pad = s.length % 4 === 0 ? "" : "=".repeat(4 - (s.length % 4));
22
+ const b64 = s.replace(/-/g, "+").replace(/_/g, "/") + pad;
23
+ return Buffer.from(b64, "base64");
24
+ }
25
+ export function issueCallbackGrant(input, secret = resolveCallbackHmacSecret()) {
26
+ const payload = {
27
+ orgId: input.orgId,
28
+ agentIds: [...input.agentIds],
29
+ access: [...input.access],
30
+ runId: input.runId,
31
+ stepId: input.stepId,
32
+ exp: Date.now() + (input.ttlMs ?? DEFAULT_TTL_MS),
33
+ };
34
+ const body = b64url(JSON.stringify(payload));
35
+ const sig = b64url(createHmac("sha256", secret).update(body).digest());
36
+ return `${body}.${sig}`;
37
+ }
38
+ export function verifyCallbackGrant(token, secret = resolveCallbackHmacSecret()) {
39
+ const parts = token.split(".");
40
+ if (parts.length !== 2)
41
+ return null;
42
+ const [body, sig] = parts;
43
+ if (!body || !sig)
44
+ return null;
45
+ const expected = b64url(createHmac("sha256", secret).update(body).digest());
46
+ try {
47
+ const a = Buffer.from(sig);
48
+ const b = Buffer.from(expected);
49
+ if (a.length !== b.length || !timingSafeEqual(a, b))
50
+ return null;
51
+ }
52
+ catch {
53
+ return null;
54
+ }
55
+ let payload;
56
+ try {
57
+ payload = JSON.parse(fromB64url(body).toString("utf8"));
58
+ }
59
+ catch {
60
+ return null;
61
+ }
62
+ if (!payload?.orgId || !Array.isArray(payload.agentIds) || !Array.isArray(payload.access)) {
63
+ return null;
64
+ }
65
+ if (typeof payload.exp !== "number" || Date.now() > payload.exp)
66
+ return null;
67
+ return payload;
68
+ }
69
+ export function grantHasAccess(grant, surface) {
70
+ return grant.access.includes(surface);
71
+ }
72
+ //# sourceMappingURL=callback-grant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callback-grant.js","sourceRoot":"","sources":["../src/callback-grant.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,5 +3,5 @@ export { resolveScope } from "./request-scope.js";
3
3
  export { ServiceError, mapErrorToHttp, redactSecrets, type ServiceErrorBody, } from "./errors.js";
4
4
  export { createMemorixPlatform, PlatformStartupError, type MemorixPlatform, type PlatformDeps, type RuntimeMode, type OrgPorts, } from "./platform.js";
5
5
  export { createMemorixServiceApp, startMemorixServiceHttp, type CreateMemorixServiceAppOptions, type StartMemorixServiceOptions, } from "./app.js";
6
- export { generateG10OrgId, generateG11OrgId, generateG12OrgId, beginIsolationSession, beginG11IsolationSession, beginG12IsolationSession, cleanupIsolationSession, isolationEvidence, assertSafeG10OrgId, assertSafeG11OrgId, assertSafeG12OrgId, assertSafeAcceptanceOrgId, G10_ORG_PATTERN, G11_ORG_PATTERN, G12_ORG_PATTERN, ACCEPTANCE_ORG_PATTERN, IsolationError, type IsolationSession, } from "./isolation.js";
6
+ export { generateSandboxOrgId, beginIsolationSession, cleanupIsolationSession, isolationEvidence, assertSafeSandboxOrgId, SANDBOX_ORG_PATTERN, SANDBOX_ORG_PREFIX, IsolationError, type IsolationSession, } from "./isolation.js";
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,QAAQ,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,KAAK,8BAA8B,EACnC,KAAK,0BAA0B,GAChC,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,eAAe,EACf,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,QAAQ,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,KAAK,8BAA8B,EACnC,KAAK,0BAA0B,GAChC,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -3,5 +3,5 @@ export { resolveScope } from "./request-scope.js";
3
3
  export { ServiceError, mapErrorToHttp, redactSecrets, } from "./errors.js";
4
4
  export { createMemorixPlatform, PlatformStartupError, } from "./platform.js";
5
5
  export { createMemorixServiceApp, startMemorixServiceHttp, } from "./app.js";
6
- export { generateG10OrgId, generateG11OrgId, generateG12OrgId, beginIsolationSession, beginG11IsolationSession, beginG12IsolationSession, cleanupIsolationSession, isolationEvidence, assertSafeG10OrgId, assertSafeG11OrgId, assertSafeG12OrgId, assertSafeAcceptanceOrgId, G10_ORG_PATTERN, G11_ORG_PATTERN, G12_ORG_PATTERN, ACCEPTANCE_ORG_PATTERN, IsolationError, } from "./isolation.js";
6
+ export { generateSandboxOrgId, beginIsolationSession, cleanupIsolationSession, isolationEvidence, assertSafeSandboxOrgId, SANDBOX_ORG_PATTERN, SANDBOX_ORG_PREFIX, IsolationError, } from "./isolation.js";
7
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,GAErB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,GAEd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GAKrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GAGxB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,eAAe,EACf,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,cAAc,GAEf,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,GAErB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,GAEd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GAKrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GAGxB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,GAEf,MAAM,gBAAgB,CAAC"}
@@ -1,16 +1,12 @@
1
1
  import type { MongoClient } from "mongodb";
2
- export declare const G10_ORG_PREFIX = "g10ops";
3
- export declare const G11_ORG_PREFIX = "g11ops";
4
- export declare const G12_ORG_PREFIX = "g12ops";
5
- export declare const G10_ORG_PATTERN: RegExp;
6
- export declare const G11_ORG_PATTERN: RegExp;
7
- export declare const G12_ORG_PATTERN: RegExp;
8
- export declare const ACCEPTANCE_ORG_PATTERN: RegExp;
2
+ export declare const SANDBOX_ORG_PREFIX = "sandbox";
3
+ export declare const SANDBOX_ORG_PATTERN: RegExp;
9
4
  export declare const FORBIDDEN_ORG_SUBSTRINGS: readonly ["neo", "fieldstone"];
10
5
  export type DatabaseKindName = "entity" | "event" | "knowledge" | "operational" | "metadata";
11
6
  export type IsolationSession = {
12
7
  orgId: string;
13
- agentIds: ["ops"];
8
+ /** Default `["opx"]`; KnowX acceptance uses `["knowx"]` (inherits opx via parent). */
9
+ agentIds: readonly string[];
14
10
  allowedDatabaseNames: string[];
15
11
  createdDatabaseNames: string[];
16
12
  preflightExisting: string[];
@@ -21,13 +17,8 @@ export declare class IsolationError extends Error {
21
17
  readonly code = "DB_ISOLATION_VIOLATION";
22
18
  constructor(message: string);
23
19
  }
24
- export declare function assertSafeG10OrgId(orgId: string): void;
25
- export declare function assertSafeG11OrgId(orgId: string): void;
26
- export declare function assertSafeG12OrgId(orgId: string): void;
27
- export declare function assertSafeAcceptanceOrgId(orgId: string, gate?: "g10" | "g11" | "g12" | "any"): void;
28
- export declare function generateG10OrgId(token?: string): string;
29
- export declare function generateG11OrgId(token?: string): string;
30
- export declare function generateG12OrgId(token?: string): string;
20
+ export declare function assertSafeSandboxOrgId(orgId: string): void;
21
+ export declare function generateSandboxOrgId(token?: string): string;
31
22
  export declare function allowedDatabasesForOrg(orgId: string): string[];
32
23
  /** Read-only list of DB names that already exist for this org prefix. */
33
24
  export declare function preflightOrgDatabases(client: MongoClient, orgId: string): Promise<{
@@ -37,22 +28,15 @@ export declare function preflightOrgDatabases(client: MongoClient, orgId: string
37
28
  export declare function beginIsolationSession(client: MongoClient, opts?: {
38
29
  token?: string;
39
30
  maxAttempts?: number;
40
- prefix?: "g10ops" | "g11ops" | "g12ops";
41
- }): Promise<IsolationSession>;
42
- export declare function beginG11IsolationSession(client: MongoClient, opts?: {
43
- token?: string;
44
- maxAttempts?: number;
45
- }): Promise<IsolationSession>;
46
- export declare function beginG12IsolationSession(client: MongoClient, opts?: {
47
- token?: string;
48
- maxAttempts?: number;
31
+ /** Defaults to `["opx"]`. Use `["knowx"]` for KnowX pack acceptance. */
32
+ agentIds?: readonly string[];
49
33
  }): Promise<IsolationSession>;
50
34
  export declare function recordCreatedDatabase(session: IsolationSession, dbName: string): void;
51
35
  /** Drop only DBs recorded in this session's creation ledger (collections then empty DB if permitted). */
52
36
  export declare function cleanupIsolationSession(client: MongoClient, session: IsolationSession): Promise<string[]>;
53
37
  export declare function isolationEvidence(session: IsolationSession, extra?: Record<string, unknown>): {
54
38
  orgId: string;
55
- agentIds: ["ops"];
39
+ agentIds: readonly string[];
56
40
  allowedDatabaseNames: string[];
57
41
  preflightExisting: string[];
58
42
  createdDatabaseNames: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"isolation.d.ts","sourceRoot":"","sources":["../src/isolation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"isolation.d.ts","sourceRoot":"","sources":["../src/isolation.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3C,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAC5C,eAAO,MAAM,mBAAmB,QAAuB,CAAC;AACxD,eAAO,MAAM,wBAAwB,gCAAiC,CAAC;AAEvE,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,OAAO,GACP,WAAW,GACX,aAAa,GACb,UAAU,CAAC;AAEf,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,sFAAsF;IACtF,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,IAAI,CAAC;CAC9B,CAAC;AAEF,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,4BAA4B;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAe1D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAK3D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAS9D;AAED,yEAAyE;AACzE,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CASpD;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,WAAW,EACnB,IAAI,CAAC,EAAE;IACL,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B,GACA,OAAO,CAAC,gBAAgB,CAAC,CAoB3B;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAQrF;AAED,yGAAyG;AACzG,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC,CA2BnB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;EAY3F"}
package/dist/isolation.js CHANGED
@@ -1,17 +1,13 @@
1
1
  /**
2
- * Database isolation guard for G10/G11/G12 acceptance.
3
- * Org patterns: g10ops*|g11ops*|g12ops* — never neo/fieldstone/prior orgs.
2
+ * Database isolation guard for sandbox acceptance drills.
3
+ * Org pattern: sandbox* — never neo/fieldstone/prior customer orgs.
4
+ * Agent ids are orthogonal to org id (default ops; KnowX sessions use knowx).
4
5
  * Cleanup may only drop DBs recorded in this run's creation ledger.
5
6
  */
6
7
  import { randomBytes } from "node:crypto";
7
8
  import { databaseNameFor } from "@x12i/memorix-data";
8
- export const G10_ORG_PREFIX = "g10ops";
9
- export const G11_ORG_PREFIX = "g11ops";
10
- export const G12_ORG_PREFIX = "g12ops";
11
- export const G10_ORG_PATTERN = /^g10ops[a-z0-9]+$/;
12
- export const G11_ORG_PATTERN = /^g11ops[a-z0-9]+$/;
13
- export const G12_ORG_PATTERN = /^g12ops[a-z0-9]+$/;
14
- export const ACCEPTANCE_ORG_PATTERN = /^g1[012]ops[a-z0-9]+$/;
9
+ export const SANDBOX_ORG_PREFIX = "sandbox";
10
+ export const SANDBOX_ORG_PATTERN = /^sandbox[a-z0-9]+$/;
15
11
  export const FORBIDDEN_ORG_SUBSTRINGS = ["neo", "fieldstone"];
16
12
  export class IsolationError extends Error {
17
13
  code = "DB_ISOLATION_VIOLATION";
@@ -20,25 +16,9 @@ export class IsolationError extends Error {
20
16
  this.name = "IsolationError";
21
17
  }
22
18
  }
23
- export function assertSafeG10OrgId(orgId) {
24
- assertSafeAcceptanceOrgId(orgId, "g10");
25
- }
26
- export function assertSafeG11OrgId(orgId) {
27
- assertSafeAcceptanceOrgId(orgId, "g11");
28
- }
29
- export function assertSafeG12OrgId(orgId) {
30
- assertSafeAcceptanceOrgId(orgId, "g12");
31
- }
32
- export function assertSafeAcceptanceOrgId(orgId, gate = "any") {
33
- const pattern = gate === "g10"
34
- ? G10_ORG_PATTERN
35
- : gate === "g11"
36
- ? G11_ORG_PATTERN
37
- : gate === "g12"
38
- ? G12_ORG_PATTERN
39
- : ACCEPTANCE_ORG_PATTERN;
40
- if (!pattern.test(orgId)) {
41
- throw new IsolationError(`orgId must match ${pattern}: got ${JSON.stringify(orgId)}`);
19
+ export function assertSafeSandboxOrgId(orgId) {
20
+ if (!SANDBOX_ORG_PATTERN.test(orgId)) {
21
+ throw new IsolationError(`orgId must match ${SANDBOX_ORG_PATTERN}: got ${JSON.stringify(orgId)}`);
42
22
  }
43
23
  const lower = orgId.toLowerCase();
44
24
  for (const bad of FORBIDDEN_ORG_SUBSTRINGS) {
@@ -50,24 +30,14 @@ export function assertSafeAcceptanceOrgId(orgId, gate = "any") {
50
30
  throw new IsolationError(`forbidden orgId ${orgId}`);
51
31
  }
52
32
  }
53
- export function generateG10OrgId(token) {
54
- return generateAcceptanceOrgId("g10ops", token);
55
- }
56
- export function generateG11OrgId(token) {
57
- return generateAcceptanceOrgId("g11ops", token);
58
- }
59
- export function generateG12OrgId(token) {
60
- return generateAcceptanceOrgId("g12ops", token);
61
- }
62
- function generateAcceptanceOrgId(prefix, token) {
33
+ export function generateSandboxOrgId(token) {
63
34
  const t = (token ?? randomBytes(6).toString("hex")).toLowerCase().replace(/[^a-z0-9]/g, "");
64
- const orgId = `${prefix}${t}`;
65
- const gate = prefix === "g10ops" ? "g10" : prefix === "g11ops" ? "g11" : "g12";
66
- assertSafeAcceptanceOrgId(orgId, gate);
35
+ const orgId = `${SANDBOX_ORG_PREFIX}${t}`;
36
+ assertSafeSandboxOrgId(orgId);
67
37
  return orgId;
68
38
  }
69
39
  export function allowedDatabasesForOrg(orgId) {
70
- assertSafeAcceptanceOrgId(orgId);
40
+ assertSafeSandboxOrgId(orgId);
71
41
  return [
72
42
  databaseNameFor(orgId, "entity"),
73
43
  databaseNameFor(orgId, "event"),
@@ -78,7 +48,7 @@ export function allowedDatabasesForOrg(orgId) {
78
48
  }
79
49
  /** Read-only list of DB names that already exist for this org prefix. */
80
50
  export async function preflightOrgDatabases(client, orgId) {
81
- assertSafeAcceptanceOrgId(orgId);
51
+ assertSafeSandboxOrgId(orgId);
82
52
  const allowed = new Set(allowedDatabasesForOrg(orgId));
83
53
  const admin = client.db().admin();
84
54
  const { databases } = await admin.listDatabases();
@@ -89,21 +59,17 @@ export async function preflightOrgDatabases(client, orgId) {
89
59
  }
90
60
  export async function beginIsolationSession(client, opts) {
91
61
  const max = opts?.maxAttempts ?? 8;
92
- const prefix = opts?.prefix ?? "g10ops";
62
+ const agentIds = opts?.agentIds?.length ? [...opts.agentIds] : ["opx"];
93
63
  for (let i = 0; i < max; i++) {
94
64
  const token = opts?.token && i === 0 ? opts.token : undefined;
95
- const orgId = prefix === "g12ops"
96
- ? generateG12OrgId(token)
97
- : prefix === "g11ops"
98
- ? generateG11OrgId(token)
99
- : generateG10OrgId(token);
65
+ const orgId = generateSandboxOrgId(token);
100
66
  const { existing, conflict } = await preflightOrgDatabases(client, orgId);
101
67
  if (conflict)
102
68
  continue;
103
69
  const allowed = allowedDatabasesForOrg(orgId);
104
70
  return {
105
71
  orgId,
106
- agentIds: ["ops"],
72
+ agentIds,
107
73
  allowedDatabaseNames: allowed,
108
74
  createdDatabaseNames: [],
109
75
  preflightExisting: existing,
@@ -111,16 +77,10 @@ export async function beginIsolationSession(client, opts) {
111
77
  zeroPreexistingMutated: true,
112
78
  };
113
79
  }
114
- throw new IsolationError(`could not allocate unused ${prefix} orgId after retries`);
115
- }
116
- export async function beginG11IsolationSession(client, opts) {
117
- return beginIsolationSession(client, { ...opts, prefix: "g11ops" });
118
- }
119
- export async function beginG12IsolationSession(client, opts) {
120
- return beginIsolationSession(client, { ...opts, prefix: "g12ops" });
80
+ throw new IsolationError(`could not allocate unused sandbox orgId after retries`);
121
81
  }
122
82
  export function recordCreatedDatabase(session, dbName) {
123
- assertSafeAcceptanceOrgId(session.orgId);
83
+ assertSafeSandboxOrgId(session.orgId);
124
84
  if (!session.allowedDatabaseNames.includes(dbName)) {
125
85
  throw new IsolationError(`cannot create database outside ledger allow-list: ${dbName}`);
126
86
  }
@@ -130,7 +90,7 @@ export function recordCreatedDatabase(session, dbName) {
130
90
  }
131
91
  /** Drop only DBs recorded in this session's creation ledger (collections then empty DB if permitted). */
132
92
  export async function cleanupIsolationSession(client, session) {
133
- assertSafeAcceptanceOrgId(session.orgId);
93
+ assertSafeSandboxOrgId(session.orgId);
134
94
  const dropped = [];
135
95
  for (const name of session.createdDatabaseNames) {
136
96
  if (!name.startsWith(session.orgId + "_")) {
@@ -1 +1 @@
1
- {"version":3,"file":"isolation.js","sourceRoot":"","sources":["../src/isolation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"isolation.js","sourceRoot":"","sources":["../src/isolation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAC5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AACxD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,KAAK,EAAE,YAAY,CAAU,CAAC;AAoBvE,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,GAAG,wBAAwB,CAAC;IACzC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,cAAc,CACtB,oBAAoB,mBAAmB,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CACxE,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,cAAc,CAAC,2CAA2C,GAAG,GAAG,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;QAC9C,MAAM,IAAI,cAAc,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC5F,MAAM,KAAK,GAAG,GAAG,kBAAkB,GAAG,CAAC,EAAE,CAAC;IAC1C,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO;QACL,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC;QAChC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC;QAC/B,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC;QACnC,eAAe,CAAC,KAAK,EAAE,aAAa,CAAC;QACrC,GAAG,KAAK,WAAW;KACpB,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAmB,EACnB,KAAa;IAEb,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC;IAClC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC;IAClD,MAAM,QAAQ,GAAG,SAAS;SACvB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;IACvE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAmB,EACnB,IAKC;IAED,MAAM,GAAG,GAAG,IAAI,EAAE,WAAW,IAAI,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC1E,IAAI,QAAQ;YAAE,SAAS;QACvB,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO;YACL,KAAK;YACL,QAAQ;YACR,oBAAoB,EAAE,OAAO;YAC7B,oBAAoB,EAAE,EAAE;YACxB,iBAAiB,EAAE,QAAQ;YAC3B,kBAAkB,EAAE,GAAG,KAAK,WAAW;YACvC,sBAAsB,EAAE,IAAI;SAC7B,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,cAAc,CAAC,uDAAuD,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAyB,EAAE,MAAc;IAC7E,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,cAAc,CAAC,qDAAqD,MAAM,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,yGAAyG;AACzG,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAmB,EACnB,OAAyB;IAEzB,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,cAAc,CAAC,qCAAqC,IAAI,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,cAAc,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;QACpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YACnB,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;QACH,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,mFAAmF;QACrF,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAyB,EAAE,KAA+B;IAC1F,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;QAClD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;QAClD,cAAc,EAAE,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC;QACjD,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;QACtD,GAAG,KAAK;KACT,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { MetadataPack } from "@x12i/memorix-metadata";
2
- /** Load a known disk pack (ops) for explicit install — never auto-installs. */
2
+ /** Load a known disk pack (opx, knowx) for explicit install — never auto-installs. */
3
3
  export declare function loadKnownMetadataPack(packId: string): MetadataPack;
4
4
  export declare function listKnownPackIds(): string[];
5
5
  //# sourceMappingURL=known-packs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"known-packs.d.ts","sourceRoot":"","sources":["../src/known-packs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAU3D,+EAA+E;AAC/E,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAkBlE;AAED,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C"}
1
+ {"version":3,"file":"known-packs.d.ts","sourceRoot":"","sources":["../src/known-packs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAW3D,sFAAsF;AACtF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAkBlE;AAED,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C"}
@@ -5,9 +5,10 @@ import { ServiceError } from "./errors.js";
5
5
  const __dirname = dirname(fileURLToPath(import.meta.url));
6
6
  const REPO_ROOT = resolve(__dirname, "../..");
7
7
  const KNOWN_PACKS = {
8
- ops: resolve(REPO_ROOT, "memorix-metadata/examples/ops/normalized/pack.json"),
8
+ opx: resolve(REPO_ROOT, "memorix-metadata/examples/opx/normalized/pack.json"),
9
+ knowx: resolve(REPO_ROOT, "memorix-metadata/examples/knowx/normalized/pack.json"),
9
10
  };
10
- /** Load a known disk pack (ops) for explicit install — never auto-installs. */
11
+ /** Load a known disk pack (opx, knowx) for explicit install — never auto-installs. */
11
12
  export function loadKnownMetadataPack(packId) {
12
13
  const path = KNOWN_PACKS[packId];
13
14
  if (!path) {
@@ -1 +1 @@
1
- {"version":3,"file":"known-packs.js","sourceRoot":"","sources":["../src/known-packs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAE9C,MAAM,WAAW,GAA2B;IAC1C,GAAG,EAAE,OAAO,CAAC,SAAS,EAAE,oDAAoD,CAAC;CAC9E,CAAC;AAEF,+EAA+E;AAC/E,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,YAAY,CACpB,cAAc,EACd,mBAAmB,MAAM,aAAa,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC3E,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAiB,CAAC;IAChE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,YAAY,CACpB,kBAAkB,EAClB,uBAAuB,MAAM,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACpF,GAAG,CACJ,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"known-packs.js","sourceRoot":"","sources":["../src/known-packs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAE9C,MAAM,WAAW,GAA2B;IAC1C,GAAG,EAAE,OAAO,CAAC,SAAS,EAAE,oDAAoD,CAAC;IAC7E,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,sDAAsD,CAAC;CAClF,CAAC;AAEF,sFAAsF;AACtF,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,YAAY,CACpB,cAAc,EACd,mBAAmB,MAAM,aAAa,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC3E,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAiB,CAAC;IAChE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,YAAY,CACpB,kBAAkB,EAClB,uBAAuB,MAAM,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACpF,GAAG,CACJ,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAClC,CAAC"}