@10play/expo-air 0.1.0 → 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/app.plugin.js ADDED
@@ -0,0 +1,2 @@
1
+ // Re-export the compiled config plugin
2
+ module.exports = require('./plugin/build/index.js');
@@ -1,4 +1,4 @@
1
- import type { StyleProp, ViewStyle } from 'react-native';
1
+ import type { StyleProp, ViewStyle } from "react-native";
2
2
  export type OnLoadEventPayload = {
3
3
  url: string;
4
4
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoAir.types.js","sourceRoot":"","sources":["../src/ExpoAir.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { StyleProp, ViewStyle } from 'react-native';\n\nexport type OnLoadEventPayload = {\n url: string;\n};\n\nexport type ExpoAirModuleEvents = {\n onChange: (params: ChangeEventPayload) => void;\n onPress: () => void;\n onExpand: () => void;\n onCollapse: () => void;\n onDragEnd: (params: { x: number; y: number }) => void;\n};\n\nexport type ChangeEventPayload = {\n value: string;\n};\n\nexport type ExpoAirViewProps = {\n url: string;\n onLoad: (event: { nativeEvent: OnLoadEventPayload }) => void;\n style?: StyleProp<ViewStyle>;\n};\n"]}
1
+ {"version":3,"file":"ExpoAir.types.js","sourceRoot":"","sources":["../src/ExpoAir.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { StyleProp, ViewStyle } from \"react-native\";\n\nexport type OnLoadEventPayload = {\n url: string;\n};\n\nexport type ExpoAirModuleEvents = {\n onChange: (params: ChangeEventPayload) => void;\n onPress: () => void;\n onExpand: () => void;\n onCollapse: () => void;\n onDragEnd: (params: { x: number; y: number }) => void;\n};\n\nexport type ChangeEventPayload = {\n value: string;\n};\n\nexport type ExpoAirViewProps = {\n url: string;\n onLoad: (event: { nativeEvent: OnLoadEventPayload }) => void;\n style?: StyleProp<ViewStyle>;\n};\n"]}
@@ -1,5 +1,5 @@
1
- import { NativeModule } from 'expo';
2
- import { ExpoAirModuleEvents } from './ExpoAir.types';
1
+ import { NativeModule } from "expo";
2
+ import { ExpoAirModuleEvents } from "./ExpoAir.types";
3
3
  declare class ExpoAirModule extends NativeModule<ExpoAirModuleEvents> {
4
4
  PI: number;
5
5
  hello(): string;
@@ -1,4 +1,4 @@
1
- import { requireNativeModule } from 'expo';
1
+ import { requireNativeModule } from "expo";
2
2
  // This call loads the native module object from the JSI.
3
- export default requireNativeModule('ExpoAir');
3
+ export default requireNativeModule("ExpoAir");
4
4
  //# sourceMappingURL=ExpoAirModule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoAirModule.js","sourceRoot":"","sources":["../src/ExpoAirModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAczD,yDAAyD;AACzD,eAAe,mBAAmB,CAAgB,SAAS,CAAC,CAAC","sourcesContent":["import { NativeModule, requireNativeModule } from 'expo';\n\nimport { ExpoAirModuleEvents } from './ExpoAir.types';\n\ndeclare class ExpoAirModule extends NativeModule<ExpoAirModuleEvents> {\n PI: number;\n hello(): string;\n setValueAsync(value: string): Promise<void>;\n show(options?: { size?: number; color?: string }): void;\n hide(): void;\n expand(): void;\n collapse(): void;\n}\n\n// This call loads the native module object from the JSI.\nexport default requireNativeModule<ExpoAirModule>('ExpoAir');\n"]}
1
+ {"version":3,"file":"ExpoAirModule.js","sourceRoot":"","sources":["../src/ExpoAirModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAczD,yDAAyD;AACzD,eAAe,mBAAmB,CAAgB,SAAS,CAAC,CAAC","sourcesContent":["import { NativeModule, requireNativeModule } from \"expo\";\n\nimport { ExpoAirModuleEvents } from \"./ExpoAir.types\";\n\ndeclare class ExpoAirModule extends NativeModule<ExpoAirModuleEvents> {\n PI: number;\n hello(): string;\n setValueAsync(value: string): Promise<void>;\n show(options?: { size?: number; color?: string }): void;\n hide(): void;\n expand(): void;\n collapse(): void;\n}\n\n// This call loads the native module object from the JSI.\nexport default requireNativeModule<ExpoAirModule>(\"ExpoAir\");\n"]}
@@ -1,5 +1,5 @@
1
- import { NativeModule } from 'expo';
2
- import { ExpoAirModuleEvents } from './ExpoAir.types';
1
+ import { NativeModule } from "expo";
2
+ import { ExpoAirModuleEvents } from "./ExpoAir.types";
3
3
  declare class ExpoAirModule extends NativeModule<ExpoAirModuleEvents> {
4
4
  PI: number;
5
5
  setValueAsync(value: string): Promise<void>;
@@ -1,12 +1,12 @@
1
- import { registerWebModule, NativeModule } from 'expo';
1
+ import { registerWebModule, NativeModule } from "expo";
2
2
  class ExpoAirModule extends NativeModule {
3
3
  PI = Math.PI;
4
4
  async setValueAsync(value) {
5
- this.emit('onChange', { value });
5
+ this.emit("onChange", { value });
6
6
  }
7
7
  hello() {
8
- return 'Hello world! 👋';
8
+ return "Hello world! 👋";
9
9
  }
10
10
  }
11
- export default registerWebModule(ExpoAirModule, 'ExpoAirModule');
11
+ export default registerWebModule(ExpoAirModule, "ExpoAirModule");
12
12
  //# sourceMappingURL=ExpoAirModule.web.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoAirModule.web.js","sourceRoot":"","sources":["../src/ExpoAirModule.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAIvD,MAAM,aAAc,SAAQ,YAAiC;IAC3D,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACb,KAAK,CAAC,aAAa,CAAC,KAAa;QAC/B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACnC,CAAC;IACD,KAAK;QACH,OAAO,iBAAiB,CAAC;IAC3B,CAAC;CACF;AAED,eAAe,iBAAiB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC","sourcesContent":["import { registerWebModule, NativeModule } from 'expo';\n\nimport { ExpoAirModuleEvents } from './ExpoAir.types';\n\nclass ExpoAirModule extends NativeModule<ExpoAirModuleEvents> {\n PI = Math.PI;\n async setValueAsync(value: string): Promise<void> {\n this.emit('onChange', { value });\n }\n hello() {\n return 'Hello world! 👋';\n }\n}\n\nexport default registerWebModule(ExpoAirModule, 'ExpoAirModule');\n"]}
1
+ {"version":3,"file":"ExpoAirModule.web.js","sourceRoot":"","sources":["../src/ExpoAirModule.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAIvD,MAAM,aAAc,SAAQ,YAAiC;IAC3D,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACb,KAAK,CAAC,aAAa,CAAC,KAAa;QAC/B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACnC,CAAC;IACD,KAAK;QACH,OAAO,iBAAiB,CAAC;IAC3B,CAAC;CACF;AAED,eAAe,iBAAiB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC","sourcesContent":["import { registerWebModule, NativeModule } from \"expo\";\n\nimport { ExpoAirModuleEvents } from \"./ExpoAir.types\";\n\nclass ExpoAirModule extends NativeModule<ExpoAirModuleEvents> {\n PI = Math.PI;\n async setValueAsync(value: string): Promise<void> {\n this.emit(\"onChange\", { value });\n }\n hello() {\n return \"Hello world! 👋\";\n }\n}\n\nexport default registerWebModule(ExpoAirModule, \"ExpoAirModule\");\n"]}
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
2
- import { ExpoAirViewProps } from './ExpoAir.types';
1
+ import * as React from "react";
2
+ import { ExpoAirViewProps } from "./ExpoAir.types";
3
3
  export default function ExpoAirView(props: ExpoAirViewProps): React.JSX.Element;
4
4
  //# sourceMappingURL=ExpoAirView.d.ts.map
@@ -1,6 +1,6 @@
1
- import { requireNativeView } from 'expo';
2
- import * as React from 'react';
3
- const NativeView = requireNativeView('ExpoAir');
1
+ import { requireNativeView } from "expo";
2
+ import * as React from "react";
3
+ const NativeView = requireNativeView("ExpoAir");
4
4
  export default function ExpoAirView(props) {
5
5
  return <NativeView {...props}/>;
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoAirView.js","sourceRoot":"","sources":["../src/ExpoAirView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,UAAU,GACd,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAE/B,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAuB;IACzD,OAAO,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EAAG,CAAC;AACnC,CAAC","sourcesContent":["import { requireNativeView } from 'expo';\nimport * as React from 'react';\n\nimport { ExpoAirViewProps } from './ExpoAir.types';\n\nconst NativeView: React.ComponentType<ExpoAirViewProps> =\n requireNativeView('ExpoAir');\n\nexport default function ExpoAirView(props: ExpoAirViewProps) {\n return <NativeView {...props} />;\n}\n"]}
1
+ {"version":3,"file":"ExpoAirView.js","sourceRoot":"","sources":["../src/ExpoAirView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,UAAU,GACd,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAE/B,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAuB;IACzD,OAAO,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EAAG,CAAC;AACnC,CAAC","sourcesContent":["import { requireNativeView } from \"expo\";\nimport * as React from \"react\";\n\nimport { ExpoAirViewProps } from \"./ExpoAir.types\";\n\nconst NativeView: React.ComponentType<ExpoAirViewProps> =\n requireNativeView(\"ExpoAir\");\n\nexport default function ExpoAirView(props: ExpoAirViewProps) {\n return <NativeView {...props} />;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
2
- import { ExpoAirViewProps } from './ExpoAir.types';
1
+ import * as React from "react";
2
+ import { ExpoAirViewProps } from "./ExpoAir.types";
3
3
  export default function ExpoAirView(props: ExpoAirViewProps): React.JSX.Element;
4
4
  //# sourceMappingURL=ExpoAirView.web.d.ts.map
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import * as React from "react";
2
2
  export default function ExpoAirView(props) {
3
3
  return (<div>
4
4
  <iframe style={{ flex: 1 }} src={props.url} onLoad={() => props.onLoad({ nativeEvent: { url: props.url } })}/>
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoAirView.web.js","sourceRoot":"","sources":["../src/ExpoAirView.web.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAuB;IACzD,OAAO,CACL,CAAC,GAAG,CACF;MAAA,CAAC,MAAM,CACL,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CACnB,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CACf,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAEpE;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC","sourcesContent":["import * as React from 'react';\n\nimport { ExpoAirViewProps } from './ExpoAir.types';\n\nexport default function ExpoAirView(props: ExpoAirViewProps) {\n return (\n <div>\n <iframe\n style={{ flex: 1 }}\n src={props.url}\n onLoad={() => props.onLoad({ nativeEvent: { url: props.url } })}\n />\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"ExpoAirView.web.js","sourceRoot":"","sources":["../src/ExpoAirView.web.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAuB;IACzD,OAAO,CACL,CAAC,GAAG,CACF;MAAA,CAAC,MAAM,CACL,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CACnB,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CACf,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAEpE;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC","sourcesContent":["import * as React from \"react\";\n\nimport { ExpoAirViewProps } from \"./ExpoAir.types\";\n\nexport default function ExpoAirView(props: ExpoAirViewProps) {\n return (\n <div>\n <iframe\n style={{ flex: 1 }}\n src={props.url}\n onLoad={() => props.onLoad({ nativeEvent: { url: props.url } })}\n />\n </div>\n );\n}\n"]}
package/build/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { default } from './ExpoAirModule';
2
- export { default as ExpoAirView } from './ExpoAirView';
3
- export * from './ExpoAir.types';
1
+ export { default } from "./ExpoAirModule";
2
+ export { default as ExpoAirView } from "./ExpoAirView";
3
+ export * from "./ExpoAir.types";
4
4
  //# sourceMappingURL=index.d.ts.map
package/build/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // Reexport the native module. On web, it will be resolved to ExpoAirModule.web.ts
2
2
  // and on native platforms to ExpoAirModule.ts
3
- export { default } from './ExpoAirModule';
4
- export { default as ExpoAirView } from './ExpoAirView';
5
- export * from './ExpoAir.types';
3
+ export { default } from "./ExpoAirModule";
4
+ export { default as ExpoAirView } from "./ExpoAirView";
5
+ export * from "./ExpoAir.types";
6
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,8CAA8C;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,cAAc,iBAAiB,CAAC","sourcesContent":["// Reexport the native module. On web, it will be resolved to ExpoAirModule.web.ts\n// and on native platforms to ExpoAirModule.ts\nexport { default } from './ExpoAirModule';\nexport { default as ExpoAirView } from './ExpoAirView';\nexport * from './ExpoAir.types';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,8CAA8C;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,cAAc,iBAAiB,CAAC","sourcesContent":["// Reexport the native module. On web, it will be resolved to ExpoAirModule.web.ts\n// and on native platforms to ExpoAirModule.ts\nexport { default } from \"./ExpoAirModule\";\nexport { default as ExpoAirView } from \"./ExpoAirView\";\nexport * from \"./ExpoAir.types\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fly.d.ts","sourceRoot":"","sources":["../../commands/fly.ts"],"names":[],"mappings":"AA2IA,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA8OnE"}
1
+ {"version":3,"file":"fly.d.ts","sourceRoot":"","sources":["../../commands/fly.ts"],"names":[],"mappings":"AAqMA,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAyRnE"}
@@ -2,11 +2,61 @@ import chalk from "chalk";
2
2
  import { spawn, execSync } from "child_process";
3
3
  import * as path from "path";
4
4
  import * as fs from "fs";
5
+ import * as net from "net";
5
6
  import { fileURLToPath } from "url";
6
7
  import { CloudflareTunnel } from "../tunnel/cloudflare.js";
7
8
  import plist from "plist";
9
+ /**
10
+ * Check if a port is listening (Metro is ready)
11
+ */
12
+ function waitForPort(port, timeout = 30000) {
13
+ return new Promise((resolve, reject) => {
14
+ const startTime = Date.now();
15
+ const tryConnect = () => {
16
+ const socket = new net.Socket();
17
+ socket.setTimeout(1000);
18
+ socket.on("connect", () => {
19
+ socket.destroy();
20
+ resolve();
21
+ });
22
+ socket.on("timeout", () => {
23
+ socket.destroy();
24
+ if (Date.now() - startTime > timeout) {
25
+ reject(new Error(`Timeout waiting for port ${port}`));
26
+ }
27
+ else {
28
+ setTimeout(tryConnect, 500);
29
+ }
30
+ });
31
+ socket.on("error", () => {
32
+ socket.destroy();
33
+ if (Date.now() - startTime > timeout) {
34
+ reject(new Error(`Timeout waiting for port ${port}`));
35
+ }
36
+ else {
37
+ setTimeout(tryConnect, 500);
38
+ }
39
+ });
40
+ socket.connect(port, "127.0.0.1");
41
+ };
42
+ tryConnect();
43
+ });
44
+ }
8
45
  const __filename = fileURLToPath(import.meta.url);
9
46
  const __dirname = path.dirname(__filename);
47
+ /**
48
+ * Check if running from an npm installation (inside node_modules)
49
+ */
50
+ function isInstalledFromNpm() {
51
+ return __dirname.includes("node_modules");
52
+ }
53
+ /**
54
+ * Check if pre-built widget bundle exists
55
+ */
56
+ function hasPrebuiltWidgetBundle() {
57
+ const bundlePath = path.resolve(__dirname, "../../..", "ios", "widget.jsbundle");
58
+ return fs.existsSync(bundlePath);
59
+ }
10
60
  function detectConnectedDevices() {
11
61
  const devices = [];
12
62
  try {
@@ -167,8 +217,9 @@ export async function flyCommand(options) {
167
217
  stdio: ["ignore", "pipe", "pipe"],
168
218
  env: { ...process.env, FORCE_COLOR: "1" },
169
219
  });
220
+ // Wait for initial Metro output
170
221
  await new Promise((resolve, reject) => {
171
- const timeout = setTimeout(() => resolve(), 5000);
222
+ const timeout = setTimeout(() => resolve(), 3000);
172
223
  proc.on("error", (err) => {
173
224
  clearTimeout(timeout);
174
225
  reject(err);
@@ -188,6 +239,8 @@ export async function flyCommand(options) {
188
239
  }
189
240
  });
190
241
  });
242
+ // Wait for port to actually be listening (Metro fully ready)
243
+ await waitForPort(metroPortNum, 30000);
191
244
  console.log(chalk.green(` ✓ ${name} Metro started on port ${metroPortNum}`));
192
245
  return proc;
193
246
  }
@@ -197,7 +250,15 @@ export async function flyCommand(options) {
197
250
  return null;
198
251
  }
199
252
  };
200
- const widgetProcess = await startMetro("Widget", widgetDir, widgetPort);
253
+ // Start widget Metro server (skip for npm users with pre-built bundle)
254
+ let widgetProcess = null;
255
+ if (isInstalledFromNpm() && hasPrebuiltWidgetBundle()) {
256
+ console.log(chalk.green(` ✓ Using pre-built widget bundle (npm installation)`));
257
+ }
258
+ else {
259
+ console.log(chalk.blue(` Starting widget Metro (SDK development mode)...`));
260
+ widgetProcess = await startMetro("Widget", widgetDir, widgetPort);
261
+ }
201
262
  const appProcess = await startMetro("App", projectRoot, metroPort);
202
263
  // Step 3: Start prompt server
203
264
  console.log(chalk.gray("\n Starting prompt server..."));
@@ -214,6 +275,7 @@ export async function flyCommand(options) {
214
275
  let appTunnelUrl = null;
215
276
  if (options.tunnel) {
216
277
  console.log(chalk.gray("\n Starting tunnels (this enables remote access)..."));
278
+ let rateLimitHit = false;
217
279
  promptTunnel = new CloudflareTunnel();
218
280
  try {
219
281
  const info = await promptTunnel.start(port);
@@ -222,27 +284,51 @@ export async function flyCommand(options) {
222
284
  }
223
285
  catch (err) {
224
286
  const message = err instanceof Error ? err.message : String(err);
225
- console.log(chalk.yellow(` ⚠ Prompt tunnel failed: ${message}`));
226
- }
227
- widgetTunnel = new CloudflareTunnel();
228
- try {
229
- const info = await widgetTunnel.start(widgetPort);
230
- widgetTunnelUrl = info.url;
231
- console.log(chalk.green(` ✓ Widget tunnel ready`));
287
+ if (message.includes("rate limit") || message.includes("429")) {
288
+ rateLimitHit = true;
289
+ }
290
+ console.log(chalk.red(` ✗ Prompt tunnel failed`));
232
291
  }
233
- catch (err) {
234
- const message = err instanceof Error ? err.message : String(err);
235
- console.log(chalk.yellow(` ⚠ Widget tunnel failed: ${message}`));
292
+ // Only start widget tunnel if widget Metro is running (SDK development mode)
293
+ // Skip for npm users using pre-built bundle
294
+ if (!rateLimitHit && widgetProcess) {
295
+ widgetTunnel = new CloudflareTunnel();
296
+ try {
297
+ const info = await widgetTunnel.start(widgetPort);
298
+ widgetTunnelUrl = info.url;
299
+ console.log(chalk.green(` ✓ Widget tunnel ready`));
300
+ }
301
+ catch (err) {
302
+ const message = err instanceof Error ? err.message : String(err);
303
+ if (message.includes("rate limit") || message.includes("429")) {
304
+ rateLimitHit = true;
305
+ }
306
+ console.log(chalk.red(` ✗ Widget tunnel failed`));
307
+ }
236
308
  }
237
- appTunnel = new CloudflareTunnel();
238
- try {
239
- const info = await appTunnel.start(metroPort);
240
- appTunnelUrl = info.url;
241
- console.log(chalk.green(` ✓ App tunnel ready`));
309
+ if (!rateLimitHit) {
310
+ appTunnel = new CloudflareTunnel();
311
+ try {
312
+ const info = await appTunnel.start(metroPort);
313
+ appTunnelUrl = info.url;
314
+ console.log(chalk.green(` ✓ App tunnel ready`));
315
+ }
316
+ catch (err) {
317
+ const message = err instanceof Error ? err.message : String(err);
318
+ if (message.includes("rate limit") || message.includes("429")) {
319
+ rateLimitHit = true;
320
+ }
321
+ console.log(chalk.red(` ✗ App tunnel failed`));
322
+ }
242
323
  }
243
- catch (err) {
244
- const message = err instanceof Error ? err.message : String(err);
245
- console.log(chalk.yellow(`App tunnel failed: ${message}`));
324
+ // Show rate limit warning
325
+ if (rateLimitHit) {
326
+ console.log(chalk.yellow(`\nCloudflare rate limit reached (429 Too Many Requests)`));
327
+ console.log(chalk.gray(` This happens when too many tunnel requests are made.`));
328
+ console.log(chalk.gray(` Options:`));
329
+ console.log(chalk.white(` 1. Wait a few minutes and try again`));
330
+ console.log(chalk.white(` 2. Use --no-tunnel to run without tunnels`));
331
+ console.log(chalk.white(` 3. Device must be on same WiFi as your computer\n`));
246
332
  }
247
333
  // Update config files
248
334
  if (promptTunnelUrl || widgetTunnelUrl || appTunnelUrl) {
@@ -289,7 +375,12 @@ export async function flyCommand(options) {
289
375
  console.log(chalk.white(` 📱 ${selectedDevice.name}`));
290
376
  console.log(chalk.gray("\n Servers:"));
291
377
  console.log(chalk.white(` Prompt: ws://localhost:${port}`));
292
- console.log(chalk.white(` Widget: http://localhost:${widgetPort}`));
378
+ if (widgetProcess) {
379
+ console.log(chalk.white(` Widget: http://localhost:${widgetPort}`));
380
+ }
381
+ else {
382
+ console.log(chalk.white(` Widget: (pre-built bundle)`));
383
+ }
293
384
  console.log(chalk.white(` App: http://localhost:${metroPort}`));
294
385
  if (promptTunnelUrl) {
295
386
  console.log(chalk.gray("\n Remote access (tunnels):"));
@@ -1 +1 @@
1
- {"version":3,"file":"fly.js","sourceRoot":"","sources":["../../commands/fly.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fly.js","sourceRoot":"","sources":["../../commands/fly.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../commands/start.ts"],"names":[],"mappings":"AAiFA,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA+NvE"}
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../commands/start.ts"],"names":[],"mappings":"AA2IA,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuQvE"}
@@ -2,11 +2,61 @@ import chalk from "chalk";
2
2
  import { spawn } from "child_process";
3
3
  import * as path from "path";
4
4
  import * as fs from "fs";
5
+ import * as net from "net";
5
6
  import { fileURLToPath } from "url";
6
7
  import { CloudflareTunnel } from "../tunnel/cloudflare.js";
7
8
  import plist from "plist";
9
+ /**
10
+ * Check if a port is listening (Metro is ready)
11
+ */
12
+ function waitForPort(port, timeout = 30000) {
13
+ return new Promise((resolve, reject) => {
14
+ const startTime = Date.now();
15
+ const tryConnect = () => {
16
+ const socket = new net.Socket();
17
+ socket.setTimeout(1000);
18
+ socket.on("connect", () => {
19
+ socket.destroy();
20
+ resolve();
21
+ });
22
+ socket.on("timeout", () => {
23
+ socket.destroy();
24
+ if (Date.now() - startTime > timeout) {
25
+ reject(new Error(`Timeout waiting for port ${port}`));
26
+ }
27
+ else {
28
+ setTimeout(tryConnect, 500);
29
+ }
30
+ });
31
+ socket.on("error", () => {
32
+ socket.destroy();
33
+ if (Date.now() - startTime > timeout) {
34
+ reject(new Error(`Timeout waiting for port ${port}`));
35
+ }
36
+ else {
37
+ setTimeout(tryConnect, 500);
38
+ }
39
+ });
40
+ socket.connect(port, "127.0.0.1");
41
+ };
42
+ tryConnect();
43
+ });
44
+ }
8
45
  const __filename = fileURLToPath(import.meta.url);
9
46
  const __dirname = path.dirname(__filename);
47
+ /**
48
+ * Check if running from an npm installation (inside node_modules)
49
+ */
50
+ function isInstalledFromNpm() {
51
+ return __dirname.includes("node_modules");
52
+ }
53
+ /**
54
+ * Check if pre-built widget bundle exists
55
+ */
56
+ function hasPrebuiltWidgetBundle() {
57
+ const bundlePath = path.resolve(__dirname, "../../..", "ios", "widget.jsbundle");
58
+ return fs.existsSync(bundlePath);
59
+ }
10
60
  /**
11
61
  * Directly update Info.plist with tunnel URLs.
12
62
  * This allows URL changes without running `npx expo prebuild`.
@@ -95,8 +145,9 @@ export async function startCommand(options) {
95
145
  stdio: ["ignore", "pipe", "pipe"],
96
146
  env: { ...process.env, FORCE_COLOR: "1" },
97
147
  });
148
+ // Wait for initial Metro output
98
149
  await new Promise((resolve, reject) => {
99
- const timeout = setTimeout(() => resolve(), 5000);
150
+ const timeout = setTimeout(() => resolve(), 3000);
100
151
  proc.on("error", (err) => {
101
152
  clearTimeout(timeout);
102
153
  reject(err);
@@ -116,6 +167,8 @@ export async function startCommand(options) {
116
167
  }
117
168
  });
118
169
  });
170
+ // Wait for port to actually be listening (Metro fully ready)
171
+ await waitForPort(metroPortNum, 30000);
119
172
  console.log(chalk.green(` ✓ ${name} Metro started on port ${metroPortNum}`));
120
173
  return proc;
121
174
  }
@@ -126,8 +179,15 @@ export async function startCommand(options) {
126
179
  return null;
127
180
  }
128
181
  };
129
- // Start widget Metro server
130
- const widgetProcess = await startMetro("Widget", widgetDir, widgetPort);
182
+ // Start widget Metro server (skip for npm users with pre-built bundle)
183
+ let widgetProcess = null;
184
+ if (isInstalledFromNpm() && hasPrebuiltWidgetBundle()) {
185
+ console.log(chalk.green(` ✓ Using pre-built widget bundle (npm installation)`));
186
+ }
187
+ else {
188
+ console.log(chalk.blue(` Starting widget Metro (SDK development mode)...`));
189
+ widgetProcess = await startMetro("Widget", widgetDir, widgetPort);
190
+ }
131
191
  // Start main app Metro server
132
192
  const appProcess = await startMetro("App", projectRoot, metroPort);
133
193
  // Start prompt server (unless --no-server)
@@ -152,6 +212,7 @@ export async function startCommand(options) {
152
212
  let appTunnelUrl = null;
153
213
  if (options.tunnel) {
154
214
  console.log(chalk.gray(" Starting tunnels (Cloudflare)..."));
215
+ let rateLimitHit = false;
155
216
  // Start prompt server tunnel
156
217
  promptTunnel = new CloudflareTunnel();
157
218
  try {
@@ -162,29 +223,52 @@ export async function startCommand(options) {
162
223
  }
163
224
  catch (err) {
164
225
  const message = err instanceof Error ? err.message : String(err);
165
- console.log(chalk.red(` ✗ Prompt tunnel failed: ${message}`));
166
- }
167
- // Start widget Metro tunnel
168
- widgetTunnel = new CloudflareTunnel();
169
- try {
170
- const info = await widgetTunnel.start(widgetPort);
171
- widgetTunnelUrl = info.url;
172
- console.log(chalk.green(` ✓ Widget tunnel: ${widgetTunnelUrl}`));
226
+ if (message.includes("rate limit") || message.includes("429")) {
227
+ rateLimitHit = true;
228
+ }
229
+ console.log(chalk.red(` ✗ Prompt tunnel failed`));
173
230
  }
174
- catch (err) {
175
- const message = err instanceof Error ? err.message : String(err);
176
- console.log(chalk.red(` ✗ Widget tunnel failed: ${message}`));
231
+ // Start widget Metro tunnel (skip if rate limited or using pre-built bundle)
232
+ // Only needed when widget Metro is running (SDK development mode)
233
+ if (!rateLimitHit && widgetProcess) {
234
+ widgetTunnel = new CloudflareTunnel();
235
+ try {
236
+ const info = await widgetTunnel.start(widgetPort);
237
+ widgetTunnelUrl = info.url;
238
+ console.log(chalk.green(` ✓ Widget tunnel: ${widgetTunnelUrl}`));
239
+ }
240
+ catch (err) {
241
+ const message = err instanceof Error ? err.message : String(err);
242
+ if (message.includes("rate limit") || message.includes("429")) {
243
+ rateLimitHit = true;
244
+ }
245
+ console.log(chalk.red(` ✗ Widget tunnel failed`));
246
+ }
177
247
  }
178
- // Start main app Metro tunnel
179
- appTunnel = new CloudflareTunnel();
180
- try {
181
- const info = await appTunnel.start(metroPort);
182
- appTunnelUrl = info.url;
183
- console.log(chalk.green(` ✓ App tunnel: ${appTunnelUrl}`));
248
+ // Start main app Metro tunnel (skip if rate limited)
249
+ if (!rateLimitHit) {
250
+ appTunnel = new CloudflareTunnel();
251
+ try {
252
+ const info = await appTunnel.start(metroPort);
253
+ appTunnelUrl = info.url;
254
+ console.log(chalk.green(` ✓ App tunnel: ${appTunnelUrl}`));
255
+ }
256
+ catch (err) {
257
+ const message = err instanceof Error ? err.message : String(err);
258
+ if (message.includes("rate limit") || message.includes("429")) {
259
+ rateLimitHit = true;
260
+ }
261
+ console.log(chalk.red(` ✗ App tunnel failed`));
262
+ }
184
263
  }
185
- catch (err) {
186
- const message = err instanceof Error ? err.message : String(err);
187
- console.log(chalk.red(` App tunnel failed: ${message}`));
264
+ // Show rate limit warning
265
+ if (rateLimitHit) {
266
+ console.log(chalk.yellow(`\n Cloudflare rate limit reached (429 Too Many Requests)`));
267
+ console.log(chalk.gray(` This happens when too many tunnel requests are made.`));
268
+ console.log(chalk.gray(` Options:`));
269
+ console.log(chalk.white(` 1. Wait a few minutes and try again`));
270
+ console.log(chalk.white(` 2. Use --no-tunnel to run without tunnels (local only)`));
271
+ console.log(chalk.white(` 3. Connect device via USB for local development\n`));
188
272
  }
189
273
  // Update config files with tunnel URLs
190
274
  if (promptTunnelUrl || widgetTunnelUrl || appTunnelUrl) {
@@ -216,7 +300,12 @@ export async function startCommand(options) {
216
300
  if (options.server) {
217
301
  console.log(chalk.white(` Prompt Server: ws://localhost:${port}`));
218
302
  }
219
- console.log(chalk.white(` Widget Metro: http://localhost:${widgetPort}`));
303
+ if (widgetProcess) {
304
+ console.log(chalk.white(` Widget Metro: http://localhost:${widgetPort}`));
305
+ }
306
+ else {
307
+ console.log(chalk.white(` Widget: (pre-built bundle)`));
308
+ }
220
309
  console.log(chalk.white(` App Metro: http://localhost:${metroPort}`));
221
310
  if (promptTunnelUrl || widgetTunnelUrl || appTunnelUrl) {
222
311
  console.log(chalk.gray("\n Remote (anywhere):"));