@timecell/cli 0.1.0

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.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env node
2
+ import { buildServer } from "@timecell/api";
3
+ import open from "open";
4
+ import { runWizard } from "./wizard.js";
5
+ const APP_URL = "http://localhost:3737";
6
+ function printBanner() {
7
+ console.log("─────────────────────────────────────────────");
8
+ console.log(" TimeCell v0.1.0 — Crash Survival Calculator");
9
+ console.log("─────────────────────────────────────────────");
10
+ }
11
+ async function main() {
12
+ printBanner();
13
+ await runWizard();
14
+ console.log("\nStarting TimeCell API server...");
15
+ const server = await buildServer();
16
+ try {
17
+ await server.listen({ port: 3737, host: "0.0.0.0" });
18
+ }
19
+ catch (err) {
20
+ server.log.error(err);
21
+ process.exit(1);
22
+ }
23
+ console.log(`\nTimeCell is running at ${APP_URL}`);
24
+ console.log("Opening browser...\n");
25
+ await open(APP_URL);
26
+ console.log("Press Ctrl+C to stop.\n");
27
+ const shutdown = async () => {
28
+ console.log("\nShutting down TimeCell...");
29
+ await server.close();
30
+ process.exit(0);
31
+ };
32
+ process.on("SIGINT", shutdown);
33
+ process.on("SIGTERM", shutdown);
34
+ }
35
+ main().catch((err) => {
36
+ console.error("Fatal error:", err);
37
+ process.exit(1);
38
+ });
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,OAAO,GAAG,uBAAuB,CAAC;AAExC,SAAS,WAAW;IAClB,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;AAC/D,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,WAAW,EAAE,CAAC;IAEd,MAAM,SAAS,EAAE,CAAC;IAElB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAEjD,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;IAEnC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAEpC,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;IAEpB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { PortfolioInput } from "@timecell/engine";
2
+ export interface WizardResult {
3
+ portfolio: PortfolioInput;
4
+ }
5
+ export declare function runWizard(): Promise<WizardResult>;
6
+ //# sourceMappingURL=wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKvD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CA8CvD"}
package/dist/wizard.js ADDED
@@ -0,0 +1,46 @@
1
+ import { number } from "@inquirer/prompts";
2
+ import { mkdir, writeFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { homedir } from "node:os";
5
+ const CONFIG_DIR = join(homedir(), ".timecell");
6
+ const PORTFOLIO_PATH = join(CONFIG_DIR, "portfolio.json");
7
+ export async function runWizard() {
8
+ console.log("\nLet's configure your portfolio.\n");
9
+ const totalValueUsd = await number({
10
+ message: "Total portfolio value (USD):",
11
+ default: 5_000_000,
12
+ validate: (v) => (v !== undefined && v > 0 ? true : "Must be a positive number"),
13
+ });
14
+ const btcPercentage = await number({
15
+ message: "Bitcoin allocation (%):",
16
+ default: 35,
17
+ validate: (v) => (v !== undefined && v >= 0 && v <= 100 ? true : "Must be between 0 and 100"),
18
+ });
19
+ const monthlyBurnUsd = await number({
20
+ message: "Monthly burn rate (USD):",
21
+ default: 25_000,
22
+ validate: (v) => (v !== undefined && v > 0 ? true : "Must be a positive number"),
23
+ });
24
+ const liquidReserveUsd = await number({
25
+ message: "Liquid reserve (USD):",
26
+ default: 600_000,
27
+ validate: (v) => (v !== undefined && v >= 0 ? true : "Must be a non-negative number"),
28
+ });
29
+ const btcPriceUsd = await number({
30
+ message: "Current BTC price (USD):",
31
+ default: 84_000,
32
+ validate: (v) => (v !== undefined && v > 0 ? true : "Must be a positive number"),
33
+ });
34
+ const portfolio = {
35
+ totalValueUsd,
36
+ btcPercentage,
37
+ monthlyBurnUsd,
38
+ liquidReserveUsd,
39
+ btcPriceUsd,
40
+ };
41
+ await mkdir(CONFIG_DIR, { recursive: true });
42
+ await writeFile(PORTFOLIO_PATH, JSON.stringify({ portfolio }, null, 2));
43
+ console.log(`\nPortfolio saved to ${PORTFOLIO_PATH}`);
44
+ return { portfolio };
45
+ }
46
+ //# sourceMappingURL=wizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAChD,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;AAM1D,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAEnD,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC;QACjC,OAAO,EAAE,8BAA8B;QACvC,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,2BAA2B,CAAC;KACjF,CAAW,CAAC;IAEb,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC;QACjC,OAAO,EAAE,yBAAyB;QAClC,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,2BAA2B,CAAC;KAC9F,CAAW,CAAC;IAEb,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC;QAClC,OAAO,EAAE,0BAA0B;QACnC,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,2BAA2B,CAAC;KACjF,CAAW,CAAC;IAEb,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC;QACpC,OAAO,EAAE,uBAAuB;QAChC,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,+BAA+B,CAAC;KACtF,CAAW,CAAC;IAEb,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC;QAC/B,OAAO,EAAE,0BAA0B;QACnC,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,2BAA2B,CAAC;KACjF,CAAW,CAAC;IAEb,MAAM,SAAS,GAAmB;QAChC,aAAa;QACb,aAAa;QACb,cAAc;QACd,gBAAgB;QAChB,WAAW;KACZ,CAAC;IAEF,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,wBAAwB,cAAc,EAAE,CAAC,CAAC;IAEtD,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@timecell/cli",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "TimeCell CLI — Crash Survival Calculator",
6
+ "bin": {
7
+ "timecell": "dist/index.js"
8
+ },
9
+ "files": ["dist"],
10
+ "publishConfig": {
11
+ "access": "public"
12
+ },
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "dev": "tsx src/index.ts"
16
+ },
17
+ "dependencies": {
18
+ "@inquirer/prompts": "^7",
19
+ "@timecell/api": "0.1.0",
20
+ "@timecell/engine": "0.1.0",
21
+ "open": "^10"
22
+ },
23
+ "devDependencies": {
24
+ "@types/node": "latest",
25
+ "tsx": "latest"
26
+ }
27
+ }