flingit 0.0.14 → 0.0.18

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.
Files changed (127) hide show
  1. package/README.md +2 -1
  2. package/dist/cli/commands/cron.d.ts +29 -0
  3. package/dist/cli/commands/cron.d.ts.map +1 -1
  4. package/dist/cli/commands/cron.js +54 -37
  5. package/dist/cli/commands/cron.js.map +1 -1
  6. package/dist/cli/commands/db.d.ts.map +1 -1
  7. package/dist/cli/commands/db.js +15 -19
  8. package/dist/cli/commands/db.js.map +1 -1
  9. package/dist/cli/commands/dev.d.ts +1 -0
  10. package/dist/cli/commands/dev.d.ts.map +1 -1
  11. package/dist/cli/commands/dev.js +344 -86
  12. package/dist/cli/commands/dev.js.map +1 -1
  13. package/dist/cli/commands/feedback.js +3 -3
  14. package/dist/cli/commands/feedback.js.map +1 -1
  15. package/dist/cli/commands/init.d.ts.map +1 -1
  16. package/dist/cli/commands/init.js +9 -2
  17. package/dist/cli/commands/init.js.map +1 -1
  18. package/dist/cli/commands/launch.d.ts +45 -3
  19. package/dist/cli/commands/launch.d.ts.map +1 -1
  20. package/dist/cli/commands/launch.js +39 -17
  21. package/dist/cli/commands/launch.js.map +1 -1
  22. package/dist/cli/commands/logout.d.ts +18 -0
  23. package/dist/cli/commands/logout.d.ts.map +1 -1
  24. package/dist/cli/commands/logout.js +40 -14
  25. package/dist/cli/commands/logout.js.map +1 -1
  26. package/dist/cli/commands/logs.d.ts +3 -2
  27. package/dist/cli/commands/logs.d.ts.map +1 -1
  28. package/dist/cli/commands/logs.js +26 -43
  29. package/dist/cli/commands/logs.js.map +1 -1
  30. package/dist/cli/commands/onboard.d.ts.map +1 -1
  31. package/dist/cli/commands/onboard.js +3 -3
  32. package/dist/cli/commands/onboard.js.map +1 -1
  33. package/dist/cli/commands/project.d.ts.map +1 -1
  34. package/dist/cli/commands/project.js +44 -23
  35. package/dist/cli/commands/project.js.map +1 -1
  36. package/dist/cli/commands/push.d.ts.map +1 -1
  37. package/dist/cli/commands/push.js +6 -4
  38. package/dist/cli/commands/push.js.map +1 -1
  39. package/dist/cli/commands/register.d.ts +37 -0
  40. package/dist/cli/commands/register.d.ts.map +1 -1
  41. package/dist/cli/commands/register.js +96 -74
  42. package/dist/cli/commands/register.js.map +1 -1
  43. package/dist/cli/commands/tunnel.js +2 -2
  44. package/dist/cli/commands/tunnel.js.map +1 -1
  45. package/dist/cli/commands/whoami.d.ts +18 -0
  46. package/dist/cli/commands/whoami.d.ts.map +1 -1
  47. package/dist/cli/commands/whoami.js +54 -28
  48. package/dist/cli/commands/whoami.js.map +1 -1
  49. package/dist/cli/index.js +10 -4
  50. package/dist/cli/index.js.map +1 -1
  51. package/dist/cli/utils/cli-io-impl.d.ts +33 -2
  52. package/dist/cli/utils/cli-io-impl.d.ts.map +1 -1
  53. package/dist/cli/utils/cli-io-impl.js +99 -14
  54. package/dist/cli/utils/cli-io-impl.js.map +1 -1
  55. package/dist/cli/utils/cli-io.d.ts +27 -9
  56. package/dist/cli/utils/cli-io.d.ts.map +1 -1
  57. package/dist/cli/utils/config.d.ts.map +1 -1
  58. package/dist/cli/utils/config.js +2 -2
  59. package/dist/cli/utils/config.js.map +1 -1
  60. package/dist/cli/utils/db-adapter.d.ts +59 -0
  61. package/dist/cli/utils/db-adapter.d.ts.map +1 -0
  62. package/dist/cli/utils/db-adapter.js +74 -0
  63. package/dist/cli/utils/db-adapter.js.map +1 -0
  64. package/dist/cli/utils/email.d.ts +15 -0
  65. package/dist/cli/utils/email.d.ts.map +1 -0
  66. package/dist/cli/utils/email.js +31 -0
  67. package/dist/cli/utils/email.js.map +1 -0
  68. package/dist/cli/utils/project-name.d.ts +10 -2
  69. package/dist/cli/utils/project-name.d.ts.map +1 -1
  70. package/dist/cli/utils/project-name.js +12 -6
  71. package/dist/cli/utils/project-name.js.map +1 -1
  72. package/dist/cli/utils/project.d.ts +17 -6
  73. package/dist/cli/utils/project.d.ts.map +1 -1
  74. package/dist/cli/utils/project.js +30 -36
  75. package/dist/cli/utils/project.js.map +1 -1
  76. package/dist/cli/utils/registry.d.ts +8 -6
  77. package/dist/cli/utils/registry.d.ts.map +1 -1
  78. package/dist/cli/utils/registry.js +32 -30
  79. package/dist/cli/utils/registry.js.map +1 -1
  80. package/dist/shared/constants.d.ts +16 -3
  81. package/dist/shared/constants.d.ts.map +1 -1
  82. package/dist/shared/constants.js +16 -3
  83. package/dist/shared/constants.js.map +1 -1
  84. package/dist/worker-runtime/discord.js +1 -1
  85. package/dist/worker-runtime/discord.js.map +1 -1
  86. package/dist/worker-runtime/index.d.ts +2 -1
  87. package/dist/worker-runtime/index.d.ts.map +1 -1
  88. package/dist/worker-runtime/index.js +19 -6
  89. package/dist/worker-runtime/index.js.map +1 -1
  90. package/package.json +1 -1
  91. package/templates/default/.claude/settings.local.json +1 -0
  92. package/templates/default/CLAUDE.md +2 -314
  93. package/templates/default/skills/fling/.hash +1 -1
  94. package/templates/default/skills/fling/API.md +45 -4
  95. package/templates/default/skills/fling/SKILL.md +92 -1
  96. package/dist/cli/commands/admin.d.ts +0 -8
  97. package/dist/cli/commands/admin.d.ts.map +0 -1
  98. package/dist/cli/commands/admin.js +0 -244
  99. package/dist/cli/commands/admin.js.map +0 -1
  100. package/dist/cli/commands/dev-worker.d.ts +0 -12
  101. package/dist/cli/commands/dev-worker.d.ts.map +0 -1
  102. package/dist/cli/commands/dev-worker.js +0 -66
  103. package/dist/cli/commands/dev-worker.js.map +0 -1
  104. package/dist/cli/commands/tun.d.ts +0 -13
  105. package/dist/cli/commands/tun.d.ts.map +0 -1
  106. package/dist/cli/commands/tun.js +0 -189
  107. package/dist/cli/commands/tun.js.map +0 -1
  108. package/dist/cli/utils/launch-io-impl.d.ts +0 -13
  109. package/dist/cli/utils/launch-io-impl.d.ts.map +0 -1
  110. package/dist/cli/utils/launch-io-impl.js +0 -51
  111. package/dist/cli/utils/launch-io-impl.js.map +0 -1
  112. package/dist/cli/utils/launch-io.d.ts +0 -42
  113. package/dist/cli/utils/launch-io.d.ts.map +0 -1
  114. package/dist/cli/utils/launch-io.js +0 -8
  115. package/dist/cli/utils/launch-io.js.map +0 -1
  116. package/dist/cli/utils/onboarding-io-impl.d.ts +0 -12
  117. package/dist/cli/utils/onboarding-io-impl.d.ts.map +0 -1
  118. package/dist/cli/utils/onboarding-io-impl.js +0 -85
  119. package/dist/cli/utils/onboarding-io-impl.js.map +0 -1
  120. package/dist/cli/utils/onboarding-io.d.ts +0 -60
  121. package/dist/cli/utils/onboarding-io.d.ts.map +0 -1
  122. package/dist/cli/utils/onboarding-io.js +0 -9
  123. package/dist/cli/utils/onboarding-io.js.map +0 -1
  124. package/dist/client/assets/index-BqVrS7t9.js +0 -40
  125. package/dist/client/assets/index-DSLUsCtO.css +0 -1
  126. package/dist/client/index.html +0 -14
  127. package/dist/client/vite.svg +0 -1
@@ -1,244 +0,0 @@
1
- /**
2
- * fling admin - Admin commands for platform management
3
- *
4
- * Requires ADMIN_KEY environment variable to be set.
5
- */
6
- import { Command } from "commander";
7
- import { getApiUrl } from "../utils/config.js";
8
- // Billable rates per Cloudflare pricing
9
- const RATES = {
10
- requestsPerMillion: 0.3, // $0.30 per million requests
11
- cpuMsPerMillion: 0.02, // $0.02 per million CPU ms
12
- // D1 pricing
13
- rowsReadPerMillion: 0.001, // $0.001 per million rows read
14
- rowsWrittenPerMillion: 1.0, // $1.00 per million rows written
15
- d1StoragePerGBMonth: 0.75, // $0.75 per GB-month for D1
16
- // R2 pricing
17
- r2StoragePerGBMonth: 0.015, // $0.015 per GB-month for R2
18
- };
19
- /**
20
- * Make an authenticated admin request to the platform API.
21
- *
22
- * @param path - API path to request
23
- * @param fetchFn - Optional fetch function for dependency injection (defaults to global fetch)
24
- */
25
- async function adminFetch(path, fetchFn = fetch) {
26
- const adminKey = process.env["ADMIN_KEY"];
27
- if (!adminKey) {
28
- throw new Error("ADMIN_KEY environment variable is required for admin commands");
29
- }
30
- const url = `${getApiUrl()}${path}`;
31
- return fetchFn(url, {
32
- headers: {
33
- Authorization: `Bearer ${adminKey}`,
34
- },
35
- });
36
- }
37
- /**
38
- * Format a number with commas for readability.
39
- */
40
- function formatNumber(n) {
41
- return n.toLocaleString();
42
- }
43
- /**
44
- * Format bytes as human-readable size.
45
- */
46
- function formatBytes(bytes) {
47
- if (bytes === 0)
48
- return "0 B";
49
- const units = ["B", "KB", "MB", "GB", "TB"];
50
- const i = Math.floor(Math.log(bytes) / Math.log(1024));
51
- const value = bytes / Math.pow(1024, i);
52
- return `${value.toFixed(1)}${units[i]}`;
53
- }
54
- /**
55
- * Format cost as currency.
56
- */
57
- function formatCost(cost) {
58
- if (cost < 0.01 && cost > 0) {
59
- return "<$0.01";
60
- }
61
- return `$${cost.toFixed(2)}`;
62
- }
63
- /**
64
- * Calculate cost from usage.
65
- */
66
- function calculateCost(usage) {
67
- const requestsCost = (usage.worker.requests / 1_000_000) * RATES.requestsPerMillion;
68
- const cpuCost = (usage.worker.cpu_time_ms / 1_000_000) * RATES.cpuMsPerMillion;
69
- const rowsReadCost = ((usage.d1?.rows_read ?? 0) / 1_000_000) * RATES.rowsReadPerMillion;
70
- const rowsWrittenCost = ((usage.d1?.rows_written ?? 0) / 1_000_000) * RATES.rowsWrittenPerMillion;
71
- const d1StorageCost = ((usage.d1?.storage_bytes ?? 0) / (1024 * 1024 * 1024)) * RATES.d1StoragePerGBMonth;
72
- const r2StorageCost = ((usage.r2?.storage_bytes ?? 0) / (1024 * 1024 * 1024)) * RATES.r2StoragePerGBMonth;
73
- return requestsCost + cpuCost + rowsReadCost + rowsWrittenCost + d1StorageCost + r2StorageCost;
74
- }
75
- function aggregateUsage(usages) {
76
- return usages.reduce((acc, u) => ({
77
- requests: acc.requests + u.worker.requests,
78
- errors: acc.errors + u.worker.errors,
79
- cpuTimeMs: acc.cpuTimeMs + u.worker.cpu_time_ms,
80
- rowsRead: acc.rowsRead + (u.d1?.rows_read ?? 0),
81
- rowsWritten: acc.rowsWritten + (u.d1?.rows_written ?? 0),
82
- d1StorageBytes: Math.max(acc.d1StorageBytes, u.d1?.storage_bytes ?? 0), // Take max for storage
83
- r2StorageBytes: Math.max(acc.r2StorageBytes, u.r2?.storage_bytes ?? 0), // Take max for storage
84
- }), { requests: 0, errors: 0, cpuTimeMs: 0, rowsRead: 0, rowsWritten: 0, d1StorageBytes: 0, r2StorageBytes: 0 });
85
- }
86
- /**
87
- * Pad a string to a fixed width.
88
- */
89
- function pad(s, width, align = "left") {
90
- if (s.length >= width)
91
- return s;
92
- const padding = " ".repeat(width - s.length);
93
- return align === "left" ? s + padding : padding + s;
94
- }
95
- export const adminCommand = new Command("admin")
96
- .description("Admin commands for platform management")
97
- .addHelpText("after", `
98
- Requires ADMIN_KEY environment variable.
99
-
100
- Example:
101
- ADMIN_KEY=your_key fling admin usage
102
- ADMIN_KEY=your_key fling admin usage --days=7
103
- `);
104
- adminCommand
105
- .command("usage")
106
- .description("List all users with their resource usage and computed costs")
107
- .option("--days <number>", "Number of days to look back (1-31)", "31")
108
- .action(async (options) => {
109
- const days = parseInt(options.days, 10);
110
- if (isNaN(days) || days < 1 || days > 31) {
111
- console.error("Error: days must be between 1 and 31");
112
- process.exit(1);
113
- }
114
- try {
115
- // Get all users
116
- const usersResponse = await adminFetch("/admin/users");
117
- if (!usersResponse.ok) {
118
- const data = (await usersResponse.json());
119
- console.error(`Error fetching users: ${data.error ?? "Unknown error"}`);
120
- process.exit(1);
121
- }
122
- const { users } = (await usersResponse.json());
123
- if (users.length === 0) {
124
- console.log("No users found.");
125
- return;
126
- }
127
- // Fetch usage for each user's projects with concurrency limit
128
- const CONCURRENCY = 5;
129
- const userUsages = new Map();
130
- // Build list of all project fetch tasks
131
- const tasks = [];
132
- for (const user of users) {
133
- if (user.project) {
134
- tasks.push({ user, projectId: user.project.id });
135
- }
136
- else {
137
- // User with no project - still track them
138
- userUsages.set(user.id, { user, usages: [] });
139
- }
140
- }
141
- // Process tasks with concurrency limit
142
- let completed = 0;
143
- const total = tasks.length;
144
- for (let i = 0; i < tasks.length; i += CONCURRENCY) {
145
- const batch = tasks.slice(i, i + CONCURRENCY);
146
- const results = await Promise.allSettled(batch.map(async ({ user, projectId }) => {
147
- const response = await adminFetch(`/admin/users/${user.id}/projects/${projectId}/usage?days=${days}`);
148
- if (!response.ok) {
149
- console.error(`Warning: Failed to fetch usage for ${user.email}`);
150
- return null;
151
- }
152
- return { user, usage: (await response.json()) };
153
- }));
154
- for (const result of results) {
155
- completed++;
156
- if (result.status === "fulfilled" && result.value) {
157
- const { user, usage } = result.value;
158
- const existing = userUsages.get(user.id);
159
- if (existing) {
160
- existing.usages.push(usage);
161
- }
162
- else {
163
- userUsages.set(user.id, { user, usages: [usage] });
164
- }
165
- }
166
- }
167
- // Progress indicator
168
- process.stderr.write(`\rFetching usage... ${completed}/${total}`);
169
- }
170
- process.stderr.write("\r" + " ".repeat(40) + "\r"); // Clear progress line
171
- const rows = [];
172
- let totalRequests = 0;
173
- let totalCpuTimeMs = 0;
174
- let totalRowsRead = 0;
175
- let totalRowsWritten = 0;
176
- let totalD1StorageBytes = 0;
177
- let totalR2StorageBytes = 0;
178
- let totalCost = 0;
179
- for (const { user, usages } of userUsages.values()) {
180
- if (usages.length === 0)
181
- continue;
182
- const agg = aggregateUsage(usages);
183
- const cost = usages.reduce((sum, u) => sum + calculateCost(u), 0);
184
- rows.push({
185
- email: user.email,
186
- requests: agg.requests,
187
- cpuTimeMs: agg.cpuTimeMs,
188
- rowsRead: agg.rowsRead,
189
- rowsWritten: agg.rowsWritten,
190
- d1StorageBytes: agg.d1StorageBytes,
191
- r2StorageBytes: agg.r2StorageBytes,
192
- cost,
193
- });
194
- totalRequests += agg.requests;
195
- totalCpuTimeMs += agg.cpuTimeMs;
196
- totalRowsRead += agg.rowsRead;
197
- totalRowsWritten += agg.rowsWritten;
198
- totalD1StorageBytes = Math.max(totalD1StorageBytes, agg.d1StorageBytes);
199
- totalR2StorageBytes = Math.max(totalR2StorageBytes, agg.r2StorageBytes);
200
- totalCost += cost;
201
- }
202
- // Sort by cost descending
203
- rows.sort((a, b) => b.cost - a.cost);
204
- // Calculate column widths
205
- const hUser = "User";
206
- const hRequests = "Requests";
207
- const hCpu = "CPU (ms)";
208
- const hRowsRead = "Rows Read";
209
- const hRowsWritten = "Rows Written";
210
- const hD1Storage = "D1 Storage";
211
- const hR2Storage = "R2 Storage";
212
- const hCost = "Cost";
213
- const wUser = Math.max(hUser.length, ...rows.map((r) => r.email.length));
214
- const wRequests = Math.max(hRequests.length, ...rows.map((r) => formatNumber(r.requests).length));
215
- const wCpu = Math.max(hCpu.length, ...rows.map((r) => formatNumber(r.cpuTimeMs).length));
216
- const wRowsRead = Math.max(hRowsRead.length, ...rows.map((r) => formatNumber(r.rowsRead).length));
217
- const wRowsWritten = Math.max(hRowsWritten.length, ...rows.map((r) => formatNumber(r.rowsWritten).length));
218
- const wD1Storage = Math.max(hD1Storage.length, ...rows.map((r) => formatBytes(r.d1StorageBytes).length));
219
- const wR2Storage = Math.max(hR2Storage.length, ...rows.map((r) => formatBytes(r.r2StorageBytes).length));
220
- const wCost = Math.max(hCost.length, ...rows.map((r) => formatCost(r.cost).length));
221
- // Print header
222
- console.log(`${pad(hUser, wUser)} ${pad(hRequests, wRequests, "right")} ${pad(hCpu, wCpu, "right")} ${pad(hRowsRead, wRowsRead, "right")} ${pad(hRowsWritten, wRowsWritten, "right")} ${pad(hD1Storage, wD1Storage, "right")} ${pad(hR2Storage, wR2Storage, "right")} ${pad(hCost, wCost, "right")}`);
223
- // Print separator
224
- const separator = [wUser, wRequests, wCpu, wRowsRead, wRowsWritten, wD1Storage, wR2Storage, wCost]
225
- .map((w) => "-".repeat(w))
226
- .join(" ");
227
- console.log(separator);
228
- // Print rows
229
- for (const row of rows) {
230
- console.log(`${pad(row.email, wUser)} ${pad(formatNumber(row.requests), wRequests, "right")} ${pad(formatNumber(row.cpuTimeMs), wCpu, "right")} ${pad(formatNumber(row.rowsRead), wRowsRead, "right")} ${pad(formatNumber(row.rowsWritten), wRowsWritten, "right")} ${pad(formatBytes(row.d1StorageBytes), wD1Storage, "right")} ${pad(formatBytes(row.r2StorageBytes), wR2Storage, "right")} ${pad(formatCost(row.cost), wCost, "right")}`);
231
- }
232
- // Print total
233
- console.log(separator);
234
- console.log(`${pad("Total", wUser)} ${pad(formatNumber(totalRequests), wRequests, "right")} ${pad(formatNumber(totalCpuTimeMs), wCpu, "right")} ${pad(formatNumber(totalRowsRead), wRowsRead, "right")} ${pad(formatNumber(totalRowsWritten), wRowsWritten, "right")} ${pad(formatBytes(totalD1StorageBytes), wD1Storage, "right")} ${pad(formatBytes(totalR2StorageBytes), wR2Storage, "right")} ${pad(formatCost(totalCost), wCost, "right")}`);
235
- // Print period info
236
- console.log();
237
- console.log(`Period: last ${days} days`);
238
- }
239
- catch (error) {
240
- console.error(`Error: ${error instanceof Error ? error.message : "Unknown error"}`);
241
- process.exit(1);
242
- }
243
- });
244
- //# sourceMappingURL=admin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../../src/cli/commands/admin.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- /**
2
- * fling dev worker - The actual development server process
3
- *
4
- * This script is spawned by `fling dev` using `tsx watch`.
5
- * tsx watch monitors all imported files and restarts this process on changes.
6
- *
7
- * Environment variables:
8
- * PORT - Port to run the HTTP server on (default: 3210)
9
- * PROJECT_DIR - Project directory (default: cwd)
10
- */
11
- export {};
12
- //# sourceMappingURL=dev-worker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-worker.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dev-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -1,66 +0,0 @@
1
- /**
2
- * fling dev worker - The actual development server process
3
- *
4
- * This script is spawned by `fling dev` using `tsx watch`.
5
- * tsx watch monitors all imported files and restarts this process on changes.
6
- *
7
- * Environment variables:
8
- * PORT - Port to run the HTTP server on (default: 3210)
9
- * PROJECT_DIR - Project directory (default: cwd)
10
- */
11
- import { serve } from "@hono/node-server";
12
- import { pathToFileURL } from "node:url";
13
- import { getWorkerEntryPath } from "../utils/project.js";
14
- const port = parseInt(process.env["PORT"] ?? "3210", 10);
15
- const projectDir = process.env["PROJECT_DIR"] ?? process.cwd();
16
- const workerEntry = getWorkerEntryPath(projectDir);
17
- console.log(`[worker] Starting backend server (pid ${process.pid})...`);
18
- let server = null;
19
- async function main() {
20
- try {
21
- // Import the user's app - this registers routes, cron jobs, and migrations
22
- // tsx handles TypeScript imports automatically
23
- const appUrl = pathToFileURL(workerEntry).href;
24
- await import(appUrl);
25
- // Import runtime modules
26
- const { app } = await import("../../runtime/http.js");
27
- const { runMigrations } = await import("../../runtime/migrate.js");
28
- const { startCronJobs, getCronJobs, stopCronJobs } = await import("../../runtime/cron.js");
29
- const { closeLogDatabase } = await import("../../runtime/log.js");
30
- // Run migrations (before starting crons or HTTP server)
31
- await runMigrations();
32
- // Start cron jobs
33
- startCronJobs();
34
- const cronJobs = getCronJobs();
35
- if (cronJobs.size > 0) {
36
- console.log(`[worker] Cron jobs: ${cronJobs.size} registered`);
37
- }
38
- // Graceful shutdown handler
39
- const shutdown = () => {
40
- console.log("[worker] Shutting down...");
41
- stopCronJobs();
42
- closeLogDatabase();
43
- if (server) {
44
- server.close();
45
- }
46
- process.exit(0);
47
- };
48
- process.on("SIGINT", shutdown);
49
- process.on("SIGTERM", shutdown);
50
- // Start HTTP server
51
- console.log(`[worker] API server: http://localhost:${port}`);
52
- server = serve({
53
- fetch: app.fetch,
54
- port,
55
- });
56
- }
57
- catch (error) {
58
- console.error("[worker] Failed to start:", error);
59
- process.exit(1);
60
- }
61
- }
62
- main().catch((error) => {
63
- console.error("[worker] Unhandled error:", error);
64
- process.exit(1);
65
- });
66
- //# sourceMappingURL=dev-worker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-worker.js","sourceRoot":"","sources":["../../../src/cli/commands/dev-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,KAAK,EAAc,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AACzD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AAE/D,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;AAEnD,OAAO,CAAC,GAAG,CAAC,yCAAyC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AAExE,IAAI,MAAM,GAAsB,IAAI,CAAC;AAErC,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,2EAA2E;QAC3E,+CAA+C;QAC/C,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;QAC/C,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QAErB,yBAAyB;QACzB,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACtD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QACnE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAC/D,uBAAuB,CACxB,CAAC;QACF,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAElE,wDAAwD;QACxD,MAAM,aAAa,EAAE,CAAC;QAEtB,kBAAkB;QAClB,aAAa,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,CAAC,IAAI,aAAa,CAAC,CAAC;QACjE,CAAC;QAED,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACzC,YAAY,EAAE,CAAC;YACf,gBAAgB,EAAE,CAAC;YACnB,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEhC,oBAAoB;QACpB,OAAO,CAAC,GAAG,CAAC,yCAAyC,IAAI,EAAE,CAAC,CAAC;QAE7D,MAAM,GAAG,KAAK,CAAC;YACb,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1,13 +0,0 @@
1
- /**
2
- * fling tun - Expose local development server via Cloudflare Tunnel
3
- *
4
- * Uses cloudflared (Cloudflare's tunnel daemon) for high-performance,
5
- * concurrent request handling. The platform provisions tunnel credentials
6
- * and DNS records; the CLI runs cloudflared with the provided token.
7
- *
8
- * Usage:
9
- * fling tun 3000 # Tunnel localhost:3000
10
- */
11
- import { Command } from "commander";
12
- export declare const tunCommand: Command;
13
- //# sourceMappingURL=tun.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tun.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/tun.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,eAAO,MAAM,UAAU,SAyFnB,CAAC"}
@@ -1,189 +0,0 @@
1
- /**
2
- * fling tun - Expose local development server via Cloudflare Tunnel
3
- *
4
- * Uses cloudflared (Cloudflare's tunnel daemon) for high-performance,
5
- * concurrent request handling. The platform provisions tunnel credentials
6
- * and DNS records; the CLI runs cloudflared with the provided token.
7
- *
8
- * Usage:
9
- * fling tun 3000 # Tunnel localhost:3000
10
- */
11
- import { Command } from "commander";
12
- import { spawn } from "child_process";
13
- import { existsSync } from "fs";
14
- import { platformFetch, getToken } from "../utils/config.js";
15
- import { getProjectName } from "../utils/project-name.js";
16
- export const tunCommand = new Command("tun")
17
- .description("Expose local server via Cloudflare Tunnel")
18
- .argument("<port>", "Local port to tunnel")
19
- .addHelpText("after", `
20
- What it does:
21
- Creates a Cloudflare Tunnel from the internet to your local development server.
22
- External requests to the tunnel URL are forwarded to localhost:<port>.
23
-
24
- This uses cloudflared (Cloudflare's tunnel daemon) which provides:
25
- - Full concurrent request handling (no serialization)
26
- - Native Cloudflare edge integration
27
- - Automatic TLS termination
28
-
29
- Examples:
30
- fling tun 3000 Tunnel localhost:3000
31
-
32
- The tunnel URL will be displayed when connected. Keep the command running
33
- to maintain the tunnel. Press Ctrl+C to disconnect.
34
-
35
- Prerequisites:
36
- - Must be logged in (fling login)
37
- - Local server must be running on the specified port
38
-
39
- Note: cloudflared will be automatically downloaded on first use.
40
- `)
41
- .action(async (portArg) => {
42
- const port = parseInt(portArg, 10);
43
- if (isNaN(port) || port < 1 || port > 65535) {
44
- console.error("Error: Port must be a number between 1 and 65535");
45
- process.exit(1);
46
- }
47
- const token = getToken();
48
- if (!token) {
49
- console.error("Error: Not logged in. Run 'fling login' first.");
50
- process.exit(1);
51
- }
52
- // Get project name from package.json (defaults to "default" for backwards compatibility)
53
- const projectName = getProjectName();
54
- console.log(`Starting tunnel to localhost:${port}...`);
55
- // Ensure cloudflared is installed
56
- const cloudflaredBin = await ensureCloudflared();
57
- if (!cloudflaredBin) {
58
- process.exit(1);
59
- }
60
- // Request tunnel credentials from platform
61
- const tunResponse = await startTunnel(projectName, port);
62
- if (!tunResponse) {
63
- process.exit(1);
64
- }
65
- console.log(`\nTunnel URL: ${tunResponse.tunnelUrl}`);
66
- console.log(`Forwarding to: http://localhost:${port}`);
67
- console.log("\nPress Ctrl+C to disconnect\n");
68
- // Run cloudflared with the token
69
- const cloudflaredProcess = runCloudflared(cloudflaredBin, tunResponse.token, port);
70
- // Handle graceful shutdown
71
- const cleanup = async () => {
72
- console.log("\nDisconnecting tunnel...");
73
- cloudflaredProcess.kill("SIGTERM");
74
- // Stop tunnel on platform
75
- await stopTunnel(projectName);
76
- process.exit(0);
77
- };
78
- process.on("SIGINT", () => void cleanup());
79
- process.on("SIGTERM", () => void cleanup());
80
- // Wait for cloudflared to exit
81
- cloudflaredProcess.on("exit", (code) => {
82
- if (code !== 0 && code !== null) {
83
- console.error(`cloudflared exited with code ${code}`);
84
- }
85
- process.exit(code ?? 0);
86
- });
87
- });
88
- /**
89
- * Ensure cloudflared binary is installed.
90
- * Uses the 'cloudflared' npm package which handles platform-specific downloads.
91
- */
92
- async function ensureCloudflared() {
93
- try {
94
- // Dynamic import to handle the cloudflared package
95
- const { bin, install } = await import("cloudflared");
96
- if (!existsSync(bin)) {
97
- console.log("Installing cloudflared...");
98
- await install(bin);
99
- console.log("cloudflared installed successfully");
100
- }
101
- return bin;
102
- }
103
- catch (error) {
104
- console.error("Failed to install cloudflared:", error);
105
- return null;
106
- }
107
- }
108
- /**
109
- * Request tunnel credentials from the platform.
110
- */
111
- async function startTunnel(projectName, localPort) {
112
- try {
113
- const response = await platformFetch(`/project/${encodeURIComponent(projectName)}/tun/start`, {
114
- method: "POST",
115
- headers: { "Content-Type": "application/json" },
116
- body: JSON.stringify({ localPort }),
117
- });
118
- if (!response.ok) {
119
- const error = await response.json().catch(() => ({}));
120
- console.error(`Error: Failed to start tunnel: ${error.error ?? response.statusText}`);
121
- return null;
122
- }
123
- return (await response.json());
124
- }
125
- catch (error) {
126
- console.error("Error: Failed to connect to platform:", error);
127
- return null;
128
- }
129
- }
130
- /**
131
- * Notify platform that tunnel is stopping.
132
- */
133
- async function stopTunnel(projectName) {
134
- try {
135
- await platformFetch(`/project/${encodeURIComponent(projectName)}/tun/stop`, { method: "DELETE" });
136
- }
137
- catch {
138
- // Ignore errors on cleanup
139
- }
140
- }
141
- /**
142
- * Run cloudflared with the provided token.
143
- */
144
- function runCloudflared(bin, tunnelToken, localPort) {
145
- const args = [
146
- "tunnel",
147
- "--no-autoupdate",
148
- "run",
149
- "--token",
150
- tunnelToken,
151
- "--url",
152
- `http://localhost:${localPort}`,
153
- ];
154
- const child = spawn(bin, args, {
155
- stdio: ["ignore", "pipe", "pipe"],
156
- });
157
- // Forward cloudflared output (stdout and stderr are piped, so they're non-null)
158
- child.stdout.on("data", (data) => {
159
- const lines = data.toString().split("\n").filter(Boolean);
160
- for (const line of lines) {
161
- // Filter out noisy logs, show important ones
162
- if (line.includes("error") ||
163
- line.includes("failed") ||
164
- line.includes("connected") ||
165
- line.includes("Registered")) {
166
- console.log(`[cloudflared] ${line}`);
167
- }
168
- }
169
- });
170
- child.stderr.on("data", (data) => {
171
- const lines = data.toString().split("\n").filter(Boolean);
172
- for (const line of lines) {
173
- // cloudflared logs to stderr by default
174
- if (line.includes("ERR") ||
175
- line.includes("error") ||
176
- line.includes("failed")) {
177
- console.error(`[cloudflared] ${line}`);
178
- }
179
- else if (line.includes("INF") &&
180
- (line.includes("connect") ||
181
- line.includes("Registered") ||
182
- line.includes("serving"))) {
183
- console.log(`[cloudflared] ${line}`);
184
- }
185
- }
186
- });
187
- return child;
188
- }
189
- //# sourceMappingURL=tun.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tun.js","sourceRoot":"","sources":["../../../src/cli/commands/tun.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- /**
2
- * Default implementation of LaunchIO using real dependencies.
3
- */
4
- import type { LaunchIO } from "./launch-io.js";
5
- /**
6
- * Create the default LaunchIO implementation using real dependencies.
7
- */
8
- export declare function createDefaultLaunchIO(): LaunchIO;
9
- /**
10
- * Default LaunchIO instance.
11
- */
12
- export declare const defaultLaunchIO: LaunchIO;
13
- //# sourceMappingURL=launch-io-impl.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"launch-io-impl.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/launch-io-impl.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,QAAQ,CAiDhD;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,UAA0B,CAAC"}
@@ -1,51 +0,0 @@
1
- /**
2
- * Default implementation of LaunchIO using real dependencies.
3
- */
4
- import { existsSync, readdirSync } from "node:fs";
5
- import { join } from "node:path";
6
- import { homedir } from "node:os";
7
- import * as p from "@clack/prompts";
8
- /**
9
- * Create the default LaunchIO implementation using real dependencies.
10
- */
11
- export function createDefaultLaunchIO() {
12
- const flingHome = join(homedir(), "fling");
13
- const cwd = process.cwd();
14
- return {
15
- user: {
16
- async select(opts) {
17
- return p.select(opts);
18
- },
19
- async text(opts) {
20
- return p.text(opts);
21
- },
22
- isCancel: p.isCancel,
23
- },
24
- file: {
25
- exists(path) {
26
- return existsSync(path);
27
- },
28
- isProjectRoot(dir) {
29
- return existsSync(join(dir, ".claude", "skills", "fling"));
30
- },
31
- isDirEmpty(dir) {
32
- try {
33
- return readdirSync(dir).length === 0;
34
- }
35
- catch {
36
- return false;
37
- }
38
- },
39
- },
40
- paths: {
41
- flingHome,
42
- cwd,
43
- homedir: homedir(),
44
- },
45
- };
46
- }
47
- /**
48
- * Default LaunchIO instance.
49
- */
50
- export const defaultLaunchIO = createDefaultLaunchIO();
51
- //# sourceMappingURL=launch-io-impl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"launch-io-impl.js","sourceRoot":"","sources":["../../../src/cli/utils/launch-io-impl.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAGpC;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,OAAO;QACL,IAAI,EAAE;YACJ,KAAK,CAAC,MAAM,CAAmB,IAG9B;gBACC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAsC,CAErD,CAAC;YACJ,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,IAGV;gBACC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;YAED,QAAQ,EAAE,CAAC,CAAC,QAAQ;SACrB;QAED,IAAI,EAAE;YACJ,MAAM,CAAC,IAAY;gBACjB,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YAED,aAAa,CAAC,GAAW;gBACvB,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,CAAC;YAED,UAAU,CAAC,GAAW;gBACpB,IAAI,CAAC;oBACH,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;gBACvC,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;SACF;QAED,KAAK,EAAE;YACL,SAAS;YACT,GAAG;YACH,OAAO,EAAE,OAAO,EAAE;SACnB;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,qBAAqB,EAAE,CAAC"}