@itssergio91/sandman 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.
Files changed (80) hide show
  1. package/dist/cli/commands/connect.d.ts +5 -1
  2. package/dist/cli/commands/connect.d.ts.map +1 -1
  3. package/dist/cli/commands/connect.js +22 -20
  4. package/dist/cli/commands/connect.js.map +1 -1
  5. package/dist/cli/commands/create.d.ts +3 -2
  6. package/dist/cli/commands/create.d.ts.map +1 -1
  7. package/dist/cli/commands/create.js +53 -16
  8. package/dist/cli/commands/create.js.map +1 -1
  9. package/dist/cli/commands/destroy.d.ts +1 -0
  10. package/dist/cli/commands/destroy.d.ts.map +1 -1
  11. package/dist/cli/commands/destroy.js +15 -6
  12. package/dist/cli/commands/destroy.js.map +1 -1
  13. package/dist/cli/commands/enable.d.ts +5 -1
  14. package/dist/cli/commands/enable.d.ts.map +1 -1
  15. package/dist/cli/commands/enable.js +29 -14
  16. package/dist/cli/commands/enable.js.map +1 -1
  17. package/dist/cli/commands/init.d.ts +6 -1
  18. package/dist/cli/commands/init.d.ts.map +1 -1
  19. package/dist/cli/commands/init.js +13 -6
  20. package/dist/cli/commands/init.js.map +1 -1
  21. package/dist/cli/commands/status.d.ts +1 -1
  22. package/dist/cli/commands/status.d.ts.map +1 -1
  23. package/dist/cli/commands/status.js +34 -23
  24. package/dist/cli/commands/status.js.map +1 -1
  25. package/dist/cli/index.d.ts.map +1 -1
  26. package/dist/cli/index.js +14 -9
  27. package/dist/cli/index.js.map +1 -1
  28. package/dist/core/state-store.d.ts +3 -3
  29. package/dist/core/state-store.d.ts.map +1 -1
  30. package/dist/core/state-store.js +1 -1
  31. package/dist/core/state-store.js.map +1 -1
  32. package/dist/providers/aws/adapter.d.ts +3 -0
  33. package/dist/providers/aws/adapter.d.ts.map +1 -1
  34. package/dist/providers/aws/adapter.js +331 -9
  35. package/dist/providers/aws/adapter.js.map +1 -1
  36. package/dist/providers/aws/adapter.test.js +107 -0
  37. package/dist/providers/aws/adapter.test.js.map +1 -1
  38. package/dist/providers/base.d.ts +2 -0
  39. package/dist/providers/base.d.ts.map +1 -1
  40. package/dist/providers/base.js +14 -0
  41. package/dist/providers/base.js.map +1 -1
  42. package/dist/providers/cloudflare/adapter.d.ts +12 -0
  43. package/dist/providers/cloudflare/adapter.d.ts.map +1 -0
  44. package/dist/providers/cloudflare/adapter.js +85 -0
  45. package/dist/providers/cloudflare/adapter.js.map +1 -0
  46. package/dist/providers/cloudflare/adapter.test.d.ts +2 -0
  47. package/dist/providers/cloudflare/adapter.test.d.ts.map +1 -0
  48. package/dist/providers/cloudflare/adapter.test.js +178 -0
  49. package/dist/providers/cloudflare/adapter.test.js.map +1 -0
  50. package/dist/providers/gcp/adapter.d.ts +3 -0
  51. package/dist/providers/gcp/adapter.d.ts.map +1 -1
  52. package/dist/providers/gcp/adapter.js +150 -18
  53. package/dist/providers/gcp/adapter.js.map +1 -1
  54. package/dist/providers/gcp/adapter.test.js +122 -15
  55. package/dist/providers/gcp/adapter.test.js.map +1 -1
  56. package/dist/providers/index.d.ts +4 -0
  57. package/dist/providers/index.d.ts.map +1 -0
  58. package/dist/providers/index.js +13 -0
  59. package/dist/providers/index.js.map +1 -0
  60. package/dist/providers/vercel/adapter.d.ts +12 -0
  61. package/dist/providers/vercel/adapter.d.ts.map +1 -0
  62. package/dist/providers/vercel/adapter.js +74 -0
  63. package/dist/providers/vercel/adapter.js.map +1 -0
  64. package/dist/providers/vercel/adapter.test.d.ts +2 -0
  65. package/dist/providers/vercel/adapter.test.d.ts.map +1 -0
  66. package/dist/providers/vercel/adapter.test.js +166 -0
  67. package/dist/providers/vercel/adapter.test.js.map +1 -0
  68. package/dist/types/index.d.ts +21 -21
  69. package/dist/types/index.d.ts.map +1 -1
  70. package/dist/types/index.js +18 -4
  71. package/dist/types/index.js.map +1 -1
  72. package/dist/utils/cost-estimator.d.ts +36 -0
  73. package/dist/utils/cost-estimator.d.ts.map +1 -0
  74. package/dist/utils/cost-estimator.js +87 -0
  75. package/dist/utils/cost-estimator.js.map +1 -0
  76. package/dist/utils/cost-estimator.test.d.ts +2 -0
  77. package/dist/utils/cost-estimator.test.d.ts.map +1 -0
  78. package/dist/utils/cost-estimator.test.js +77 -0
  79. package/dist/utils/cost-estimator.test.js.map +1 -0
  80. package/package.json +1 -1
@@ -0,0 +1,166 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { VercelAdapter } from "./adapter.js";
3
+ global.fetch = vi.fn();
4
+ describe("VercelAdapter", () => {
5
+ let adapter;
6
+ beforeEach(() => {
7
+ vi.clearAllMocks();
8
+ vi.resetAllMocks();
9
+ adapter = new VercelAdapter();
10
+ delete process.env.VERCEL_TEAM_ID;
11
+ });
12
+ describe("init", () => {
13
+ it("should throw if VERCEL_TOKEN is missing", async () => {
14
+ delete process.env.VERCEL_TOKEN;
15
+ await expect(adapter.init()).rejects.toThrow("VERCEL_TOKEN environment variable is required");
16
+ });
17
+ it("should authenticate successfully", async () => {
18
+ process.env.VERCEL_TOKEN = "test-token";
19
+ global.fetch.mockResolvedValueOnce({
20
+ ok: true,
21
+ json: async () => ({ user: { id: "user123" } }),
22
+ });
23
+ await expect(adapter.init()).resolves.not.toThrow();
24
+ expect(global.fetch).toHaveBeenCalledWith("https://api.vercel.com/v2/user", expect.any(Object));
25
+ });
26
+ it("should throw on authentication failure", async () => {
27
+ process.env.VERCEL_TOKEN = "bad-token";
28
+ global.fetch.mockResolvedValueOnce({
29
+ ok: false,
30
+ json: async () => ({ error: { message: "Invalid token" } }),
31
+ });
32
+ await expect(adapter.init()).rejects.toThrow("Vercel authentication failed: Invalid token");
33
+ });
34
+ it("should capture team ID from env", async () => {
35
+ process.env.VERCEL_TOKEN = "test-token";
36
+ process.env.VERCEL_TEAM_ID = "team_abc123";
37
+ global.fetch.mockResolvedValueOnce({
38
+ ok: true,
39
+ json: async () => ({ user: { id: "user123" } }),
40
+ });
41
+ await adapter.init();
42
+ expect(global.fetch).toHaveBeenCalled();
43
+ });
44
+ });
45
+ describe("createEnvironment", () => {
46
+ it("should create an environment record with projectName", async () => {
47
+ const env = await adapter.createEnvironment("test-env");
48
+ expect(env.name).toBe("test-env");
49
+ expect(env.provider).toBe("vercel");
50
+ expect(env.status).toBe("active");
51
+ expect(env.projectId).toMatch(/^sandman-test-env-/);
52
+ expect(env.resources.projectName).toMatch(/^sandman-test-env-/);
53
+ });
54
+ });
55
+ describe("enableServices", () => {
56
+ it("should log services to enable", async () => {
57
+ const env = {
58
+ name: "test",
59
+ provider: "vercel",
60
+ status: "active",
61
+ services: [],
62
+ resources: {},
63
+ createdAt: new Date().toISOString(),
64
+ updatedAt: new Date().toISOString(),
65
+ };
66
+ const consoleSpy = vi.spyOn(console, "log");
67
+ await adapter.enableServices(env, ["functions", "edge", "blob"]);
68
+ expect(consoleSpy).toHaveBeenCalledWith("Enabling Vercel services: functions, edge, blob");
69
+ consoleSpy.mockRestore();
70
+ });
71
+ it("should filter invalid services", async () => {
72
+ const env = {
73
+ name: "test",
74
+ provider: "vercel",
75
+ status: "active",
76
+ services: [],
77
+ resources: {},
78
+ createdAt: new Date().toISOString(),
79
+ updatedAt: new Date().toISOString(),
80
+ };
81
+ const consoleSpy = vi.spyOn(console, "log");
82
+ await adapter.enableServices(env, ["invalid-service"]);
83
+ expect(consoleSpy).toHaveBeenCalledWith("Enabling Vercel services: ");
84
+ consoleSpy.mockRestore();
85
+ });
86
+ });
87
+ describe("connect", () => {
88
+ it("should return environment variables", async () => {
89
+ process.env.VERCEL_TOKEN = "my-token";
90
+ process.env.VERCEL_TEAM_ID = "team_abc";
91
+ const env = {
92
+ name: "test",
93
+ provider: "vercel",
94
+ status: "active",
95
+ services: [],
96
+ resources: { projectName: "my-project" },
97
+ createdAt: new Date().toISOString(),
98
+ updatedAt: new Date().toISOString(),
99
+ projectId: "my-project",
100
+ };
101
+ const creds = await adapter.connect(env);
102
+ expect(creds.provider).toBe("vercel");
103
+ expect(creds.VERCEL_TOKEN).toBe("my-token");
104
+ expect(creds.VERCEL_PROJECT_NAME).toBe("my-project");
105
+ expect(creds.VERCEL_TEAM_ID).toBe("team_abc");
106
+ });
107
+ it("should work without optional fields", async () => {
108
+ const env = {
109
+ name: "test",
110
+ provider: "vercel",
111
+ status: "active",
112
+ services: [],
113
+ resources: {},
114
+ createdAt: new Date().toISOString(),
115
+ updatedAt: new Date().toISOString(),
116
+ };
117
+ const creds = await adapter.connect(env);
118
+ expect(creds.provider).toBe("vercel");
119
+ expect(creds.VERCEL_TEAM_ID).toBeUndefined();
120
+ });
121
+ });
122
+ describe("destroyEnvironment", () => {
123
+ it("should log cleanup message", async () => {
124
+ const env = {
125
+ name: "test",
126
+ provider: "vercel",
127
+ status: "active",
128
+ services: [],
129
+ resources: { projectName: "my-project" },
130
+ createdAt: new Date().toISOString(),
131
+ updatedAt: new Date().toISOString(),
132
+ };
133
+ const consoleSpy = vi.spyOn(console, "log");
134
+ await adapter.destroyEnvironment(env);
135
+ expect(consoleSpy).toHaveBeenCalledWith("Cleaning up Vercel resources for environment: test");
136
+ consoleSpy.mockRestore();
137
+ });
138
+ });
139
+ describe("getStatus", () => {
140
+ it("should return environment as-is", async () => {
141
+ const env = {
142
+ name: "test",
143
+ provider: "vercel",
144
+ status: "active",
145
+ services: ["functions", "blob"],
146
+ resources: { projectName: "my-project" },
147
+ createdAt: "2026-01-01T00:00:00.000Z",
148
+ updatedAt: "2026-01-01T00:00:00.000Z",
149
+ projectId: "my-project",
150
+ };
151
+ const result = await adapter.getStatus(env);
152
+ expect(result).toEqual(env);
153
+ });
154
+ });
155
+ describe("interface compliance", () => {
156
+ it("should have all required methods", () => {
157
+ expect(typeof adapter.init).toBe("function");
158
+ expect(typeof adapter.createEnvironment).toBe("function");
159
+ expect(typeof adapter.enableServices).toBe("function");
160
+ expect(typeof adapter.connect).toBe("function");
161
+ expect(typeof adapter.destroyEnvironment).toBe("function");
162
+ expect(typeof adapter.getStatus).toBe("function");
163
+ });
164
+ });
165
+ });
166
+ //# sourceMappingURL=adapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.test.js","sourceRoot":"","sources":["../../../src/providers/vercel/adapter.test.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,18 @@
1
1
  import { z } from "zod";
2
- export declare const ProviderType: z.ZodEnum<["aws", "gcp"]>;
2
+ export declare const ProviderType: z.ZodEnum<["aws", "gcp", "cloudflare", "vercel"]>;
3
3
  export type ProviderType = z.infer<typeof ProviderType>;
4
4
  export declare const EnvironmentStatus: z.ZodEnum<["pending", "active", "failed", "destroyed"]>;
5
5
  export type EnvironmentStatus = z.infer<typeof EnvironmentStatus>;
6
- export declare const ServiceName: z.ZodEnum<["compute", "storage", "cloudrun", "lambda", "ec2", "s3", "iam", "pubsub", "container", "artifactregistry"]>;
6
+ export declare const ServiceName: z.ZodEnum<["compute", "storage", "cloudrun", "iam", "pubsub", "container", "artifactregistry", "lambda", "ec2", "s3", "workers", "pages", "r2", "kv", "d1", "durable-objects", "functions", "edge", "blob", "postgres"]>;
7
7
  export type ServiceName = z.infer<typeof ServiceName>;
8
8
  export declare const EnvironmentRecordSchema: z.ZodObject<{
9
9
  name: z.ZodString;
10
- provider: z.ZodEnum<["aws", "gcp"]>;
10
+ provider: z.ZodEnum<["aws", "gcp", "cloudflare", "vercel"]>;
11
11
  projectId: z.ZodOptional<z.ZodString>;
12
12
  accountId: z.ZodOptional<z.ZodString>;
13
13
  region: z.ZodOptional<z.ZodString>;
14
14
  status: z.ZodEnum<["pending", "active", "failed", "destroyed"]>;
15
- services: z.ZodDefault<z.ZodArray<z.ZodEnum<["compute", "storage", "cloudrun", "lambda", "ec2", "s3", "iam", "pubsub", "container", "artifactregistry"]>, "many">>;
15
+ services: z.ZodDefault<z.ZodArray<z.ZodEnum<["compute", "storage", "cloudrun", "iam", "pubsub", "container", "artifactregistry", "lambda", "ec2", "s3", "workers", "pages", "r2", "kv", "d1", "durable-objects", "functions", "edge", "blob", "postgres"]>, "many">>;
16
16
  resources: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodAny>>;
17
17
  createdAt: z.ZodString;
18
18
  updatedAt: z.ZodString;
@@ -20,8 +20,8 @@ export declare const EnvironmentRecordSchema: z.ZodObject<{
20
20
  }, "strip", z.ZodTypeAny, {
21
21
  status: "pending" | "active" | "failed" | "destroyed";
22
22
  name: string;
23
- provider: "aws" | "gcp";
24
- services: ("compute" | "storage" | "cloudrun" | "lambda" | "ec2" | "s3" | "iam" | "pubsub" | "container" | "artifactregistry")[];
23
+ provider: "aws" | "gcp" | "cloudflare" | "vercel";
24
+ services: ("compute" | "storage" | "cloudrun" | "iam" | "pubsub" | "container" | "artifactregistry" | "lambda" | "ec2" | "s3" | "workers" | "pages" | "r2" | "kv" | "d1" | "durable-objects" | "functions" | "edge" | "blob" | "postgres")[];
25
25
  resources: Record<string, any>;
26
26
  createdAt: string;
27
27
  updatedAt: string;
@@ -32,29 +32,29 @@ export declare const EnvironmentRecordSchema: z.ZodObject<{
32
32
  }, {
33
33
  status: "pending" | "active" | "failed" | "destroyed";
34
34
  name: string;
35
- provider: "aws" | "gcp";
35
+ provider: "aws" | "gcp" | "cloudflare" | "vercel";
36
36
  createdAt: string;
37
37
  updatedAt: string;
38
38
  projectId?: string | undefined;
39
39
  accountId?: string | undefined;
40
40
  region?: string | undefined;
41
- services?: ("compute" | "storage" | "cloudrun" | "lambda" | "ec2" | "s3" | "iam" | "pubsub" | "container" | "artifactregistry")[] | undefined;
41
+ services?: ("compute" | "storage" | "cloudrun" | "iam" | "pubsub" | "container" | "artifactregistry" | "lambda" | "ec2" | "s3" | "workers" | "pages" | "r2" | "kv" | "d1" | "durable-objects" | "functions" | "edge" | "blob" | "postgres")[] | undefined;
42
42
  resources?: Record<string, any> | undefined;
43
43
  error?: string | undefined;
44
44
  }>;
45
45
  export type EnvironmentRecord = z.infer<typeof EnvironmentRecordSchema>;
46
46
  export declare const ConfigSchema: z.ZodObject<{
47
47
  version: z.ZodDefault<z.ZodString>;
48
- provider: z.ZodOptional<z.ZodEnum<["aws", "gcp"]>>;
48
+ provider: z.ZodOptional<z.ZodEnum<["aws", "gcp", "cloudflare", "vercel"]>>;
49
49
  defaultRegion: z.ZodOptional<z.ZodString>;
50
50
  environments: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
51
51
  name: z.ZodString;
52
- provider: z.ZodEnum<["aws", "gcp"]>;
52
+ provider: z.ZodEnum<["aws", "gcp", "cloudflare", "vercel"]>;
53
53
  projectId: z.ZodOptional<z.ZodString>;
54
54
  accountId: z.ZodOptional<z.ZodString>;
55
55
  region: z.ZodOptional<z.ZodString>;
56
56
  status: z.ZodEnum<["pending", "active", "failed", "destroyed"]>;
57
- services: z.ZodDefault<z.ZodArray<z.ZodEnum<["compute", "storage", "cloudrun", "lambda", "ec2", "s3", "iam", "pubsub", "container", "artifactregistry"]>, "many">>;
57
+ services: z.ZodDefault<z.ZodArray<z.ZodEnum<["compute", "storage", "cloudrun", "iam", "pubsub", "container", "artifactregistry", "lambda", "ec2", "s3", "workers", "pages", "r2", "kv", "d1", "durable-objects", "functions", "edge", "blob", "postgres"]>, "many">>;
58
58
  resources: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodAny>>;
59
59
  createdAt: z.ZodString;
60
60
  updatedAt: z.ZodString;
@@ -62,8 +62,8 @@ export declare const ConfigSchema: z.ZodObject<{
62
62
  }, "strip", z.ZodTypeAny, {
63
63
  status: "pending" | "active" | "failed" | "destroyed";
64
64
  name: string;
65
- provider: "aws" | "gcp";
66
- services: ("compute" | "storage" | "cloudrun" | "lambda" | "ec2" | "s3" | "iam" | "pubsub" | "container" | "artifactregistry")[];
65
+ provider: "aws" | "gcp" | "cloudflare" | "vercel";
66
+ services: ("compute" | "storage" | "cloudrun" | "iam" | "pubsub" | "container" | "artifactregistry" | "lambda" | "ec2" | "s3" | "workers" | "pages" | "r2" | "kv" | "d1" | "durable-objects" | "functions" | "edge" | "blob" | "postgres")[];
67
67
  resources: Record<string, any>;
68
68
  createdAt: string;
69
69
  updatedAt: string;
@@ -74,13 +74,13 @@ export declare const ConfigSchema: z.ZodObject<{
74
74
  }, {
75
75
  status: "pending" | "active" | "failed" | "destroyed";
76
76
  name: string;
77
- provider: "aws" | "gcp";
77
+ provider: "aws" | "gcp" | "cloudflare" | "vercel";
78
78
  createdAt: string;
79
79
  updatedAt: string;
80
80
  projectId?: string | undefined;
81
81
  accountId?: string | undefined;
82
82
  region?: string | undefined;
83
- services?: ("compute" | "storage" | "cloudrun" | "lambda" | "ec2" | "s3" | "iam" | "pubsub" | "container" | "artifactregistry")[] | undefined;
83
+ services?: ("compute" | "storage" | "cloudrun" | "iam" | "pubsub" | "container" | "artifactregistry" | "lambda" | "ec2" | "s3" | "workers" | "pages" | "r2" | "kv" | "d1" | "durable-objects" | "functions" | "edge" | "blob" | "postgres")[] | undefined;
84
84
  resources?: Record<string, any> | undefined;
85
85
  error?: string | undefined;
86
86
  }>>>;
@@ -89,8 +89,8 @@ export declare const ConfigSchema: z.ZodObject<{
89
89
  environments: Record<string, {
90
90
  status: "pending" | "active" | "failed" | "destroyed";
91
91
  name: string;
92
- provider: "aws" | "gcp";
93
- services: ("compute" | "storage" | "cloudrun" | "lambda" | "ec2" | "s3" | "iam" | "pubsub" | "container" | "artifactregistry")[];
92
+ provider: "aws" | "gcp" | "cloudflare" | "vercel";
93
+ services: ("compute" | "storage" | "cloudrun" | "iam" | "pubsub" | "container" | "artifactregistry" | "lambda" | "ec2" | "s3" | "workers" | "pages" | "r2" | "kv" | "d1" | "durable-objects" | "functions" | "edge" | "blob" | "postgres")[];
94
94
  resources: Record<string, any>;
95
95
  createdAt: string;
96
96
  updatedAt: string;
@@ -99,22 +99,22 @@ export declare const ConfigSchema: z.ZodObject<{
99
99
  region?: string | undefined;
100
100
  error?: string | undefined;
101
101
  }>;
102
- provider?: "aws" | "gcp" | undefined;
102
+ provider?: "aws" | "gcp" | "cloudflare" | "vercel" | undefined;
103
103
  defaultRegion?: string | undefined;
104
104
  }, {
105
- provider?: "aws" | "gcp" | undefined;
105
+ provider?: "aws" | "gcp" | "cloudflare" | "vercel" | undefined;
106
106
  version?: string | undefined;
107
107
  defaultRegion?: string | undefined;
108
108
  environments?: Record<string, {
109
109
  status: "pending" | "active" | "failed" | "destroyed";
110
110
  name: string;
111
- provider: "aws" | "gcp";
111
+ provider: "aws" | "gcp" | "cloudflare" | "vercel";
112
112
  createdAt: string;
113
113
  updatedAt: string;
114
114
  projectId?: string | undefined;
115
115
  accountId?: string | undefined;
116
116
  region?: string | undefined;
117
- services?: ("compute" | "storage" | "cloudrun" | "lambda" | "ec2" | "s3" | "iam" | "pubsub" | "container" | "artifactregistry")[] | undefined;
117
+ services?: ("compute" | "storage" | "cloudrun" | "iam" | "pubsub" | "container" | "artifactregistry" | "lambda" | "ec2" | "s3" | "workers" | "pages" | "r2" | "kv" | "d1" | "durable-objects" | "functions" | "edge" | "blob" | "postgres")[] | undefined;
118
118
  resources?: Record<string, any> | undefined;
119
119
  error?: string | undefined;
120
120
  }> | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,YAAY,2BAAyB,CAAC;AAEnD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,eAAO,MAAM,iBAAiB,yDAK5B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,WAAW,wHAWtB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC5D,cAAc,CACZ,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,WAAW,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,OAAO,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjE,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,SAAS,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,YAAY,mDAAiD,CAAC;AAE3E,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,eAAO,MAAM,iBAAiB,yDAK5B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,WAAW,0NAyBtB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC5D,cAAc,CACZ,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,WAAW,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,OAAO,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjE,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,SAAS,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB"}
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- export const ProviderType = z.enum(["aws", "gcp"]);
2
+ export const ProviderType = z.enum(["aws", "gcp", "cloudflare", "vercel"]);
3
3
  export const EnvironmentStatus = z.enum([
4
4
  "pending",
5
5
  "active",
@@ -7,16 +7,30 @@ export const EnvironmentStatus = z.enum([
7
7
  "destroyed",
8
8
  ]);
9
9
  export const ServiceName = z.enum([
10
+ // GCP
10
11
  "compute",
11
12
  "storage",
12
13
  "cloudrun",
13
- "lambda",
14
- "ec2",
15
- "s3",
16
14
  "iam",
17
15
  "pubsub",
18
16
  "container",
19
17
  "artifactregistry",
18
+ // AWS
19
+ "lambda",
20
+ "ec2",
21
+ "s3",
22
+ // Cloudflare
23
+ "workers",
24
+ "pages",
25
+ "r2",
26
+ "kv",
27
+ "d1",
28
+ "durable-objects",
29
+ // Vercel
30
+ "functions",
31
+ "edge",
32
+ "blob",
33
+ "postgres",
20
34
  ]);
21
35
  export const EnvironmentRecordSchema = z.object({
22
36
  name: z.string().min(1),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAInD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC;IACtC,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,WAAW;CACZ,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC;IAChC,SAAS;IACT,SAAS;IACT,UAAU;IACV,QAAQ;IACR,KAAK;IACL,IAAI;IACJ,KAAK;IACL,QAAQ;IACR,WAAW;IACX,kBAAkB;CACnB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,YAAY;IACtB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,MAAM,EAAE,iBAAiB;IACzB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1C,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IACpC,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE;IACjC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACxE,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;AAI3E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC;IACtC,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,WAAW;CACZ,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC;IAChC,MAAM;IACN,SAAS;IACT,SAAS;IACT,UAAU;IACV,KAAK;IACL,QAAQ;IACR,WAAW;IACX,kBAAkB;IAClB,MAAM;IACN,QAAQ;IACR,KAAK;IACL,IAAI;IACJ,aAAa;IACb,SAAS;IACT,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,iBAAiB;IACjB,SAAS;IACT,WAAW;IACX,MAAM;IACN,MAAM;IACN,UAAU;CACX,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,YAAY;IACtB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,MAAM,EAAE,iBAAiB;IACzB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1C,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IACpC,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE;IACjC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACxE,CAAC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { ServiceName } from "../types/index.js";
2
+ export declare const SERVICE_COSTS: Record<string, Record<ServiceName, number>>;
3
+ export declare const BASE_COSTS: Record<string, number>;
4
+ export interface CostEstimate {
5
+ hourlyRate: number;
6
+ dailyRate: number;
7
+ monthlyRate: number;
8
+ services: Array<{
9
+ name: ServiceName;
10
+ hourlyRate: number;
11
+ }>;
12
+ }
13
+ export interface RunningCost {
14
+ hourlyRate: number;
15
+ hoursRunning: number;
16
+ totalCost: number;
17
+ estimatedDaily: number;
18
+ estimatedMonthly: number;
19
+ }
20
+ /**
21
+ * Calculate estimated cost for a set of services
22
+ */
23
+ export declare function calculateEstimate(provider: string, services: ServiceName[]): CostEstimate;
24
+ /**
25
+ * Calculate running cost based on elapsed time
26
+ */
27
+ export declare function calculateRunningCost(provider: string, services: ServiceName[], createdAt: string): RunningCost;
28
+ /**
29
+ * Format cost as a readable string
30
+ */
31
+ export declare function formatCost(cost: number): string;
32
+ /**
33
+ * Format hourly rate with proper units
34
+ */
35
+ export declare function formatHourlyRate(rate: number): string;
36
+ //# sourceMappingURL=cost-estimator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-estimator.d.ts","sourceRoot":"","sources":["../../src/utils/cost-estimator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAgBrE,CAAC;AAGF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG7C,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,WAAW,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,WAAW,EAAE,GACtB,YAAY,CA2Bd;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,MAAM,GAChB,WAAW,CAab;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIrD"}
@@ -0,0 +1,87 @@
1
+ // Cost rates in USD per hour
2
+ export const SERVICE_COSTS = {
3
+ aws: {
4
+ ec2: 0.0116, // t2.micro on-demand
5
+ s3: 0.005, // per GB stored (simplified)
6
+ lambda: 0.0000166667, // per GB-second (simplified)
7
+ iam: 0, // IAM is free
8
+ },
9
+ gcp: {
10
+ compute: 0.0076, // e2-micro
11
+ storage: 0.004, // per GB stored (simplified)
12
+ cloudrun: 0.000024, // per vCPU-second (simplified)
13
+ iam: 0, // IAM is free
14
+ pubsub: 0.0, // per message (negligible for sandbox)
15
+ container: 0.0076, // GKE e2-micro
16
+ artifactregistry: 0.005, // per GB stored
17
+ },
18
+ };
19
+ // Base costs per provider per hour
20
+ export const BASE_COSTS = {
21
+ aws: 0.005, // VPC and basic infrastructure
22
+ gcp: 0.0, // GCP doesn't charge for project itself
23
+ };
24
+ /**
25
+ * Calculate estimated cost for a set of services
26
+ */
27
+ export function calculateEstimate(provider, services) {
28
+ const providerCosts = SERVICE_COSTS[provider] || {};
29
+ const baseCost = BASE_COSTS[provider] || 0;
30
+ let hourlyRate = baseCost;
31
+ const serviceBreakdown = [];
32
+ for (const service of services) {
33
+ const cost = providerCosts[service] || 0;
34
+ hourlyRate += cost;
35
+ serviceBreakdown.push({ name: service, hourlyRate: cost });
36
+ }
37
+ // Add base cost as a line item if > 0
38
+ if (baseCost > 0) {
39
+ serviceBreakdown.unshift({
40
+ name: "base",
41
+ hourlyRate: baseCost,
42
+ });
43
+ }
44
+ return {
45
+ hourlyRate,
46
+ dailyRate: hourlyRate * 24,
47
+ monthlyRate: hourlyRate * 24 * 30,
48
+ services: serviceBreakdown,
49
+ };
50
+ }
51
+ /**
52
+ * Calculate running cost based on elapsed time
53
+ */
54
+ export function calculateRunningCost(provider, services, createdAt) {
55
+ const estimate = calculateEstimate(provider, services);
56
+ const created = new Date(createdAt);
57
+ const now = new Date();
58
+ const hoursRunning = (now.getTime() - created.getTime()) / (1000 * 60 * 60);
59
+ return {
60
+ hourlyRate: estimate.hourlyRate,
61
+ hoursRunning: Math.round(hoursRunning * 10) / 10, // Round to 1 decimal
62
+ totalCost: Math.round(estimate.hourlyRate * hoursRunning * 100) / 100,
63
+ estimatedDaily: estimate.dailyRate,
64
+ estimatedMonthly: estimate.monthlyRate,
65
+ };
66
+ }
67
+ /**
68
+ * Format cost as a readable string
69
+ */
70
+ export function formatCost(cost) {
71
+ if (cost === 0)
72
+ return "$0.00";
73
+ if (cost < 0.01)
74
+ return "<$0.01";
75
+ return `$${cost.toFixed(2)}`;
76
+ }
77
+ /**
78
+ * Format hourly rate with proper units
79
+ */
80
+ export function formatHourlyRate(rate) {
81
+ if (rate === 0)
82
+ return "$0.00/hour";
83
+ if (rate < 0.01)
84
+ return "<$0.01/hour";
85
+ return `$${rate.toFixed(3)}/hour`;
86
+ }
87
+ //# sourceMappingURL=cost-estimator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-estimator.js","sourceRoot":"","sources":["../../src/utils/cost-estimator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cost-estimator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-estimator.test.d.ts","sourceRoot":"","sources":["../../src/utils/cost-estimator.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,77 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { calculateEstimate, calculateRunningCost, formatCost, formatHourlyRate, SERVICE_COSTS, BASE_COSTS, } from "./cost-estimator.js";
3
+ describe("Cost Estimator", () => {
4
+ describe("calculateEstimate", () => {
5
+ it("should calculate cost for AWS services", () => {
6
+ const services = ["ec2", "s3"];
7
+ const estimate = calculateEstimate("aws", services);
8
+ expect(estimate.hourlyRate).toBeGreaterThan(0);
9
+ expect(estimate.services).toHaveLength(3); // base + ec2 + s3
10
+ expect(estimate.dailyRate).toBe(estimate.hourlyRate * 24);
11
+ expect(estimate.monthlyRate).toBe(estimate.hourlyRate * 24 * 30);
12
+ });
13
+ it("should calculate cost for GCP services", () => {
14
+ const services = ["compute", "storage", "cloudrun"];
15
+ const estimate = calculateEstimate("gcp", services);
16
+ expect(estimate.hourlyRate).toBeGreaterThan(0);
17
+ expect(estimate.services).toHaveLength(3);
18
+ expect(estimate.dailyRate).toBe(estimate.hourlyRate * 24);
19
+ });
20
+ it("should return base cost only when no services enabled", () => {
21
+ const estimate = calculateEstimate("aws", []);
22
+ expect(estimate.hourlyRate).toBe(BASE_COSTS.aws);
23
+ expect(estimate.services).toHaveLength(1); // Just base
24
+ });
25
+ it("should return zero for unknown provider", () => {
26
+ const estimate = calculateEstimate("unknown", ["ec2"]);
27
+ expect(estimate.hourlyRate).toBe(0);
28
+ });
29
+ it("should include IAM at no cost", () => {
30
+ const services = ["ec2", "iam"];
31
+ const estimate = calculateEstimate("aws", services);
32
+ const iamService = estimate.services.find((s) => s.name === "iam");
33
+ expect(iamService?.hourlyRate).toBe(0);
34
+ });
35
+ });
36
+ describe("calculateRunningCost", () => {
37
+ it("should calculate running cost based on elapsed time", () => {
38
+ // Create a date 5 hours ago
39
+ const createdAt = new Date(Date.now() - 5 * 60 * 60 * 1000).toISOString();
40
+ const services = ["ec2"];
41
+ const runningCost = calculateRunningCost("aws", services, createdAt);
42
+ expect(runningCost.hoursRunning).toBeCloseTo(5, 0);
43
+ expect(runningCost.totalCost).toBeGreaterThan(0);
44
+ expect(runningCost.hourlyRate).toBe(SERVICE_COSTS.aws.ec2 + BASE_COSTS.aws);
45
+ });
46
+ it("should handle newly created environments", () => {
47
+ const createdAt = new Date().toISOString();
48
+ const services = ["compute"];
49
+ const runningCost = calculateRunningCost("gcp", services, createdAt);
50
+ expect(runningCost.hoursRunning).toBeCloseTo(0, 1);
51
+ expect(runningCost.totalCost).toBeCloseTo(0, 2);
52
+ });
53
+ });
54
+ describe("formatCost", () => {
55
+ it("should format zero cost", () => {
56
+ expect(formatCost(0)).toBe("$0.00");
57
+ });
58
+ it("should format very small cost", () => {
59
+ expect(formatCost(0.001)).toBe("<$0.01");
60
+ });
61
+ it("should format normal cost", () => {
62
+ expect(formatCost(12.3456)).toBe("$12.35");
63
+ });
64
+ });
65
+ describe("formatHourlyRate", () => {
66
+ it("should format zero rate", () => {
67
+ expect(formatHourlyRate(0)).toBe("$0.00/hour");
68
+ });
69
+ it("should format very small rate", () => {
70
+ expect(formatHourlyRate(0.001)).toBe("<$0.01/hour");
71
+ });
72
+ it("should format normal rate", () => {
73
+ expect(formatHourlyRate(0.1234)).toBe("$0.123/hour");
74
+ });
75
+ });
76
+ });
77
+ //# sourceMappingURL=cost-estimator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-estimator.test.js","sourceRoot":"","sources":["../../src/utils/cost-estimator.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itssergio91/sandman",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "description": "Provision disposable cloud environments in seconds",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",