@timecell/api 0.1.2 → 0.2.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.
- package/dist/routes/action-plan.d.ts +3 -0
- package/dist/routes/action-plan.d.ts.map +1 -0
- package/dist/routes/action-plan.js +58 -0
- package/dist/routes/action-plan.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +5 -1
- package/dist/server.js.map +1 -1
- package/dist/web/dist/assets/index-BWWPrioD.js +113 -0
- package/dist/web/dist/assets/index-BdFQ7jf3.js +113 -0
- package/dist/web/dist/assets/index-Csq6J4e2.js +113 -0
- package/dist/web/dist/assets/index-D2dZfIwA.css +1 -0
- package/dist/web/dist/assets/index-DK51rASe.css +1 -0
- package/dist/web/dist/assets/index-FbkZPqxI.js +113 -0
- package/dist/web/dist/assets/index-_y4hFJfB.css +1 -0
- package/dist/web/dist/index.html +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-plan.d.ts","sourceRoot":"","sources":["../../src/routes/action-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AA2D/C,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,eAAe,iBAS9D"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { generateActionPlan } from "@timecell/engine";
|
|
2
|
+
function validateActionPlanInput(body) {
|
|
3
|
+
if (!body || typeof body !== "object") {
|
|
4
|
+
return { valid: false, error: "Request body must be a JSON object" };
|
|
5
|
+
}
|
|
6
|
+
const b = body;
|
|
7
|
+
// btcPercentage: number 0-100
|
|
8
|
+
if (typeof b.btcPercentage !== "number" || b.btcPercentage < 0 || b.btcPercentage > 100) {
|
|
9
|
+
return { valid: false, error: "btcPercentage must be a number between 0 and 100" };
|
|
10
|
+
}
|
|
11
|
+
// ruinTestPassed: boolean
|
|
12
|
+
if (typeof b.ruinTestPassed !== "boolean") {
|
|
13
|
+
return { valid: false, error: "ruinTestPassed must be a boolean" };
|
|
14
|
+
}
|
|
15
|
+
// runwayMonths: number >= 0 (Infinity is allowed)
|
|
16
|
+
if (typeof b.runwayMonths !== "number" || b.runwayMonths < 0) {
|
|
17
|
+
return { valid: false, error: "runwayMonths must be a number >= 0" };
|
|
18
|
+
}
|
|
19
|
+
// temperatureScore: number 0-100
|
|
20
|
+
if (typeof b.temperatureScore !== "number" || b.temperatureScore < 0 || b.temperatureScore > 100) {
|
|
21
|
+
return { valid: false, error: "temperatureScore must be a number between 0 and 100" };
|
|
22
|
+
}
|
|
23
|
+
// liquidReserveUsd: number >= 0
|
|
24
|
+
if (typeof b.liquidReserveUsd !== "number" || b.liquidReserveUsd < 0) {
|
|
25
|
+
return { valid: false, error: "liquidReserveUsd must be a number >= 0" };
|
|
26
|
+
}
|
|
27
|
+
// monthlyBurnUsd: number >= 0
|
|
28
|
+
if (typeof b.monthlyBurnUsd !== "number" || b.monthlyBurnUsd < 0) {
|
|
29
|
+
return { valid: false, error: "monthlyBurnUsd must be a number >= 0" };
|
|
30
|
+
}
|
|
31
|
+
// totalValueUsd: number >= 0
|
|
32
|
+
if (typeof b.totalValueUsd !== "number" || b.totalValueUsd < 0) {
|
|
33
|
+
return { valid: false, error: "totalValueUsd must be a number >= 0" };
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
valid: true,
|
|
37
|
+
data: {
|
|
38
|
+
btcPercentage: b.btcPercentage,
|
|
39
|
+
ruinTestPassed: b.ruinTestPassed,
|
|
40
|
+
runwayMonths: b.runwayMonths,
|
|
41
|
+
temperatureScore: b.temperatureScore,
|
|
42
|
+
liquidReserveUsd: b.liquidReserveUsd,
|
|
43
|
+
monthlyBurnUsd: b.monthlyBurnUsd,
|
|
44
|
+
totalValueUsd: b.totalValueUsd,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export async function actionPlanRoutes(fastify) {
|
|
49
|
+
fastify.post("/action-plan", async (request, reply) => {
|
|
50
|
+
const validation = validateActionPlanInput(request.body);
|
|
51
|
+
if (!validation.valid) {
|
|
52
|
+
reply.status(400).send({ error: validation.error });
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
return generateActionPlan(validation.data);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=action-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-plan.js","sourceRoot":"","sources":["../../src/routes/action-plan.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AA4BA,wBAAsB,WAAW,mWAmChC"}
|
package/dist/server.js
CHANGED
|
@@ -8,6 +8,8 @@ import { crashRoutes } from "./routes/crash.js";
|
|
|
8
8
|
import { portfolioRoutes } from "./routes/portfolio.js";
|
|
9
9
|
import { priceRoutes } from "./routes/price.js";
|
|
10
10
|
import { temperatureRoutes } from "./routes/temperature.js";
|
|
11
|
+
import { positionSizingRoutes } from "./routes/position-sizing.js";
|
|
12
|
+
import { actionPlanRoutes } from "./routes/action-plan.js";
|
|
11
13
|
function findWebDist() {
|
|
12
14
|
const candidates = [
|
|
13
15
|
// Bundled inside API package (npm published)
|
|
@@ -31,8 +33,10 @@ export async function buildServer() {
|
|
|
31
33
|
await fastify.register(portfolioRoutes, { prefix: "/api" });
|
|
32
34
|
await fastify.register(priceRoutes, { prefix: "/api" });
|
|
33
35
|
await fastify.register(temperatureRoutes, { prefix: "/api" });
|
|
36
|
+
await fastify.register(positionSizingRoutes, { prefix: "/api" });
|
|
37
|
+
await fastify.register(actionPlanRoutes, { prefix: "/api" });
|
|
34
38
|
// Health check
|
|
35
|
-
fastify.get("/api/health", async () => ({ status: "ok", version: "0.
|
|
39
|
+
fastify.get("/api/health", async () => ({ status: "ok", version: "0.2.0" }));
|
|
36
40
|
// Serve built web dashboard if available
|
|
37
41
|
const webDist = findWebDist();
|
|
38
42
|
if (webDist) {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,eAAe,CAAC;AACjC,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|