@supatype/cli 0.1.2 → 0.1.3
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/.turbo/turbo-build.log +1 -1
- package/.turbo/turbo-test.log +108 -105
- package/.turbo/turbo-typecheck.log +1 -1
- package/dist/commands/admin.d.ts +12 -0
- package/dist/commands/admin.d.ts.map +1 -1
- package/dist/commands/admin.js +97 -23
- package/dist/commands/admin.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +287 -182
- package/dist/commands/init.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +12 -1
- package/dist/config.js.map +1 -1
- package/dist/dev-compose.js +3 -3
- package/dist/dev-compose.js.map +1 -1
- package/dist/dev-log-bus.d.ts +1 -1
- package/dist/dev-log-bus.d.ts.map +1 -1
- package/dist/dev-log-bus.js +5 -3
- package/dist/dev-log-bus.js.map +1 -1
- package/dist/dev-ready-panel.d.ts +2 -0
- package/dist/dev-ready-panel.d.ts.map +1 -1
- package/dist/dev-ready-panel.js +18 -0
- package/dist/dev-ready-panel.js.map +1 -1
- package/dist/init-project-detect.d.ts +14 -0
- package/dist/init-project-detect.d.ts.map +1 -0
- package/dist/init-project-detect.js +89 -0
- package/dist/init-project-detect.js.map +1 -0
- package/dist/ui/dev/DevDashboard.d.ts.map +1 -1
- package/dist/ui/dev/DevDashboard.js +11 -4
- package/dist/ui/dev/DevDashboard.js.map +1 -1
- package/dist/ui/dev/DevReadyPanelView.d.ts +2 -1
- package/dist/ui/dev/DevReadyPanelView.d.ts.map +1 -1
- package/dist/ui/dev/DevReadyPanelView.js +21 -2
- package/dist/ui/dev/DevReadyPanelView.js.map +1 -1
- package/dist/ui/flows/FlowApp.d.ts.map +1 -1
- package/dist/ui/flows/FlowApp.js +3 -1
- package/dist/ui/flows/FlowApp.js.map +1 -1
- package/dist/ui/flows/prompt-fields.d.ts.map +1 -1
- package/dist/ui/flows/prompt-fields.js +9 -5
- package/dist/ui/flows/prompt-fields.js.map +1 -1
- package/dist/ui/runtime/run-clack-flow.d.ts.map +1 -1
- package/dist/ui/runtime/run-clack-flow.js +15 -3
- package/dist/ui/runtime/run-clack-flow.js.map +1 -1
- package/dist/ui/runtime/stdin-after-ink.d.ts +3 -0
- package/dist/ui/runtime/stdin-after-ink.d.ts.map +1 -0
- package/dist/ui/runtime/stdin-after-ink.js +16 -0
- package/dist/ui/runtime/stdin-after-ink.js.map +1 -0
- package/package.json +1 -1
- package/src/commands/admin.ts +135 -26
- package/src/commands/init.ts +360 -213
- package/src/config.ts +13 -1
- package/src/dev-compose.ts +4 -4
- package/src/dev-log-bus.ts +5 -3
- package/src/dev-ready-panel.ts +17 -0
- package/src/init-project-detect.ts +99 -0
- package/src/ui/dev/DevDashboard.tsx +14 -4
- package/src/ui/dev/DevReadyPanelView.tsx +76 -9
- package/src/ui/flows/FlowApp.tsx +3 -1
- package/src/ui/flows/prompt-fields.tsx +13 -7
- package/src/ui/runtime/run-clack-flow.tsx +16 -3
- package/src/ui/runtime/stdin-after-ink.ts +18 -0
- package/tests/admin-ensure.test.ts +80 -0
- package/tests/config.test.ts +19 -0
- package/tests/dev-ready-panel.test.ts +18 -1
- package/tests/init-project-detect.test.ts +53 -0
- package/tests/stdin-after-ink.test.ts +8 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -16,6 +16,9 @@ const TASK_COL_WIDTH = 22;
|
|
|
16
16
|
const MIN_WIDTH = 60;
|
|
17
17
|
const MIN_HEIGHT = 14;
|
|
18
18
|
const TAGLINE = "local development";
|
|
19
|
+
const CHROME_ABOVE_LOG = 2; // separator + keybindings
|
|
20
|
+
const CHROME_BELOW_LOG = 2; // footer separator + focused line
|
|
21
|
+
const MIN_LOG_ROWS = 3;
|
|
19
22
|
function truncate(text, width) {
|
|
20
23
|
if (width <= 0)
|
|
21
24
|
return "";
|
|
@@ -87,10 +90,14 @@ export function DevDashboard({ bus }) {
|
|
|
87
90
|
const focusedId = bus.getFocusedTaskId();
|
|
88
91
|
const taskIds = bus.getTaskOrder();
|
|
89
92
|
const readyPanel = bus.getReadyPanel();
|
|
90
|
-
const readyRows = readyPanel ? bus.readyPanelRowCount() : 0;
|
|
91
93
|
const logoRows = logoRowCount() + 1; // figlet + tagline
|
|
92
|
-
const
|
|
93
|
-
const
|
|
94
|
+
const promptRows = promptOpen ? 6 : 0;
|
|
95
|
+
const fullReadyRows = readyPanel ? bus.readyPanelRowCount(false) : 0;
|
|
96
|
+
const availableForPanel = rows - logoRows - CHROME_ABOVE_LOG - CHROME_BELOW_LOG - MIN_LOG_ROWS - promptRows;
|
|
97
|
+
const useCompactPanel = readyPanel !== null && fullReadyRows > availableForPanel;
|
|
98
|
+
const readyRows = readyPanel ? bus.readyPanelRowCount(useCompactPanel) : 0;
|
|
99
|
+
const chromeRows = logoRows + readyRows + CHROME_ABOVE_LOG + CHROME_BELOW_LOG + promptRows;
|
|
100
|
+
const logHeight = Math.max(0, rows - chromeRows);
|
|
94
101
|
const logWidth = cols - TASK_COL_WIDTH - 1;
|
|
95
102
|
useInput((input, key) => {
|
|
96
103
|
if (promptOpen)
|
|
@@ -129,7 +136,7 @@ export function DevDashboard({ bus }) {
|
|
|
129
136
|
const totalLines = taskLines.length;
|
|
130
137
|
const end = totalLines - scrollFromBottom;
|
|
131
138
|
const start = Math.max(0, end - logHeight);
|
|
132
|
-
return (_jsxs(Box, { flexDirection: "column", width: cols, height: rows, children: [_jsx(LogoWordmark, { maxWidth: cols, tagline: TAGLINE }), readyPanel ? _jsx(DevReadyPanelView, { panel: readyPanel, width: cols }) : null, _jsx(Text, { dimColor: true, children: "─".repeat(cols) }), _jsx(Text, { dimColor: true, children: truncate(" ↑/k ↓/j task u/d scroll g/G top/bottom Ctrl+C quit", cols) }), Array.from({ length: logHeight }, (_, row) => {
|
|
139
|
+
return (_jsxs(Box, { flexDirection: "column", width: cols, height: rows, children: [_jsx(LogoWordmark, { maxWidth: cols, tagline: TAGLINE }), readyPanel ? (_jsx(DevReadyPanelView, { panel: readyPanel, width: cols, compact: useCompactPanel })) : null, _jsx(Text, { dimColor: true, children: "─".repeat(cols) }), _jsx(Text, { dimColor: true, children: truncate(" ↑/k ↓/j task u/d scroll g/G top/bottom Ctrl+C quit", cols) }), Array.from({ length: logHeight }, (_, row) => {
|
|
133
140
|
const taskId = taskIds[row];
|
|
134
141
|
const task = taskId ? bus.getTask(taskId) : undefined;
|
|
135
142
|
let left = " ".repeat(TASK_COL_WIDTH);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevDashboard.js","sourceRoot":"","sources":["../../../src/ui/dev/DevDashboard.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAClD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAGhE,MAAM,cAAc,GAAG,EAAE,CAAA;AACzB,MAAM,SAAS,GAAG,EAAE,CAAA;AACpB,MAAM,UAAU,GAAG,EAAE,CAAA;AACrB,MAAM,OAAO,GAAG,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"DevDashboard.js","sourceRoot":"","sources":["../../../src/ui/dev/DevDashboard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { DevReadyPanel } from "../../dev-ready-panel.js";
|
|
3
|
-
export declare function DevReadyPanelView({ panel, width, }: {
|
|
3
|
+
export declare function DevReadyPanelView({ panel, width, compact, }: {
|
|
4
4
|
panel: DevReadyPanel;
|
|
5
5
|
width: number;
|
|
6
|
+
compact?: boolean;
|
|
6
7
|
}): React.ReactElement;
|
|
7
8
|
//# sourceMappingURL=DevReadyPanelView.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevReadyPanelView.d.ts","sourceRoot":"","sources":["../../../src/ui/dev/DevReadyPanelView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"DevReadyPanelView.d.ts","sourceRoot":"","sources":["../../../src/ui/dev/DevReadyPanelView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AA6E7D,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,KAAK,EACL,OAAe,GAChB,EAAE;IACD,KAAK,EAAE,aAAa,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,GAAG,KAAK,CAAC,YAAY,CA8CrB"}
|
|
@@ -21,9 +21,28 @@ function shortenKey(key, width) {
|
|
|
21
21
|
function panelInnerWidth(outerWidth) {
|
|
22
22
|
return Math.max(20, outerWidth - 4);
|
|
23
23
|
}
|
|
24
|
-
|
|
24
|
+
function ServiceLinkRow({ label, url, innerWidth, labelWidth, }) {
|
|
25
|
+
return (_jsxs(Text, { wrap: "truncate", children: [_jsx(Text, { dimColor: true, children: truncate(label.padEnd(labelWidth), labelWidth) }), _jsx(Text, { color: theme.info, children: truncate(url, Math.max(8, innerWidth - labelWidth)) })] }));
|
|
26
|
+
}
|
|
27
|
+
function CompactLinks({ panel, innerWidth }) {
|
|
28
|
+
const gateway = panel.links.find((link) => link.label === "API")?.url ?? panel.links[0]?.url ?? "";
|
|
29
|
+
const studio = panel.links.find((link) => link.label === "Studio")?.url ??
|
|
30
|
+
panel.links[panel.links.length - 1]?.url ??
|
|
31
|
+
"";
|
|
32
|
+
const otherPaths = panel.links
|
|
33
|
+
.filter((link) => link.label !== "API" && link.label !== "Studio")
|
|
34
|
+
.map((link) => {
|
|
35
|
+
const prefix = `${link.url.split("://")[0] ?? "http"}://`;
|
|
36
|
+
const path = link.url.slice(link.url.indexOf("://") + 3);
|
|
37
|
+
const slash = path.indexOf("/");
|
|
38
|
+
return slash >= 0 ? path.slice(slash) : link.url;
|
|
39
|
+
})
|
|
40
|
+
.join(", ");
|
|
41
|
+
return (_jsxs(_Fragment, { children: [_jsxs(Text, { wrap: "truncate", children: [_jsx(Text, { dimColor: true, children: "Gateway".padEnd(14) }), _jsx(Text, { color: theme.info, children: truncate(gateway, innerWidth - 14) })] }), otherPaths ? (_jsx(Text, { dimColor: true, wrap: "truncate", children: truncate(`Also: ${otherPaths}`, innerWidth) })) : null, studio ? (_jsxs(Text, { wrap: "truncate", children: [_jsx(Text, { dimColor: true, children: "Studio".padEnd(14) }), _jsx(Text, { color: theme.info, children: truncate(studio, innerWidth - 14) })] })) : null] }));
|
|
42
|
+
}
|
|
43
|
+
export function DevReadyPanelView({ panel, width, compact = false, }) {
|
|
25
44
|
const innerWidth = panelInnerWidth(width);
|
|
26
45
|
const labelWidth = 14;
|
|
27
|
-
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, borderStyle: "round", borderColor: theme.brand, paddingX: 1, children: [_jsx(Text, { bold: true, color: theme.brand, children: truncate(panel.title, innerWidth) }),
|
|
46
|
+
return (_jsxs(Box, { flexDirection: "column", flexShrink: 0, width: width, marginBottom: 1, borderStyle: "round", borderColor: theme.brand, paddingX: 1, children: [_jsx(Text, { bold: true, color: theme.brand, children: truncate(panel.title, innerWidth) }), compact ? (_jsx(CompactLinks, { panel: panel, innerWidth: innerWidth })) : (panel.links.map((link) => (_jsx(ServiceLinkRow, { label: link.label, url: link.url, innerWidth: innerWidth, labelWidth: labelWidth }, `${link.label}-${link.url}`)))), panel.hints?.map((hint) => (_jsx(Text, { dimColor: true, wrap: "truncate", children: truncate(hint, innerWidth) }, hint))), panel.anonKey ? (_jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: "API keys (local dev)" }), _jsx(Text, { dimColor: true, wrap: "truncate", children: `anon ${shortenKey(panel.anonKey, innerWidth - 5)}` }), panel.serviceRoleKey ? (_jsx(Text, { dimColor: true, wrap: "truncate", children: `svc ${shortenKey(panel.serviceRoleKey, innerWidth - 5)}` })) : null] })) : null] }));
|
|
28
47
|
}
|
|
29
48
|
//# sourceMappingURL=DevReadyPanelView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevReadyPanelView.js","sourceRoot":"","sources":["../../../src/ui/dev/DevReadyPanelView.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAE/B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,SAAS,QAAQ,CAAC,IAAY,EAAE,KAAa;IAC3C,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,CAAA;IACzB,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK;QAAE,OAAO,IAAI,CAAA;IACrC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IAC3C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,CAAA;AACvC,CAAC;AAED,SAAS,UAAU,CAAC,GAAW,EAAE,KAAa;IAC5C,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK;QAAE,OAAO,GAAG,CAAA;IACnC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC5C,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACvD,CAAC;AAED,qEAAqE;AACrE,SAAS,eAAe,CAAC,UAAkB;IACzC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAChC,KAAK,EACL,KAAK,
|
|
1
|
+
{"version":3,"file":"DevReadyPanelView.js","sourceRoot":"","sources":["../../../src/ui/dev/DevReadyPanelView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowApp.d.ts","sourceRoot":"","sources":["../../../src/ui/flows/FlowApp.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAA;AAU1D,OAAO,KAAK,EAAoB,cAAc,EAAe,MAAM,YAAY,CAAA;AAE/E,UAAU,YAAY;IACpB,IAAI,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAA;CAC3C;AAED,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,YAAY,GAAG,KAAK,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"FlowApp.d.ts","sourceRoot":"","sources":["../../../src/ui/flows/FlowApp.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAA;AAU1D,OAAO,KAAK,EAAoB,cAAc,EAAe,MAAM,YAAY,CAAA;AAE/E,UAAU,YAAY;IACpB,IAAI,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAA;CAC3C;AAED,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,YAAY,GAAG,KAAK,CAAC,YAAY,CAoDlE"}
|
package/dist/ui/flows/FlowApp.js
CHANGED
|
@@ -26,6 +26,8 @@ export function FlowApp({ bind }) {
|
|
|
26
26
|
},
|
|
27
27
|
waitForPrompt(spec) {
|
|
28
28
|
return new Promise((resolve) => {
|
|
29
|
+
setLogLines([]);
|
|
30
|
+
setSpinner(null);
|
|
29
31
|
setPrompt(spec);
|
|
30
32
|
setPromptResolver(() => (value) => {
|
|
31
33
|
setPrompt(null);
|
|
@@ -37,6 +39,6 @@ export function FlowApp({ bind }) {
|
|
|
37
39
|
};
|
|
38
40
|
bind(controller);
|
|
39
41
|
}, [bind]);
|
|
40
|
-
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(FlowLogoHeader, {}), _jsx(FlowLogPane, { lines: logLines }), spinner ? _jsx(FlowSpinnerLine, { message: spinner }) : null, prompt && promptResolver ? (_jsx(PromptPanel, { children: _jsx(ActiveFlowPromptView, { prompt: prompt, onSubmit: (value) => promptResolver(value), onCancel: () => promptResolver(CLACK_CANCEL) }) })) : null] }));
|
|
42
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(FlowLogoHeader, {}), prompt ? null : _jsx(FlowLogPane, { lines: logLines }), spinner ? _jsx(FlowSpinnerLine, { message: spinner }) : null, prompt && promptResolver ? (_jsx(PromptPanel, { children: _jsx(ActiveFlowPromptView, { prompt: prompt, onSubmit: (value) => promptResolver(value), onCancel: () => promptResolver(CLACK_CANCEL) }) })) : null] }));
|
|
41
43
|
}
|
|
42
44
|
//# sourceMappingURL=FlowApp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowApp.js","sourceRoot":"","sources":["../../../src/ui/flows/FlowApp.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC1D,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,cAAc,EACd,eAAe,GAChB,MAAM,oBAAoB,CAAA;AAO3B,MAAM,UAAU,OAAO,CAAC,EAAE,IAAI,EAAgB;IAC5C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAgB,EAAE,CAAC,CAAA;IAC3D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAC3D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAA0B,IAAI,CAAC,CAAA;IACnE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAoC,IAAI,CAAC,CAAA;IAC7F,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAE3B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,CAAC,OAAO;YAAE,OAAM;QACzB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;QACpB,MAAM,UAAU,GAAmB;YACjC,SAAS,CAAC,KAAK,EAAE,IAAI;gBACnB,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YACrD,CAAC;YACD,WAAW,CAAC,IAAI;gBACd,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YAC9D,CAAC;YACD,UAAU,CAAC,OAAO;gBAChB,UAAU,CAAC,OAAO,CAAC,CAAA;YACrB,CAAC;YACD,aAAa,CAAI,IAAsB;gBACrC,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,EAAE;oBAChC,SAAS,CAAC,IAAI,CAAC,CAAA;oBACf,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,KAAc,EAAE,EAAE;wBACzC,SAAS,CAAC,IAAI,CAAC,CAAA;wBACf,iBAAiB,CAAC,IAAI,CAAC,CAAA;wBACvB,OAAO,CAAC,KAAU,CAAC,CAAA;oBACrB,CAAC,CAAC,CAAA;gBACJ,CAAC,CAAC,CAAA;YACJ,CAAC;SACF,CAAA;QACD,IAAI,CAAC,UAAU,CAAC,CAAA;IAClB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aACrC,KAAC,cAAc,KAAG,
|
|
1
|
+
{"version":3,"file":"FlowApp.js","sourceRoot":"","sources":["../../../src/ui/flows/FlowApp.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-fields.d.ts","sourceRoot":"","sources":["../../../src/ui/flows/prompt-fields.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAOvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE/D,QAAA,MAAM,cAAc,KAAK,CAAA;AAUzB,wBAAgB,cAAc,IAAI,KAAK,CAAC,YAAY,CAEnD;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,CAUnF;AAED,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,CAEpF;AAED,UAAU,kBAAkB;IAC1B,IAAI,EAAE,OAAO,CAAC,gBAAgB,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC,CAAA;IACpD,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CACnC;AAED,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,kBAAkB,GAAG,KAAK,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"prompt-fields.d.ts","sourceRoot":"","sources":["../../../src/ui/flows/prompt-fields.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAOvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE/D,QAAA,MAAM,cAAc,KAAK,CAAA;AAUzB,wBAAgB,cAAc,IAAI,KAAK,CAAC,YAAY,CAEnD;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,CAUnF;AAED,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,CAEpF;AAED,UAAU,kBAAkB;IAC1B,IAAI,EAAE,OAAO,CAAC,gBAAgB,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC,CAAA;IACpD,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CACnC;AAED,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,kBAAkB,GAAG,KAAK,CAAC,YAAY,CA0CxF;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,OAAO,CAAC,gBAAgB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAED,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAiC5F;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,OAAO,CAAC,gBAAgB,EAAE;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC,CAAA;IACrD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CAmBpG;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,OAAO,CAAC,gBAAgB,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAA;IACnD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,iBAAiB,GAAG,KAAK,CAAC,YAAY,CAUhG;AAED,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,gBAAgB,CAAA;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAClC,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB,GAAG,KAAK,CAAC,YAAY,CAarB;AAED,OAAO,EAAE,cAAc,EAAE,CAAA"}
|
|
@@ -30,18 +30,22 @@ export function FlowSpinnerLine({ message }) {
|
|
|
30
30
|
export function ConfirmPrompt({ spec, onSubmit }) {
|
|
31
31
|
const [value, setValue] = useState(spec.initialValue);
|
|
32
32
|
useInput((input, key) => {
|
|
33
|
+
if (input === "y" || input === "Y") {
|
|
34
|
+
onSubmit(true);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (input === "n" || input === "N") {
|
|
38
|
+
onSubmit(false);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
33
41
|
if (key.leftArrow || input === "h")
|
|
34
42
|
setValue(false);
|
|
35
43
|
if (key.rightArrow || input === "l")
|
|
36
44
|
setValue(true);
|
|
37
|
-
if (input === "y" || input === "Y")
|
|
38
|
-
setValue(true);
|
|
39
|
-
if (input === "n" || input === "N")
|
|
40
|
-
setValue(false);
|
|
41
45
|
if (key.return)
|
|
42
46
|
onSubmit(value);
|
|
43
47
|
});
|
|
44
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: theme.brand, children: spec.message }), _jsxs(Text, { children: [value ? (_jsx(Text, { color: theme.
|
|
48
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: theme.brand, children: spec.message }), _jsxs(Text, { children: [value ? (_jsx(Text, { color: theme.brand, bold: true, children: "Yes" })) : (_jsx(Text, { dimColor: true, children: "Yes" })), _jsx(Text, { dimColor: true, children: " / " }), !value ? (_jsx(Text, { color: theme.brand, bold: true, children: "No" })) : (_jsx(Text, { dimColor: true, children: "No" })), _jsx(Text, { dimColor: true, children: " \u2014 y/n, \u2190/\u2192, enter" })] })] }));
|
|
45
49
|
}
|
|
46
50
|
export function TextPrompt({ spec, onSubmit, onCancel }) {
|
|
47
51
|
const [value, setValue] = useState(spec.defaultValue ?? "");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-fields.js","sourceRoot":"","sources":["../../../src/ui/flows/prompt-fields.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAA;AACzC,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGnC,MAAM,cAAc,GAAG,EAAE,CAAA;AAEzB,SAAS,gBAAgB,CAAC,KAA2B;IACnD,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;IAChD,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;IAClD,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAA;IACpD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAA;IACxD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,KAAC,YAAY,KAAG,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAA4B;IAC7D,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,YACxC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAC1B,KAAC,IAAI,OAAgD,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,YAC9E,IAAI,CAAC,IAAI,IADD,GAAG,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAExC,CACR,CAAC,GACE,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAE,OAAO,EAAuB;IAC9D,OAAO,KAAC,WAAW,IAAC,OAAO,EAAE,OAAO,GAAI,CAAA;AAC1C,CAAC;AAOD,MAAM,UAAU,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAsB;IAClE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAErD,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,
|
|
1
|
+
{"version":3,"file":"prompt-fields.js","sourceRoot":"","sources":["../../../src/ui/flows/prompt-fields.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-clack-flow.d.ts","sourceRoot":"","sources":["../../../src/ui/runtime/run-clack-flow.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"run-clack-flow.d.ts","sourceRoot":"","sources":["../../../src/ui/runtime/run-clack-flow.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AA0B/D,+EAA+E;AAC/E,wBAAsB,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAqBpF;AAaD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -4,6 +4,7 @@ import { render } from "ink";
|
|
|
4
4
|
import { isInteractive } from "../interactive.js";
|
|
5
5
|
import { createClackApi } from "../clack-api.js";
|
|
6
6
|
import { FlowApp } from "../flows/FlowApp.js";
|
|
7
|
+
import { restoreStdinAfterInk } from "./stdin-after-ink.js";
|
|
7
8
|
function RunClackFlowRoot({ run, onComplete, onError }) {
|
|
8
9
|
const started = useRef(false);
|
|
9
10
|
return (_jsx(FlowApp, { bind: (controller) => {
|
|
@@ -22,13 +23,24 @@ export async function runClackFlow(run) {
|
|
|
22
23
|
}
|
|
23
24
|
return new Promise((resolve, reject) => {
|
|
24
25
|
const instance = render(_jsx(RunClackFlowRoot, { run: run, onComplete: (value) => {
|
|
25
|
-
instance
|
|
26
|
+
teardownInk(instance);
|
|
26
27
|
resolve(value);
|
|
27
28
|
}, onError: (err) => {
|
|
28
|
-
instance
|
|
29
|
+
teardownInk(instance);
|
|
29
30
|
reject(err);
|
|
30
|
-
} }));
|
|
31
|
+
} }), { patchConsole: false });
|
|
31
32
|
});
|
|
32
33
|
}
|
|
34
|
+
function teardownInk(instance) {
|
|
35
|
+
try {
|
|
36
|
+
instance.clear();
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// ignore — terminal may already be reset
|
|
40
|
+
}
|
|
41
|
+
instance.unmount();
|
|
42
|
+
instance.cleanup();
|
|
43
|
+
restoreStdinAfterInk();
|
|
44
|
+
}
|
|
33
45
|
export { CLACK_CANCEL } from "./cancel.js";
|
|
34
46
|
//# sourceMappingURL=run-clack-flow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-clack-flow.js","sourceRoot":"","sources":["../../../src/ui/runtime/run-clack-flow.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"run-clack-flow.js","sourceRoot":"","sources":["../../../src/ui/runtime/run-clack-flow.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAE,MAAM,EAAiB,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAiB,MAAM,iBAAiB,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAQ3D,SAAS,gBAAgB,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAyB;IAC3E,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAE7B,OAAO,CACL,KAAC,OAAO,IACN,IAAI,EAAE,CAAC,UAAU,EAAE,EAAE;YACnB,IAAI,OAAO,CAAC,OAAO;gBAAE,OAAM;YAC3B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAA;YACtB,KAAK,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;iBACjC,IAAI,CAAC,UAAU,CAAC;iBAChB,KAAK,CAAC,OAAO,CAAC,CAAA;QACnB,CAAC,GACD,CACH,CAAA;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,YAAY,CAAI,GAAkC;IACtE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;IACzD,CAAC;IAED,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,MAAM,CACrB,KAAC,gBAAgB,IACf,GAAG,EAAE,GAA0C,EAC/C,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;gBACpB,WAAW,CAAC,QAAQ,CAAC,CAAA;gBACrB,OAAO,CAAC,KAAU,CAAC,CAAA;YACrB,CAAC,EACD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACf,WAAW,CAAC,QAAQ,CAAC,CAAA;gBACrB,MAAM,CAAC,GAAG,CAAC,CAAA;YACb,CAAC,GACD,EACF,EAAE,YAAY,EAAE,KAAK,EAAE,CACxB,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,QAAkB;IACrC,IAAI,CAAC;QACH,QAAQ,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;IAC3C,CAAC;IACD,QAAQ,CAAC,OAAO,EAAE,CAAA;IAClB,QAAQ,CAAC,OAAO,EAAE,CAAA;IAClB,oBAAoB,EAAE,CAAA;AACxB,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdin-after-ink.d.ts","sourceRoot":"","sources":["../../../src/ui/runtime/stdin-after-ink.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,wBAAgB,oBAAoB,IAAI,IAAI,CAgB3C"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Restore stdin after Ink unmount so one-shot commands (init, link) can exit cleanly. */
|
|
2
|
+
export function restoreStdinAfterInk() {
|
|
3
|
+
if (!process.stdin.isTTY)
|
|
4
|
+
return;
|
|
5
|
+
const stdin = process.stdin;
|
|
6
|
+
try {
|
|
7
|
+
if (stdin.isRaw)
|
|
8
|
+
stdin.setRawMode?.(false);
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
// ignore — stdin may already be restored
|
|
12
|
+
}
|
|
13
|
+
stdin.resume();
|
|
14
|
+
process.stdout.write("\n");
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=stdin-after-ink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdin-after-ink.js","sourceRoot":"","sources":["../../../src/ui/runtime/stdin-after-ink.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAM;IAEhC,MAAM,KAAK,GAAG,OAAO,CAAC,KAGrB,CAAA;IAED,IAAI,CAAC;QACH,IAAI,KAAK,CAAC,KAAK;YAAE,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAA;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;IAC3C,CAAC;IAED,KAAK,CAAC,MAAM,EAAE,CAAA;IACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC"}
|
package/package.json
CHANGED
package/src/commands/admin.ts
CHANGED
|
@@ -17,6 +17,8 @@ import {
|
|
|
17
17
|
} from "../project-config.js"
|
|
18
18
|
import { readEnvValue, upsertEnvFile } from "../env-file.js"
|
|
19
19
|
import { hasEngineOverride } from "../binary-cache.js"
|
|
20
|
+
import { readDevSessionLock } from "../dev-session-lock.js"
|
|
21
|
+
import { composeProjectName } from "../self-host-compose.js"
|
|
20
22
|
import { confirm as uiConfirm } from "../ui/confirm.js"
|
|
21
23
|
import { error, info, plain } from "../ui/messages.js"
|
|
22
24
|
import { promptPassword, promptText } from "../ui/prompts.js"
|
|
@@ -30,6 +32,34 @@ export const ADMIN_PASSWORD_ENV = "SUPATYPE_ADMIN_PASSWORD"
|
|
|
30
32
|
|
|
31
33
|
const BCRYPT_ROUNDS = 10
|
|
32
34
|
|
|
35
|
+
/** GoTrue scopes users to the nil instance id in single-tenant/self-host mode. */
|
|
36
|
+
export const GOTRUE_NIL_INSTANCE_ID = "00000000-0000-0000-0000-000000000000"
|
|
37
|
+
|
|
38
|
+
/** Audience claim used by GoTrue when looking up users (matches GOTRUE_JWT_AUD in compose). */
|
|
39
|
+
export function gotrueJwtAud(cwd: string): string {
|
|
40
|
+
return readEnvValue(cwd, "GOTRUE_JWT_AUD", "authenticated")
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
type DbQuery = (sql: string, params?: unknown[]) => Promise<QueryResult>
|
|
44
|
+
type AuthConfirmedColumn = "email_confirmed_at" | "confirmed_at"
|
|
45
|
+
|
|
46
|
+
/** Prefer GoTrue's column when migrated; fall back to postgres init `confirmed_at`. */
|
|
47
|
+
export async function resolveAuthConfirmedAtColumn(query: DbQuery): Promise<AuthConfirmedColumn> {
|
|
48
|
+
const result = await query(
|
|
49
|
+
`SELECT column_name
|
|
50
|
+
FROM information_schema.columns
|
|
51
|
+
WHERE table_schema = 'auth'
|
|
52
|
+
AND table_name = 'users'
|
|
53
|
+
AND column_name IN ('email_confirmed_at', 'confirmed_at')
|
|
54
|
+
ORDER BY CASE column_name WHEN 'email_confirmed_at' THEN 0 ELSE 1 END
|
|
55
|
+
LIMIT 1`,
|
|
56
|
+
)
|
|
57
|
+
const row = result.rows[0] as { column_name?: string; value?: string } | undefined
|
|
58
|
+
const name = row?.column_name ?? row?.value
|
|
59
|
+
if (name === "email_confirmed_at" || name === "confirmed_at") return name
|
|
60
|
+
return "confirmed_at"
|
|
61
|
+
}
|
|
62
|
+
|
|
33
63
|
export interface EnsureFirstAdminOptions {
|
|
34
64
|
email?: string
|
|
35
65
|
password?: string
|
|
@@ -39,8 +69,6 @@ export interface EnsureFirstAdminOptions {
|
|
|
39
69
|
compose?: { project: string; composePath: string }
|
|
40
70
|
}
|
|
41
71
|
|
|
42
|
-
type DbQuery = (sql: string, params?: unknown[]) => Promise<QueryResult>
|
|
43
|
-
|
|
44
72
|
export function registerAdmin(program: Command): void {
|
|
45
73
|
const adminCmd = program
|
|
46
74
|
.command("admin")
|
|
@@ -81,20 +109,33 @@ export function registerAdmin(program: Command): void {
|
|
|
81
109
|
|
|
82
110
|
info(`Creating admin user: ${email} (role: ${role})...`)
|
|
83
111
|
|
|
84
|
-
const
|
|
85
|
-
|
|
112
|
+
const compose =
|
|
113
|
+
opts.connection === undefined ? resolveDockerComposeContext(cwd, config) : null
|
|
86
114
|
|
|
87
115
|
try {
|
|
88
|
-
|
|
89
|
-
|
|
116
|
+
if (compose) {
|
|
117
|
+
await createAdminUser(
|
|
118
|
+
(sql, params) => composeExecQuery(cwd, compose, sql, params),
|
|
119
|
+
email,
|
|
120
|
+
password,
|
|
121
|
+
role,
|
|
122
|
+
{ cwd },
|
|
123
|
+
)
|
|
124
|
+
} else {
|
|
125
|
+
const pg = await importPg()
|
|
126
|
+
const pool = new pg.Pool({ connectionString: connection, max: 2 })
|
|
127
|
+
try {
|
|
128
|
+
await ensureAuthUsersTable(pool)
|
|
129
|
+
await createAdminUser(pool, email, password, role, { cwd })
|
|
130
|
+
} finally {
|
|
131
|
+
await pool.end()
|
|
132
|
+
}
|
|
133
|
+
}
|
|
90
134
|
info("This user can now log in to the admin panel at /admin")
|
|
91
135
|
} catch (err) {
|
|
92
|
-
const message =
|
|
93
|
-
err instanceof Error ? err.message : "Unknown error"
|
|
136
|
+
const message = err instanceof Error ? err.message : "Unknown error"
|
|
94
137
|
error(`Failed to create admin user: ${message}`)
|
|
95
138
|
process.exit(1)
|
|
96
|
-
} finally {
|
|
97
|
-
await pool.end()
|
|
98
139
|
}
|
|
99
140
|
},
|
|
100
141
|
)
|
|
@@ -252,8 +293,9 @@ export async function ensureFirstAdminUserForProject(
|
|
|
252
293
|
(sql, params) => composeExecQuery(root, merged.compose!, sql, params),
|
|
253
294
|
merged,
|
|
254
295
|
)
|
|
255
|
-
} catch {
|
|
256
|
-
|
|
296
|
+
} catch (err) {
|
|
297
|
+
const message = err instanceof Error ? err.message : String(err)
|
|
298
|
+
error(`Could not ensure first admin user: ${message}`)
|
|
257
299
|
}
|
|
258
300
|
return
|
|
259
301
|
}
|
|
@@ -288,7 +330,10 @@ async function ensureFirstAdminWithQuery(
|
|
|
288
330
|
|
|
289
331
|
const role = options.role ?? "admin"
|
|
290
332
|
try {
|
|
291
|
-
await createAdminUser(query, credentials.email, credentials.password, role, {
|
|
333
|
+
await createAdminUser(query, credentials.email, credentials.password, role, {
|
|
334
|
+
quiet: true,
|
|
335
|
+
cwd,
|
|
336
|
+
})
|
|
292
337
|
} catch (err) {
|
|
293
338
|
const message = err instanceof Error ? err.message : String(err)
|
|
294
339
|
error(`Failed to create admin user: ${message}`)
|
|
@@ -365,7 +410,7 @@ async function createAdminUser(
|
|
|
365
410
|
email: string,
|
|
366
411
|
password: string,
|
|
367
412
|
role: string,
|
|
368
|
-
opts: { quiet?: boolean } = {},
|
|
413
|
+
opts: { quiet?: boolean; aud?: string; cwd?: string } = {},
|
|
369
414
|
): Promise<{ id: string; email: string }> {
|
|
370
415
|
const query: DbQuery =
|
|
371
416
|
typeof (db as Pool).query === "function"
|
|
@@ -373,9 +418,15 @@ async function createAdminUser(
|
|
|
373
418
|
: (db as DbQuery)
|
|
374
419
|
|
|
375
420
|
const normalized = email.toLowerCase()
|
|
376
|
-
const
|
|
377
|
-
|
|
378
|
-
|
|
421
|
+
const aud = opts.aud ?? (opts.cwd ? gotrueJwtAud(opts.cwd) : "authenticated")
|
|
422
|
+
const existing = await query(
|
|
423
|
+
`SELECT id FROM auth.users
|
|
424
|
+
WHERE instance_id = $1::uuid
|
|
425
|
+
AND LOWER(email) = $2
|
|
426
|
+
AND aud = $3
|
|
427
|
+
AND is_sso_user = false`,
|
|
428
|
+
[GOTRUE_NIL_INSTANCE_ID, normalized, aud],
|
|
429
|
+
)
|
|
379
430
|
if (existing.rows.length > 0) {
|
|
380
431
|
throw new Error(`User with email "${email}" already exists.`)
|
|
381
432
|
}
|
|
@@ -387,18 +438,27 @@ async function createAdminUser(
|
|
|
387
438
|
providers: ["email"],
|
|
388
439
|
})
|
|
389
440
|
const userMetadata = JSON.stringify({})
|
|
441
|
+
const confirmedCol = await resolveAuthConfirmedAtColumn(query)
|
|
390
442
|
|
|
391
443
|
const result = await query(
|
|
392
444
|
`INSERT INTO auth.users (
|
|
393
|
-
|
|
445
|
+
instance_id, id, aud, role, email, encrypted_password,
|
|
394
446
|
raw_app_meta_data, raw_user_meta_data,
|
|
395
|
-
|
|
447
|
+
${confirmedCol},
|
|
448
|
+
confirmation_token, recovery_token,
|
|
449
|
+
email_change_token_new, email_change, email_change_token_current,
|
|
450
|
+
phone_change, phone_change_token, reauthentication_token,
|
|
451
|
+
is_sso_user, is_anonymous,
|
|
452
|
+
created_at, updated_at
|
|
396
453
|
) VALUES (
|
|
397
|
-
gen_random_uuid(), $
|
|
398
|
-
$
|
|
399
|
-
now(),
|
|
454
|
+
$1::uuid, gen_random_uuid(), $2, 'authenticated', $3, $4,
|
|
455
|
+
$5::jsonb, $6::jsonb,
|
|
456
|
+
now(),
|
|
457
|
+
'', '', '', '', '', '', '', '',
|
|
458
|
+
false, false,
|
|
459
|
+
now(), now()
|
|
400
460
|
) RETURNING id, email`,
|
|
401
|
-
[normalized, passwordHash, appMetadata, userMetadata],
|
|
461
|
+
[GOTRUE_NIL_INSTANCE_ID, aud, normalized, passwordHash, appMetadata, userMetadata],
|
|
402
462
|
)
|
|
403
463
|
|
|
404
464
|
const user = result.rows[0] as { id: string; email: string }
|
|
@@ -417,7 +477,7 @@ async function ensureAuthUsersTable(pool: Pool): Promise<void> {
|
|
|
417
477
|
|
|
418
478
|
CREATE TABLE IF NOT EXISTS auth.users (
|
|
419
479
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
420
|
-
instance_id UUID,
|
|
480
|
+
instance_id UUID DEFAULT '00000000-0000-0000-0000-000000000000'::uuid,
|
|
421
481
|
aud TEXT DEFAULT 'authenticated',
|
|
422
482
|
role TEXT DEFAULT 'authenticated',
|
|
423
483
|
email TEXT UNIQUE,
|
|
@@ -430,7 +490,13 @@ async function ensureAuthUsersTable(pool: Pool): Promise<void> {
|
|
|
430
490
|
confirmation_token TEXT DEFAULT '',
|
|
431
491
|
recovery_token TEXT DEFAULT '',
|
|
432
492
|
email_change_token_new TEXT DEFAULT '',
|
|
433
|
-
|
|
493
|
+
email_change_token_current TEXT DEFAULT '',
|
|
494
|
+
email_change TEXT DEFAULT '',
|
|
495
|
+
phone_change TEXT DEFAULT '',
|
|
496
|
+
phone_change_token TEXT DEFAULT '',
|
|
497
|
+
reauthentication_token TEXT DEFAULT '',
|
|
498
|
+
is_sso_user BOOLEAN NOT NULL DEFAULT false,
|
|
499
|
+
is_anonymous BOOLEAN NOT NULL DEFAULT false
|
|
434
500
|
);
|
|
435
501
|
`)
|
|
436
502
|
}
|
|
@@ -455,6 +521,33 @@ async function hasAdminUsers(query: DbQuery): Promise<boolean> {
|
|
|
455
521
|
return count > 0
|
|
456
522
|
}
|
|
457
523
|
|
|
524
|
+
/** Postgres password for compose `exec psql` (db is not published to the host). */
|
|
525
|
+
export function composePostgresPassword(cwd: string): string {
|
|
526
|
+
return readEnvValue(cwd, "POSTGRES_PASSWORD", "postgres")
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
function resolveDockerComposeContext(
|
|
530
|
+
cwd: string,
|
|
531
|
+
config: SupatypeProjectConfig,
|
|
532
|
+
): { project: string; composePath: string } | null {
|
|
533
|
+
if (resolveRuntimeProvider(config) !== "docker" || hasEngineOverride(config)) {
|
|
534
|
+
return null
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
const session = readDevSessionLock(cwd)
|
|
538
|
+
if (session?.composeProject && session.composePath && existsSync(session.composePath)) {
|
|
539
|
+
return { project: session.composeProject, composePath: session.composePath }
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
const composePath = resolve(cwd, ".supatype/self-host/docker-compose.yml")
|
|
543
|
+
if (!existsSync(composePath)) return null
|
|
544
|
+
|
|
545
|
+
return {
|
|
546
|
+
project: composeProjectName(config.project?.name ?? "project"),
|
|
547
|
+
composePath,
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
|
|
458
551
|
function composeExecQuery(
|
|
459
552
|
cwd: string,
|
|
460
553
|
compose: { project: string; composePath: string },
|
|
@@ -463,6 +556,7 @@ function composeExecQuery(
|
|
|
463
556
|
): Promise<QueryResult> {
|
|
464
557
|
const db = readEnvValue(cwd, "POSTGRES_DB", "supatype")
|
|
465
558
|
const user = readEnvValue(cwd, "POSTGRES_USER", "supatype_admin")
|
|
559
|
+
const pgPassword = composePostgresPassword(cwd)
|
|
466
560
|
const envFile = join(cwd, ".env")
|
|
467
561
|
const composeDir = dirname(compose.composePath)
|
|
468
562
|
const args = [
|
|
@@ -477,7 +571,20 @@ function composeExecQuery(
|
|
|
477
571
|
if (existsSync(envFile)) args.push("--env-file", envFile)
|
|
478
572
|
|
|
479
573
|
if (params.length === 0) {
|
|
480
|
-
args.push(
|
|
574
|
+
args.push(
|
|
575
|
+
"exec",
|
|
576
|
+
"-T",
|
|
577
|
+
"-e",
|
|
578
|
+
`PGPASSWORD=${pgPassword}`,
|
|
579
|
+
"db",
|
|
580
|
+
"psql",
|
|
581
|
+
"-U",
|
|
582
|
+
user,
|
|
583
|
+
"-d",
|
|
584
|
+
db,
|
|
585
|
+
"-tAc",
|
|
586
|
+
sql,
|
|
587
|
+
)
|
|
481
588
|
const result = spawnSync("docker", args, { cwd: composeDir, encoding: "utf8" })
|
|
482
589
|
if (result.status !== 0) {
|
|
483
590
|
throw new Error((result.stderr ?? result.stdout ?? "compose psql failed").trim())
|
|
@@ -504,6 +611,8 @@ function composeExecQuery(
|
|
|
504
611
|
args.push(
|
|
505
612
|
"exec",
|
|
506
613
|
"-T",
|
|
614
|
+
"-e",
|
|
615
|
+
`PGPASSWORD=${pgPassword}`,
|
|
507
616
|
"db",
|
|
508
617
|
"psql",
|
|
509
618
|
"-U",
|