@x12i/memorix-client-api 0.0.0-stage → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/HANDOVER.md +97 -0
- package/dist/app.d.ts +64 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +412 -0
- package/dist/app.js.map +1 -0
- package/dist/authix.d.ts +9 -0
- package/dist/authix.d.ts.map +1 -0
- package/dist/authix.js +26 -0
- package/dist/authix.js.map +1 -0
- package/dist/catalog.d.ts +160 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +371 -0
- package/dist/catalog.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +102 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +33 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +109 -0
- package/dist/config.js.map +1 -0
- package/dist/derived.d.ts +2 -0
- package/dist/derived.d.ts.map +1 -0
- package/dist/derived.js +35 -0
- package/dist/derived.js.map +1 -0
- package/dist/errors.d.ts +11 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +21 -0
- package/dist/errors.js.map +1 -0
- package/dist/fetch.d.ts +17 -0
- package/dist/fetch.d.ts.map +1 -0
- package/dist/fetch.js +741 -0
- package/dist/fetch.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.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 +42 -0
- package/dist/live-ops-nav.js.map +1 -0
- package/dist/live.d.ts +20 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +8 -0
- package/dist/live.js.map +1 -0
- package/dist/markdown.d.ts +19 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +102 -0
- package/dist/markdown.js.map +1 -0
- package/dist/peers.d.ts +51 -0
- package/dist/peers.d.ts.map +1 -0
- package/dist/peers.js +127 -0
- package/dist/peers.js.map +1 -0
- package/dist/processed.d.ts +22 -0
- package/dist/processed.d.ts.map +1 -0
- package/dist/processed.js +397 -0
- package/dist/processed.js.map +1 -0
- package/dist/project.d.ts +25 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +76 -0
- package/dist/project.js.map +1 -0
- package/dist/reads-live-routes.d.ts +4 -0
- package/dist/reads-live-routes.d.ts.map +1 -0
- package/dist/reads-live-routes.js +56 -0
- package/dist/reads-live-routes.js.map +1 -0
- package/dist/reads-live-ui.d.ts +3 -0
- package/dist/reads-live-ui.d.ts.map +1 -0
- package/dist/reads-live-ui.js +204 -0
- package/dist/reads-live-ui.js.map +1 -0
- package/dist/reads-ring.d.ts +29 -0
- package/dist/reads-ring.d.ts.map +1 -0
- package/dist/reads-ring.js +44 -0
- package/dist/reads-ring.js.map +1 -0
- package/dist/refs.d.ts +24 -0
- package/dist/refs.d.ts.map +1 -0
- package/dist/refs.js +354 -0
- package/dist/refs.js.map +1 -0
- package/dist/request-countex.d.ts +53 -0
- package/dist/request-countex.d.ts.map +1 -0
- package/dist/request-countex.js +171 -0
- package/dist/request-countex.js.map +1 -0
- package/dist/scope.d.ts +13 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +46 -0
- package/dist/scope.js.map +1 -0
- package/dist/scoper.d.ts +75 -0
- package/dist/scoper.d.ts.map +1 -0
- package/dist/scoper.js +475 -0
- package/dist/scoper.js.map +1 -0
- package/dist/shaped-refs.d.ts +23 -0
- package/dist/shaped-refs.d.ts.map +1 -0
- package/dist/shaped-refs.js +395 -0
- package/dist/shaped-refs.js.map +1 -0
- package/dist/skills.d.ts +102 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +609 -0
- package/dist/skills.js.map +1 -0
- package/dist/story.d.ts +43 -0
- package/dist/story.d.ts.map +1 -0
- package/dist/story.js +121 -0
- package/dist/story.js.map +1 -0
- package/dist/upstream.d.ts +13 -0
- package/dist/upstream.d.ts.map +1 -0
- package/dist/upstream.js +58 -0
- package/dist/upstream.js.map +1 -0
- package/openapi/openapi.json +480 -0
- package/package.json +67 -6
- package/README.md +0 -3
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
import { findContentType, findObjectType, } from "./catalog.js";
|
|
2
|
+
import { ApiError, UpstreamError } from "./errors.js";
|
|
3
|
+
import { projectContents } from "./project.js";
|
|
4
|
+
import { scopeBody } from "./scope.js";
|
|
5
|
+
import { asRecord, subjectDirectoryPath } from "./upstream.js";
|
|
6
|
+
const VALUE_LIMIT = 200;
|
|
7
|
+
const NAME_FIELDS = ["displayName", "title", "name"];
|
|
8
|
+
export function shapesInCatalog(catalog) {
|
|
9
|
+
const seen = new Set();
|
|
10
|
+
const shapes = [];
|
|
11
|
+
for (const objectType of catalog) {
|
|
12
|
+
for (const contentType of objectType.contentTypes) {
|
|
13
|
+
for (const field of contentType.fields) {
|
|
14
|
+
for (const shape of field.shapes ?? []) {
|
|
15
|
+
const key = JSON.stringify(shape);
|
|
16
|
+
if (seen.has(key))
|
|
17
|
+
continue;
|
|
18
|
+
seen.add(key);
|
|
19
|
+
shapes.push(shape);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return shapes;
|
|
25
|
+
}
|
|
26
|
+
function grammarMatches(grammar, value) {
|
|
27
|
+
if (grammar.length > 200 || value.length > 500)
|
|
28
|
+
return false;
|
|
29
|
+
let expression;
|
|
30
|
+
try {
|
|
31
|
+
expression = new RegExp(grammar);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
const match = expression.exec(value);
|
|
37
|
+
return Boolean(match && match.index === 0 && match[0] === value);
|
|
38
|
+
}
|
|
39
|
+
function classify(value, shapes) {
|
|
40
|
+
const shape = shapes.find((item) => grammarMatches(item.grammar, value)) ?? null;
|
|
41
|
+
return { value, shape };
|
|
42
|
+
}
|
|
43
|
+
/** Object types named by `value` shapes that share a field with this template shape. */
|
|
44
|
+
function relatedRecordTypes(catalog, shape) {
|
|
45
|
+
const key = JSON.stringify(shape);
|
|
46
|
+
const types = new Set();
|
|
47
|
+
for (const objectType of catalog) {
|
|
48
|
+
for (const contentType of objectType.contentTypes) {
|
|
49
|
+
for (const field of contentType.fields) {
|
|
50
|
+
const shapes = field.shapes ?? [];
|
|
51
|
+
if (!shapes.some((item) => JSON.stringify(item) === key))
|
|
52
|
+
continue;
|
|
53
|
+
for (const other of shapes) {
|
|
54
|
+
if (other.resolvesTo.recordId === "value")
|
|
55
|
+
types.add(other.resolvesTo.objectType);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return [...types];
|
|
61
|
+
}
|
|
62
|
+
function modeOf(shape) {
|
|
63
|
+
if (shape.resolvesTo.recordId === "value")
|
|
64
|
+
return "value";
|
|
65
|
+
if (shape.resolvesTo.recordId.startsWith("paired-"))
|
|
66
|
+
return "paired";
|
|
67
|
+
return "template";
|
|
68
|
+
}
|
|
69
|
+
function templateRecordId(template, value) {
|
|
70
|
+
return template.replaceAll("{value}", value);
|
|
71
|
+
}
|
|
72
|
+
/** Content types any shape says to read for this object type, plus the ones this token asked for. */
|
|
73
|
+
function expandContentTypes(catalog, objectType, requested) {
|
|
74
|
+
const ids = new Set(requested);
|
|
75
|
+
for (const shape of shapesInCatalog(catalog)) {
|
|
76
|
+
if (shape.resolvesTo.objectType !== objectType)
|
|
77
|
+
continue;
|
|
78
|
+
for (const id of shape.resolvesTo.contentTypes)
|
|
79
|
+
ids.add(id);
|
|
80
|
+
}
|
|
81
|
+
return [...ids];
|
|
82
|
+
}
|
|
83
|
+
function contentTypesFor(catalog, objectType, requested) {
|
|
84
|
+
const view = findObjectType(catalog, objectType);
|
|
85
|
+
if (!view)
|
|
86
|
+
return [];
|
|
87
|
+
const known = new Set(view.contentTypes.map((item) => item.id));
|
|
88
|
+
const listed = requested.filter((id) => id !== "relationships" && known.has(id));
|
|
89
|
+
return listed.length > 0 ? listed : [];
|
|
90
|
+
}
|
|
91
|
+
function publishes(data, token, property) {
|
|
92
|
+
const record = asRecord(data);
|
|
93
|
+
if (!record)
|
|
94
|
+
return false;
|
|
95
|
+
const names = new Set(NAME_FIELDS);
|
|
96
|
+
if (property) {
|
|
97
|
+
names.add(property);
|
|
98
|
+
if (property.endsWith("Id"))
|
|
99
|
+
names.add(`${property.slice(0, -2)}Ids`);
|
|
100
|
+
}
|
|
101
|
+
for (const name of names) {
|
|
102
|
+
const value = record[name];
|
|
103
|
+
if (value === token)
|
|
104
|
+
return true;
|
|
105
|
+
if (Array.isArray(value) && value.some((item) => item === token))
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
function subjectPublishes(subject, token, property) {
|
|
111
|
+
const contents = asRecord(subject.contents);
|
|
112
|
+
if (!contents)
|
|
113
|
+
return false;
|
|
114
|
+
for (const list of Object.values(contents)) {
|
|
115
|
+
if (!Array.isArray(list))
|
|
116
|
+
continue;
|
|
117
|
+
for (const item of list) {
|
|
118
|
+
const data = asRecord(item)?.data ?? (asRecord(asRecord(item)?.json)?.data);
|
|
119
|
+
if (publishes(data, token, property))
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
function storedName(subject) {
|
|
126
|
+
const contents = asRecord(subject.contents);
|
|
127
|
+
if (!contents)
|
|
128
|
+
return null;
|
|
129
|
+
for (const list of Object.values(contents)) {
|
|
130
|
+
if (!Array.isArray(list))
|
|
131
|
+
continue;
|
|
132
|
+
for (const item of list) {
|
|
133
|
+
const data = asRecord(item)?.data ?? asRecord(asRecord(item)?.json)?.data;
|
|
134
|
+
const record = asRecord(data);
|
|
135
|
+
if (!record)
|
|
136
|
+
continue;
|
|
137
|
+
for (const key of NAME_FIELDS) {
|
|
138
|
+
const value = record[key];
|
|
139
|
+
if (typeof value === "string" && value.trim())
|
|
140
|
+
return value.trim();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
function remember(matched, property, token) {
|
|
147
|
+
if (!property || matched[property])
|
|
148
|
+
return;
|
|
149
|
+
matched[property] = token;
|
|
150
|
+
}
|
|
151
|
+
async function loadContents(upstream, scope, recordId, contentTypes) {
|
|
152
|
+
if (contentTypes.length === 0)
|
|
153
|
+
return {};
|
|
154
|
+
try {
|
|
155
|
+
const composed = asRecord(await upstream.post("/api/data/compose", scope, {
|
|
156
|
+
explicit: true,
|
|
157
|
+
recordId,
|
|
158
|
+
contentTypes,
|
|
159
|
+
}));
|
|
160
|
+
return asRecord(asRecord(composed?.composition)?.contents) ?? {};
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
if (err instanceof UpstreamError)
|
|
164
|
+
return null;
|
|
165
|
+
throw err;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
async function reserved(upstream, scope, recordId, objectType) {
|
|
169
|
+
try {
|
|
170
|
+
const body = asRecord(await upstream.get(subjectDirectoryPath(recordId), scope));
|
|
171
|
+
return body?.recordId === recordId && body.objectType === objectType;
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
if (err instanceof UpstreamError)
|
|
175
|
+
return false;
|
|
176
|
+
throw err;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async function loadSubject(upstream, scope, catalog, recordId, objectType, requestedTypes) {
|
|
180
|
+
const view = findObjectType(catalog, objectType);
|
|
181
|
+
if (!view)
|
|
182
|
+
return null;
|
|
183
|
+
if (!(await reserved(upstream, scope, recordId, objectType)))
|
|
184
|
+
return null;
|
|
185
|
+
const contentTypes = contentTypesFor(catalog, objectType, expandContentTypes(catalog, objectType, requestedTypes));
|
|
186
|
+
const contents = await loadContents(upstream, scope, recordId, contentTypes);
|
|
187
|
+
if (contents === null)
|
|
188
|
+
return null;
|
|
189
|
+
return { objectType, recordId, contentTypes, contents, matched: {} };
|
|
190
|
+
}
|
|
191
|
+
async function recordsByField(upstream, scope, objectType, contentType, field, value) {
|
|
192
|
+
const params = new URLSearchParams({
|
|
193
|
+
objectType,
|
|
194
|
+
contentType,
|
|
195
|
+
limit: "50",
|
|
196
|
+
filter: JSON.stringify([{ field, op: "in", value: [value] }]),
|
|
197
|
+
});
|
|
198
|
+
try {
|
|
199
|
+
const body = asRecord(await upstream.get(`/api/data/content?${params.toString()}`, scope));
|
|
200
|
+
const records = Array.isArray(body?.records) ? body.records : [];
|
|
201
|
+
const ids = [];
|
|
202
|
+
for (const item of records) {
|
|
203
|
+
const recordId = asRecord(item)?.recordId;
|
|
204
|
+
if (typeof recordId === "string" && recordId && !ids.includes(recordId))
|
|
205
|
+
ids.push(recordId);
|
|
206
|
+
}
|
|
207
|
+
return ids;
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
if (err instanceof UpstreamError)
|
|
211
|
+
return [];
|
|
212
|
+
throw err;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
function fieldsNamed(view, property) {
|
|
216
|
+
const found = [];
|
|
217
|
+
for (const contentType of view.contentTypes) {
|
|
218
|
+
if (contentType.id === "relationships")
|
|
219
|
+
continue;
|
|
220
|
+
for (const field of contentType.fields) {
|
|
221
|
+
const leaf = field.path.split(".").pop();
|
|
222
|
+
if (leaf === property || leaf === `${property}[]`)
|
|
223
|
+
found.push({ contentType: contentType.id, path: field.path.replace(/\[\]$/, "") });
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return found;
|
|
227
|
+
}
|
|
228
|
+
function projectLoaded(catalog, subject) {
|
|
229
|
+
const view = findObjectType(catalog, subject.objectType);
|
|
230
|
+
const fieldMap = new Map();
|
|
231
|
+
for (const contentType of subject.contentTypes) {
|
|
232
|
+
fieldMap.set(contentType, view ? (findContentType(view, contentType)?.fields ?? []) : []);
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
displayName: storedName(subject),
|
|
236
|
+
contents: projectContents(subject.contents, fieldMap, "json", "record"),
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
async function loadByFields(upstream, scope, catalog, token, properties, take) {
|
|
240
|
+
if (properties.length === 0)
|
|
241
|
+
return false;
|
|
242
|
+
let found = false;
|
|
243
|
+
for (const view of catalog) {
|
|
244
|
+
const fields = new Map();
|
|
245
|
+
for (const property of properties) {
|
|
246
|
+
for (const field of fieldsNamed(view, property))
|
|
247
|
+
fields.set(`${field.contentType}\0${field.path}`, field);
|
|
248
|
+
}
|
|
249
|
+
for (const field of fields.values()) {
|
|
250
|
+
const ids = await recordsByField(upstream, scope, view.id, field.contentType, field.path, token);
|
|
251
|
+
for (const id of ids.slice(0, 5)) {
|
|
252
|
+
if (await take(id, view.id, [field.contentType]))
|
|
253
|
+
found = true;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return found;
|
|
258
|
+
}
|
|
259
|
+
export async function resolveRefValues(upstream, scope, catalog, values) {
|
|
260
|
+
const shapes = shapesInCatalog(catalog);
|
|
261
|
+
const tokens = values.map((value) => classify(value, shapes));
|
|
262
|
+
const subjects = [];
|
|
263
|
+
const index = new Map();
|
|
264
|
+
const directKeys = new Set();
|
|
265
|
+
const consumed = new Set();
|
|
266
|
+
async function take(recordId, objectType, contentTypes) {
|
|
267
|
+
const key = `${objectType}\0${recordId}`;
|
|
268
|
+
const existing = index.get(key);
|
|
269
|
+
if (existing)
|
|
270
|
+
return existing;
|
|
271
|
+
const loaded = await loadSubject(upstream, scope, catalog, recordId, objectType, contentTypes);
|
|
272
|
+
if (!loaded)
|
|
273
|
+
return null;
|
|
274
|
+
index.set(key, loaded);
|
|
275
|
+
subjects.push(loaded);
|
|
276
|
+
return loaded;
|
|
277
|
+
}
|
|
278
|
+
for (let position = 0; position < tokens.length; position += 1) {
|
|
279
|
+
const token = tokens[position];
|
|
280
|
+
if (!token.shape || modeOf(token.shape) !== "value")
|
|
281
|
+
continue;
|
|
282
|
+
const loaded = await take(token.value, token.shape.resolvesTo.objectType, token.shape.resolvesTo.contentTypes);
|
|
283
|
+
if (!loaded)
|
|
284
|
+
continue;
|
|
285
|
+
directKeys.add(`${loaded.objectType}\0${loaded.recordId}`);
|
|
286
|
+
remember(loaded.matched, token.shape.sourceProperty, token.value);
|
|
287
|
+
consumed.add(position);
|
|
288
|
+
}
|
|
289
|
+
for (let position = 0; position < tokens.length; position += 1) {
|
|
290
|
+
const token = tokens[position];
|
|
291
|
+
if (!token.shape || modeOf(token.shape) !== "paired")
|
|
292
|
+
continue;
|
|
293
|
+
const pairProperty = token.shape.resolvesTo.recordId.slice("paired-".length);
|
|
294
|
+
const matchProperty = token.shape.resolvesTo.matchProperty;
|
|
295
|
+
let host = subjects.find((subject) => subject.objectType === token.shape.resolvesTo.objectType &&
|
|
296
|
+
subject.matched[pairProperty] &&
|
|
297
|
+
(!matchProperty || subjectPublishes(subject, token.value, matchProperty)));
|
|
298
|
+
if (!host) {
|
|
299
|
+
const view = findObjectType(catalog, token.shape.resolvesTo.objectType);
|
|
300
|
+
const property = matchProperty ?? token.shape.sourceProperty;
|
|
301
|
+
if (view && property) {
|
|
302
|
+
for (const field of fieldsNamed(view, property)) {
|
|
303
|
+
const ids = await recordsByField(upstream, scope, view.id, field.contentType, field.path, token.value);
|
|
304
|
+
if (ids.length !== 1)
|
|
305
|
+
continue;
|
|
306
|
+
host = (await take(ids[0], view.id, token.shape.resolvesTo.contentTypes)) ?? undefined;
|
|
307
|
+
if (host)
|
|
308
|
+
break;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
if (!host)
|
|
313
|
+
continue;
|
|
314
|
+
remember(host.matched, token.shape.sourceProperty, token.value);
|
|
315
|
+
consumed.add(position);
|
|
316
|
+
}
|
|
317
|
+
for (let position = 0; position < tokens.length; position += 1) {
|
|
318
|
+
const token = tokens[position];
|
|
319
|
+
if (!token.shape || modeOf(token.shape) !== "template")
|
|
320
|
+
continue;
|
|
321
|
+
const hosts = subjects.filter((subject) => subjectPublishes(subject, token.value, token.shape?.sourceProperty));
|
|
322
|
+
if (hosts.length > 0) {
|
|
323
|
+
for (const host of hosts)
|
|
324
|
+
remember(host.matched, token.shape.sourceProperty, token.value);
|
|
325
|
+
consumed.add(position);
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
const objectType = token.shape.resolvesTo.objectType;
|
|
329
|
+
const recordId = templateRecordId(token.shape.resolvesTo.recordId, token.value);
|
|
330
|
+
if (findObjectType(catalog, objectType)) {
|
|
331
|
+
const loaded = await take(recordId, objectType, token.shape.resolvesTo.contentTypes);
|
|
332
|
+
if (loaded) {
|
|
333
|
+
remember(loaded.matched, token.shape.sourceProperty, token.value);
|
|
334
|
+
consumed.add(position);
|
|
335
|
+
continue;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
// A batch that already resolved record ids keeps unmatched template tokens unresolved.
|
|
339
|
+
// Searching the catalog is for a token that arrived on its own.
|
|
340
|
+
if (directKeys.size > 0)
|
|
341
|
+
continue;
|
|
342
|
+
const property = token.shape.sourceProperty;
|
|
343
|
+
const propertyNames = property
|
|
344
|
+
? [property, ...(property.endsWith("Id") ? [`${property.slice(0, -2)}Ids`] : [])]
|
|
345
|
+
: [];
|
|
346
|
+
const related = relatedRecordTypes(catalog, token.shape);
|
|
347
|
+
const views = related.length > 0 ? catalog.filter((view) => related.includes(view.id)) : catalog;
|
|
348
|
+
const byProperty = await loadByFields(upstream, scope, views, token.value, propertyNames, take);
|
|
349
|
+
const loadedAny = byProperty ||
|
|
350
|
+
(await loadByFields(upstream, scope, catalog, token.value, [...NAME_FIELDS], take));
|
|
351
|
+
if (loadedAny) {
|
|
352
|
+
const attached = subjects.filter((subject) => subjectPublishes(subject, token.value, property));
|
|
353
|
+
for (const host of attached)
|
|
354
|
+
remember(host.matched, property, token.value);
|
|
355
|
+
consumed.add(position);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
const unresolved = tokens.filter((_, position) => !consumed.has(position)).map((token) => token.value);
|
|
359
|
+
return {
|
|
360
|
+
subjects: subjects.map((subject) => {
|
|
361
|
+
const projected = projectLoaded(catalog, subject);
|
|
362
|
+
return {
|
|
363
|
+
objectType: subject.objectType,
|
|
364
|
+
recordId: subject.recordId,
|
|
365
|
+
displayName: projected.displayName,
|
|
366
|
+
contentTypes: subject.contentTypes,
|
|
367
|
+
matched: subject.matched,
|
|
368
|
+
contents: projected.contents,
|
|
369
|
+
};
|
|
370
|
+
}),
|
|
371
|
+
unresolved,
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
function valuesOf(body) {
|
|
375
|
+
const record = asRecord(body);
|
|
376
|
+
const values = record?.values;
|
|
377
|
+
if (!Array.isArray(values) || values.some((item) => typeof item !== "string")) {
|
|
378
|
+
throw new ApiError(400, "VALIDATION", "values must be an array of strings");
|
|
379
|
+
}
|
|
380
|
+
const trimmed = values.map((item) => item.trim()).filter(Boolean);
|
|
381
|
+
if (trimmed.length > VALUE_LIMIT) {
|
|
382
|
+
throw new ApiError(400, "VALIDATION", `values exceeds ${VALUE_LIMIT}`);
|
|
383
|
+
}
|
|
384
|
+
return trimmed;
|
|
385
|
+
}
|
|
386
|
+
export function registerRefRoutes(app, options) {
|
|
387
|
+
app.post("/api/v1/refs/resolve", async (req) => {
|
|
388
|
+
const scope = await options.scopeFor(req);
|
|
389
|
+
const values = valuesOf(req.body);
|
|
390
|
+
const catalog = await options.loadCatalog(options.upstream, scope);
|
|
391
|
+
const resolved = await resolveRefValues(options.upstream, scope, catalog, values);
|
|
392
|
+
return { scope: scopeBody(scope), ...resolved };
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
//# sourceMappingURL=shaped-refs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shaped-refs.js","sourceRoot":"","sources":["../src/shaped-refs.ts"],"names":[],"mappings":"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"}
|
package/dist/skills.d.ts
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { FastifyInstance, FastifyRequest } from "fastify";
|
|
2
|
+
import { type SafeFilter } from "@x12i/memorix-client";
|
|
3
|
+
import type { PeerChoice } from "./peers.js";
|
|
4
|
+
import type { ClientScope } from "./scope.js";
|
|
5
|
+
export type FunctionRead = {
|
|
6
|
+
objectType?: string;
|
|
7
|
+
contentType?: string;
|
|
8
|
+
recordId?: string;
|
|
9
|
+
template?: string;
|
|
10
|
+
sameSubject?: boolean;
|
|
11
|
+
};
|
|
12
|
+
export type FunctionEntry = {
|
|
13
|
+
id: string;
|
|
14
|
+
question: string;
|
|
15
|
+
page: string;
|
|
16
|
+
objectTypes: string[];
|
|
17
|
+
composes: boolean;
|
|
18
|
+
pageStory: boolean;
|
|
19
|
+
reads: FunctionRead[];
|
|
20
|
+
origin: "agent" | "database";
|
|
21
|
+
template?: string;
|
|
22
|
+
kind?: string;
|
|
23
|
+
};
|
|
24
|
+
export type SkillsInfo = {
|
|
25
|
+
mode: "embedded" | "external";
|
|
26
|
+
source: string;
|
|
27
|
+
version: string;
|
|
28
|
+
baseUrl?: string;
|
|
29
|
+
};
|
|
30
|
+
export type SkillsHost = {
|
|
31
|
+
info: SkillsInfo;
|
|
32
|
+
list(scope: ClientScope, agentId: string): Promise<{
|
|
33
|
+
items: FunctionEntry[];
|
|
34
|
+
}>;
|
|
35
|
+
run(scope: ClientScope, agentId: string, functionId: string, body: unknown): Promise<unknown>;
|
|
36
|
+
save(scope: ClientScope, agentId: string, functionId: string, body: unknown): Promise<unknown>;
|
|
37
|
+
remove(scope: ClientScope, agentId: string, functionId: string): Promise<unknown>;
|
|
38
|
+
};
|
|
39
|
+
/** Enough of `@x12i/memorix-client` for function reads and the story write. */
|
|
40
|
+
export type FunctionMemorix = {
|
|
41
|
+
explore: {
|
|
42
|
+
listContent(input: {
|
|
43
|
+
objectType: string;
|
|
44
|
+
contentType: string;
|
|
45
|
+
limit?: number;
|
|
46
|
+
filter?: SafeFilter[];
|
|
47
|
+
discriminatorValue?: string;
|
|
48
|
+
}): Promise<unknown>;
|
|
49
|
+
getContent?(input: {
|
|
50
|
+
objectType: string;
|
|
51
|
+
contentType: string;
|
|
52
|
+
recordId: string;
|
|
53
|
+
discriminatorValue?: string;
|
|
54
|
+
}): Promise<unknown>;
|
|
55
|
+
writeContent(input: {
|
|
56
|
+
objectType: string;
|
|
57
|
+
contentType: string;
|
|
58
|
+
record: Record<string, unknown>;
|
|
59
|
+
precondition: "absent" | {
|
|
60
|
+
kind: "revision";
|
|
61
|
+
revision: number;
|
|
62
|
+
};
|
|
63
|
+
op?: "upsert" | "replace";
|
|
64
|
+
discriminatorValue?: string;
|
|
65
|
+
expectedRevision?: number;
|
|
66
|
+
}): Promise<unknown>;
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
export type EmbeddedSkillsOptions = {
|
|
70
|
+
memorixUrl: string;
|
|
71
|
+
peer?: PeerChoice;
|
|
72
|
+
packDir?: string;
|
|
73
|
+
agentsDir?: string;
|
|
74
|
+
contentAgentIds?: string[];
|
|
75
|
+
/** Assistants database. Unset means pack functions run and save returns 503. */
|
|
76
|
+
mongoUri?: string;
|
|
77
|
+
createClient?: (scope: ClientScope) => FunctionMemorix;
|
|
78
|
+
};
|
|
79
|
+
export declare function createEmbeddedSkillsHost(options: EmbeddedSkillsOptions): SkillsHost;
|
|
80
|
+
export type ExternalSkillsOptions = {
|
|
81
|
+
peer: PeerChoice;
|
|
82
|
+
fetchImpl?: typeof fetch;
|
|
83
|
+
/** Test double. Production mints an HMAC deployment identity. */
|
|
84
|
+
issueIdentity?: (scope: ClientScope, write: boolean) => Promise<string> | string;
|
|
85
|
+
};
|
|
86
|
+
/** Forward function calls to a running skill-api. This process does not load a pack. */
|
|
87
|
+
export declare function createExternalSkillsHost(options: ExternalSkillsOptions): SkillsHost;
|
|
88
|
+
export type SkillRouteOptions = {
|
|
89
|
+
host: SkillsHost;
|
|
90
|
+
scopeFor: (req: FastifyRequest) => Promise<ClientScope>;
|
|
91
|
+
};
|
|
92
|
+
export declare function registerSkillRoutes(app: FastifyInstance, options: SkillRouteOptions): void;
|
|
93
|
+
/**
|
|
94
|
+
* One pack directory serves that folder name, and every content agent.
|
|
95
|
+
* An agents root is searched by folder name, then by the first pack that has functions.
|
|
96
|
+
*/
|
|
97
|
+
export declare function resolvePackDir(agentId: string, options: {
|
|
98
|
+
packDir?: string;
|
|
99
|
+
agentsDir?: string;
|
|
100
|
+
contentAgentIds?: string[];
|
|
101
|
+
}): string | null;
|
|
102
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}
|