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 CHANGED
@@ -191,6 +191,7 @@ declare class FreestyleSandboxes {
191
191
  }): Promise<{
192
192
  mcpEphemeralUrl: any;
193
193
  ephemeralUrl: string;
194
+ codeServerUrl: string;
194
195
  url: string;
195
196
  isNew: boolean;
196
197
  devCommandRunning: boolean;
package/dist/inde.d.mts CHANGED
@@ -191,6 +191,7 @@ declare class FreestyleSandboxes {
191
191
  }): Promise<{
192
192
  mcpEphemeralUrl: any;
193
193
  ephemeralUrl: string;
194
+ codeServerUrl: string;
194
195
  url: string;
195
196
  isNew: boolean;
196
197
  devCommandRunning: boolean;
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
@@ -191,6 +191,7 @@ declare class FreestyleSandboxes {
191
191
  }): Promise<{
192
192
  mcpEphemeralUrl: any;
193
193
  ephemeralUrl: string;
194
+ codeServerUrl: string;
194
195
  url: string;
195
196
  isNew: boolean;
196
197
  devCommandRunning: boolean;
package/dist/index.d.mts CHANGED
@@ -191,6 +191,7 @@ declare class FreestyleSandboxes {
191
191
  }): Promise<{
192
192
  mcpEphemeralUrl: any;
193
193
  ephemeralUrl: string;
194
+ codeServerUrl: string;
194
195
  url: string;
195
196
  isNew: boolean;
196
197
  devCommandRunning: boolean;
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
- "iframe",
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
- "iframe",
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "freestyle-sandboxes",
3
- "version": "0.0.61",
3
+ "version": "0.0.63",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
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
- <iframe
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
  }