@superblocksteam/gateway 2.0.0-SNAPSHOT.1d4c72c0ab174c21
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/LICENSE.txt +87 -0
- package/README.md +291 -0
- package/dist/agents/resolve-orchestrator-url.d.ts +22 -0
- package/dist/agents/resolve-orchestrator-url.js +38 -0
- package/dist/agents/resolve-orchestrator-url.js.map +1 -0
- package/dist/capabilities/integration-metadata.d.ts +28 -0
- package/dist/capabilities/integration-metadata.js +174 -0
- package/dist/capabilities/integration-metadata.js.map +1 -0
- package/dist/capabilities/lifecycle.d.ts +93 -0
- package/dist/capabilities/lifecycle.js +3450 -0
- package/dist/capabilities/lifecycle.js.map +1 -0
- package/dist/capabilities/query-integration.d.ts +14 -0
- package/dist/capabilities/query-integration.js +172 -0
- package/dist/capabilities/query-integration.js.map +1 -0
- package/dist/capabilities/source-files-archive.d.ts +11 -0
- package/dist/capabilities/source-files-archive.js +54 -0
- package/dist/capabilities/source-files-archive.js.map +1 -0
- package/dist/capabilities/types.d.ts +542 -0
- package/dist/capabilities/types.js +86 -0
- package/dist/capabilities/types.js.map +1 -0
- package/dist/capture/browser-contract.d.ts +46 -0
- package/dist/capture/browser-contract.js +34 -0
- package/dist/capture/browser-contract.js.map +1 -0
- package/dist/capture/browser-instructions.d.ts +10 -0
- package/dist/capture/browser-instructions.js +18 -0
- package/dist/capture/browser-instructions.js.map +1 -0
- package/dist/capture/capture-library-probe.d.ts +55 -0
- package/dist/capture/capture-library-probe.js +177 -0
- package/dist/capture/capture-library-probe.js.map +1 -0
- package/dist/capture/capture-library.d.ts +52 -0
- package/dist/capture/capture-library.js +249 -0
- package/dist/capture/capture-library.js.map +1 -0
- package/dist/capture/classify-library-paint.d.ts +21 -0
- package/dist/capture/classify-library-paint.js +13 -0
- package/dist/capture/classify-library-paint.js.map +1 -0
- package/dist/capture/host-mcp-scan.d.ts +16 -0
- package/dist/capture/host-mcp-scan.js +64 -0
- package/dist/capture/host-mcp-scan.js.map +1 -0
- package/dist/capture/library-parent-script.d.ts +35 -0
- package/dist/capture/library-parent-script.js +82 -0
- package/dist/capture/library-parent-script.js.map +1 -0
- package/dist/capture/mode.d.ts +29 -0
- package/dist/capture/mode.js +65 -0
- package/dist/capture/mode.js.map +1 -0
- package/dist/config.d.ts +148 -0
- package/dist/config.js +111 -0
- package/dist/config.js.map +1 -0
- package/dist/debug.d.ts +2 -0
- package/dist/debug.js +9 -0
- package/dist/debug.js.map +1 -0
- package/dist/deps.d.ts +38 -0
- package/dist/deps.js +2 -0
- package/dist/deps.js.map +1 -0
- package/dist/health/readiness.d.ts +99 -0
- package/dist/health/readiness.js +202 -0
- package/dist/health/readiness.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/filters.d.ts +8 -0
- package/dist/integrations/filters.js +40 -0
- package/dist/integrations/filters.js.map +1 -0
- package/dist/integrations/map.d.ts +27 -0
- package/dist/integrations/map.js +43 -0
- package/dist/integrations/map.js.map +1 -0
- package/dist/integrations/profile-key.d.ts +19 -0
- package/dist/integrations/profile-key.js +35 -0
- package/dist/integrations/profile-key.js.map +1 -0
- package/dist/integrations/read-only-postgres-query.d.ts +2 -0
- package/dist/integrations/read-only-postgres-query.js +164 -0
- package/dist/integrations/read-only-postgres-query.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +5 -0
- package/dist/main.js.map +1 -0
- package/dist/orchestrator/client.d.ts +62 -0
- package/dist/orchestrator/client.js +160 -0
- package/dist/orchestrator/client.js.map +1 -0
- package/dist/playwright/ensure-chromium.d.ts +24 -0
- package/dist/playwright/ensure-chromium.js +60 -0
- package/dist/playwright/ensure-chromium.js.map +1 -0
- package/dist/preview/capture-screenshot.d.ts +67 -0
- package/dist/preview/capture-screenshot.js +179 -0
- package/dist/preview/capture-screenshot.js.map +1 -0
- package/dist/preview/viewer-url.d.ts +82 -0
- package/dist/preview/viewer-url.js +130 -0
- package/dist/preview/viewer-url.js.map +1 -0
- package/dist/process/fault-barrier.d.ts +55 -0
- package/dist/process/fault-barrier.js +113 -0
- package/dist/process/fault-barrier.js.map +1 -0
- package/dist/sabs/agent-facing-text.d.ts +35 -0
- package/dist/sabs/agent-facing-text.js +165 -0
- package/dist/sabs/agent-facing-text.js.map +1 -0
- package/dist/sabs/app-state.d.ts +126 -0
- package/dist/sabs/app-state.js +332 -0
- package/dist/sabs/app-state.js.map +1 -0
- package/dist/sabs/awaited-decision.d.ts +47 -0
- package/dist/sabs/awaited-decision.js +124 -0
- package/dist/sabs/awaited-decision.js.map +1 -0
- package/dist/sabs/browser-context.d.ts +53 -0
- package/dist/sabs/browser-context.js +92 -0
- package/dist/sabs/browser-context.js.map +1 -0
- package/dist/sabs/editor-client-methods.d.ts +164 -0
- package/dist/sabs/editor-client-methods.js +750 -0
- package/dist/sabs/editor-client-methods.js.map +1 -0
- package/dist/sabs/editor-socket.d.ts +84 -0
- package/dist/sabs/editor-socket.js +64 -0
- package/dist/sabs/editor-socket.js.map +1 -0
- package/dist/sabs/recent-tool-runs.d.ts +14 -0
- package/dist/sabs/recent-tool-runs.js +61 -0
- package/dist/sabs/recent-tool-runs.js.map +1 -0
- package/dist/sabs/session-peer.d.ts +392 -0
- package/dist/sabs/session-peer.js +11 -0
- package/dist/sabs/session-peer.js.map +1 -0
- package/dist/sabs/streamed-reply.d.ts +42 -0
- package/dist/sabs/streamed-reply.js +110 -0
- package/dist/sabs/streamed-reply.js.map +1 -0
- package/dist/sabs/turn-collector.d.ts +169 -0
- package/dist/sabs/turn-collector.js +506 -0
- package/dist/sabs/turn-collector.js.map +1 -0
- package/dist/sabs/websocket-session-peer.d.ts +540 -0
- package/dist/sabs/websocket-session-peer.js +3289 -0
- package/dist/sabs/websocket-session-peer.js.map +1 -0
- package/dist/security/constant-time.d.ts +9 -0
- package/dist/security/constant-time.js +13 -0
- package/dist/security/constant-time.js.map +1 -0
- package/dist/server/client.d.ts +405 -0
- package/dist/server/client.js +684 -0
- package/dist/server/client.js.map +1 -0
- package/dist/server/identity-reads.d.ts +76 -0
- package/dist/server/identity-reads.js +209 -0
- package/dist/server/identity-reads.js.map +1 -0
- package/dist/start.d.ts +24 -0
- package/dist/start.js +81 -0
- package/dist/start.js.map +1 -0
- package/dist/stores/memory.d.ts +42 -0
- package/dist/stores/memory.js +121 -0
- package/dist/stores/memory.js.map +1 -0
- package/dist/stores/types.d.ts +74 -0
- package/dist/stores/types.js +11 -0
- package/dist/stores/types.js.map +1 -0
- package/dist/telemetry/mcp-client.d.ts +22 -0
- package/dist/telemetry/mcp-client.js +140 -0
- package/dist/telemetry/mcp-client.js.map +1 -0
- package/dist/telemetry/metrics.d.ts +41 -0
- package/dist/telemetry/metrics.js +103 -0
- package/dist/telemetry/metrics.js.map +1 -0
- package/dist/telemetry/runtime.d.ts +9 -0
- package/dist/telemetry/runtime.js +118 -0
- package/dist/telemetry/runtime.js.map +1 -0
- package/dist/transports/mcp/admin-tools.d.ts +56 -0
- package/dist/transports/mcp/admin-tools.js +252 -0
- package/dist/transports/mcp/admin-tools.js.map +1 -0
- package/dist/transports/mcp/app-status-html.d.ts +11 -0
- package/dist/transports/mcp/app-status-html.js +899 -0
- package/dist/transports/mcp/app-status-html.js.map +1 -0
- package/dist/transports/mcp/client-presentation.d.ts +16 -0
- package/dist/transports/mcp/client-presentation.js +13 -0
- package/dist/transports/mcp/client-presentation.js.map +1 -0
- package/dist/transports/mcp/cowork-editor-url.d.ts +6 -0
- package/dist/transports/mcp/cowork-editor-url.js +10 -0
- package/dist/transports/mcp/cowork-editor-url.js.map +1 -0
- package/dist/transports/mcp/decision-card-html.d.ts +26 -0
- package/dist/transports/mcp/decision-card-html.js +876 -0
- package/dist/transports/mcp/decision-card-html.js.map +1 -0
- package/dist/transports/mcp/decision-elicitation.d.ts +116 -0
- package/dist/transports/mcp/decision-elicitation.js +292 -0
- package/dist/transports/mcp/decision-elicitation.js.map +1 -0
- package/dist/transports/mcp/dispatch-probe.d.ts +24 -0
- package/dist/transports/mcp/dispatch-probe.js +48 -0
- package/dist/transports/mcp/dispatch-probe.js.map +1 -0
- package/dist/transports/mcp/editor-document-probe.d.ts +4 -0
- package/dist/transports/mcp/editor-document-probe.js +35 -0
- package/dist/transports/mcp/editor-document-probe.js.map +1 -0
- package/dist/transports/mcp/editor-integration-setup-url.d.ts +8 -0
- package/dist/transports/mcp/editor-integration-setup-url.js +23 -0
- package/dist/transports/mcp/editor-integration-setup-url.js.map +1 -0
- package/dist/transports/mcp/format-tool-content.d.ts +20 -0
- package/dist/transports/mcp/format-tool-content.js +89 -0
- package/dist/transports/mcp/format-tool-content.js.map +1 -0
- package/dist/transports/mcp/instructions/index.d.ts +23 -0
- package/dist/transports/mcp/instructions/index.js +81 -0
- package/dist/transports/mcp/instructions/index.js.map +1 -0
- package/dist/transports/mcp/instructions/result.d.ts +18 -0
- package/dist/transports/mcp/instructions/result.js +58 -0
- package/dist/transports/mcp/instructions/result.js.map +1 -0
- package/dist/transports/mcp/instructions/tools/ask-user.d.ts +2 -0
- package/dist/transports/mcp/instructions/tools/ask-user.js +17 -0
- package/dist/transports/mcp/instructions/tools/ask-user.js.map +1 -0
- package/dist/transports/mcp/instructions/tools/check-app-progress.d.ts +3 -0
- package/dist/transports/mcp/instructions/tools/check-app-progress.js +75 -0
- package/dist/transports/mcp/instructions/tools/check-app-progress.js.map +1 -0
- package/dist/transports/mcp/instructions/tools/check-publish-progress.d.ts +3 -0
- package/dist/transports/mcp/instructions/tools/check-publish-progress.js +23 -0
- package/dist/transports/mcp/instructions/tools/check-publish-progress.js.map +1 -0
- package/dist/transports/mcp/instructions/tools/copy.d.ts +14 -0
- package/dist/transports/mcp/instructions/tools/copy.js +35 -0
- package/dist/transports/mcp/instructions/tools/copy.js.map +1 -0
- package/dist/transports/mcp/instructions/tools/create-integration.d.ts +4 -0
- package/dist/transports/mcp/instructions/tools/create-integration.js +41 -0
- package/dist/transports/mcp/instructions/tools/create-integration.js.map +1 -0
- package/dist/transports/mcp/instructions/tools/edit-app.d.ts +2 -0
- package/dist/transports/mcp/instructions/tools/edit-app.js +18 -0
- package/dist/transports/mcp/instructions/tools/edit-app.js.map +1 -0
- package/dist/transports/mcp/instructions/tools/get-app.d.ts +3 -0
- package/dist/transports/mcp/instructions/tools/get-app.js +47 -0
- package/dist/transports/mcp/instructions/tools/get-app.js.map +1 -0
- package/dist/transports/mcp/instructions/tools/get-integration-metadata.d.ts +2 -0
- package/dist/transports/mcp/instructions/tools/get-integration-metadata.js +13 -0
- package/dist/transports/mcp/instructions/tools/get-integration-metadata.js.map +1 -0
- package/dist/transports/mcp/instructions/tools/index.d.ts +7 -0
- package/dist/transports/mcp/instructions/tools/index.js +26 -0
- package/dist/transports/mcp/instructions/tools/index.js.map +1 -0
- package/dist/transports/mcp/instructions/tools/preview-app.d.ts +3 -0
- package/dist/transports/mcp/instructions/tools/preview-app.js +14 -0
- package/dist/transports/mcp/instructions/tools/preview-app.js.map +1 -0
- package/dist/transports/mcp/instructions/tools/publish-app.d.ts +3 -0
- package/dist/transports/mcp/instructions/tools/publish-app.js +23 -0
- package/dist/transports/mcp/instructions/tools/publish-app.js.map +1 -0
- package/dist/transports/mcp/instructions/tools/start-app.d.ts +2 -0
- package/dist/transports/mcp/instructions/tools/start-app.js +22 -0
- package/dist/transports/mcp/instructions/tools/start-app.js.map +1 -0
- package/dist/transports/mcp/instructions/tools/upload-artifact.d.ts +2 -0
- package/dist/transports/mcp/instructions/tools/upload-artifact.js +13 -0
- package/dist/transports/mcp/instructions/tools/upload-artifact.js.map +1 -0
- package/dist/transports/mcp/mcp-app-brand-css.d.ts +1 -0
- package/dist/transports/mcp/mcp-app-brand-css.js +180 -0
- package/dist/transports/mcp/mcp-app-brand-css.js.map +1 -0
- package/dist/transports/mcp/mount.d.ts +22 -0
- package/dist/transports/mcp/mount.js +1040 -0
- package/dist/transports/mcp/mount.js.map +1 -0
- package/dist/transports/mcp/native-browser-presence.d.ts +45 -0
- package/dist/transports/mcp/native-browser-presence.js +158 -0
- package/dist/transports/mcp/native-browser-presence.js.map +1 -0
- package/dist/transports/mcp/plan-approval.d.ts +38 -0
- package/dist/transports/mcp/plan-approval.js +175 -0
- package/dist/transports/mcp/plan-approval.js.map +1 -0
- package/dist/transports/mcp/progress-notifier.d.ts +39 -0
- package/dist/transports/mcp/progress-notifier.js +52 -0
- package/dist/transports/mcp/progress-notifier.js.map +1 -0
- package/dist/transports/mcp/session-directory.d.ts +7 -0
- package/dist/transports/mcp/session-directory.js +18 -0
- package/dist/transports/mcp/session-directory.js.map +1 -0
- package/dist/transports/mcp/tool-names.d.ts +2 -0
- package/dist/transports/mcp/tool-names.js +2 -0
- package/dist/transports/mcp/tool-names.js.map +1 -0
- package/package.json +78 -0
- package/skills/superblocks-build/SKILL.md +59 -0
- package/skills/superblocks-import/SKILL.md +88 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { loadModule, parseSync } from "libpg-query";
|
|
2
|
+
import { LakebasePlugin, PostgresPlugin, SnowflakePostgresPlugin, } from "@superblocksteam/shared";
|
|
3
|
+
const POSTGRES_PLUGIN_IDS = new Set([
|
|
4
|
+
LakebasePlugin.id,
|
|
5
|
+
PostgresPlugin.id,
|
|
6
|
+
SnowflakePostgresPlugin.id,
|
|
7
|
+
]);
|
|
8
|
+
const READ_STATEMENT_KEYS = new Set([
|
|
9
|
+
"SelectStmt",
|
|
10
|
+
"VariableShowStmt",
|
|
11
|
+
]);
|
|
12
|
+
const MUTATION_STATEMENT_KEYS = new Set([
|
|
13
|
+
"DeleteStmt",
|
|
14
|
+
"InsertStmt",
|
|
15
|
+
"MergeStmt",
|
|
16
|
+
"UpdateStmt",
|
|
17
|
+
]);
|
|
18
|
+
const FORBIDDEN_NESTED_KEYS = new Set([
|
|
19
|
+
...MUTATION_STATEMENT_KEYS,
|
|
20
|
+
"TypeCast",
|
|
21
|
+
"intoClause",
|
|
22
|
+
"lockingClause",
|
|
23
|
+
]);
|
|
24
|
+
const READ_ONLY_FUNCTION_NAMES = new Set([
|
|
25
|
+
"avg",
|
|
26
|
+
"count",
|
|
27
|
+
"max",
|
|
28
|
+
"min",
|
|
29
|
+
"sum",
|
|
30
|
+
]);
|
|
31
|
+
const MAX_AST_DEPTH = 1_000;
|
|
32
|
+
let parserReady;
|
|
33
|
+
function ensureParserLoaded() {
|
|
34
|
+
parserReady ??= loadModule().catch((error) => {
|
|
35
|
+
parserReady = undefined;
|
|
36
|
+
throw error;
|
|
37
|
+
});
|
|
38
|
+
return parserReady;
|
|
39
|
+
}
|
|
40
|
+
function carriesValue(value) {
|
|
41
|
+
if (value === null || value === undefined) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
return Array.isArray(value) ? value.length > 0 : true;
|
|
45
|
+
}
|
|
46
|
+
function containsKey(node, keys, depth = 0) {
|
|
47
|
+
if (depth > MAX_AST_DEPTH) {
|
|
48
|
+
throw new Error("SQL parse tree exceeds the safety limit");
|
|
49
|
+
}
|
|
50
|
+
if (Array.isArray(node)) {
|
|
51
|
+
return node.some((child) => containsKey(child, keys, depth + 1));
|
|
52
|
+
}
|
|
53
|
+
if (node === null || typeof node !== "object") {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return Object.entries(node).some(([key, value]) => (keys.has(key) && carriesValue(value)) ||
|
|
57
|
+
containsKey(value, keys, depth + 1));
|
|
58
|
+
}
|
|
59
|
+
function nodeField(node, key) {
|
|
60
|
+
if (node === null || typeof node !== "object") {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
const value = Reflect.get(node, key);
|
|
64
|
+
return value !== null && typeof value === "object" ? value : undefined;
|
|
65
|
+
}
|
|
66
|
+
function stringNodeValue(node) {
|
|
67
|
+
const stringNode = nodeField(node, "String");
|
|
68
|
+
if (!stringNode) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
const value = Reflect.get(stringNode, "sval");
|
|
72
|
+
return typeof value === "string" ? value : undefined;
|
|
73
|
+
}
|
|
74
|
+
function isAllowedReadFunction(call) {
|
|
75
|
+
const funcname = Reflect.get(call, "funcname");
|
|
76
|
+
if (!Array.isArray(funcname)) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
const names = [];
|
|
80
|
+
for (const part of funcname) {
|
|
81
|
+
const name = stringNodeValue(part);
|
|
82
|
+
if (name === undefined) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
names.push(name);
|
|
86
|
+
}
|
|
87
|
+
const functionName = names.at(-1)?.toLowerCase();
|
|
88
|
+
if (functionName === undefined) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
if (names.length > 1 &&
|
|
92
|
+
!(names.length === 2 && names[0]?.toLowerCase() === "pg_catalog")) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
return READ_ONLY_FUNCTION_NAMES.has(functionName);
|
|
96
|
+
}
|
|
97
|
+
function containsUnsupportedFunction(node, depth = 0) {
|
|
98
|
+
if (depth > MAX_AST_DEPTH) {
|
|
99
|
+
throw new Error("SQL parse tree exceeds the safety limit");
|
|
100
|
+
}
|
|
101
|
+
if (Array.isArray(node)) {
|
|
102
|
+
return node.some((child) => containsUnsupportedFunction(child, depth + 1));
|
|
103
|
+
}
|
|
104
|
+
if (node === null || typeof node !== "object") {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
const functionCall = nodeField(node, "FuncCall");
|
|
108
|
+
if (functionCall && !isAllowedReadFunction(functionCall)) {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
return Object.values(node).some((child) => containsUnsupportedFunction(child, depth + 1));
|
|
112
|
+
}
|
|
113
|
+
function explainRunsStatement(explain) {
|
|
114
|
+
const options = Reflect.get(explain, "options");
|
|
115
|
+
return (Array.isArray(options) &&
|
|
116
|
+
options.some((option) => {
|
|
117
|
+
const element = nodeField(option, "DefElem");
|
|
118
|
+
return element && Reflect.get(element, "defname") === "analyze";
|
|
119
|
+
}));
|
|
120
|
+
}
|
|
121
|
+
function isReadOnlyStatement(statement) {
|
|
122
|
+
const [statementKey] = Object.keys(statement);
|
|
123
|
+
if (statementKey === undefined) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
if (statementKey === "ExplainStmt") {
|
|
127
|
+
const explain = nodeField(statement, statementKey);
|
|
128
|
+
if (explain === undefined) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
if (!explainRunsStatement(explain)) {
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
const explained = nodeField(explain, "query");
|
|
135
|
+
return explained !== undefined && isReadOnlyStatement(explained);
|
|
136
|
+
}
|
|
137
|
+
return (READ_STATEMENT_KEYS.has(statementKey) &&
|
|
138
|
+
!containsKey(statement, FORBIDDEN_NESTED_KEYS) &&
|
|
139
|
+
!containsUnsupportedFunction(statement));
|
|
140
|
+
}
|
|
141
|
+
function extractSingleStatement(parsed) {
|
|
142
|
+
if (parsed === null || typeof parsed !== "object" || !("stmts" in parsed)) {
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
const { stmts } = parsed;
|
|
146
|
+
if (!Array.isArray(stmts) || stmts.length !== 1) {
|
|
147
|
+
return undefined;
|
|
148
|
+
}
|
|
149
|
+
return nodeField(stmts[0], "stmt");
|
|
150
|
+
}
|
|
151
|
+
export function supportsReadOnlyPostgresQuery(pluginId) {
|
|
152
|
+
return POSTGRES_PLUGIN_IDS.has(pluginId);
|
|
153
|
+
}
|
|
154
|
+
export async function isReadOnlyPostgresQuery(query) {
|
|
155
|
+
try {
|
|
156
|
+
await ensureParserLoaded();
|
|
157
|
+
const statement = extractSingleStatement(parseSync(query));
|
|
158
|
+
return statement !== undefined && isReadOnlyStatement(statement);
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=read-only-postgres-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-only-postgres-query.js","sourceRoot":"","sources":["../../src/integrations/read-only-postgres-query.ts"],"names":[],"mappings":"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"}
|
package/dist/main.d.ts
ADDED
package/dist/main.js
ADDED
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAEA,OAAO,CAAC,KAAK,CACX,4FAA4F,CAC7F,CAAC;AACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thin HTTP client for the Superblocks orchestrator / agent used by Gateway
|
|
3
|
+
* when Clark asks the editor peer to run APIs or load integration metadata.
|
|
4
|
+
*
|
|
5
|
+
* The base URL is discovered per session from Server `/users/me` agents
|
|
6
|
+
* (same filters as the browser), not operator-picked env. Scoped JWTs travel
|
|
7
|
+
* in `x-superblocks-authorization`, matching the editor's execute path.
|
|
8
|
+
*/
|
|
9
|
+
export declare class OrchestratorHttpError extends Error {
|
|
10
|
+
readonly status: number;
|
|
11
|
+
constructor(message: string, status: number);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Credential identifying who is asking, sent as `Authorization`.
|
|
15
|
+
*
|
|
16
|
+
* The orchestrator forwards this header verbatim when it fetches the app's
|
|
17
|
+
* code bundle from the Superblocks server, and that route authenticates it in
|
|
18
|
+
* its own right: a Superblocks JWT presented there is checked against
|
|
19
|
+
* `apps:view`, which a live-edit session's `apps:update` token does not carry.
|
|
20
|
+
* Sending the API key instead mirrors the browser editor, which puts its user
|
|
21
|
+
* session token here and keeps the scoped JWT to
|
|
22
|
+
* `x-superblocks-authorization`.
|
|
23
|
+
*/
|
|
24
|
+
type RequesterCredential = {
|
|
25
|
+
apiKey?: string;
|
|
26
|
+
};
|
|
27
|
+
export type SdkApiV3ExecuteInput = RequesterCredential & {
|
|
28
|
+
applicationId: string;
|
|
29
|
+
branchName?: string;
|
|
30
|
+
entryPoint: string;
|
|
31
|
+
exportName?: string;
|
|
32
|
+
inputs: Record<string, unknown>;
|
|
33
|
+
profileKey?: string;
|
|
34
|
+
scopedToken: string;
|
|
35
|
+
};
|
|
36
|
+
export type V2ExecuteInput = RequesterCredential & {
|
|
37
|
+
body: Record<string, unknown>;
|
|
38
|
+
profileKey?: string;
|
|
39
|
+
scopedToken: string;
|
|
40
|
+
};
|
|
41
|
+
export type MetadataInput = RequesterCredential & {
|
|
42
|
+
integrationId: string;
|
|
43
|
+
profileKey: string;
|
|
44
|
+
scopedToken: string;
|
|
45
|
+
stepConfiguration?: Record<string, unknown>;
|
|
46
|
+
};
|
|
47
|
+
export type OrchestratorClient = {
|
|
48
|
+
executeSdkApiV3(input: SdkApiV3ExecuteInput): Promise<unknown>;
|
|
49
|
+
executeV2Api(input: V2ExecuteInput): Promise<unknown>;
|
|
50
|
+
getMetadata(input: MetadataInput): Promise<Record<string, unknown>>;
|
|
51
|
+
};
|
|
52
|
+
export declare class HttpOrchestratorClient implements OrchestratorClient {
|
|
53
|
+
private readonly orchestratorUrl;
|
|
54
|
+
private readonly timeoutMs;
|
|
55
|
+
constructor(orchestratorUrl: string, timeoutMs?: number);
|
|
56
|
+
private baseUrl;
|
|
57
|
+
private post;
|
|
58
|
+
executeSdkApiV3(input: SdkApiV3ExecuteInput): Promise<unknown>;
|
|
59
|
+
executeV2Api(input: V2ExecuteInput): Promise<unknown>;
|
|
60
|
+
getMetadata(input: MetadataInput): Promise<Record<string, unknown>>;
|
|
61
|
+
}
|
|
62
|
+
export {};
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thin HTTP client for the Superblocks orchestrator / agent used by Gateway
|
|
3
|
+
* when Clark asks the editor peer to run APIs or load integration metadata.
|
|
4
|
+
*
|
|
5
|
+
* The base URL is discovered per session from Server `/users/me` agents
|
|
6
|
+
* (same filters as the browser), not operator-picked env. Scoped JWTs travel
|
|
7
|
+
* in `x-superblocks-authorization`, matching the editor's execute path.
|
|
8
|
+
*/
|
|
9
|
+
const SUPERBLOCKS_AUTHORIZATION_HEADER = "x-superblocks-authorization";
|
|
10
|
+
/** Protobuf `api.v1.ViewMode.EDIT` — same numeric the UI sends on v3/execute. */
|
|
11
|
+
const ORCHESTRATOR_VIEW_MODE_EDIT = 1;
|
|
12
|
+
const DEFAULT_TIMEOUT_MS = 120_000;
|
|
13
|
+
const MAX_DETAIL_LENGTH = 300;
|
|
14
|
+
function detailSuffix(body) {
|
|
15
|
+
if (!body.trim()) {
|
|
16
|
+
return "";
|
|
17
|
+
}
|
|
18
|
+
let detail = body;
|
|
19
|
+
try {
|
|
20
|
+
const parsed = JSON.parse(body);
|
|
21
|
+
if (parsed && typeof parsed === "object") {
|
|
22
|
+
const record = parsed;
|
|
23
|
+
const message = record.responseMeta?.message ?? record.message ?? record.error;
|
|
24
|
+
if (typeof message === "string" && message.trim()) {
|
|
25
|
+
detail = message;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Not JSON — fall back to the raw body.
|
|
31
|
+
}
|
|
32
|
+
return ` — ${detail.trim().slice(0, MAX_DETAIL_LENGTH)}`;
|
|
33
|
+
}
|
|
34
|
+
export class OrchestratorHttpError extends Error {
|
|
35
|
+
status;
|
|
36
|
+
constructor(message, status) {
|
|
37
|
+
super(message);
|
|
38
|
+
this.status = status;
|
|
39
|
+
this.name = "OrchestratorHttpError";
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export class HttpOrchestratorClient {
|
|
43
|
+
orchestratorUrl;
|
|
44
|
+
timeoutMs;
|
|
45
|
+
constructor(orchestratorUrl, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
46
|
+
this.orchestratorUrl = orchestratorUrl;
|
|
47
|
+
this.timeoutMs = timeoutMs;
|
|
48
|
+
}
|
|
49
|
+
baseUrl() {
|
|
50
|
+
return this.orchestratorUrl.replace(/\/$/, "");
|
|
51
|
+
}
|
|
52
|
+
async post(path, input) {
|
|
53
|
+
const url = new URL(`${this.baseUrl()}/${path.replace(/^\//, "")}`);
|
|
54
|
+
for (const [key, value] of Object.entries(input.query ?? {})) {
|
|
55
|
+
url.searchParams.set(key, value);
|
|
56
|
+
}
|
|
57
|
+
const headers = new Headers({
|
|
58
|
+
Authorization: `Bearer ${input.apiKey ?? input.scopedToken}`,
|
|
59
|
+
"Content-Type": "application/json",
|
|
60
|
+
[SUPERBLOCKS_AUTHORIZATION_HEADER]: `Bearer ${input.scopedToken}`,
|
|
61
|
+
});
|
|
62
|
+
if (input.profileKey) {
|
|
63
|
+
headers.set("x-superblocks-profile", input.profileKey);
|
|
64
|
+
}
|
|
65
|
+
let response;
|
|
66
|
+
try {
|
|
67
|
+
response = await fetch(url, {
|
|
68
|
+
body: JSON.stringify(input.body),
|
|
69
|
+
headers,
|
|
70
|
+
method: "POST",
|
|
71
|
+
signal: AbortSignal.timeout(this.timeoutMs),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
if (error instanceof Error && error.name === "TimeoutError") {
|
|
76
|
+
throw new Error(`Orchestrator ${path} timed out after ${this.timeoutMs}ms`);
|
|
77
|
+
}
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
if (!response.ok) {
|
|
81
|
+
if (response.status === 401) {
|
|
82
|
+
console.warn("gateway orchestrator auth rejected", {
|
|
83
|
+
path,
|
|
84
|
+
profileKey: input.profileKey,
|
|
85
|
+
status: response.status,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
throw new OrchestratorHttpError(`Orchestrator ${path} failed: ${response.status}${detailSuffix(await response.text().catch(() => ""))}`, response.status);
|
|
89
|
+
}
|
|
90
|
+
if (response.status === 204) {
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
const text = await response.text();
|
|
94
|
+
if (!text.trim()) {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
return JSON.parse(text);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return text;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async executeSdkApiV3(input) {
|
|
105
|
+
return this.post("v3/execute", {
|
|
106
|
+
apiKey: input.apiKey,
|
|
107
|
+
body: {
|
|
108
|
+
applicationId: input.applicationId,
|
|
109
|
+
entryPoint: input.entryPoint,
|
|
110
|
+
inputs: input.inputs,
|
|
111
|
+
viewMode: ORCHESTRATOR_VIEW_MODE_EDIT,
|
|
112
|
+
...(input.exportName ? { exportName: input.exportName } : {}),
|
|
113
|
+
...(input.branchName ? { branchName: input.branchName } : {}),
|
|
114
|
+
...(input.profileKey
|
|
115
|
+
? {
|
|
116
|
+
profile: {
|
|
117
|
+
key: input.profileKey,
|
|
118
|
+
name: input.profileKey,
|
|
119
|
+
},
|
|
120
|
+
}
|
|
121
|
+
: {}),
|
|
122
|
+
},
|
|
123
|
+
profileKey: input.profileKey,
|
|
124
|
+
scopedToken: input.scopedToken,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
async executeV2Api(input) {
|
|
128
|
+
return this.post("v2/execute", {
|
|
129
|
+
apiKey: input.apiKey,
|
|
130
|
+
body: input.body,
|
|
131
|
+
profileKey: input.profileKey,
|
|
132
|
+
query: {
|
|
133
|
+
eventType: "ON_CLARK_REQUEST",
|
|
134
|
+
viewMode: "editor",
|
|
135
|
+
},
|
|
136
|
+
scopedToken: input.scopedToken,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
async getMetadata(input) {
|
|
140
|
+
const raw = await this.post("v2/metadata", {
|
|
141
|
+
apiKey: input.apiKey,
|
|
142
|
+
body: {
|
|
143
|
+
integration: input.integrationId,
|
|
144
|
+
profile: { name: input.profileKey },
|
|
145
|
+
stepConfiguration: input.stepConfiguration ?? {},
|
|
146
|
+
},
|
|
147
|
+
profileKey: input.profileKey,
|
|
148
|
+
scopedToken: input.scopedToken,
|
|
149
|
+
});
|
|
150
|
+
if (raw && typeof raw === "object" && !Array.isArray(raw)) {
|
|
151
|
+
const record = raw;
|
|
152
|
+
if (record.data && typeof record.data === "object") {
|
|
153
|
+
return record.data;
|
|
154
|
+
}
|
|
155
|
+
return raw;
|
|
156
|
+
}
|
|
157
|
+
return {};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/orchestrator/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type EnsurePlaywrightChromiumOptions = {
|
|
2
|
+
/** Override for tests. Defaults to Playwright's Chromium executable path. */
|
|
3
|
+
chromiumExecutablePath?: string;
|
|
4
|
+
};
|
|
5
|
+
export type EnsurePlaywrightChromiumResult = {
|
|
6
|
+
/** True when this call ran an install. */
|
|
7
|
+
installed: boolean;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Probe only: true when Playwright Chromium is already on disk. Does not
|
|
11
|
+
* download anything. Used by `mcp setup` capture.mode and by capabilities
|
|
12
|
+
* that must fail closed instead of waiting on `chromium.launch()`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function playwrightChromiumPresent(options?: Pick<EnsurePlaywrightChromiumOptions, "chromiumExecutablePath">): Promise<boolean>;
|
|
15
|
+
/**
|
|
16
|
+
* Ensures Playwright Chromium is on disk. Intended for
|
|
17
|
+
* `mcp setup --with-screenshots`, not every `mcp serve` - corp laptops need a
|
|
18
|
+
* one-time download with network.
|
|
19
|
+
*/
|
|
20
|
+
export declare function ensurePlaywrightChromium(options?: EnsurePlaywrightChromiumOptions): Promise<EnsurePlaywrightChromiumResult>;
|
|
21
|
+
/**
|
|
22
|
+
* Clear error for `mcp serve` when setup was skipped.
|
|
23
|
+
*/
|
|
24
|
+
export declare function assertPlaywrightChromiumInstalled(options?: Pick<EnsurePlaywrightChromiumOptions, "chromiumExecutablePath">): Promise<void>;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { execFile as execFileCallback } from "node:child_process";
|
|
2
|
+
import { access } from "node:fs/promises";
|
|
3
|
+
import { createRequire } from "node:module";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
import { promisify } from "node:util";
|
|
6
|
+
import { chromium } from "playwright";
|
|
7
|
+
const execFile = promisify(execFileCallback);
|
|
8
|
+
const require = createRequire(import.meta.url);
|
|
9
|
+
async function pathExists(path) {
|
|
10
|
+
try {
|
|
11
|
+
await access(path);
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Probe only: true when Playwright Chromium is already on disk. Does not
|
|
20
|
+
* download anything. Used by `mcp setup` capture.mode and by capabilities
|
|
21
|
+
* that must fail closed instead of waiting on `chromium.launch()`.
|
|
22
|
+
*/
|
|
23
|
+
export async function playwrightChromiumPresent(options = {}) {
|
|
24
|
+
const executablePath = options.chromiumExecutablePath ?? chromium.executablePath();
|
|
25
|
+
return pathExists(executablePath);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Ensures Playwright Chromium is on disk. Intended for
|
|
29
|
+
* `mcp setup --with-screenshots`, not every `mcp serve` - corp laptops need a
|
|
30
|
+
* one-time download with network.
|
|
31
|
+
*/
|
|
32
|
+
export async function ensurePlaywrightChromium(options = {}) {
|
|
33
|
+
const executablePath = options.chromiumExecutablePath ?? chromium.executablePath();
|
|
34
|
+
if (await pathExists(executablePath)) {
|
|
35
|
+
return { installed: false };
|
|
36
|
+
}
|
|
37
|
+
const playwrightCli = join(dirname(require.resolve("playwright")), "cli.js");
|
|
38
|
+
try {
|
|
39
|
+
await execFile(process.execPath, [playwrightCli, "install", "chromium"]);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
43
|
+
throw new Error(`Failed to install Playwright Chromium (needed for preview screenshots). The bundled playwright install chromium command failed. Re-run: superblocks mcp setup --with-screenshots. (${detail})`);
|
|
44
|
+
}
|
|
45
|
+
if (!(await pathExists(executablePath))) {
|
|
46
|
+
throw new Error(`Playwright Chromium is still missing after install at ${executablePath}. Run: superblocks mcp setup --with-screenshots`);
|
|
47
|
+
}
|
|
48
|
+
return { installed: true };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Clear error for `mcp serve` when setup was skipped.
|
|
52
|
+
*/
|
|
53
|
+
export async function assertPlaywrightChromiumInstalled(options = {}) {
|
|
54
|
+
const executablePath = options.chromiumExecutablePath ?? chromium.executablePath();
|
|
55
|
+
if (await pathExists(executablePath)) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
throw new Error(`Playwright Chromium is not installed (looked for ${executablePath}). Run: superblocks mcp setup --with-screenshots`);
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=ensure-chromium.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensure-chromium.js","sourceRoot":"","sources":["../../src/playwright/ensure-chromium.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,QAAQ,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAAC;AAC7C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAY/C,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,UAA2E,EAAE;IAE7E,MAAM,cAAc,GAClB,OAAO,CAAC,sBAAsB,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;IAC9D,OAAO,UAAU,CAAC,cAAc,CAAC,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,UAA2C,EAAE;IAE7C,MAAM,cAAc,GAClB,OAAO,CAAC,sBAAsB,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;IAC9D,IAAI,MAAM,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAE7E,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,MAAM,IAAI,KAAK,CACb,sLAAsL,MAAM,GAAG,CAChM,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,yDAAyD,cAAc,iDAAiD,CACzH,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,UAA2E,EAAE;IAE7E,MAAM,cAAc,GAClB,OAAO,CAAC,sBAAsB,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;IAC9D,IAAI,MAAM,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,OAAO;IACT,CAAC;IACD,MAAM,IAAI,KAAK,CACb,oDAAoD,cAAc,kDAAkD,CACrH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Headless capture of a preview viewer URL for MCP image content.
|
|
3
|
+
*
|
|
4
|
+
* Best-effort: callers must succeed with URLs alone when this returns
|
|
5
|
+
* undefined. Output is capped for Claude Desktop tool-result size limits.
|
|
6
|
+
*/
|
|
7
|
+
export type PreviewScreenshot = {
|
|
8
|
+
dataBase64: string;
|
|
9
|
+
mimeType: "image/jpeg";
|
|
10
|
+
};
|
|
11
|
+
/** Soft cap on decoded bytes before base64 (~256 KiB). */
|
|
12
|
+
export declare const PREVIEW_SCREENSHOT_MAX_BYTES: number;
|
|
13
|
+
export type CapturePreviewScreenshot = (input: {
|
|
14
|
+
/**
|
|
15
|
+
* App-scoped bearer handed to the embed shell. Without it the shell falls
|
|
16
|
+
* back to Auth0 silent login, which has no session to find headless.
|
|
17
|
+
*/
|
|
18
|
+
embedToken?: string;
|
|
19
|
+
/**
|
|
20
|
+
* The origin {@link embedToken} belongs to - the control plane the session
|
|
21
|
+
* signed in to, which already receives this token on every API call. It is
|
|
22
|
+
* the only non-loopback origin allowed to be handed the token; unset means
|
|
23
|
+
* loopback only.
|
|
24
|
+
*/
|
|
25
|
+
trustedOrigin?: string;
|
|
26
|
+
url: string;
|
|
27
|
+
timeoutMs?: number;
|
|
28
|
+
}) => Promise<PreviewScreenshot | undefined>;
|
|
29
|
+
/**
|
|
30
|
+
* Whether a session bearer may be delivered to the page at `url`.
|
|
31
|
+
*
|
|
32
|
+
* Loopback is the user's own machine. The only remote origin allowed is the
|
|
33
|
+
* one the token was issued by, over https, so the token never reaches a host
|
|
34
|
+
* that does not already hold it.
|
|
35
|
+
*/
|
|
36
|
+
export declare function isTrustedEmbedOrigin(url: string, trustedOrigin?: string): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Page source that hands the deployed shell its bearer, and the whole reason a
|
|
39
|
+
* headless capture can paint a real app.
|
|
40
|
+
*
|
|
41
|
+
* `ui-deployed-shell` only accepts a bearer through an `INITIALIZE_EMBED`
|
|
42
|
+
* message from its embedder, and ~300ms after mount it gives up and tries
|
|
43
|
+
* Auth0 silent login instead — which has no session to find here. At top level
|
|
44
|
+
* the shell's embedder port has no parent window to check messages against, so
|
|
45
|
+
* it accepts one posted by the page itself.
|
|
46
|
+
*
|
|
47
|
+
* Delivery happens exactly once: each `INITIALIZE_EMBED` replaces the shell's
|
|
48
|
+
* auth state and restarts its bootstrap, so a repeating handshake would keep
|
|
49
|
+
* the app from ever settling.
|
|
50
|
+
*
|
|
51
|
+
* This is source text rather than a function handed to `addInitScript` because
|
|
52
|
+
* Playwright ships a function by serializing it, which drags in whatever
|
|
53
|
+
* helpers the bundler injected into its body (`__name` under tsx) and throws a
|
|
54
|
+
* ReferenceError in the page.
|
|
55
|
+
*
|
|
56
|
+
* The result is only ever evaluated as script source (Playwright forwards it
|
|
57
|
+
* to CDP `addScriptToEvaluateOnNewDocument`), never interpolated into HTML, so
|
|
58
|
+
* `JSON.stringify` is sufficient to contain the token. Putting it in a
|
|
59
|
+
* `<script>` element would not be — the token would need `</script>` escaped.
|
|
60
|
+
*/
|
|
61
|
+
export declare function buildEmbedHandshakeScript(token: string, expectedOrigin: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Captures a JPEG screenshot via Playwright when available. Soft-fails when
|
|
64
|
+
* Chromium is missing or the page never becomes ready — callers must still
|
|
65
|
+
* return preview URLs when this returns undefined.
|
|
66
|
+
*/
|
|
67
|
+
export declare const capturePreviewScreenshotWithPlaywright: CapturePreviewScreenshot;
|