freestyle-sandboxes 0.0.61 → 0.0.63
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/inde.d.cts +1 -0
- package/dist/inde.d.mts +1 -0
- package/dist/index.cjs +2 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.mts +1 -0
- package/dist/index.mjs +2 -1
- package/dist/react/dev-server/index..d.cts +2 -0
- package/dist/react/dev-server/index..d.mts +2 -0
- package/dist/react/dev-server/index.cjs +50 -9
- package/dist/react/dev-server/index.d.cts +2 -0
- package/dist/react/dev-server/index.d.mts +2 -0
- package/dist/react/dev-server/index.mjs +50 -9
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/react/dev-server/index.tsx +50 -7
package/dist/inde.d.cts
CHANGED
package/dist/inde.d.mts
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -816,7 +816,8 @@ ${response.error.message}`);
|
|
|
816
816
|
// @ts-ignore
|
|
817
817
|
mcpEphemeralUrl: response.data.mcpEphemeralUrl || response.data.url + "/mcp",
|
|
818
818
|
// @ts-ignore
|
|
819
|
-
ephemeralUrl: response.data.ephemeralUrl ?? response.data.url
|
|
819
|
+
ephemeralUrl: response.data.ephemeralUrl ?? response.data.url,
|
|
820
|
+
codeServerUrl: response.data.ephemeralUrl + "/__freestyle_code_server/?folder=/template"
|
|
820
821
|
};
|
|
821
822
|
}
|
|
822
823
|
}
|
package/dist/index.d.cts
CHANGED
package/dist/index.d.mts
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -814,7 +814,8 @@ ${response.error.message}`);
|
|
|
814
814
|
// @ts-ignore
|
|
815
815
|
mcpEphemeralUrl: response.data.mcpEphemeralUrl || response.data.url + "/mcp",
|
|
816
816
|
// @ts-ignore
|
|
817
|
-
ephemeralUrl: response.data.ephemeralUrl ?? response.data.url
|
|
817
|
+
ephemeralUrl: response.data.ephemeralUrl ?? response.data.url,
|
|
818
|
+
codeServerUrl: response.data.ephemeralUrl + "/__freestyle_code_server/?folder=/template"
|
|
818
819
|
};
|
|
819
820
|
}
|
|
820
821
|
}
|
|
@@ -14,6 +14,7 @@ declare function DefaultLoadingComponent({ installCommandRunning, }: {
|
|
|
14
14
|
devCommandRunning: boolean;
|
|
15
15
|
installCommandRunning: boolean;
|
|
16
16
|
serverStarting: boolean;
|
|
17
|
+
iframeLoading: boolean;
|
|
17
18
|
}): any;
|
|
18
19
|
declare function FreestyleDevServer({ loadingComponent, actions, repoId, }: {
|
|
19
20
|
repoId: string;
|
|
@@ -21,6 +22,7 @@ declare function FreestyleDevServer({ loadingComponent, actions, repoId, }: {
|
|
|
21
22
|
devCommandRunning: boolean;
|
|
22
23
|
installCommandRunning: boolean;
|
|
23
24
|
serverStarting: boolean;
|
|
25
|
+
iframeLoading: boolean;
|
|
24
26
|
}) => React.ReactNode;
|
|
25
27
|
actions: RequestDevServerActions;
|
|
26
28
|
}): any;
|
|
@@ -14,6 +14,7 @@ declare function DefaultLoadingComponent({ installCommandRunning, }: {
|
|
|
14
14
|
devCommandRunning: boolean;
|
|
15
15
|
installCommandRunning: boolean;
|
|
16
16
|
serverStarting: boolean;
|
|
17
|
+
iframeLoading: boolean;
|
|
17
18
|
}): any;
|
|
18
19
|
declare function FreestyleDevServer({ loadingComponent, actions, repoId, }: {
|
|
19
20
|
repoId: string;
|
|
@@ -21,6 +22,7 @@ declare function FreestyleDevServer({ loadingComponent, actions, repoId, }: {
|
|
|
21
22
|
devCommandRunning: boolean;
|
|
22
23
|
installCommandRunning: boolean;
|
|
23
24
|
serverStarting: boolean;
|
|
25
|
+
iframeLoading: boolean;
|
|
24
26
|
}) => React.ReactNode;
|
|
25
27
|
actions: RequestDevServerActions;
|
|
26
28
|
}): any;
|
|
@@ -62,37 +62,78 @@ function FreestyleDevServerInner({
|
|
|
62
62
|
return () => clearInterval(interval);
|
|
63
63
|
}, [data?.ephemeralUrl]);
|
|
64
64
|
const [wasLoaded, setWasLoaded] = React.useState(false);
|
|
65
|
+
const [iframeLoaded, setIframeLoaded] = React.useState(false);
|
|
65
66
|
React.useMemo(() => {
|
|
66
67
|
if (data?.devCommandRunning) {
|
|
67
68
|
setWasLoaded(true);
|
|
68
69
|
}
|
|
69
70
|
}, [isLoading, data?.devCommandRunning]);
|
|
71
|
+
React.useEffect(() => {
|
|
72
|
+
ref.current?.addEventListener("load", () => {
|
|
73
|
+
setIframeLoaded(true);
|
|
74
|
+
});
|
|
75
|
+
}, [ref]);
|
|
70
76
|
if (isLoading) {
|
|
71
77
|
return loadingComponent({
|
|
72
78
|
devCommandRunning: false,
|
|
73
79
|
installCommandRunning: false,
|
|
74
|
-
serverStarting: true
|
|
80
|
+
serverStarting: true,
|
|
81
|
+
iframeLoading: false
|
|
75
82
|
});
|
|
76
83
|
}
|
|
77
84
|
if (!data?.devCommandRunning && !wasLoaded) {
|
|
78
85
|
return loadingComponent({
|
|
79
86
|
devCommandRunning: data?.devCommandRunning ?? false,
|
|
80
87
|
installCommandRunning: data?.installCommandRunning ?? false,
|
|
81
|
-
serverStarting: false
|
|
88
|
+
serverStarting: false,
|
|
89
|
+
iframeLoading: false
|
|
82
90
|
});
|
|
83
91
|
}
|
|
84
92
|
return /* @__PURE__ */ React.createElement(
|
|
85
|
-
"
|
|
93
|
+
"div",
|
|
86
94
|
{
|
|
87
|
-
ref,
|
|
88
|
-
sandbox: "allow-scripts allow-same-origin allow-forms",
|
|
89
|
-
src: data.ephemeralUrl,
|
|
90
95
|
style: {
|
|
96
|
+
display: "grid",
|
|
97
|
+
gridTemplateRows: "1fr",
|
|
98
|
+
gridTemplateColumns: "1fr",
|
|
91
99
|
width: "100%",
|
|
92
|
-
height: "100%"
|
|
93
|
-
border: "none"
|
|
100
|
+
height: "100%"
|
|
94
101
|
}
|
|
95
|
-
}
|
|
102
|
+
},
|
|
103
|
+
/* @__PURE__ */ React.createElement(
|
|
104
|
+
"div",
|
|
105
|
+
{
|
|
106
|
+
style: {
|
|
107
|
+
width: "100%",
|
|
108
|
+
height: "100%",
|
|
109
|
+
border: "none",
|
|
110
|
+
gridColumn: "1 / -1",
|
|
111
|
+
gridRow: "1 / -1",
|
|
112
|
+
visibility: iframeLoaded ? "hidden" : "visible"
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
loadingComponent({
|
|
116
|
+
devCommandRunning: data?.devCommandRunning ?? false,
|
|
117
|
+
installCommandRunning: data?.installCommandRunning ?? false,
|
|
118
|
+
serverStarting: false,
|
|
119
|
+
iframeLoading: true
|
|
120
|
+
})
|
|
121
|
+
),
|
|
122
|
+
/* @__PURE__ */ React.createElement(
|
|
123
|
+
"iframe",
|
|
124
|
+
{
|
|
125
|
+
ref,
|
|
126
|
+
sandbox: "allow-scripts allow-same-origin allow-forms",
|
|
127
|
+
src: data.ephemeralUrl,
|
|
128
|
+
style: {
|
|
129
|
+
width: "100%",
|
|
130
|
+
height: "100%",
|
|
131
|
+
border: "none",
|
|
132
|
+
gridColumn: "1 / -1",
|
|
133
|
+
gridRow: "1 / -1"
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
)
|
|
96
137
|
);
|
|
97
138
|
}
|
|
98
139
|
|
|
@@ -14,6 +14,7 @@ declare function DefaultLoadingComponent({ installCommandRunning, }: {
|
|
|
14
14
|
devCommandRunning: boolean;
|
|
15
15
|
installCommandRunning: boolean;
|
|
16
16
|
serverStarting: boolean;
|
|
17
|
+
iframeLoading: boolean;
|
|
17
18
|
}): any;
|
|
18
19
|
declare function FreestyleDevServer({ loadingComponent, actions, repoId, }: {
|
|
19
20
|
repoId: string;
|
|
@@ -21,6 +22,7 @@ declare function FreestyleDevServer({ loadingComponent, actions, repoId, }: {
|
|
|
21
22
|
devCommandRunning: boolean;
|
|
22
23
|
installCommandRunning: boolean;
|
|
23
24
|
serverStarting: boolean;
|
|
25
|
+
iframeLoading: boolean;
|
|
24
26
|
}) => React.ReactNode;
|
|
25
27
|
actions: RequestDevServerActions;
|
|
26
28
|
}): any;
|
|
@@ -14,6 +14,7 @@ declare function DefaultLoadingComponent({ installCommandRunning, }: {
|
|
|
14
14
|
devCommandRunning: boolean;
|
|
15
15
|
installCommandRunning: boolean;
|
|
16
16
|
serverStarting: boolean;
|
|
17
|
+
iframeLoading: boolean;
|
|
17
18
|
}): any;
|
|
18
19
|
declare function FreestyleDevServer({ loadingComponent, actions, repoId, }: {
|
|
19
20
|
repoId: string;
|
|
@@ -21,6 +22,7 @@ declare function FreestyleDevServer({ loadingComponent, actions, repoId, }: {
|
|
|
21
22
|
devCommandRunning: boolean;
|
|
22
23
|
installCommandRunning: boolean;
|
|
23
24
|
serverStarting: boolean;
|
|
25
|
+
iframeLoading: boolean;
|
|
24
26
|
}) => React.ReactNode;
|
|
25
27
|
actions: RequestDevServerActions;
|
|
26
28
|
}): any;
|
|
@@ -60,37 +60,78 @@ function FreestyleDevServerInner({
|
|
|
60
60
|
return () => clearInterval(interval);
|
|
61
61
|
}, [data?.ephemeralUrl]);
|
|
62
62
|
const [wasLoaded, setWasLoaded] = React.useState(false);
|
|
63
|
+
const [iframeLoaded, setIframeLoaded] = React.useState(false);
|
|
63
64
|
React.useMemo(() => {
|
|
64
65
|
if (data?.devCommandRunning) {
|
|
65
66
|
setWasLoaded(true);
|
|
66
67
|
}
|
|
67
68
|
}, [isLoading, data?.devCommandRunning]);
|
|
69
|
+
React.useEffect(() => {
|
|
70
|
+
ref.current?.addEventListener("load", () => {
|
|
71
|
+
setIframeLoaded(true);
|
|
72
|
+
});
|
|
73
|
+
}, [ref]);
|
|
68
74
|
if (isLoading) {
|
|
69
75
|
return loadingComponent({
|
|
70
76
|
devCommandRunning: false,
|
|
71
77
|
installCommandRunning: false,
|
|
72
|
-
serverStarting: true
|
|
78
|
+
serverStarting: true,
|
|
79
|
+
iframeLoading: false
|
|
73
80
|
});
|
|
74
81
|
}
|
|
75
82
|
if (!data?.devCommandRunning && !wasLoaded) {
|
|
76
83
|
return loadingComponent({
|
|
77
84
|
devCommandRunning: data?.devCommandRunning ?? false,
|
|
78
85
|
installCommandRunning: data?.installCommandRunning ?? false,
|
|
79
|
-
serverStarting: false
|
|
86
|
+
serverStarting: false,
|
|
87
|
+
iframeLoading: false
|
|
80
88
|
});
|
|
81
89
|
}
|
|
82
90
|
return /* @__PURE__ */ React.createElement(
|
|
83
|
-
"
|
|
91
|
+
"div",
|
|
84
92
|
{
|
|
85
|
-
ref,
|
|
86
|
-
sandbox: "allow-scripts allow-same-origin allow-forms",
|
|
87
|
-
src: data.ephemeralUrl,
|
|
88
93
|
style: {
|
|
94
|
+
display: "grid",
|
|
95
|
+
gridTemplateRows: "1fr",
|
|
96
|
+
gridTemplateColumns: "1fr",
|
|
89
97
|
width: "100%",
|
|
90
|
-
height: "100%"
|
|
91
|
-
border: "none"
|
|
98
|
+
height: "100%"
|
|
92
99
|
}
|
|
93
|
-
}
|
|
100
|
+
},
|
|
101
|
+
/* @__PURE__ */ React.createElement(
|
|
102
|
+
"div",
|
|
103
|
+
{
|
|
104
|
+
style: {
|
|
105
|
+
width: "100%",
|
|
106
|
+
height: "100%",
|
|
107
|
+
border: "none",
|
|
108
|
+
gridColumn: "1 / -1",
|
|
109
|
+
gridRow: "1 / -1",
|
|
110
|
+
visibility: iframeLoaded ? "hidden" : "visible"
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
loadingComponent({
|
|
114
|
+
devCommandRunning: data?.devCommandRunning ?? false,
|
|
115
|
+
installCommandRunning: data?.installCommandRunning ?? false,
|
|
116
|
+
serverStarting: false,
|
|
117
|
+
iframeLoading: true
|
|
118
|
+
})
|
|
119
|
+
),
|
|
120
|
+
/* @__PURE__ */ React.createElement(
|
|
121
|
+
"iframe",
|
|
122
|
+
{
|
|
123
|
+
ref,
|
|
124
|
+
sandbox: "allow-scripts allow-same-origin allow-forms",
|
|
125
|
+
src: data.ephemeralUrl,
|
|
126
|
+
style: {
|
|
127
|
+
width: "100%",
|
|
128
|
+
height: "100%",
|
|
129
|
+
border: "none",
|
|
130
|
+
gridColumn: "1 / -1",
|
|
131
|
+
gridRow: "1 / -1"
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
)
|
|
94
135
|
);
|
|
95
136
|
}
|
|
96
137
|
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -852,6 +852,7 @@ export class FreestyleSandboxes {
|
|
|
852
852
|
(response.data as any).mcpEphemeralUrl || response.data.url + "/mcp",
|
|
853
853
|
// @ts-ignore
|
|
854
854
|
ephemeralUrl: response.data.ephemeralUrl ?? response.data.url,
|
|
855
|
+
codeServerUrl: response.data.ephemeralUrl + "/__freestyle_code_server/?folder=/template",
|
|
855
856
|
};
|
|
856
857
|
}
|
|
857
858
|
}
|
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
QueryClientProvider,
|
|
4
4
|
useQuery,
|
|
5
5
|
} from "@tanstack/react-query";
|
|
6
|
-
import { RequestDevServerActions } from "./types";
|
|
7
6
|
import React from "react";
|
|
7
|
+
import { RequestDevServerActions } from "./types";
|
|
8
8
|
|
|
9
9
|
const queryClient = new QueryClient();
|
|
10
10
|
|
|
@@ -14,6 +14,7 @@ export function DefaultLoadingComponent({
|
|
|
14
14
|
devCommandRunning: boolean;
|
|
15
15
|
installCommandRunning: boolean;
|
|
16
16
|
serverStarting: boolean;
|
|
17
|
+
iframeLoading: boolean;
|
|
17
18
|
}) {
|
|
18
19
|
let loadingText = "Starting container...";
|
|
19
20
|
|
|
@@ -48,6 +49,7 @@ export function FreestyleDevServer({
|
|
|
48
49
|
devCommandRunning: boolean;
|
|
49
50
|
installCommandRunning: boolean;
|
|
50
51
|
serverStarting: boolean;
|
|
52
|
+
iframeLoading: boolean;
|
|
51
53
|
}) => React.ReactNode;
|
|
52
54
|
actions: RequestDevServerActions;
|
|
53
55
|
}) {
|
|
@@ -72,6 +74,7 @@ function FreestyleDevServerInner({
|
|
|
72
74
|
devCommandRunning: boolean;
|
|
73
75
|
installCommandRunning: boolean;
|
|
74
76
|
serverStarting: boolean;
|
|
77
|
+
iframeLoading: boolean;
|
|
75
78
|
}) => React.ReactNode;
|
|
76
79
|
actions: RequestDevServerActions;
|
|
77
80
|
}) {
|
|
@@ -97,6 +100,7 @@ function FreestyleDevServerInner({
|
|
|
97
100
|
}, [data?.ephemeralUrl]);
|
|
98
101
|
|
|
99
102
|
const [wasLoaded, setWasLoaded] = React.useState(false);
|
|
103
|
+
const [iframeLoaded, setIframeLoaded] = React.useState(false);
|
|
100
104
|
|
|
101
105
|
React.useMemo(() => {
|
|
102
106
|
if (data?.devCommandRunning) {
|
|
@@ -104,11 +108,18 @@ function FreestyleDevServerInner({
|
|
|
104
108
|
}
|
|
105
109
|
}, [isLoading, data?.devCommandRunning]);
|
|
106
110
|
|
|
111
|
+
React.useEffect(() => {
|
|
112
|
+
ref.current?.addEventListener("load", () => {
|
|
113
|
+
setIframeLoaded(true);
|
|
114
|
+
});
|
|
115
|
+
}, [ref]);
|
|
116
|
+
|
|
107
117
|
if (isLoading) {
|
|
108
118
|
return loadingComponent({
|
|
109
119
|
devCommandRunning: false,
|
|
110
120
|
installCommandRunning: false,
|
|
111
121
|
serverStarting: true,
|
|
122
|
+
iframeLoading: false,
|
|
112
123
|
});
|
|
113
124
|
}
|
|
114
125
|
|
|
@@ -117,19 +128,51 @@ function FreestyleDevServerInner({
|
|
|
117
128
|
devCommandRunning: data?.devCommandRunning ?? false,
|
|
118
129
|
installCommandRunning: data?.installCommandRunning ?? false,
|
|
119
130
|
serverStarting: false,
|
|
131
|
+
iframeLoading: false,
|
|
120
132
|
});
|
|
121
133
|
}
|
|
122
134
|
|
|
123
135
|
return (
|
|
124
|
-
<
|
|
125
|
-
ref={ref}
|
|
126
|
-
sandbox="allow-scripts allow-same-origin allow-forms"
|
|
127
|
-
src={data.ephemeralUrl}
|
|
136
|
+
<div
|
|
128
137
|
style={{
|
|
138
|
+
display: "grid",
|
|
139
|
+
gridTemplateRows: "1fr",
|
|
140
|
+
gridTemplateColumns: "1fr",
|
|
129
141
|
width: "100%",
|
|
130
142
|
height: "100%",
|
|
131
|
-
border: "none",
|
|
132
143
|
}}
|
|
133
|
-
|
|
144
|
+
>
|
|
145
|
+
{
|
|
146
|
+
<div
|
|
147
|
+
style={{
|
|
148
|
+
width: "100%",
|
|
149
|
+
height: "100%",
|
|
150
|
+
border: "none",
|
|
151
|
+
gridColumn: "1 / -1",
|
|
152
|
+
gridRow: "1 / -1",
|
|
153
|
+
visibility: iframeLoaded ? "hidden" : "visible",
|
|
154
|
+
}}
|
|
155
|
+
>
|
|
156
|
+
{loadingComponent({
|
|
157
|
+
devCommandRunning: data?.devCommandRunning ?? false,
|
|
158
|
+
installCommandRunning: data?.installCommandRunning ?? false,
|
|
159
|
+
serverStarting: false,
|
|
160
|
+
iframeLoading: true,
|
|
161
|
+
})}
|
|
162
|
+
</div>
|
|
163
|
+
}
|
|
164
|
+
<iframe
|
|
165
|
+
ref={ref}
|
|
166
|
+
sandbox="allow-scripts allow-same-origin allow-forms"
|
|
167
|
+
src={data.ephemeralUrl}
|
|
168
|
+
style={{
|
|
169
|
+
width: "100%",
|
|
170
|
+
height: "100%",
|
|
171
|
+
border: "none",
|
|
172
|
+
gridColumn: "1 / -1",
|
|
173
|
+
gridRow: "1 / -1",
|
|
174
|
+
}}
|
|
175
|
+
/>
|
|
176
|
+
</div>
|
|
134
177
|
);
|
|
135
178
|
}
|