@x12i/memorix-service 3.0.3 → 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 +20 -8
  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 +5 -3
@@ -6,7 +6,8 @@ import { MongoClient, type Db } from "mongodb";
6
6
  import { type UnifiedMetadataClient } from "@x12i/memorix-metadata-runtime";
7
7
  import { type MemorixContentReader, type MemorixContentWriter, type MemorixAbstractWriter } from "@x12i/memorix-data";
8
8
  import { type RelationshipEngine } from "@x12i/memorix-relationships";
9
- import { type MemoryCollector } from "@x12i/memorix-memory";
9
+ import { type MemoryCollector, type MemoryRunStore, type MemoryScheduleStore, type ConnectorRegistry } from "@x12i/memorix-memory";
10
+ import { type GovernedCredentialProvider } from "@x12i/credorix-client";
10
11
  import { type IntelligenceArtifactPersistence } from "@x12i/memorix-intelligence";
11
12
  import { type RunLedger, type PipelineRuntime } from "@x12i/memorix-pipeline/v2";
12
13
  import { ServiceError } from "./errors.js";
@@ -29,6 +30,8 @@ export type OrgPorts = {
29
30
  abstractWriter: MemorixAbstractWriter;
30
31
  relationships: RelationshipEngine;
31
32
  memory: MemoryCollector;
33
+ memoryRunStore: MemoryRunStore;
34
+ memoryScheduleStore: MemoryScheduleStore;
32
35
  pipeline: PipelineRuntime;
33
36
  };
34
37
  export type MemorixPlatform = {
@@ -36,12 +39,28 @@ export type MemorixPlatform = {
36
39
  client: MongoClient | null;
37
40
  metadata: UnifiedMetadataClient;
38
41
  isolation: IsolationSession | null;
42
+ /** In-process connector registry for framework connectors. */
43
+ connectorRegistry: ConnectorRegistry;
44
+ /** Credorix governed credentials — required in prod when CREDORIX_SERVICE_URL is set. */
45
+ credorix: {
46
+ provider: GovernedCredentialProvider;
47
+ clientOptions: {
48
+ serviceUrl: string;
49
+ callerId: string;
50
+ callerToken?: string;
51
+ };
52
+ } | null;
39
53
  operationalDbFor(orgId: string): Db;
40
54
  metadataDbFor(orgId: string): Db;
41
55
  pipelineLedgerFor(orgId: string): RunLedger;
42
56
  intelligenceArtifactsFor(orgId: string): IntelligenceArtifactPersistence;
43
57
  /** Fail-closed: throws if ports cannot be constructed. */
44
58
  portsFor(scope: MemorixScope): OrgPorts;
59
+ /** Start minute-resolution Memory schedule ticker (no-op without Mongo). */
60
+ startMemoryScheduleTicker(opts?: {
61
+ intervalMs?: number;
62
+ ownerId?: string;
63
+ }): () => void;
45
64
  close(): Promise<void>;
46
65
  diagnostics(scope: MemorixScope): Record<string, unknown>;
47
66
  };
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAKL,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC3B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAGL,KAAK,+BAA+B,EACrC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,CAAC;AAEzC,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,6EAA6E;IAC7E,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,cAAc,EAAE,qBAAqB,CAAC;IACtC,aAAa,EAAE,kBAAkB,CAAC;IAClC,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,eAAe,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE,CAAC;IACpC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE,CAAC;IACjC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,+BAA+B,CAAC;IACzE,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,QAAQ,CAAC;IACxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3D,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,YAAY;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,eAAe,CAAC,CAgQ1B"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
package/dist/platform.js CHANGED
@@ -7,14 +7,16 @@ import { createInMemoryMetadataStore, createMetadataClient, } from "@x12i/memori
7
7
  import { createMongoContentReader, createMongoContentWriter, createMongoAbstractWriter, createMongoDataPlane, } from "@x12i/memorix-data";
8
8
  import { createMongoRelationshipStore } from "@x12i/memorix-relationship-store";
9
9
  import { createRelationshipEngine, } from "@x12i/memorix-relationships";
10
- import { createMemoryCollector, createMongoMemoryRunStore, createStaticCredentialProvider, createOpsFixtureConnector, } from "@x12i/memorix-memory";
10
+ import { createMemoryCollector, createMongoMemoryRunStore, createMongoMemoryScheduleStore, createStaticCredentialProvider, createOpxFixtureConnector, createInMemoryConnectorRegistry, createInMemoryPushEnvelopeStore, tickMemorySchedules, } from "@x12i/memorix-memory";
11
+ import { createFixtureConnector } from "@x12i/memorix-connector-sdk";
12
+ import { createGovernedCredentialProvider, } from "@x12i/credorix-client";
11
13
  import { createIntelligenceArtifactPersistence, createMongoRunLedger, } from "@x12i/memorix-intelligence";
12
14
  import { createMongoRunLedger as createPipelineLedger, createPipelineRuntime, createLivePortRegistry, } from "@x12i/memorix-pipeline/v2";
13
15
  import { ServiceError } from "./errors.js";
14
16
  import { memoryPullFetch } from "./live.js";
15
17
  import { createMongoMetadataStore, } from "./mongo-metadata-store.js";
16
18
  import { catalogFromMetadataClient, relationshipMetadataResolver, } from "./catalog-bridge.js";
17
- import { assertSafeAcceptanceOrgId, recordCreatedDatabase, } from "./isolation.js";
19
+ import { assertSafeSandboxOrgId, recordCreatedDatabase, } from "./isolation.js";
18
20
  export class PlatformStartupError extends ServiceError {
19
21
  constructor(message) {
20
22
  super("PLATFORM_STARTUP_FAILED", message, 503);
@@ -30,6 +32,12 @@ export async function createMemorixPlatform(deps) {
30
32
  const intelStores = new Map();
31
33
  const portsCache = new Map();
32
34
  let durableMetadata = null;
35
+ // Global framework connector registry (manifests + runtimes, no secrets).
36
+ const connectorRegistry = createInMemoryConnectorRegistry({
37
+ "conformance-fixture": createFixtureConnector([
38
+ { id: "demo-1", body: { name: "demo" } },
39
+ ]),
40
+ });
33
41
  if (deps.mode === "prod") {
34
42
  if (!deps.mongoUri && !deps.client) {
35
43
  throw new PlatformStartupError("prod mode requires durable mongoUri (or injected MongoClient); no in-memory fallback");
@@ -37,7 +45,27 @@ export async function createMemorixPlatform(deps) {
37
45
  if (deps.allowMemoryMetadata) {
38
46
  throw new PlatformStartupError("prod mode rejects allowMemoryMetadata / in-memory metadata store");
39
47
  }
48
+ if (!process.env.CREDORIX_SERVICE_URL?.trim()) {
49
+ throw new PlatformStartupError("prod mode requires CREDORIX_SERVICE_URL for governed connector credentials");
50
+ }
40
51
  }
52
+ const credorixServiceUrl = process.env.CREDORIX_SERVICE_URL?.trim() || "";
53
+ const credorixCallerId = process.env.CREDORIX_CALLER_ID?.trim() || "memorix-service";
54
+ const credorixCallerToken = process.env.CREDORIX_CALLER_TOKEN?.trim();
55
+ const credorix = credorixServiceUrl
56
+ ? {
57
+ provider: createGovernedCredentialProvider({
58
+ serviceUrl: credorixServiceUrl,
59
+ callerId: credorixCallerId,
60
+ ...(credorixCallerToken ? { callerToken: credorixCallerToken } : {}),
61
+ }),
62
+ clientOptions: {
63
+ serviceUrl: credorixServiceUrl,
64
+ callerId: credorixCallerId,
65
+ ...(credorixCallerToken ? { callerToken: credorixCallerToken } : {}),
66
+ },
67
+ }
68
+ : null;
41
69
  if (deps.client) {
42
70
  client = deps.client;
43
71
  }
@@ -52,7 +80,7 @@ export async function createMemorixPlatform(deps) {
52
80
  throw new PlatformStartupError("prod mode requires connected MongoClient");
53
81
  }
54
82
  if (deps.isolation) {
55
- assertSafeAcceptanceOrgId(deps.isolation.orgId);
83
+ assertSafeSandboxOrgId(deps.isolation.orgId);
56
84
  }
57
85
  let metadata;
58
86
  if (deps.mode === "prod" || (client && !deps.allowMemoryMetadata)) {
@@ -76,7 +104,7 @@ export async function createMemorixPlatform(deps) {
76
104
  throw new ServiceError("DURABLE_STORE_REQUIRED", "operational Mongo DB is required for this operation", 503);
77
105
  }
78
106
  if (deps.isolation) {
79
- assertSafeAcceptanceOrgId(orgId);
107
+ assertSafeSandboxOrgId(orgId);
80
108
  if (orgId !== deps.isolation.orgId) {
81
109
  throw new ServiceError("DB_ISOLATION_VIOLATION", "orgId does not match isolation session", 403);
82
110
  }
@@ -125,7 +153,7 @@ export async function createMemorixPlatform(deps) {
125
153
  if (hit)
126
154
  return hit;
127
155
  if (deps.isolation) {
128
- assertSafeAcceptanceOrgId(scope.orgId);
156
+ assertSafeSandboxOrgId(scope.orgId);
129
157
  for (const kind of ["entity", "event", "knowledge", "operational"]) {
130
158
  recordCreatedDatabase(deps.isolation, `${scope.orgId}_${kind}`);
131
159
  }
@@ -155,13 +183,16 @@ export async function createMemorixPlatform(deps) {
155
183
  relationshipStore: relStore,
156
184
  });
157
185
  const runStore = createMongoMemoryRunStore(client, scope.orgId);
186
+ const scheduleStore = createMongoMemoryScheduleStore(client, scope.orgId);
158
187
  const memory = createMemoryCollector({
159
188
  writer,
160
189
  reader,
161
190
  runStore,
191
+ // Static map is for local fixture sources only when Credorix is unset (dev).
192
+ // Production always passes credorix below and never uses these as a vault.
162
193
  credentials: createStaticCredentialProvider({
163
- // Local ops-source fixture only values never appear in evidence/HAR bodies.
164
- "ops-source-local": { token: "local-acceptance-token" },
194
+ "opx-source-local": { token: "local-acceptance-token" },
195
+ "knowx-source-local": { token: "local-acceptance-token" },
165
196
  }),
166
197
  metadata: {
167
198
  resolveSource(sourceId, agentIds) {
@@ -170,13 +201,29 @@ export async function createMemorixPlatform(deps) {
170
201
  },
171
202
  },
172
203
  connectors: {
173
- "ops-fixture": createOpsFixtureConnector({
204
+ "opx-fixture": createOpxFixtureConnector({
205
+ fetchImpl: memoryPullFetch,
206
+ }),
207
+ "rest-fixture": createOpxFixtureConnector({
174
208
  fetchImpl: memoryPullFetch,
175
209
  }),
176
- "rest-fixture": createOpsFixtureConnector({
210
+ "knowx-fixture": createOpxFixtureConnector({
177
211
  fetchImpl: memoryPullFetch,
178
212
  }),
179
213
  },
214
+ frameworkConnectors: {
215
+ "conformance-fixture": connectorRegistry.resolveRuntime("conformance-fixture") ??
216
+ createFixtureConnector([{ id: "demo-1", body: { name: "demo" } }]),
217
+ },
218
+ pushEnvelopeStore: createInMemoryPushEnvelopeStore(),
219
+ ...(credorix
220
+ ? {
221
+ credorix: {
222
+ provider: credorix.provider,
223
+ clientOptions: credorix.clientOptions,
224
+ },
225
+ }
226
+ : {}),
180
227
  });
181
228
  const portRegistry = createLivePortRegistry({
182
229
  scope: { orgId: scope.orgId, agentIds: scope.agentIds },
@@ -201,22 +248,98 @@ export async function createMemorixPlatform(deps) {
201
248
  abstractWriter,
202
249
  relationships,
203
250
  memory,
251
+ memoryRunStore: runStore,
252
+ memoryScheduleStore: scheduleStore,
204
253
  pipeline,
205
254
  };
206
255
  portsCache.set(cacheKey, orgPorts);
207
256
  return orgPorts;
208
257
  }
258
+ let scheduleTicker = null;
259
+ function startMemoryScheduleTicker(opts) {
260
+ if (scheduleTicker) {
261
+ clearInterval(scheduleTicker);
262
+ scheduleTicker = null;
263
+ }
264
+ if (!client) {
265
+ return () => undefined;
266
+ }
267
+ const intervalMs = opts?.intervalMs ?? 60_000;
268
+ const ownerId = opts?.ownerId ?? `memorix-service:${process.pid}`;
269
+ const mongo = client;
270
+ const tickOnce = async () => {
271
+ try {
272
+ const dbs = await mongo.db().admin().listDatabases();
273
+ const orgIds = (dbs.databases ?? [])
274
+ .map((d) => d.name)
275
+ .filter((name) => name.endsWith("_operational"))
276
+ .map((name) => name.slice(0, -"_operational".length))
277
+ .filter((orgId) => orgId.length > 0);
278
+ for (const orgId of orgIds) {
279
+ const scheduleStore = createMongoMemoryScheduleStore(mongo, orgId);
280
+ const due = await scheduleStore.listSchedules({ status: "active" });
281
+ if (due.length === 0)
282
+ continue;
283
+ const byAgents = new Map();
284
+ for (const s of due) {
285
+ const key = s.scope.agentIds.join(",") || "_";
286
+ const list = byAgents.get(key) ?? [];
287
+ list.push(s);
288
+ byAgents.set(key, list);
289
+ }
290
+ for (const [agentKey, schedules] of byAgents) {
291
+ const agentIds = agentKey === "_"
292
+ ? schedules[0].scope.agentIds
293
+ : agentKey.split(",").filter(Boolean);
294
+ let ports;
295
+ try {
296
+ ports = portsFor({ orgId, agentIds });
297
+ }
298
+ catch {
299
+ continue;
300
+ }
301
+ await tickMemorySchedules({
302
+ orgId,
303
+ scheduleStore: ports.memoryScheduleStore,
304
+ pull: (req) => ports.memory.pull(req),
305
+ ownerId,
306
+ });
307
+ }
308
+ }
309
+ }
310
+ catch {
311
+ // Ticker must not crash the service; next interval retries.
312
+ }
313
+ };
314
+ void tickOnce();
315
+ scheduleTicker = setInterval(() => void tickOnce(), intervalMs);
316
+ if (typeof scheduleTicker.unref === "function")
317
+ scheduleTicker.unref();
318
+ return () => {
319
+ if (scheduleTicker) {
320
+ clearInterval(scheduleTicker);
321
+ scheduleTicker = null;
322
+ }
323
+ };
324
+ }
209
325
  return {
210
326
  mode: deps.mode,
211
327
  client,
212
328
  metadata,
213
329
  isolation: deps.isolation ?? null,
330
+ connectorRegistry,
331
+ credorix,
214
332
  operationalDbFor,
215
333
  metadataDbFor,
216
334
  pipelineLedgerFor,
217
335
  intelligenceArtifactsFor,
218
336
  portsFor,
337
+ startMemoryScheduleTicker,
219
338
  async close() {
339
+ if (scheduleTicker) {
340
+ clearInterval(scheduleTicker);
341
+ scheduleTicker = null;
342
+ }
220
343
  if (durableMetadata)
221
344
  await durableMetadata.drain();
222
345
  if (client && !deps.client)
@@ -228,6 +351,7 @@ export async function createMemorixPlatform(deps) {
228
351
  scope,
229
352
  hasMongo: Boolean(client),
230
353
  durableMetadata: Boolean(durableMetadata),
354
+ credorix: Boolean(credorix),
231
355
  isolation: deps.isolation
232
356
  ? {
233
357
  orgId: deps.isolation.orgId,
@@ -243,6 +367,7 @@ export async function createMemorixPlatform(deps) {
243
367
  "@x12i/memorix-memory",
244
368
  "@x12i/memorix-pipeline/v2",
245
369
  "@x12i/memorix-intelligence",
370
+ "@x12i/credorix-client",
246
371
  ],
247
372
  };
248
373
  },
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Operator-facing relationship link normalization for Studio / G10 acceptance.
2
+ * Operator-facing relationship link normalization for Studio / sandbox acceptance.
3
3
  * relatedRecordId is always the opposite endpoint of the queried subject.
4
4
  */
5
5
  export type OperatorRelationshipLink = {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Operator-facing relationship link normalization for Studio / G10 acceptance.
2
+ * Operator-facing relationship link normalization for Studio / sandbox acceptance.
3
3
  * relatedRecordId is always the opposite endpoint of the queried subject.
4
4
  */
5
5
  /** Opposite endpoint relative to the queried subject record. */
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Wire invocation ledger into connector invocation routes (Phase 4).
3
+ */
4
+ import type { FastifyInstance } from "fastify";
5
+ import type { MemorixPlatform } from "../platform.js";
6
+ export declare function registerConnectorInvocationRoutes(app: FastifyInstance, platform: MemorixPlatform): Promise<void>;
7
+ //# sourceMappingURL=connector-invocations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector-invocations.d.ts","sourceRoot":"","sources":["../../src/routes/connector-invocations.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAK/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAYtD,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAoPf"}
@@ -0,0 +1,216 @@
1
+ import { createInMemoryInvocationLedger, } from "@x12i/memorix-memory";
2
+ import { ServiceError } from "../errors.js";
3
+ let ledgerSingleton = null;
4
+ function ledger() {
5
+ if (!ledgerSingleton)
6
+ ledgerSingleton = createInMemoryInvocationLedger();
7
+ return ledgerSingleton;
8
+ }
9
+ export async function registerConnectorInvocationRoutes(app, platform) {
10
+ app.post("/api/internal/connector-invocations", async (req, reply) => {
11
+ const body = (req.body ?? {});
12
+ if (!body.runId || !body.connectorId || !body.orgId || !body.sourceId) {
13
+ throw new ServiceError("VALIDATION", "runId, connectorId, orgId, sourceId required", 400);
14
+ }
15
+ const expiresAt = new Date(Date.now() + (body.expiresInSeconds ?? 900) * 1000).toISOString();
16
+ const grant = ledger().mintGrant({
17
+ audience: body.audience ?? "connector-host",
18
+ runId: body.runId,
19
+ connectorId: body.connectorId,
20
+ connectorVersion: body.connectorVersion ?? "0.0.0",
21
+ workflowHash: body.workflowHash,
22
+ orgId: body.orgId,
23
+ sourceId: body.sourceId,
24
+ mode: body.mode ?? "knowledge",
25
+ workRef: body.workRef,
26
+ streamIds: body.streamIds ?? [],
27
+ operations: body.operations ?? [
28
+ "checkpoint:get",
29
+ "pages:commit",
30
+ "heartbeat",
31
+ "status",
32
+ ],
33
+ expiresAt,
34
+ });
35
+ const rec = ledger().register(grant);
36
+ return reply.code(201).send({ grant, invocation: rec });
37
+ });
38
+ app.post("/api/internal/connector-invocations/:invocationId/checkpoint:get", async (req, reply) => {
39
+ const rec = requireActive(req.params.invocationId);
40
+ const body = (req.body ?? {});
41
+ assertOp(rec, "checkpoint:get");
42
+ assertScope(rec, body);
43
+ const ports = platform.portsFor({
44
+ orgId: rec.grant.orgId,
45
+ agentIds: ["*"],
46
+ });
47
+ // Use listCursors and filter — mirrors remote getCheckpoint.
48
+ const cursors = await ports.memoryRunStore.listCursors({
49
+ sourceId: rec.grant.sourceId,
50
+ });
51
+ const match = cursors.find((c) => {
52
+ if (body.streamId && c.streamId)
53
+ return c.streamId === body.streamId;
54
+ return (c.objectType === body.objectType &&
55
+ (c.routeEndpoint ?? "") === (body.routeEndpoint ?? "") &&
56
+ (c.workRef ?? "") === (body.workRef ?? rec.grant.workRef ?? ""));
57
+ });
58
+ return reply.send({
59
+ method: match?.method ?? "cursor",
60
+ value: match?.committedCursor ?? match?.watermarkValue ?? null,
61
+ fingerprintsEstablished: match?.fingerprintsEstablished === true,
62
+ revision: match?.revision ?? 0,
63
+ fencingToken: rec.fencingToken,
64
+ });
65
+ });
66
+ app.post("/api/internal/connector-invocations/:invocationId/pages:commit", async (req, reply) => {
67
+ const rec = requireActive(req.params.invocationId);
68
+ assertOp(rec, "pages:commit");
69
+ const body = (req.body ?? {});
70
+ assertScope(rec, body);
71
+ const ports = platform.portsFor({
72
+ orgId: rec.grant.orgId,
73
+ agentIds: ["*"],
74
+ });
75
+ try {
76
+ const receipt = await ports.memory.commitPage({
77
+ scope: { orgId: rec.grant.orgId, agentIds: ["*"] },
78
+ sourceId: String(body.sourceId ?? rec.grant.sourceId),
79
+ objectType: String(body.objectType ?? ""),
80
+ routeEndpoint: String(body.routeEndpoint ?? ""),
81
+ mode: body.mode ?? rec.grant.mode,
82
+ workRef: body.workRef ?? rec.grant.workRef,
83
+ items: body.items ?? [],
84
+ nextCheckpoint: body.nextCheckpoint ?? {},
85
+ expectedCheckpointRevision: Number(body.expectedCheckpointRevision ?? 0),
86
+ pullId: body.pullId,
87
+ streamId: body.streamId,
88
+ connectorId: rec.grant.connectorId,
89
+ connectorVersion: rec.grant.connectorVersion,
90
+ fencingToken: rec.fencingToken,
91
+ pageIdempotencyKey: body.pageIdempotencyKey,
92
+ pageIndex: body.pageIndex,
93
+ // Correlate Phase 4 invocation with Credorix mint / run telemetry.
94
+ invocationId: rec.invocationId,
95
+ });
96
+ return reply.send(receipt);
97
+ }
98
+ catch (err) {
99
+ const msg = err instanceof Error ? err.message : String(err);
100
+ if (/REVISION_CONFLICT|FENCE_MISMATCH|CLAIM_EXPIRED/i.test(msg)) {
101
+ throw new ServiceError("CONFLICT", msg, 409);
102
+ }
103
+ throw new ServiceError("MEMORY_COMMIT_FAILED", msg, 400);
104
+ }
105
+ });
106
+ app.post("/api/internal/connector-invocations/:invocationId/content:stage", async (req, reply) => {
107
+ const rec = requireActive(req.params.invocationId);
108
+ assertOp(rec, "content:stage");
109
+ const body = (req.body ?? {});
110
+ const stagingId = body.stagingId ??
111
+ `stage_${rec.invocationId}_${Date.now().toString(36)}`;
112
+ const ports = platform.portsFor({
113
+ orgId: rec.grant.orgId,
114
+ agentIds: ["*"],
115
+ });
116
+ const expiresAt = new Date(Date.now() + 60 * 60_000).toISOString();
117
+ await ports.memoryRunStore.stageContent({
118
+ stagingId,
119
+ orgId: rec.grant.orgId,
120
+ byteLength: body.byteLength ?? 0,
121
+ mediaType: body.mediaType,
122
+ claimed: false,
123
+ expiresAt,
124
+ createdAt: new Date().toISOString(),
125
+ });
126
+ return reply.send({
127
+ kind: "staged",
128
+ stagingId,
129
+ mediaType: body.mediaType,
130
+ byteLength: body.byteLength ?? 0,
131
+ expiresAt,
132
+ });
133
+ });
134
+ app.post("/api/internal/connector-invocations/:invocationId/content:finalize", async (req, reply) => {
135
+ const rec = requireActive(req.params.invocationId);
136
+ assertOp(rec, "content:finalize");
137
+ const body = (req.body ?? {});
138
+ if (!body.stagingId) {
139
+ throw new ServiceError("VALIDATION", "stagingId required", 400);
140
+ }
141
+ const ports = platform.portsFor({
142
+ orgId: rec.grant.orgId,
143
+ agentIds: ["*"],
144
+ });
145
+ const claimed = await ports.memoryRunStore.claimStagedContent(body.stagingId);
146
+ const doc = await ports.memoryRunStore.getStagedContent(body.stagingId);
147
+ if (!doc)
148
+ throw new ServiceError("NOT_FOUND", "stagingId not found", 404);
149
+ return reply.send({ ...doc, claimed: claimed || doc.claimed });
150
+ });
151
+ app.post("/api/internal/connector-invocations/:invocationId/workflow:event", async (req, reply) => {
152
+ const rec = requireActive(req.params.invocationId);
153
+ assertOp(rec, "workflow:event");
154
+ return reply.send({
155
+ ok: true,
156
+ invocationId: rec.invocationId,
157
+ receivedAt: new Date().toISOString(),
158
+ event: req.body ?? {},
159
+ });
160
+ });
161
+ app.post("/api/internal/connector-invocations/:invocationId/heartbeat", async (req, reply) => {
162
+ const rec = ledger().heartbeat(req.params.invocationId);
163
+ if (!rec) {
164
+ throw new ServiceError("NOT_FOUND", "invocation not found or inactive", 404);
165
+ }
166
+ return reply.send({
167
+ ok: true,
168
+ status: rec.status,
169
+ fencingToken: rec.fencingToken,
170
+ lastHeartbeatAt: rec.lastHeartbeatAt,
171
+ });
172
+ });
173
+ app.get("/api/internal/connector-invocations/:invocationId/status", async (req, reply) => {
174
+ const rec = ledger().get(req.params.invocationId);
175
+ if (!rec)
176
+ throw new ServiceError("NOT_FOUND", "invocation not found", 404);
177
+ return reply.send({
178
+ invocationId: rec.invocationId,
179
+ status: rec.status,
180
+ sourceId: rec.grant.sourceId,
181
+ connectorId: rec.grant.connectorId,
182
+ fencingToken: rec.fencingToken,
183
+ expiresAt: rec.grant.expiresAt,
184
+ lastHeartbeatAt: rec.lastHeartbeatAt,
185
+ });
186
+ });
187
+ }
188
+ function requireActive(invocationId) {
189
+ const rec = ledger().get(invocationId);
190
+ if (!rec)
191
+ throw new ServiceError("NOT_FOUND", "invocation not found", 404);
192
+ const verified = ledger().verifyGrant(rec.grant);
193
+ if (!verified.ok) {
194
+ throw new ServiceError("FORBIDDEN", `grant ${verified.reason}`, 403);
195
+ }
196
+ if (rec.status !== "active") {
197
+ throw new ServiceError("CONFLICT", `invocation ${rec.status}`, 409);
198
+ }
199
+ return rec;
200
+ }
201
+ function assertOp(rec, op) {
202
+ if (!rec.grant.operations.includes(op) && !rec.grant.operations.includes("*")) {
203
+ throw new ServiceError("FORBIDDEN", `operation ${op} not granted`, 403);
204
+ }
205
+ }
206
+ function assertScope(rec, body) {
207
+ if (body.sourceId && body.sourceId !== rec.grant.sourceId) {
208
+ throw new ServiceError("FORBIDDEN", "source scope mismatch", 403);
209
+ }
210
+ if (body.streamId &&
211
+ rec.grant.streamIds.length > 0 &&
212
+ !rec.grant.streamIds.includes(String(body.streamId))) {
213
+ throw new ServiceError("FORBIDDEN", "stream not in grant", 403);
214
+ }
215
+ }
216
+ //# sourceMappingURL=connector-invocations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector-invocations.js","sourceRoot":"","sources":["../../src/routes/connector-invocations.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,8BAA8B,GAE/B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAI5C,IAAI,eAAe,GAA4B,IAAI,CAAC;AAEpD,SAAS,MAAM;IACb,IAAI,CAAC,eAAe;QAAE,eAAe,GAAG,8BAA8B,EAAE,CAAC;IACzE,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,GAAoB,EACpB,QAAyB;IAEzB,GAAG,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnE,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAa3B,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtE,MAAM,IAAI,YAAY,CACpB,YAAY,EACZ,8CAA8C,EAC9C,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,IAAI,CACxB,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,GAAG,CAAC,GAAG,IAAI,CACnD,CAAC,WAAW,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,SAAS,CAAC;YAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,gBAAgB;YAC3C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,OAAO;YAClD,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,WAAW;YAC9B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;YAC/B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI;gBAC7B,gBAAgB;gBAChB,cAAc;gBACd,WAAW;gBACX,QAAQ;aACT;YACD,SAAS;SACV,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CACN,kEAAkE,EAClE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAO3B,CAAC;QACF,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAChC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC;YAC9B,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK;YACtB,QAAQ,EAAE,CAAC,GAAG,CAAC;SAChB,CAAC,CAAC;QACH,6DAA6D;QAC7D,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;YACrD,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ;SAC7B,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YAC/B,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ;gBAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC;YACrE,OAAO,CACL,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;gBAChC,CAAC,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC;gBACtD,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAChE,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,IAAI,CAAC;YAChB,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,QAAQ;YACjC,KAAK,EAAE,KAAK,EAAE,eAAe,IAAI,KAAK,EAAE,cAAc,IAAI,IAAI;YAC9D,uBAAuB,EAAE,KAAK,EAAE,uBAAuB,KAAK,IAAI;YAChE,QAAQ,EAAE,KAAK,EAAE,QAAQ,IAAI,CAAC;YAC9B,YAAY,EAAE,GAAG,CAAC,YAAY;SAC/B,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEF,GAAG,CAAC,IAAI,CACN,gEAAgE,EAChE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACnD,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;QACzD,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC;YAC9B,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK;YACtB,QAAQ,EAAE,CAAC,GAAG,CAAC;SAChB,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;gBAC5C,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE;gBAClD,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACrD,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;gBACzC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC;gBAC/C,IAAI,EAAG,IAAI,CAAC,IAAgC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI;gBAC9D,OAAO,EAAG,IAAI,CAAC,OAA8B,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO;gBAClE,KAAK,EAAG,IAAI,CAAC,KAKV,IAAI,EAAE;gBACT,cAAc,EAAG,IAAI,CAAC,cAIpB,IAAI,EAAE;gBACR,0BAA0B,EAAE,MAAM,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,CAAC;gBACxE,MAAM,EAAE,IAAI,CAAC,MAA4B;gBACzC,QAAQ,EAAE,IAAI,CAAC,QAA8B;gBAC7C,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW;gBAClC,gBAAgB,EAAE,GAAG,CAAC,KAAK,CAAC,gBAAgB;gBAC5C,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,kBAAkB,EAAE,IAAI,CAAC,kBAAwC;gBACjE,SAAS,EAAE,IAAI,CAAC,SAA+B;gBAC/C,mEAAmE;gBACnE,YAAY,EAAE,GAAG,CAAC,YAAY;aAC/B,CAAC,CAAC;YACH,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,iDAAiD,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/C,CAAC;YACD,MAAM,IAAI,YAAY,CAAC,sBAAsB,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CACF,CAAC;IAEF,GAAG,CAAC,IAAI,CACN,iEAAiE,EACjE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACnD,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAI3B,CAAC;QACF,MAAM,SAAS,GACb,IAAI,CAAC,SAAS;YACd,SAAS,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC;YAC9B,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK;YACtB,QAAQ,EAAE,CAAC,GAAG,CAAC;SAChB,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QACnE,MAAM,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC;YACtC,SAAS;YACT,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK;YACtB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC;YAChC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,KAAK;YACd,SAAS;YACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,QAAQ;YACd,SAAS;YACT,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC;YAChC,SAAS;SACV,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEF,GAAG,CAAC,IAAI,CACN,oEAAoE,EACpE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACnD,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAA2B,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,YAAY,CAAC,YAAY,EAAE,oBAAoB,EAAE,GAAG,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC;YAC9B,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK;YACtB,QAAQ,EAAE,CAAC,GAAG,CAAC;SAChB,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9E,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxE,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAC;QAC1E,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACjE,CAAC,CACF,CAAC;IAEF,GAAG,CAAC,IAAI,CACN,kEAAkE,EAClE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACnD,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,IAAI,CAAC;YAChB,EAAE,EAAE,IAAI;YACR,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEF,GAAG,CAAC,IAAI,CACN,6DAA6D,EAC7D,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACxD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,kCAAkC,EAAE,GAAG,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC;YAChB,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,eAAe,EAAE,GAAG,CAAC,eAAe;SACrC,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,0DAA0D,EAC1D,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,sBAAsB,EAAE,GAAG,CAAC,CAAC;QAC3E,OAAO,KAAK,CAAC,IAAI,CAAC;YAChB,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ;YAC5B,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW;YAClC,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS;YAC9B,eAAe,EAAE,GAAG,CAAC,eAAe;SACrC,CAAC,CAAC;IACL,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,YAAoB;IACzC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,sBAAsB,EAAE,GAAG,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,cAAc,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,QAAQ,CACf,GAAwC,EACxC,EAAU;IAEV,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAClB,GAOC,EACD,IAA6B;IAE7B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1D,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,uBAAuB,EAAE,GAAG,CAAC,CAAC;IACpE,CAAC;IACD,IACE,IAAI,CAAC,QAAQ;QACb,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QAC9B,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EACpD,CAAC;QACD,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAC;IAClE,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/routes/data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAItD,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAoRf"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/routes/data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAKtD,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAuRf"}
@@ -1,7 +1,9 @@
1
1
  import { resolveScope } from "../request-scope.js";
2
2
  import { ServiceError } from "../errors.js";
3
+ import { requireCallbackAccess } from "../access-gate.js";
3
4
  export async function registerDataRoutes(app, platform) {
4
5
  app.get("/api/data/content", async (req) => {
6
+ requireCallbackAccess(req, "explore");
5
7
  const scope = resolveScope(req);
6
8
  const q = req.query;
7
9
  if (!q.objectType || !q.contentType) {
@@ -56,6 +58,7 @@ export async function registerDataRoutes(app, platform) {
56
58
  };
57
59
  });
58
60
  app.get("/api/data/abstract", async (req) => {
61
+ requireCallbackAccess(req, "explore");
59
62
  const scope = resolveScope(req);
60
63
  const q = req.query;
61
64
  if (!q.abstractType) {
@@ -164,6 +167,7 @@ export async function registerDataRoutes(app, platform) {
164
167
  }
165
168
  });
166
169
  app.post("/api/data/compose", async (req) => {
170
+ requireCallbackAccess(req, "explore");
167
171
  const scope = resolveScope(req);
168
172
  const body = req.body;
169
173
  if (!body?.explicit) {