@x12i/memorix-service 3.7.6 → 3.7.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/activity-ring.d.ts +16 -0
- package/dist/activity-ring.d.ts.map +1 -1
- package/dist/activity-ring.js +15 -0
- package/dist/activity-ring.js.map +1 -1
- package/dist/activity-routes.d.ts.map +1 -1
- package/dist/activity-routes.js +6 -0
- package/dist/activity-routes.js.map +1 -1
- package/dist/activity-ui.d.ts +1 -1
- package/dist/activity-ui.d.ts.map +1 -1
- package/dist/activity-ui.js +383 -177
- package/dist/activity-ui.js.map +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +8 -1
- package/dist/app.js.map +1 -1
- package/dist/catalog-bridge.d.ts.map +1 -1
- package/dist/catalog-bridge.js +6 -0
- package/dist/catalog-bridge.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +9 -1
- package/dist/cli.js.map +1 -1
- package/dist/data-changes-ui.js +1 -1
- package/dist/graph-ui.d.ts +3 -0
- package/dist/graph-ui.d.ts.map +1 -0
- package/dist/graph-ui.js +676 -0
- package/dist/graph-ui.js.map +1 -0
- package/dist/knowledge-upstream.d.ts +13 -0
- package/dist/knowledge-upstream.d.ts.map +1 -0
- package/dist/knowledge-upstream.js +38 -0
- package/dist/knowledge-upstream.js.map +1 -0
- package/dist/live-ops-nav.d.ts +2 -0
- package/dist/live-ops-nav.d.ts.map +1 -0
- package/dist/live-ops-nav.js +53 -0
- package/dist/live-ops-nav.js.map +1 -0
- package/dist/live.d.ts.map +1 -1
- package/dist/mcp/nexum-tools.d.ts +28 -0
- package/dist/mcp/nexum-tools.d.ts.map +1 -0
- package/dist/mcp/nexum-tools.js +257 -0
- package/dist/mcp/nexum-tools.js.map +1 -0
- package/dist/mcp/service-public-url.d.ts +7 -0
- package/dist/mcp/service-public-url.d.ts.map +1 -0
- package/dist/mcp/service-public-url.js +19 -0
- package/dist/mcp/service-public-url.js.map +1 -0
- package/dist/openapi/openapi.json +449 -4
- package/dist/routes/data.d.ts.map +1 -1
- package/dist/routes/data.js +242 -16
- package/dist/routes/data.js.map +1 -1
- package/dist/routes/knowledge.d.ts.map +1 -1
- package/dist/routes/knowledge.js +9 -37
- package/dist/routes/knowledge.js.map +1 -1
- package/dist/routes/nexum-mcp.d.ts +9 -0
- package/dist/routes/nexum-mcp.d.ts.map +1 -0
- package/dist/routes/nexum-mcp.js +95 -0
- package/dist/routes/nexum-mcp.js.map +1 -0
- package/dist/safe-query.d.ts +31 -0
- package/dist/safe-query.d.ts.map +1 -0
- package/dist/safe-query.js +125 -0
- package/dist/safe-query.js.map +1 -0
- package/openapi/openapi.json +449 -4
- package/package.json +2 -2
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse OpenAPI SafeFilter / SafeSort query strings for GET /api/data/content.
|
|
3
|
+
* Grammar matches @x12i/memorix-data QueryFilter / QuerySort (no Mongo operators).
|
|
4
|
+
*/
|
|
5
|
+
export type SafeFilter = {
|
|
6
|
+
field: string;
|
|
7
|
+
op: "eq" | "ne" | "gt" | "gte" | "lt" | "lte";
|
|
8
|
+
value: unknown;
|
|
9
|
+
} | {
|
|
10
|
+
field: string;
|
|
11
|
+
op: "in" | "nin";
|
|
12
|
+
value: unknown[];
|
|
13
|
+
} | {
|
|
14
|
+
field: string;
|
|
15
|
+
op: "exists";
|
|
16
|
+
value: boolean;
|
|
17
|
+
};
|
|
18
|
+
export type SafeSort = {
|
|
19
|
+
field: string;
|
|
20
|
+
direction: "asc" | "desc";
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Accept SafeFilter[] JSON, a single SafeFilter, or an equality map
|
|
24
|
+
* `{ "data.status": "open" }` → `[{ field, op: "eq", value }]`.
|
|
25
|
+
*/
|
|
26
|
+
export declare function parseSafeFilters(raw: string | undefined): SafeFilter[] | undefined;
|
|
27
|
+
/** Accept body/query filter already parsed as JSON (array, SafeFilter, or equality map). */
|
|
28
|
+
export declare function parseSafeFiltersValue(raw: unknown): SafeFilter[] | undefined;
|
|
29
|
+
export declare function parseSafeSort(raw: string | undefined): SafeSort[] | undefined;
|
|
30
|
+
export declare function parseSafeSortValue(raw: unknown): SafeSort[] | undefined;
|
|
31
|
+
//# sourceMappingURL=safe-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-query.d.ts","sourceRoot":"","sources":["../src/safe-query.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,MAAM,UAAU,GAClB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAChF;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,IAAI,GAAG,KAAK,CAAC;IAAC,KAAK,EAAE,OAAO,EAAE,CAAA;CAAE,GACrD;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpD,MAAM,MAAM,QAAQ,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;CAAE,CAAC;AAsDpE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,EAAE,GAAG,SAAS,CAIlF;AAED,4FAA4F;AAC5F,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,EAAE,GAAG,SAAS,CAI5E;AAwBD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,EAAE,GAAG,SAAS,CAI7E;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,QAAQ,EAAE,GAAG,SAAS,CAIvE"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse OpenAPI SafeFilter / SafeSort query strings for GET /api/data/content.
|
|
3
|
+
* Grammar matches @x12i/memorix-data QueryFilter / QuerySort (no Mongo operators).
|
|
4
|
+
*/
|
|
5
|
+
import { ServiceError } from "./errors.js";
|
|
6
|
+
const SCALAR_OPS = new Set(["eq", "ne", "gt", "gte", "lt", "lte"]);
|
|
7
|
+
const ARRAY_OPS = new Set(["in", "nin"]);
|
|
8
|
+
function isRecord(v) {
|
|
9
|
+
return Boolean(v) && typeof v === "object" && !Array.isArray(v);
|
|
10
|
+
}
|
|
11
|
+
function parseJsonParam(raw, label) {
|
|
12
|
+
try {
|
|
13
|
+
return JSON.parse(raw);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
throw new ServiceError("VALIDATION", `${label} must be valid JSON`, 400);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function assertFilter(raw, index) {
|
|
20
|
+
if (!isRecord(raw)) {
|
|
21
|
+
throw new ServiceError("READ_QUERY_INVALID", `filter[${index}] must be an object`, 400);
|
|
22
|
+
}
|
|
23
|
+
const field = raw.field;
|
|
24
|
+
const op = raw.op;
|
|
25
|
+
if (typeof field !== "string" || !field.trim()) {
|
|
26
|
+
throw new ServiceError("READ_QUERY_INVALID", `filter[${index}].field must be a non-empty string`, 400);
|
|
27
|
+
}
|
|
28
|
+
if (typeof op !== "string") {
|
|
29
|
+
throw new ServiceError("READ_QUERY_INVALID", `filter[${index}].op is required`, 400);
|
|
30
|
+
}
|
|
31
|
+
if (SCALAR_OPS.has(op)) {
|
|
32
|
+
if (!("value" in raw)) {
|
|
33
|
+
throw new ServiceError("READ_QUERY_INVALID", `filter[${index}].value is required`, 400);
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
field,
|
|
37
|
+
op: op,
|
|
38
|
+
value: raw.value,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
if (ARRAY_OPS.has(op)) {
|
|
42
|
+
if (!Array.isArray(raw.value)) {
|
|
43
|
+
throw new ServiceError("READ_QUERY_INVALID", `filter[${index}].value must be an array for op ${op}`, 400);
|
|
44
|
+
}
|
|
45
|
+
return { field, op: op, value: raw.value };
|
|
46
|
+
}
|
|
47
|
+
if (op === "exists") {
|
|
48
|
+
if (typeof raw.value !== "boolean") {
|
|
49
|
+
throw new ServiceError("READ_QUERY_INVALID", `filter[${index}].value must be boolean for op exists`, 400);
|
|
50
|
+
}
|
|
51
|
+
return { field, op: "exists", value: raw.value };
|
|
52
|
+
}
|
|
53
|
+
throw new ServiceError("READ_QUERY_INVALID", `Unsupported filter op: ${JSON.stringify(op)}`, 400);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Accept SafeFilter[] JSON, a single SafeFilter, or an equality map
|
|
57
|
+
* `{ "data.status": "open" }` → `[{ field, op: "eq", value }]`.
|
|
58
|
+
*/
|
|
59
|
+
export function parseSafeFilters(raw) {
|
|
60
|
+
if (raw == null || raw.trim() === "")
|
|
61
|
+
return undefined;
|
|
62
|
+
const parsed = parseJsonParam(raw, "filter");
|
|
63
|
+
return normalizeSafeFiltersValue(parsed);
|
|
64
|
+
}
|
|
65
|
+
/** Accept body/query filter already parsed as JSON (array, SafeFilter, or equality map). */
|
|
66
|
+
export function parseSafeFiltersValue(raw) {
|
|
67
|
+
if (raw == null)
|
|
68
|
+
return undefined;
|
|
69
|
+
if (typeof raw === "string")
|
|
70
|
+
return parseSafeFilters(raw);
|
|
71
|
+
return normalizeSafeFiltersValue(raw);
|
|
72
|
+
}
|
|
73
|
+
function normalizeSafeFiltersValue(parsed) {
|
|
74
|
+
if (Array.isArray(parsed)) {
|
|
75
|
+
if (parsed.length === 0)
|
|
76
|
+
return undefined;
|
|
77
|
+
return parsed.map((f, i) => assertFilter(f, i));
|
|
78
|
+
}
|
|
79
|
+
if (isRecord(parsed)) {
|
|
80
|
+
if ("field" in parsed && "op" in parsed) {
|
|
81
|
+
return [assertFilter(parsed, 0)];
|
|
82
|
+
}
|
|
83
|
+
// Equality map — keys are field paths, values are eq targets.
|
|
84
|
+
const out = [];
|
|
85
|
+
for (const [field, value] of Object.entries(parsed)) {
|
|
86
|
+
if (!field.trim()) {
|
|
87
|
+
throw new ServiceError("READ_QUERY_INVALID", "filter field must be a non-empty string", 400);
|
|
88
|
+
}
|
|
89
|
+
out.push({ field, op: "eq", value });
|
|
90
|
+
}
|
|
91
|
+
return out.length ? out : undefined;
|
|
92
|
+
}
|
|
93
|
+
throw new ServiceError("READ_QUERY_INVALID", "filter must be a JSON array or object", 400);
|
|
94
|
+
}
|
|
95
|
+
export function parseSafeSort(raw) {
|
|
96
|
+
if (raw == null || raw.trim() === "")
|
|
97
|
+
return undefined;
|
|
98
|
+
const parsed = parseJsonParam(raw, "sort");
|
|
99
|
+
return normalizeSafeSortValue(parsed);
|
|
100
|
+
}
|
|
101
|
+
export function parseSafeSortValue(raw) {
|
|
102
|
+
if (raw == null)
|
|
103
|
+
return undefined;
|
|
104
|
+
if (typeof raw === "string")
|
|
105
|
+
return parseSafeSort(raw);
|
|
106
|
+
return normalizeSafeSortValue(raw);
|
|
107
|
+
}
|
|
108
|
+
function normalizeSafeSortValue(parsed) {
|
|
109
|
+
const items = Array.isArray(parsed) ? parsed : [parsed];
|
|
110
|
+
if (items.length === 0)
|
|
111
|
+
return undefined;
|
|
112
|
+
const out = [];
|
|
113
|
+
for (let i = 0; i < items.length; i++) {
|
|
114
|
+
const s = items[i];
|
|
115
|
+
if (!isRecord(s) || typeof s.field !== "string" || !s.field.trim()) {
|
|
116
|
+
throw new ServiceError("READ_QUERY_INVALID", `sort[${i}].field must be a non-empty string`, 400);
|
|
117
|
+
}
|
|
118
|
+
if (s.direction !== "asc" && s.direction !== "desc") {
|
|
119
|
+
throw new ServiceError("READ_QUERY_INVALID", `sort[${i}].direction must be asc|desc`, 400);
|
|
120
|
+
}
|
|
121
|
+
out.push({ field: s.field, direction: s.direction });
|
|
122
|
+
}
|
|
123
|
+
return out;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=safe-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-query.js","sourceRoot":"","sources":["../src/safe-query.ts"],"names":[],"mappings":"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"}
|
package/openapi/openapi.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"openapi": "3.0.3",
|
|
3
3
|
"info": {
|
|
4
4
|
"title": "Memorix Service API",
|
|
5
|
-
"version": "3.7.
|
|
5
|
+
"version": "3.7.8",
|
|
6
6
|
"description": "One versioned product API over accepted Memorix packages. Scope: orgId + agentIds[]. Headers x-memorix-org-id and x-memorix-agent-ids (comma-separated). MX-CALLER-01: every /api request requires x-memorix-caller (calling app id). Intelligence never auto-installs. Relationships /links is forbidden. IntegrationsRegistry (Stage −1) and RestrictedStore (FG-A3 dual-mode blob)."
|
|
7
7
|
},
|
|
8
8
|
"servers": [
|
|
@@ -3027,14 +3027,34 @@
|
|
|
3027
3027
|
"in": "query",
|
|
3028
3028
|
"schema": {
|
|
3029
3029
|
"type": "string"
|
|
3030
|
-
}
|
|
3030
|
+
},
|
|
3031
|
+
"description": "List mode only. Opaque cursor from a prior pageInfo.nextCursor. Repeat the same filter and sort."
|
|
3031
3032
|
},
|
|
3032
3033
|
{
|
|
3033
3034
|
"name": "limit",
|
|
3034
3035
|
"in": "query",
|
|
3035
3036
|
"schema": {
|
|
3036
|
-
"type": "integer"
|
|
3037
|
-
|
|
3037
|
+
"type": "integer",
|
|
3038
|
+
"minimum": 1,
|
|
3039
|
+
"maximum": 200
|
|
3040
|
+
},
|
|
3041
|
+
"description": "List mode page size (default 50, max 200)."
|
|
3042
|
+
},
|
|
3043
|
+
{
|
|
3044
|
+
"name": "filter",
|
|
3045
|
+
"in": "query",
|
|
3046
|
+
"schema": {
|
|
3047
|
+
"type": "string"
|
|
3048
|
+
},
|
|
3049
|
+
"description": "List mode. JSON SafeFilter[] or equality map on abstract property names."
|
|
3050
|
+
},
|
|
3051
|
+
{
|
|
3052
|
+
"name": "sort",
|
|
3053
|
+
"in": "query",
|
|
3054
|
+
"schema": {
|
|
3055
|
+
"type": "string"
|
|
3056
|
+
},
|
|
3057
|
+
"description": "List mode. JSON SafeSort[] on abstract property names."
|
|
3038
3058
|
}
|
|
3039
3059
|
],
|
|
3040
3060
|
"responses": {
|
|
@@ -3384,6 +3404,431 @@
|
|
|
3384
3404
|
}
|
|
3385
3405
|
}
|
|
3386
3406
|
},
|
|
3407
|
+
"/api/data/compose/data": {
|
|
3408
|
+
"post": {
|
|
3409
|
+
"operationId": "dataComposeData",
|
|
3410
|
+
"summary": "Compose subject content-type data only (AI / agent projection)",
|
|
3411
|
+
"description": "Same-subject composition as dataCompose, but each content type returns an array of record `.data` payloads only — no envelope, revision, or concept. Prefer this for AI layers that need sibling CT payloads without Memorix record chrome.",
|
|
3412
|
+
"tags": [
|
|
3413
|
+
"Data"
|
|
3414
|
+
],
|
|
3415
|
+
"parameters": [
|
|
3416
|
+
{
|
|
3417
|
+
"$ref": "#/components/parameters/XMemorixCaller"
|
|
3418
|
+
},
|
|
3419
|
+
{
|
|
3420
|
+
"$ref": "#/components/parameters/XMemorixOrgId"
|
|
3421
|
+
},
|
|
3422
|
+
{
|
|
3423
|
+
"$ref": "#/components/parameters/XMemorixAgentIds"
|
|
3424
|
+
}
|
|
3425
|
+
],
|
|
3426
|
+
"responses": {
|
|
3427
|
+
"200": {
|
|
3428
|
+
"description": "Data-only composition",
|
|
3429
|
+
"content": {
|
|
3430
|
+
"application/json": {
|
|
3431
|
+
"schema": {
|
|
3432
|
+
"type": "object",
|
|
3433
|
+
"required": [
|
|
3434
|
+
"scope",
|
|
3435
|
+
"recordId",
|
|
3436
|
+
"contents"
|
|
3437
|
+
],
|
|
3438
|
+
"properties": {
|
|
3439
|
+
"scope": {
|
|
3440
|
+
"$ref": "#/components/schemas/MemorixScope"
|
|
3441
|
+
},
|
|
3442
|
+
"recordId": {
|
|
3443
|
+
"type": "string"
|
|
3444
|
+
},
|
|
3445
|
+
"objectType": {
|
|
3446
|
+
"type": "string"
|
|
3447
|
+
},
|
|
3448
|
+
"dataCategory": {
|
|
3449
|
+
"type": "string"
|
|
3450
|
+
},
|
|
3451
|
+
"contents": {
|
|
3452
|
+
"type": "object",
|
|
3453
|
+
"description": "Map of contentType → array of `.data` payloads (one entry per instance)",
|
|
3454
|
+
"additionalProperties": {
|
|
3455
|
+
"type": "array",
|
|
3456
|
+
"items": {
|
|
3457
|
+
"type": "object",
|
|
3458
|
+
"additionalProperties": true
|
|
3459
|
+
}
|
|
3460
|
+
}
|
|
3461
|
+
},
|
|
3462
|
+
"warnings": {
|
|
3463
|
+
"type": "array",
|
|
3464
|
+
"items": {
|
|
3465
|
+
"type": "object",
|
|
3466
|
+
"additionalProperties": true
|
|
3467
|
+
}
|
|
3468
|
+
}
|
|
3469
|
+
}
|
|
3470
|
+
}
|
|
3471
|
+
}
|
|
3472
|
+
}
|
|
3473
|
+
},
|
|
3474
|
+
"400": {
|
|
3475
|
+
"description": "Bad request / validation",
|
|
3476
|
+
"content": {
|
|
3477
|
+
"application/json": {
|
|
3478
|
+
"schema": {
|
|
3479
|
+
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
3480
|
+
}
|
|
3481
|
+
}
|
|
3482
|
+
}
|
|
3483
|
+
},
|
|
3484
|
+
"403": {
|
|
3485
|
+
"description": "Forbidden",
|
|
3486
|
+
"content": {
|
|
3487
|
+
"application/json": {
|
|
3488
|
+
"schema": {
|
|
3489
|
+
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
3490
|
+
}
|
|
3491
|
+
}
|
|
3492
|
+
}
|
|
3493
|
+
},
|
|
3494
|
+
"503": {
|
|
3495
|
+
"description": "Service unavailable",
|
|
3496
|
+
"content": {
|
|
3497
|
+
"application/json": {
|
|
3498
|
+
"schema": {
|
|
3499
|
+
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
3500
|
+
}
|
|
3501
|
+
}
|
|
3502
|
+
}
|
|
3503
|
+
}
|
|
3504
|
+
},
|
|
3505
|
+
"requestBody": {
|
|
3506
|
+
"required": true,
|
|
3507
|
+
"content": {
|
|
3508
|
+
"application/json": {
|
|
3509
|
+
"schema": {
|
|
3510
|
+
"type": "object",
|
|
3511
|
+
"required": [
|
|
3512
|
+
"recordId",
|
|
3513
|
+
"explicit"
|
|
3514
|
+
],
|
|
3515
|
+
"properties": {
|
|
3516
|
+
"recordId": {
|
|
3517
|
+
"type": "string"
|
|
3518
|
+
},
|
|
3519
|
+
"explicit": {
|
|
3520
|
+
"type": "boolean",
|
|
3521
|
+
"enum": [
|
|
3522
|
+
true
|
|
3523
|
+
]
|
|
3524
|
+
},
|
|
3525
|
+
"contentTypes": {
|
|
3526
|
+
"type": "array",
|
|
3527
|
+
"items": {
|
|
3528
|
+
"type": "string"
|
|
3529
|
+
},
|
|
3530
|
+
"description": "Optional CT filter; omit to include all directory content types for the subject"
|
|
3531
|
+
}
|
|
3532
|
+
}
|
|
3533
|
+
},
|
|
3534
|
+
"example": {
|
|
3535
|
+
"recordId": "wi-100",
|
|
3536
|
+
"explicit": true,
|
|
3537
|
+
"contentTypes": [
|
|
3538
|
+
"snapshots",
|
|
3539
|
+
"analysis"
|
|
3540
|
+
]
|
|
3541
|
+
}
|
|
3542
|
+
}
|
|
3543
|
+
}
|
|
3544
|
+
}
|
|
3545
|
+
}
|
|
3546
|
+
},
|
|
3547
|
+
"/api/data/compose/data/list": {
|
|
3548
|
+
"post": {
|
|
3549
|
+
"operationId": "dataComposeDataList",
|
|
3550
|
+
"summary": "Paginated multi-CT data projection (leading CT drives page)",
|
|
3551
|
+
"description": "Lists subjects by a leading content type (filter/sort/cursor/limit apply only to that CT), then attaches sibling CT `.data` arrays per row. Prefer for AI layers that need a filtered page of subjects with multiple content payloads and no record envelopes.",
|
|
3552
|
+
"tags": [
|
|
3553
|
+
"Data"
|
|
3554
|
+
],
|
|
3555
|
+
"parameters": [
|
|
3556
|
+
{
|
|
3557
|
+
"$ref": "#/components/parameters/XMemorixCaller"
|
|
3558
|
+
},
|
|
3559
|
+
{
|
|
3560
|
+
"$ref": "#/components/parameters/XMemorixOrgId"
|
|
3561
|
+
},
|
|
3562
|
+
{
|
|
3563
|
+
"$ref": "#/components/parameters/XMemorixAgentIds"
|
|
3564
|
+
}
|
|
3565
|
+
],
|
|
3566
|
+
"responses": {
|
|
3567
|
+
"200": {
|
|
3568
|
+
"description": "Paginated data-only compositions",
|
|
3569
|
+
"content": {
|
|
3570
|
+
"application/json": {
|
|
3571
|
+
"schema": {
|
|
3572
|
+
"type": "object",
|
|
3573
|
+
"required": [
|
|
3574
|
+
"scope",
|
|
3575
|
+
"objectType",
|
|
3576
|
+
"leadingContentType",
|
|
3577
|
+
"items",
|
|
3578
|
+
"pageInfo"
|
|
3579
|
+
],
|
|
3580
|
+
"properties": {
|
|
3581
|
+
"scope": {
|
|
3582
|
+
"$ref": "#/components/schemas/MemorixScope"
|
|
3583
|
+
},
|
|
3584
|
+
"objectType": {
|
|
3585
|
+
"type": "string"
|
|
3586
|
+
},
|
|
3587
|
+
"leadingContentType": {
|
|
3588
|
+
"type": "string"
|
|
3589
|
+
},
|
|
3590
|
+
"items": {
|
|
3591
|
+
"type": "array",
|
|
3592
|
+
"items": {
|
|
3593
|
+
"type": "object",
|
|
3594
|
+
"required": [
|
|
3595
|
+
"recordId",
|
|
3596
|
+
"contents"
|
|
3597
|
+
],
|
|
3598
|
+
"properties": {
|
|
3599
|
+
"recordId": {
|
|
3600
|
+
"type": "string"
|
|
3601
|
+
},
|
|
3602
|
+
"contents": {
|
|
3603
|
+
"type": "object",
|
|
3604
|
+
"additionalProperties": {
|
|
3605
|
+
"type": "array",
|
|
3606
|
+
"items": {
|
|
3607
|
+
"type": "object",
|
|
3608
|
+
"additionalProperties": true
|
|
3609
|
+
}
|
|
3610
|
+
}
|
|
3611
|
+
}
|
|
3612
|
+
}
|
|
3613
|
+
}
|
|
3614
|
+
},
|
|
3615
|
+
"pageInfo": {
|
|
3616
|
+
"type": "object",
|
|
3617
|
+
"properties": {
|
|
3618
|
+
"nextCursor": {
|
|
3619
|
+
"type": [
|
|
3620
|
+
"string",
|
|
3621
|
+
"null"
|
|
3622
|
+
]
|
|
3623
|
+
},
|
|
3624
|
+
"limit": {
|
|
3625
|
+
"type": "integer"
|
|
3626
|
+
}
|
|
3627
|
+
}
|
|
3628
|
+
}
|
|
3629
|
+
}
|
|
3630
|
+
}
|
|
3631
|
+
}
|
|
3632
|
+
}
|
|
3633
|
+
},
|
|
3634
|
+
"400": {
|
|
3635
|
+
"description": "Bad request / validation",
|
|
3636
|
+
"content": {
|
|
3637
|
+
"application/json": {
|
|
3638
|
+
"schema": {
|
|
3639
|
+
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
3640
|
+
}
|
|
3641
|
+
}
|
|
3642
|
+
}
|
|
3643
|
+
},
|
|
3644
|
+
"403": {
|
|
3645
|
+
"description": "Forbidden",
|
|
3646
|
+
"content": {
|
|
3647
|
+
"application/json": {
|
|
3648
|
+
"schema": {
|
|
3649
|
+
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
3650
|
+
}
|
|
3651
|
+
}
|
|
3652
|
+
}
|
|
3653
|
+
},
|
|
3654
|
+
"503": {
|
|
3655
|
+
"description": "Service unavailable",
|
|
3656
|
+
"content": {
|
|
3657
|
+
"application/json": {
|
|
3658
|
+
"schema": {
|
|
3659
|
+
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
3660
|
+
}
|
|
3661
|
+
}
|
|
3662
|
+
}
|
|
3663
|
+
}
|
|
3664
|
+
},
|
|
3665
|
+
"requestBody": {
|
|
3666
|
+
"required": true,
|
|
3667
|
+
"content": {
|
|
3668
|
+
"application/json": {
|
|
3669
|
+
"schema": {
|
|
3670
|
+
"type": "object",
|
|
3671
|
+
"required": [
|
|
3672
|
+
"objectType",
|
|
3673
|
+
"leadingContentType"
|
|
3674
|
+
],
|
|
3675
|
+
"properties": {
|
|
3676
|
+
"objectType": {
|
|
3677
|
+
"type": "string"
|
|
3678
|
+
},
|
|
3679
|
+
"leadingContentType": {
|
|
3680
|
+
"type": "string",
|
|
3681
|
+
"description": "CT that drives pagination, filter, and sort"
|
|
3682
|
+
},
|
|
3683
|
+
"contentTypes": {
|
|
3684
|
+
"type": "array",
|
|
3685
|
+
"items": {
|
|
3686
|
+
"type": "string"
|
|
3687
|
+
},
|
|
3688
|
+
"description": "Sibling CTs to attach (leading is always included)"
|
|
3689
|
+
},
|
|
3690
|
+
"filter": {
|
|
3691
|
+
"description": "SafeFilter[] / SafeFilter / equality map — applied to leading CT only",
|
|
3692
|
+
"oneOf": [
|
|
3693
|
+
{
|
|
3694
|
+
"type": "array",
|
|
3695
|
+
"items": {
|
|
3696
|
+
"type": "object",
|
|
3697
|
+
"additionalProperties": true
|
|
3698
|
+
}
|
|
3699
|
+
},
|
|
3700
|
+
{
|
|
3701
|
+
"type": "object",
|
|
3702
|
+
"additionalProperties": true
|
|
3703
|
+
}
|
|
3704
|
+
]
|
|
3705
|
+
},
|
|
3706
|
+
"sort": {
|
|
3707
|
+
"description": "SafeSort[] / SafeSort — applied to leading CT only",
|
|
3708
|
+
"oneOf": [
|
|
3709
|
+
{
|
|
3710
|
+
"type": "array",
|
|
3711
|
+
"items": {
|
|
3712
|
+
"type": "object",
|
|
3713
|
+
"additionalProperties": true
|
|
3714
|
+
}
|
|
3715
|
+
},
|
|
3716
|
+
{
|
|
3717
|
+
"type": "object",
|
|
3718
|
+
"additionalProperties": true
|
|
3719
|
+
}
|
|
3720
|
+
]
|
|
3721
|
+
},
|
|
3722
|
+
"limit": {
|
|
3723
|
+
"type": "integer",
|
|
3724
|
+
"minimum": 1,
|
|
3725
|
+
"maximum": 200
|
|
3726
|
+
},
|
|
3727
|
+
"cursor": {
|
|
3728
|
+
"type": "string"
|
|
3729
|
+
}
|
|
3730
|
+
}
|
|
3731
|
+
},
|
|
3732
|
+
"example": {
|
|
3733
|
+
"objectType": "work-items",
|
|
3734
|
+
"leadingContentType": "snapshots",
|
|
3735
|
+
"contentTypes": [
|
|
3736
|
+
"snapshots",
|
|
3737
|
+
"workflow",
|
|
3738
|
+
"analysis"
|
|
3739
|
+
],
|
|
3740
|
+
"filter": {
|
|
3741
|
+
"data.status": "open"
|
|
3742
|
+
},
|
|
3743
|
+
"sort": [
|
|
3744
|
+
{
|
|
3745
|
+
"field": "recordId",
|
|
3746
|
+
"direction": "asc"
|
|
3747
|
+
}
|
|
3748
|
+
],
|
|
3749
|
+
"limit": 50
|
|
3750
|
+
}
|
|
3751
|
+
}
|
|
3752
|
+
}
|
|
3753
|
+
}
|
|
3754
|
+
}
|
|
3755
|
+
},
|
|
3756
|
+
"/api/data/lists": {
|
|
3757
|
+
"post": {
|
|
3758
|
+
"operationId": "dataRunList",
|
|
3759
|
+
"summary": "Run a declared list view or an ad-hoc abstract property page",
|
|
3760
|
+
"description": "Paginated abstract property page. Pass limit (1–200, default 50) and the previous pageInfo.nextCursor. Repeat the same listId or abstractType, filter, and sort on every page. recordId is an exact get and is not paginated. Concrete multi-CT pages stay on /api/data/compose/data/list (same cursor contract).",
|
|
3761
|
+
"tags": ["Data"],
|
|
3762
|
+
"parameters": [
|
|
3763
|
+
{ "$ref": "#/components/parameters/XMemorixCaller" },
|
|
3764
|
+
{ "$ref": "#/components/parameters/XMemorixOrgId" },
|
|
3765
|
+
{ "$ref": "#/components/parameters/XMemorixAgentIds" }
|
|
3766
|
+
],
|
|
3767
|
+
"requestBody": {
|
|
3768
|
+
"required": true,
|
|
3769
|
+
"content": {
|
|
3770
|
+
"application/json": {
|
|
3771
|
+
"schema": {
|
|
3772
|
+
"type": "object",
|
|
3773
|
+
"properties": {
|
|
3774
|
+
"listId": { "type": "string" },
|
|
3775
|
+
"abstractType": { "type": "string" },
|
|
3776
|
+
"recordId": { "type": "string" },
|
|
3777
|
+
"properties": { "type": "array", "items": { "type": "string" } },
|
|
3778
|
+
"filter": { "type": "object", "additionalProperties": true },
|
|
3779
|
+
"sort": { "type": "array", "items": { "type": "object", "additionalProperties": true } },
|
|
3780
|
+
"limit": { "type": "integer" },
|
|
3781
|
+
"cursor": { "type": "string" }
|
|
3782
|
+
}
|
|
3783
|
+
},
|
|
3784
|
+
"example": { "listId": "opx-work-items-list", "limit": 50 }
|
|
3785
|
+
}
|
|
3786
|
+
}
|
|
3787
|
+
},
|
|
3788
|
+
"responses": {
|
|
3789
|
+
"200": { "description": "Abstract property page" },
|
|
3790
|
+
"400": { "description": "Validation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorEnvelope" } } } },
|
|
3791
|
+
"404": { "description": "Unknown list", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorEnvelope" } } } }
|
|
3792
|
+
}
|
|
3793
|
+
}
|
|
3794
|
+
},
|
|
3795
|
+
"/api/data/items": {
|
|
3796
|
+
"post": {
|
|
3797
|
+
"operationId": "dataGetItem",
|
|
3798
|
+
"summary": "Single subject by item view or ad-hoc abstract / content types",
|
|
3799
|
+
"description": "recordId is required. itemId loads a metadata view of kind item (abstract properties plus section content-type .data). Or pass abstractType and/or contentTypes without a view. Not paginated.",
|
|
3800
|
+
"tags": ["Data"],
|
|
3801
|
+
"parameters": [
|
|
3802
|
+
{ "$ref": "#/components/parameters/XMemorixCaller" },
|
|
3803
|
+
{ "$ref": "#/components/parameters/XMemorixOrgId" },
|
|
3804
|
+
{ "$ref": "#/components/parameters/XMemorixAgentIds" }
|
|
3805
|
+
],
|
|
3806
|
+
"requestBody": {
|
|
3807
|
+
"required": true,
|
|
3808
|
+
"content": {
|
|
3809
|
+
"application/json": {
|
|
3810
|
+
"schema": {
|
|
3811
|
+
"type": "object",
|
|
3812
|
+
"required": ["recordId"],
|
|
3813
|
+
"properties": {
|
|
3814
|
+
"recordId": { "type": "string" },
|
|
3815
|
+
"itemId": { "type": "string" },
|
|
3816
|
+
"abstractType": { "type": "string" },
|
|
3817
|
+
"contentTypes": { "type": "array", "items": { "type": "string" } },
|
|
3818
|
+
"properties": { "type": "array", "items": { "type": "string" } }
|
|
3819
|
+
}
|
|
3820
|
+
},
|
|
3821
|
+
"example": { "itemId": "opx-work-items-item", "recordId": "wi-100" }
|
|
3822
|
+
}
|
|
3823
|
+
}
|
|
3824
|
+
},
|
|
3825
|
+
"responses": {
|
|
3826
|
+
"200": { "description": "Single item properties and CT data" },
|
|
3827
|
+
"400": { "description": "Validation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorEnvelope" } } } },
|
|
3828
|
+
"404": { "description": "Unknown item or subject", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorEnvelope" } } } }
|
|
3829
|
+
}
|
|
3830
|
+
}
|
|
3831
|
+
},
|
|
3387
3832
|
"/api/relationships/definitions": {
|
|
3388
3833
|
"get": {
|
|
3389
3834
|
"operationId": "relationshipsListDefinitions",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@x12i/memorix-service",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.8",
|
|
4
4
|
"description": "Memorix production service composition root — one versioned API over accepted packages.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"@x12i/funcx": "^4.12.0",
|
|
48
48
|
"@x12i/magit": "2.14.0",
|
|
49
49
|
"@x12i/memorix-connector-sdk": "^1.3.0",
|
|
50
|
-
"@x12i/memorix-data": "^3.0.
|
|
50
|
+
"@x12i/memorix-data": "^3.0.7",
|
|
51
51
|
"@x12i/memorix-data-journey": "^3.1.0",
|
|
52
52
|
"@x12i/memorix-format": "^3.0.2",
|
|
53
53
|
"@x12i/memorix-intelligence": "^3.0.2",
|