flingit 0.0.41 → 0.0.43

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 (37) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/commands/launch.d.ts +0 -8
  3. package/dist/cli/commands/launch.d.ts.map +1 -1
  4. package/dist/cli/commands/launch.js +1 -12
  5. package/dist/cli/commands/launch.js.map +1 -1
  6. package/dist/cli/commands/verify.js +1 -1
  7. package/dist/cli/index.js +1 -3
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/cli/utils/cli-io-impl.d.ts +1 -3
  10. package/dist/cli/utils/cli-io-impl.d.ts.map +1 -1
  11. package/dist/cli/utils/cli-io-impl.js +2 -53
  12. package/dist/cli/utils/cli-io-impl.js.map +1 -1
  13. package/dist/cli/utils/cli-io.d.ts +0 -47
  14. package/dist/cli/utils/cli-io.d.ts.map +1 -1
  15. package/dist/cli/utils/config.d.ts.map +1 -1
  16. package/dist/cli/utils/config.js +9 -1
  17. package/dist/cli/utils/config.js.map +1 -1
  18. package/dist/cli/utils/prompt-new-project.d.ts.map +1 -1
  19. package/dist/cli/utils/prompt-new-project.js +6 -5
  20. package/dist/cli/utils/prompt-new-project.js.map +1 -1
  21. package/dist/cli/utils/retry.d.ts +16 -1
  22. package/dist/cli/utils/retry.d.ts.map +1 -1
  23. package/dist/cli/utils/retry.js +62 -3
  24. package/dist/cli/utils/retry.js.map +1 -1
  25. package/dist/shared/constants.d.ts +11 -0
  26. package/dist/shared/constants.d.ts.map +1 -1
  27. package/dist/shared/constants.js +11 -0
  28. package/dist/shared/constants.js.map +1 -1
  29. package/package.json +2 -1
  30. package/dist/cli/commands/onboard.d.ts +0 -56
  31. package/dist/cli/commands/onboard.d.ts.map +0 -1
  32. package/dist/cli/commands/onboard.js +0 -443
  33. package/dist/cli/commands/onboard.js.map +0 -1
  34. package/dist/cli/utils/token.d.ts +0 -12
  35. package/dist/cli/utils/token.d.ts.map +0 -1
  36. package/dist/cli/utils/token.js +0 -27
  37. package/dist/cli/utils/token.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-new-project.js","sourceRoot":"","sources":["../../../src/cli/utils/prompt-new-project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG1C;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAY;IAEZ,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACjC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAE1C,MAAM,OAAO,GAAuC,EAAE,CAAC;IAEvD,uBAAuB;IACvB,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAE/C,+DAA+D;IAC/D,mEAAmE;IACnE,qEAAqE;IACrE,qEAAqE;IACrE,yCAAyC;IACzC,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,iEAAiE;IACjE,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC;YACX,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,+BAA+B,GAAG,GAAG;SAC7C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;QAC/B,OAAO,EAAE,qDAAqD;QAC9D,OAAO;KACR,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;YAC9B,OAAO,EAAE,sCAAsC;YAC/C,WAAW,EAAE,cAAc;SAC5B,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YACvC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC,CAAC,OAAO,CAAC;QACZ,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"prompt-new-project.js","sourceRoot":"","sources":["../../../src/cli/utils/prompt-new-project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAErE;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAY;IAEZ,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACjC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAE1C,MAAM,OAAO,GAAuC,EAAE,CAAC;IAEvD,yBAAyB;IACzB,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAE/C,iEAAiE;IACjE,8DAA8D;IAC9D,qEAAqE;IACrE,qEAAqE;IACrE,yCAAyC;IACzC,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,wBAAwB,EAAE,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,mEAAmE;IACnE,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC;YACX,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,+BAA+B,GAAG,GAAG;SAC7C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;QAC/B,OAAO,EAAE,qDAAqD;QAC9D,OAAO;KACR,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;YAC9B,OAAO,EAAE,sCAAsC;YAC/C,WAAW,EAAE,cAAc;SAC5B,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YACvC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC,CAAC,OAAO,CAAC;QACZ,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Retry utility with exponential backoff.
2
+ * Retry utilities with exponential backoff.
3
3
  */
4
4
  export interface RetryOptions {
5
5
  /** Maximum number of attempts (default: 5) */
@@ -12,6 +12,8 @@ export interface RetryOptions {
12
12
  label?: string;
13
13
  /** Whether to log retry attempts (default: true) */
14
14
  verbose?: boolean;
15
+ /** Optional predicate to determine if an error is retryable. If provided and returns false, the error is thrown immediately without retrying. */
16
+ shouldRetry?: (error: unknown) => boolean;
15
17
  }
16
18
  /**
17
19
  * Retry an async operation with exponential backoff.
@@ -22,4 +24,17 @@ export interface RetryOptions {
22
24
  * @throws The last error if all attempts fail
23
25
  */
24
26
  export declare function withRetry<T>(operation: () => Promise<T>, options?: RetryOptions): Promise<T>;
27
+ export interface FetchRetryOptions {
28
+ /** Maximum number of attempts (default: 3) */
29
+ maxAttempts?: number;
30
+ /** Initial delay in ms (default: 1000) */
31
+ initialDelayMs?: number;
32
+ /** Called on retry with attempt info. */
33
+ onRetry?: (url: string, attempt: number, maxAttempts: number, reason: string, delayMs: number) => void;
34
+ }
35
+ /**
36
+ * Wrap a fetch function with retry logic for transient errors.
37
+ * Retries on network errors (fetch throws) and transient HTTP status codes (502/503/504).
38
+ */
39
+ export declare function fetchWithRetry(fetchFn: typeof globalThis.fetch, options?: FetchRetryOptions): typeof globalThis.fetch;
25
40
  //# sourceMappingURL=retry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,CAAC,CAAC,CAmCZ"}
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iJAAiJ;IACjJ,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CAC3C;AAED;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,CAAC,CAAC,CA2CZ;AAMD,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxG;AAQD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,EAChC,OAAO,GAAE,iBAAsB,GAC9B,OAAO,UAAU,CAAC,KAAK,CAkDzB"}
@@ -1,6 +1,8 @@
1
1
  /**
2
- * Retry utility with exponential backoff.
2
+ * Retry utilities with exponential backoff.
3
3
  */
4
+ /** HTTP status codes that indicate transient server errors worth retrying. */
5
+ const RETRYABLE_STATUS_CODES = new Set([502, 503, 504]);
4
6
  /**
5
7
  * Retry an async operation with exponential backoff.
6
8
  *
@@ -10,9 +12,11 @@
10
12
  * @throws The last error if all attempts fail
11
13
  */
12
14
  export async function withRetry(operation, options = {}) {
13
- const { maxAttempts = 5, initialDelayMs = 1000, maxDelayMs = 10000, label = "Operation", verbose = true, } = options;
15
+ const { maxAttempts = 5, initialDelayMs = 1000, maxDelayMs = 10000, label = "Operation", verbose = true, shouldRetry, } = options;
14
16
  let lastError;
17
+ let actualAttempts = 0;
15
18
  for (let attempt = 1; attempt <= maxAttempts; attempt++) {
19
+ actualAttempts = attempt;
16
20
  try {
17
21
  return await operation();
18
22
  }
@@ -21,6 +25,10 @@ export async function withRetry(operation, options = {}) {
21
25
  if (attempt === maxAttempts) {
22
26
  break;
23
27
  }
28
+ // If shouldRetry is provided and says no, fail immediately
29
+ if (shouldRetry && !shouldRetry(error)) {
30
+ break;
31
+ }
24
32
  // Exponential backoff: 1s, 2s, 4s, 8s, ... capped at maxDelayMs
25
33
  const delay = Math.min(initialDelayMs * Math.pow(2, attempt - 1), maxDelayMs);
26
34
  if (verbose) {
@@ -29,6 +37,57 @@ export async function withRetry(operation, options = {}) {
29
37
  await new Promise((resolve) => setTimeout(resolve, delay));
30
38
  }
31
39
  }
32
- throw new Error(`${label} failed after ${maxAttempts} attempts: ${lastError?.message}`);
40
+ throw new Error(`${label} failed after ${actualAttempts} attempts: ${lastError?.message}`);
41
+ }
42
+ function extractUrl(input) {
43
+ if (typeof input === "string")
44
+ return input;
45
+ if (input instanceof URL)
46
+ return input.href;
47
+ return input.url;
48
+ }
49
+ /**
50
+ * Wrap a fetch function with retry logic for transient errors.
51
+ * Retries on network errors (fetch throws) and transient HTTP status codes (502/503/504).
52
+ */
53
+ export function fetchWithRetry(fetchFn, options = {}) {
54
+ const { maxAttempts = 3, initialDelayMs = 1000, onRetry, } = options;
55
+ return async (input, init) => {
56
+ let lastError;
57
+ const url = extractUrl(input);
58
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
59
+ try {
60
+ const response = await fetchFn(input, init);
61
+ if (RETRYABLE_STATUS_CODES.has(response.status) && attempt < maxAttempts) {
62
+ // ReadableStream bodies can only be consumed once — don't retry here,
63
+ // let the caller's outer retry logic recreate the stream.
64
+ if (init?.body instanceof ReadableStream) {
65
+ return response;
66
+ }
67
+ const delay = initialDelayMs * Math.pow(2, attempt - 1);
68
+ onRetry?.(url, attempt, maxAttempts, `HTTP ${response.status}`, delay);
69
+ await new Promise((resolve) => setTimeout(resolve, delay));
70
+ continue;
71
+ }
72
+ return response;
73
+ }
74
+ catch (error) {
75
+ lastError = error instanceof Error ? error : new Error(String(error));
76
+ if (attempt === maxAttempts) {
77
+ break;
78
+ }
79
+ // ReadableStream bodies can only be consumed once — don't retry,
80
+ // let the caller's outer retry logic recreate the stream.
81
+ if (init?.body instanceof ReadableStream) {
82
+ break;
83
+ }
84
+ const delay = initialDelayMs * Math.pow(2, attempt - 1);
85
+ onRetry?.(url, attempt, maxAttempts, lastError.message, delay);
86
+ await new Promise((resolve) => setTimeout(resolve, delay));
87
+ }
88
+ }
89
+ // lastError is always set when we reach here (loop ran at least once)
90
+ throw lastError;
91
+ };
33
92
  }
34
93
  //# sourceMappingURL=retry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/cli/utils/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,SAA2B,EAC3B,UAAwB,EAAE;IAE1B,MAAM,EACJ,WAAW,GAAG,CAAC,EACf,cAAc,GAAG,IAAI,EACrB,UAAU,GAAG,KAAK,EAClB,KAAK,GAAG,WAAW,EACnB,OAAO,GAAG,IAAI,GACf,GAAG,OAAO,CAAC;IAEZ,IAAI,SAA4B,CAAC;IAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAEtE,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;gBAC5B,MAAM;YACR,CAAC;YAED,gEAAgE;YAChE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAE9E,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CACV,GAAG,KAAK,oBAAoB,OAAO,IAAI,WAAW,kBAAkB,KAAK,OAAO,SAAS,CAAC,OAAO,EAAE,CACpG,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,iBAAiB,WAAW,cAAc,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;AAC1F,CAAC"}
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/cli/utils/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,8EAA8E;AAC9E,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAiBxD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,SAA2B,EAC3B,UAAwB,EAAE;IAE1B,MAAM,EACJ,WAAW,GAAG,CAAC,EACf,cAAc,GAAG,IAAI,EACrB,UAAU,GAAG,KAAK,EAClB,KAAK,GAAG,WAAW,EACnB,OAAO,GAAG,IAAI,EACd,WAAW,GACZ,GAAG,OAAO,CAAC;IAEZ,IAAI,SAA4B,CAAC;IACjC,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACxD,cAAc,GAAG,OAAO,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAEtE,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;gBAC5B,MAAM;YACR,CAAC;YAED,2DAA2D;YAC3D,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvC,MAAM;YACR,CAAC;YAED,gEAAgE;YAChE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAE9E,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CACV,GAAG,KAAK,oBAAoB,OAAO,IAAI,WAAW,kBAAkB,KAAK,OAAO,SAAS,CAAC,OAAO,EAAE,CACpG,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,iBAAiB,cAAc,cAAc,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;AAC7F,CAAC;AAeD,SAAS,UAAU,CAAC,KAA6B;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,YAAY,GAAG;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IAC5C,OAAO,KAAK,CAAC,GAAG,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAgC,EAChC,UAA6B,EAAE;IAE/B,MAAM,EACJ,WAAW,GAAG,CAAC,EACf,cAAc,GAAG,IAAI,EACrB,OAAO,GACR,GAAG,OAAO,CAAC;IAEZ,OAAO,KAAK,EAAE,KAAK,EAAE,IAAK,EAAE,EAAE;QAC5B,IAAI,SAA4B,CAAC;QACjC,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAE9B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YACxD,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAE5C,IAAI,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,GAAG,WAAW,EAAE,CAAC;oBACzE,sEAAsE;oBACtE,0DAA0D;oBAC1D,IAAI,IAAI,EAAE,IAAI,YAAY,cAAc,EAAE,CAAC;wBACzC,OAAO,QAAQ,CAAC;oBAClB,CAAC;oBACD,MAAM,KAAK,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;oBACxD,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,QAAQ,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;oBACvE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;oBAC3D,SAAS;gBACX,CAAC;gBAED,OAAO,QAAQ,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAEtE,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;oBAC5B,MAAM;gBACR,CAAC;gBAED,iEAAiE;gBACjE,0DAA0D;gBAC1D,IAAI,IAAI,EAAE,IAAI,YAAY,cAAc,EAAE,CAAC;oBACzC,MAAM;gBACR,CAAC;gBAED,MAAM,KAAK,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;gBACxD,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC/D,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,sEAAsE;QACtE,MAAM,SAAkB,CAAC;IAC3B,CAAC,CAAC;AACJ,CAAC"}
@@ -9,6 +9,17 @@
9
9
  * Projects without an explicit name use this value.
10
10
  */
11
11
  export declare const DEFAULT_PROJECT_NAME = "default";
12
+ /**
13
+ * Default first-project home directory, relative to the user's home directory.
14
+ * Single source of truth — used by launch flow and prompt-new-project.
15
+ * Joined with homedir via path.join(homedir, ...DEFAULT_FLING_HOME_SEGMENTS).
16
+ */
17
+ export declare const DEFAULT_FLING_HOME_SEGMENTS: readonly ["flings", "my-first-fling"];
18
+ /**
19
+ * Display label for the default fling home (used in prompts and docs).
20
+ * e.g. "~/flings/my-first-fling"
21
+ */
22
+ export declare const DEFAULT_FLING_HOME_LABEL: string;
12
23
  /**
13
24
  * Default production platform domain.
14
25
  * Keep in sync with platform/shared/constants.ts and platform/<env>/wrangler.toml.
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/shared/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,uBAAuB,gBAAgB,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,yBAAyB,oBAAmC,CAAC;AAE1E;;GAEG;AACH,eAAO,MAAM,wBAAwB,4BAAyC,CAAC;AAE/E;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAG9E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAKT"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/shared/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,uCAAwC,CAAC;AAEjF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,QAA+C,CAAC;AAErF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,gBAAgB,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,yBAAyB,oBAAmC,CAAC;AAE1E;;GAEG;AACH,eAAO,MAAM,wBAAwB,4BAAyC,CAAC;AAE/E;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAG9E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAKT"}
@@ -10,6 +10,17 @@ import { join } from "node:path";
10
10
  * Projects without an explicit name use this value.
11
11
  */
12
12
  export const DEFAULT_PROJECT_NAME = "default";
13
+ /**
14
+ * Default first-project home directory, relative to the user's home directory.
15
+ * Single source of truth — used by launch flow and prompt-new-project.
16
+ * Joined with homedir via path.join(homedir, ...DEFAULT_FLING_HOME_SEGMENTS).
17
+ */
18
+ export const DEFAULT_FLING_HOME_SEGMENTS = ["flings", "my-first-fling"];
19
+ /**
20
+ * Display label for the default fling home (used in prompts and docs).
21
+ * e.g. "~/flings/my-first-fling"
22
+ */
23
+ export const DEFAULT_FLING_HOME_LABEL = `~/${DEFAULT_FLING_HOME_SEGMENTS.join("/")}`;
13
24
  /**
14
25
  * Default production platform domain.
15
26
  * Keep in sync with platform/shared/constants.ts and platform/<env>/wrangler.toml.
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/shared/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAE9C;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC;AAErD;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,OAAO,uBAAuB,EAAE,CAAC;AAE1E;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,WAAW,yBAAyB,EAAE,CAAC;AAE/E;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,eAAmC;IACpE,MAAM,OAAO,GAAG,eAAe,EAAE,IAAI,EAAE,CAAC;IACxC,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAKhC;IACC,IAAI,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC,cAAc,CAAC;IACpD,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACjE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/shared/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAE9C;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAU,CAAC;AAEjF;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,2BAA2B,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAErF;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC;AAErD;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,OAAO,uBAAuB,EAAE,CAAC;AAE1E;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,WAAW,yBAAyB,EAAE,CAAC;AAE/E;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,eAAmC;IACpE,MAAM,OAAO,GAAG,eAAe,EAAE,IAAI,EAAE,CAAC;IACxC,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAKhC;IACC,IAAI,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC,cAAc,CAAC;IACpD,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACjE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flingit",
3
- "version": "0.0.41",
3
+ "version": "0.0.43",
4
4
  "description": "Small Software Platform - Build and deploy personal tools through conversation",
5
5
  "type": "module",
6
6
  "engines": {
@@ -86,6 +86,7 @@
86
86
  "@eslint/js": "^9.39.2",
87
87
  "@types/better-sqlite3": "^7.6.12",
88
88
  "@types/node": "^24.10.9",
89
+ "@vitest/coverage-v8": "^4.0.18",
89
90
  "eslint": "^9.39.2",
90
91
  "eslint-plugin-import-x": "^4.16.1",
91
92
  "husky": "^9.1.7",
@@ -1,56 +0,0 @@
1
- /**
2
- * fling onboard - Interactive onboarding for first-time users
3
- */
4
- import { Command } from "commander";
5
- import type { OnboardingIO } from "../utils/cli-io.js";
6
- /**
7
- * Result from the onboarding flow.
8
- */
9
- export interface OnboardingResult {
10
- authenticated: boolean;
11
- setupProject: boolean;
12
- projectDir?: string;
13
- }
14
- /**
15
- * Options for running onboarding (mostly for testing).
16
- */
17
- export interface OnboardingOptions {
18
- apiUrl?: string;
19
- configDir?: string;
20
- flingHome?: string;
21
- }
22
- export type CredentialResult = "authenticated" | "skipped" | "failed" | "cancelled";
23
- /**
24
- * Prompt the user to authenticate.
25
- * This is the public API that creates its own context using defaults.
26
- */
27
- export declare function promptCredentials(options?: {
28
- message?: string;
29
- }): Promise<CredentialResult>;
30
- /**
31
- * Run the interactive onboarding flow.
32
- *
33
- * This can be called programmatically (from launch.ts) or via the command.
34
- * Returns whether the user authenticated and whether to set up the default project.
35
- */
36
- export declare function runOnboarding(io?: OnboardingIO, options?: OnboardingOptions): Promise<OnboardingResult>;
37
- /**
38
- * Dependencies for the onboard command action.
39
- * Allows testing without module mocking.
40
- */
41
- export interface OnboardActionIO {
42
- runOnboarding: (io: OnboardingIO, options?: OnboardingOptions) => Promise<OnboardingResult>;
43
- io: OnboardingIO;
44
- isProjectRoot: (dir: string) => boolean;
45
- createProject: (dir: string) => Promise<void>;
46
- launchClaudeCode: (dir: string) => void;
47
- }
48
- /**
49
- * Action handler for the onboard command.
50
- * Runs onboarding, then launches Claude Code if a project is ready.
51
- */
52
- export declare function onboardAction(opts: {
53
- apiUrl?: string;
54
- }, deps: OnboardActionIO): Promise<void>;
55
- export declare const onboardCommand: Command;
56
- //# sourceMappingURL=onboard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/onboard.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6SD,MAAM,MAAM,gBAAgB,GACxB,eAAe,GACf,SAAS,GACT,QAAQ,GACR,WAAW,CAAC;AA4EhB;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,CAAC,EAAE;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAG5B;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,EAAE,GAAE,YAAkC,EACtC,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAsF3B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,CACb,EAAE,EAAE,YAAY,EAChB,OAAO,CAAC,EAAE,iBAAiB,KACxB,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/B,EAAE,EAAE,YAAY,CAAC;IACjB,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACxC,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EACzB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,IAAI,CAAC,CAaf;AAyBD,eAAO,MAAM,cAAc,SA2BvB,CAAC"}