@superatomai/sdk-node 0.0.56-dsp → 0.0.57-dsp
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/index.d.mts +298 -1
- package/dist/index.d.ts +298 -1
- package/dist/index.js +574 -61
- package/dist/index.mjs +554 -59
- package/dist/userResponse/scripts/script-bootstrap.js +20 -11
- package/dist/userResponse/scripts/script-bootstrap.mjs +20 -11
- package/package.json +1 -1
|
@@ -177,6 +177,12 @@ if (!SCRIPT_ARG) {
|
|
|
177
177
|
process.exit(1);
|
|
178
178
|
}
|
|
179
179
|
var BRIDGE_URL = process.env.SCRIPT_BRIDGE_URL;
|
|
180
|
+
var CONTEXT_TOKEN = process.env.SA_CONTEXT_TOKEN;
|
|
181
|
+
var observedPolicies = /* @__PURE__ */ new Set();
|
|
182
|
+
var bridgeHeaders = () => ({
|
|
183
|
+
"content-type": "application/json",
|
|
184
|
+
...CONTEXT_TOKEN ? { "x-sa-context": CONTEXT_TOKEN } : {}
|
|
185
|
+
});
|
|
180
186
|
var executedQueries = [];
|
|
181
187
|
var toolIdCallCounts = {};
|
|
182
188
|
var PREVIEW_MAX_ROWS = 10;
|
|
@@ -212,11 +218,12 @@ ${sql}
|
|
|
212
218
|
send({ type: "stream", chunk: `__QUERY_TIMER_START_Executing query__` });
|
|
213
219
|
const res = await fetch(`${BRIDGE_URL}/query`, {
|
|
214
220
|
method: "POST",
|
|
215
|
-
headers:
|
|
221
|
+
headers: bridgeHeaders(),
|
|
216
222
|
body: JSON.stringify({ toolId, sql, limit: QUERY_ROW_CAP })
|
|
217
223
|
});
|
|
218
224
|
const json = await res.json();
|
|
219
225
|
const executionTimeMs = Date.now() - startedAt;
|
|
226
|
+
for (const p of json?.metadata?.appliedPolicies ?? []) observedPolicies.add(p);
|
|
220
227
|
send({ type: "stream", chunk: `__QUERY_TIMER_DONE_${(executionTimeMs / 1e3).toFixed(1)}__
|
|
221
228
|
|
|
222
229
|
` });
|
|
@@ -271,7 +278,8 @@ ${sql}
|
|
|
271
278
|
sql,
|
|
272
279
|
data,
|
|
273
280
|
count,
|
|
274
|
-
executionTimeMs
|
|
281
|
+
executionTimeMs,
|
|
282
|
+
...json?.metadata?.appliedPolicies?.length ? { appliedPolicies: json.metadata.appliedPolicies } : {}
|
|
275
283
|
});
|
|
276
284
|
return { data, count, truncated, totalCount };
|
|
277
285
|
},
|
|
@@ -292,7 +300,7 @@ ${sql}
|
|
|
292
300
|
if (!BRIDGE_URL) throw new Error("SCRIPT_BRIDGE_URL is not set \u2014 script bridge server is not running");
|
|
293
301
|
const res = await fetch(`${BRIDGE_URL}/run-tool`, {
|
|
294
302
|
method: "POST",
|
|
295
|
-
headers:
|
|
303
|
+
headers: bridgeHeaders(),
|
|
296
304
|
body: JSON.stringify({ toolId, params })
|
|
297
305
|
});
|
|
298
306
|
const json = await res.json();
|
|
@@ -382,7 +390,7 @@ function handleMessage(msg) {
|
|
|
382
390
|
if (initResolve) {
|
|
383
391
|
const now = new Date(msg.now || (/* @__PURE__ */ new Date()).toISOString());
|
|
384
392
|
const params = restoreParamTypes(msg.params || {}, msg.paramSchema);
|
|
385
|
-
initResolve({ params, now, mode: msg.mode, data: msg.data, datasets: msg.datasets, fmt: msg.fmt, entities: msg.entities });
|
|
393
|
+
initResolve({ params, now, mode: msg.mode, data: msg.data, datasets: msg.datasets, fmt: msg.fmt, entities: msg.entities, appliedPolicies: msg.appliedPolicies });
|
|
386
394
|
initResolve = null;
|
|
387
395
|
}
|
|
388
396
|
break;
|
|
@@ -398,11 +406,11 @@ function collectDatasets(queries) {
|
|
|
398
406
|
}
|
|
399
407
|
return out;
|
|
400
408
|
}
|
|
401
|
-
async function runComponents(mod, data, params, fmtCfg, datasets = {}, entities = []) {
|
|
409
|
+
async function runComponents(mod, data, params, fmtCfg, datasets = {}, entities = [], scope = []) {
|
|
402
410
|
const getComponents = mod?.getComponents ?? mod?.default?.getComponents;
|
|
403
411
|
if (typeof getComponents !== "function") return {};
|
|
404
412
|
try {
|
|
405
|
-
const out = await getComponents(data, params, makeFmt(fmtCfg), datasets, entities);
|
|
413
|
+
const out = await getComponents(data, params, makeFmt(fmtCfg), datasets, entities, scope);
|
|
406
414
|
if (!Array.isArray(out)) {
|
|
407
415
|
return { componentsError: "getComponents must return an ARRAY of component specs" };
|
|
408
416
|
}
|
|
@@ -415,11 +423,11 @@ async function runComponents(mod, data, params, fmtCfg, datasets = {}, entities
|
|
|
415
423
|
return { componentsError: e?.message || String(err) };
|
|
416
424
|
}
|
|
417
425
|
}
|
|
418
|
-
async function runAnalysis(mod, data, params, fmtCfg, datasets = {}, entities = []) {
|
|
426
|
+
async function runAnalysis(mod, data, params, fmtCfg, datasets = {}, entities = [], scope = []) {
|
|
419
427
|
const getAnalysis = mod?.getAnalysis ?? mod?.default?.getAnalysis;
|
|
420
428
|
if (typeof getAnalysis !== "function") return {};
|
|
421
429
|
try {
|
|
422
|
-
const out = await getAnalysis(data, params, makeFmt(fmtCfg), datasets, entities);
|
|
430
|
+
const out = await getAnalysis(data, params, makeFmt(fmtCfg), datasets, entities, scope);
|
|
423
431
|
if (!out || typeof out !== "object") {
|
|
424
432
|
return { analysisError: "getAnalysis must return an object with { analysis, summary, method }" };
|
|
425
433
|
}
|
|
@@ -452,7 +460,7 @@ async function runAnalysis(mod, data, params, fmtCfg, datasets = {}, entities =
|
|
|
452
460
|
const started = Date.now();
|
|
453
461
|
const rows = Array.isArray(init.data) ? init.data : [];
|
|
454
462
|
const ds = init.datasets ?? {};
|
|
455
|
-
const authored = init.mode === "analysis" ? await runAnalysis(mod, rows, init.params, init.fmt, ds, init.entities) : await runComponents(mod, rows, init.params, init.fmt, ds, init.entities);
|
|
463
|
+
const authored = init.mode === "analysis" ? await runAnalysis(mod, rows, init.params, init.fmt, ds, init.entities, init.appliedPolicies ?? []) : await runComponents(mod, rows, init.params, init.fmt, ds, init.entities, init.appliedPolicies ?? []);
|
|
456
464
|
const flushedAuthored = send({
|
|
457
465
|
type: "result",
|
|
458
466
|
data: [],
|
|
@@ -483,8 +491,9 @@ async function runAnalysis(mod, data, params, fmtCfg, datasets = {}, entities =
|
|
|
483
491
|
const count = typeof raw?.count === "number" ? raw.count : data.length;
|
|
484
492
|
const sampleRows = data.slice(0, 5);
|
|
485
493
|
const ds = collectDatasets(executedQueries);
|
|
486
|
-
const
|
|
487
|
-
const {
|
|
494
|
+
const observed = [...observedPolicies];
|
|
495
|
+
const { analysis, analysisError } = await runAnalysis(mod, data, init.params, init.fmt, ds, init.entities, observed);
|
|
496
|
+
const { components, componentsError } = await runComponents(mod, data, init.params, init.fmt, ds, init.entities, observed);
|
|
488
497
|
const result = {
|
|
489
498
|
type: "result",
|
|
490
499
|
data,
|
|
@@ -175,6 +175,12 @@ if (!SCRIPT_ARG) {
|
|
|
175
175
|
process.exit(1);
|
|
176
176
|
}
|
|
177
177
|
var BRIDGE_URL = process.env.SCRIPT_BRIDGE_URL;
|
|
178
|
+
var CONTEXT_TOKEN = process.env.SA_CONTEXT_TOKEN;
|
|
179
|
+
var observedPolicies = /* @__PURE__ */ new Set();
|
|
180
|
+
var bridgeHeaders = () => ({
|
|
181
|
+
"content-type": "application/json",
|
|
182
|
+
...CONTEXT_TOKEN ? { "x-sa-context": CONTEXT_TOKEN } : {}
|
|
183
|
+
});
|
|
178
184
|
var executedQueries = [];
|
|
179
185
|
var toolIdCallCounts = {};
|
|
180
186
|
var PREVIEW_MAX_ROWS = 10;
|
|
@@ -210,11 +216,12 @@ ${sql}
|
|
|
210
216
|
send({ type: "stream", chunk: `__QUERY_TIMER_START_Executing query__` });
|
|
211
217
|
const res = await fetch(`${BRIDGE_URL}/query`, {
|
|
212
218
|
method: "POST",
|
|
213
|
-
headers:
|
|
219
|
+
headers: bridgeHeaders(),
|
|
214
220
|
body: JSON.stringify({ toolId, sql, limit: QUERY_ROW_CAP })
|
|
215
221
|
});
|
|
216
222
|
const json = await res.json();
|
|
217
223
|
const executionTimeMs = Date.now() - startedAt;
|
|
224
|
+
for (const p of json?.metadata?.appliedPolicies ?? []) observedPolicies.add(p);
|
|
218
225
|
send({ type: "stream", chunk: `__QUERY_TIMER_DONE_${(executionTimeMs / 1e3).toFixed(1)}__
|
|
219
226
|
|
|
220
227
|
` });
|
|
@@ -269,7 +276,8 @@ ${sql}
|
|
|
269
276
|
sql,
|
|
270
277
|
data,
|
|
271
278
|
count,
|
|
272
|
-
executionTimeMs
|
|
279
|
+
executionTimeMs,
|
|
280
|
+
...json?.metadata?.appliedPolicies?.length ? { appliedPolicies: json.metadata.appliedPolicies } : {}
|
|
273
281
|
});
|
|
274
282
|
return { data, count, truncated, totalCount };
|
|
275
283
|
},
|
|
@@ -290,7 +298,7 @@ ${sql}
|
|
|
290
298
|
if (!BRIDGE_URL) throw new Error("SCRIPT_BRIDGE_URL is not set \u2014 script bridge server is not running");
|
|
291
299
|
const res = await fetch(`${BRIDGE_URL}/run-tool`, {
|
|
292
300
|
method: "POST",
|
|
293
|
-
headers:
|
|
301
|
+
headers: bridgeHeaders(),
|
|
294
302
|
body: JSON.stringify({ toolId, params })
|
|
295
303
|
});
|
|
296
304
|
const json = await res.json();
|
|
@@ -380,7 +388,7 @@ function handleMessage(msg) {
|
|
|
380
388
|
if (initResolve) {
|
|
381
389
|
const now = new Date(msg.now || (/* @__PURE__ */ new Date()).toISOString());
|
|
382
390
|
const params = restoreParamTypes(msg.params || {}, msg.paramSchema);
|
|
383
|
-
initResolve({ params, now, mode: msg.mode, data: msg.data, datasets: msg.datasets, fmt: msg.fmt, entities: msg.entities });
|
|
391
|
+
initResolve({ params, now, mode: msg.mode, data: msg.data, datasets: msg.datasets, fmt: msg.fmt, entities: msg.entities, appliedPolicies: msg.appliedPolicies });
|
|
384
392
|
initResolve = null;
|
|
385
393
|
}
|
|
386
394
|
break;
|
|
@@ -396,11 +404,11 @@ function collectDatasets(queries) {
|
|
|
396
404
|
}
|
|
397
405
|
return out;
|
|
398
406
|
}
|
|
399
|
-
async function runComponents(mod, data, params, fmtCfg, datasets = {}, entities = []) {
|
|
407
|
+
async function runComponents(mod, data, params, fmtCfg, datasets = {}, entities = [], scope = []) {
|
|
400
408
|
const getComponents = mod?.getComponents ?? mod?.default?.getComponents;
|
|
401
409
|
if (typeof getComponents !== "function") return {};
|
|
402
410
|
try {
|
|
403
|
-
const out = await getComponents(data, params, makeFmt(fmtCfg), datasets, entities);
|
|
411
|
+
const out = await getComponents(data, params, makeFmt(fmtCfg), datasets, entities, scope);
|
|
404
412
|
if (!Array.isArray(out)) {
|
|
405
413
|
return { componentsError: "getComponents must return an ARRAY of component specs" };
|
|
406
414
|
}
|
|
@@ -413,11 +421,11 @@ async function runComponents(mod, data, params, fmtCfg, datasets = {}, entities
|
|
|
413
421
|
return { componentsError: e?.message || String(err) };
|
|
414
422
|
}
|
|
415
423
|
}
|
|
416
|
-
async function runAnalysis(mod, data, params, fmtCfg, datasets = {}, entities = []) {
|
|
424
|
+
async function runAnalysis(mod, data, params, fmtCfg, datasets = {}, entities = [], scope = []) {
|
|
417
425
|
const getAnalysis = mod?.getAnalysis ?? mod?.default?.getAnalysis;
|
|
418
426
|
if (typeof getAnalysis !== "function") return {};
|
|
419
427
|
try {
|
|
420
|
-
const out = await getAnalysis(data, params, makeFmt(fmtCfg), datasets, entities);
|
|
428
|
+
const out = await getAnalysis(data, params, makeFmt(fmtCfg), datasets, entities, scope);
|
|
421
429
|
if (!out || typeof out !== "object") {
|
|
422
430
|
return { analysisError: "getAnalysis must return an object with { analysis, summary, method }" };
|
|
423
431
|
}
|
|
@@ -450,7 +458,7 @@ async function runAnalysis(mod, data, params, fmtCfg, datasets = {}, entities =
|
|
|
450
458
|
const started = Date.now();
|
|
451
459
|
const rows = Array.isArray(init.data) ? init.data : [];
|
|
452
460
|
const ds = init.datasets ?? {};
|
|
453
|
-
const authored = init.mode === "analysis" ? await runAnalysis(mod, rows, init.params, init.fmt, ds, init.entities) : await runComponents(mod, rows, init.params, init.fmt, ds, init.entities);
|
|
461
|
+
const authored = init.mode === "analysis" ? await runAnalysis(mod, rows, init.params, init.fmt, ds, init.entities, init.appliedPolicies ?? []) : await runComponents(mod, rows, init.params, init.fmt, ds, init.entities, init.appliedPolicies ?? []);
|
|
454
462
|
const flushedAuthored = send({
|
|
455
463
|
type: "result",
|
|
456
464
|
data: [],
|
|
@@ -481,8 +489,9 @@ async function runAnalysis(mod, data, params, fmtCfg, datasets = {}, entities =
|
|
|
481
489
|
const count = typeof raw?.count === "number" ? raw.count : data.length;
|
|
482
490
|
const sampleRows = data.slice(0, 5);
|
|
483
491
|
const ds = collectDatasets(executedQueries);
|
|
484
|
-
const
|
|
485
|
-
const {
|
|
492
|
+
const observed = [...observedPolicies];
|
|
493
|
+
const { analysis, analysisError } = await runAnalysis(mod, data, init.params, init.fmt, ds, init.entities, observed);
|
|
494
|
+
const { components, componentsError } = await runComponents(mod, data, init.params, init.fmt, ds, init.entities, observed);
|
|
486
495
|
const result = {
|
|
487
496
|
type: "result",
|
|
488
497
|
data,
|