@dexcost/sdk 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 (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +210 -0
  3. package/dist/adapters/_netbytes.d.ts +31 -0
  4. package/dist/adapters/_netbytes.d.ts.map +1 -0
  5. package/dist/adapters/_netbytes.js +154 -0
  6. package/dist/adapters/_netbytes.js.map +1 -0
  7. package/dist/adapters/aws-lambda.d.ts +41 -0
  8. package/dist/adapters/aws-lambda.d.ts.map +1 -0
  9. package/dist/adapters/aws-lambda.js +65 -0
  10. package/dist/adapters/aws-lambda.js.map +1 -0
  11. package/dist/adapters/browser.d.ts +52 -0
  12. package/dist/adapters/browser.d.ts.map +1 -0
  13. package/dist/adapters/browser.js +127 -0
  14. package/dist/adapters/browser.js.map +1 -0
  15. package/dist/adapters/compute-wrap.d.ts +33 -0
  16. package/dist/adapters/compute-wrap.d.ts.map +1 -0
  17. package/dist/adapters/compute-wrap.js +188 -0
  18. package/dist/adapters/compute-wrap.js.map +1 -0
  19. package/dist/adapters/data/aws_lambda_pricing.json +61 -0
  20. package/dist/adapters/gpu-wrap.d.ts +31 -0
  21. package/dist/adapters/gpu-wrap.d.ts.map +1 -0
  22. package/dist/adapters/gpu-wrap.js +147 -0
  23. package/dist/adapters/gpu-wrap.js.map +1 -0
  24. package/dist/adapters/http.d.ts +58 -0
  25. package/dist/adapters/http.d.ts.map +1 -0
  26. package/dist/adapters/http.js +769 -0
  27. package/dist/adapters/http.js.map +1 -0
  28. package/dist/adapters/index.d.ts +11 -0
  29. package/dist/adapters/index.d.ts.map +1 -0
  30. package/dist/adapters/index.js +12 -0
  31. package/dist/adapters/index.js.map +1 -0
  32. package/dist/adapters/network-accountant.d.ts +63 -0
  33. package/dist/adapters/network-accountant.d.ts.map +1 -0
  34. package/dist/adapters/network-accountant.js +153 -0
  35. package/dist/adapters/network-accountant.js.map +1 -0
  36. package/dist/cli/index.d.ts +13 -0
  37. package/dist/cli/index.d.ts.map +1 -0
  38. package/dist/cli/index.js +225 -0
  39. package/dist/cli/index.js.map +1 -0
  40. package/dist/cli/scanner.d.ts +39 -0
  41. package/dist/cli/scanner.d.ts.map +1 -0
  42. package/dist/cli/scanner.js +480 -0
  43. package/dist/cli/scanner.js.map +1 -0
  44. package/dist/clients.d.ts +54 -0
  45. package/dist/clients.d.ts.map +1 -0
  46. package/dist/clients.js +240 -0
  47. package/dist/clients.js.map +1 -0
  48. package/dist/cloud-detect.d.ts +96 -0
  49. package/dist/cloud-detect.d.ts.map +1 -0
  50. package/dist/cloud-detect.js +545 -0
  51. package/dist/cloud-detect.js.map +1 -0
  52. package/dist/core/auto-task.d.ts +20 -0
  53. package/dist/core/auto-task.d.ts.map +1 -0
  54. package/dist/core/auto-task.js +34 -0
  55. package/dist/core/auto-task.js.map +1 -0
  56. package/dist/core/cgroup-reader.d.ts +45 -0
  57. package/dist/core/cgroup-reader.d.ts.map +1 -0
  58. package/dist/core/cgroup-reader.js +124 -0
  59. package/dist/core/cgroup-reader.js.map +1 -0
  60. package/dist/core/cgroup-walker.d.ts +60 -0
  61. package/dist/core/cgroup-walker.d.ts.map +1 -0
  62. package/dist/core/cgroup-walker.js +166 -0
  63. package/dist/core/cgroup-walker.js.map +1 -0
  64. package/dist/core/compute-accountant.d.ts +51 -0
  65. package/dist/core/compute-accountant.d.ts.map +1 -0
  66. package/dist/core/compute-accountant.js +179 -0
  67. package/dist/core/compute-accountant.js.map +1 -0
  68. package/dist/core/compute-runtime.d.ts +42 -0
  69. package/dist/core/compute-runtime.d.ts.map +1 -0
  70. package/dist/core/compute-runtime.js +80 -0
  71. package/dist/core/compute-runtime.js.map +1 -0
  72. package/dist/core/config.d.ts +44 -0
  73. package/dist/core/config.d.ts.map +1 -0
  74. package/dist/core/config.js +66 -0
  75. package/dist/core/config.js.map +1 -0
  76. package/dist/core/context.d.ts +76 -0
  77. package/dist/core/context.d.ts.map +1 -0
  78. package/dist/core/context.js +91 -0
  79. package/dist/core/context.js.map +1 -0
  80. package/dist/core/fargate-metadata.d.ts +27 -0
  81. package/dist/core/fargate-metadata.d.ts.map +1 -0
  82. package/dist/core/fargate-metadata.js +102 -0
  83. package/dist/core/fargate-metadata.js.map +1 -0
  84. package/dist/core/gpu-accountant.d.ts +104 -0
  85. package/dist/core/gpu-accountant.d.ts.map +1 -0
  86. package/dist/core/gpu-accountant.js +383 -0
  87. package/dist/core/gpu-accountant.js.map +1 -0
  88. package/dist/core/gpu-runtime.d.ts +58 -0
  89. package/dist/core/gpu-runtime.d.ts.map +1 -0
  90. package/dist/core/gpu-runtime.js +131 -0
  91. package/dist/core/gpu-runtime.js.map +1 -0
  92. package/dist/core/heuristics.d.ts +74 -0
  93. package/dist/core/heuristics.d.ts.map +1 -0
  94. package/dist/core/heuristics.js +182 -0
  95. package/dist/core/heuristics.js.map +1 -0
  96. package/dist/core/models.d.ts +149 -0
  97. package/dist/core/models.d.ts.map +1 -0
  98. package/dist/core/models.js +226 -0
  99. package/dist/core/models.js.map +1 -0
  100. package/dist/core/nvml-reader.d.ts +114 -0
  101. package/dist/core/nvml-reader.d.ts.map +1 -0
  102. package/dist/core/nvml-reader.js +323 -0
  103. package/dist/core/nvml-reader.js.map +1 -0
  104. package/dist/core/session.d.ts +48 -0
  105. package/dist/core/session.d.ts.map +1 -0
  106. package/dist/core/session.js +123 -0
  107. package/dist/core/session.js.map +1 -0
  108. package/dist/core/tracker.d.ts +364 -0
  109. package/dist/core/tracker.d.ts.map +1 -0
  110. package/dist/core/tracker.js +1073 -0
  111. package/dist/core/tracker.js.map +1 -0
  112. package/dist/data/compute_prices.json +180 -0
  113. package/dist/data/egress_prices.json +418 -0
  114. package/dist/data/gpu_prices.json +412 -0
  115. package/dist/data/service_prices.json +2595 -0
  116. package/dist/dev-console.d.ts +12 -0
  117. package/dist/dev-console.d.ts.map +1 -0
  118. package/dist/dev-console.js +60 -0
  119. package/dist/dev-console.js.map +1 -0
  120. package/dist/index.d.ts +52 -0
  121. package/dist/index.d.ts.map +1 -0
  122. package/dist/index.js +61 -0
  123. package/dist/index.js.map +1 -0
  124. package/dist/instruments/anthropic.d.ts +26 -0
  125. package/dist/instruments/anthropic.d.ts.map +1 -0
  126. package/dist/instruments/anthropic.js +242 -0
  127. package/dist/instruments/anthropic.js.map +1 -0
  128. package/dist/instruments/bedrock.d.ts +29 -0
  129. package/dist/instruments/bedrock.d.ts.map +1 -0
  130. package/dist/instruments/bedrock.js +215 -0
  131. package/dist/instruments/bedrock.js.map +1 -0
  132. package/dist/instruments/cohere.d.ts +29 -0
  133. package/dist/instruments/cohere.d.ts.map +1 -0
  134. package/dist/instruments/cohere.js +237 -0
  135. package/dist/instruments/cohere.js.map +1 -0
  136. package/dist/instruments/gemini.d.ts +30 -0
  137. package/dist/instruments/gemini.d.ts.map +1 -0
  138. package/dist/instruments/gemini.js +247 -0
  139. package/dist/instruments/gemini.js.map +1 -0
  140. package/dist/instruments/index.d.ts +35 -0
  141. package/dist/instruments/index.d.ts.map +1 -0
  142. package/dist/instruments/index.js +54 -0
  143. package/dist/instruments/index.js.map +1 -0
  144. package/dist/instruments/mcp.d.ts +24 -0
  145. package/dist/instruments/mcp.d.ts.map +1 -0
  146. package/dist/instruments/mcp.js +459 -0
  147. package/dist/instruments/mcp.js.map +1 -0
  148. package/dist/instruments/openai.d.ts +26 -0
  149. package/dist/instruments/openai.d.ts.map +1 -0
  150. package/dist/instruments/openai.js +221 -0
  151. package/dist/instruments/openai.js.map +1 -0
  152. package/dist/instruments/vercel-ai.d.ts +28 -0
  153. package/dist/instruments/vercel-ai.d.ts.map +1 -0
  154. package/dist/instruments/vercel-ai.js +192 -0
  155. package/dist/instruments/vercel-ai.js.map +1 -0
  156. package/dist/integrations/langchain.d.ts +65 -0
  157. package/dist/integrations/langchain.d.ts.map +1 -0
  158. package/dist/integrations/langchain.js +165 -0
  159. package/dist/integrations/langchain.js.map +1 -0
  160. package/dist/middleware/express.d.ts +55 -0
  161. package/dist/middleware/express.d.ts.map +1 -0
  162. package/dist/middleware/express.js +101 -0
  163. package/dist/middleware/express.js.map +1 -0
  164. package/dist/middleware/index.d.ts +6 -0
  165. package/dist/middleware/index.d.ts.map +1 -0
  166. package/dist/middleware/index.js +5 -0
  167. package/dist/middleware/index.js.map +1 -0
  168. package/dist/pricing/compute-pricing.d.ts +57 -0
  169. package/dist/pricing/compute-pricing.d.ts.map +1 -0
  170. package/dist/pricing/compute-pricing.js +627 -0
  171. package/dist/pricing/compute-pricing.js.map +1 -0
  172. package/dist/pricing/cost_map.json +37665 -0
  173. package/dist/pricing/egress-pricing.d.ts +55 -0
  174. package/dist/pricing/egress-pricing.d.ts.map +1 -0
  175. package/dist/pricing/egress-pricing.js +226 -0
  176. package/dist/pricing/egress-pricing.js.map +1 -0
  177. package/dist/pricing/engine.d.ts +24 -0
  178. package/dist/pricing/engine.d.ts.map +1 -0
  179. package/dist/pricing/engine.js +148 -0
  180. package/dist/pricing/engine.js.map +1 -0
  181. package/dist/pricing/gpu-pricing.d.ts +63 -0
  182. package/dist/pricing/gpu-pricing.d.ts.map +1 -0
  183. package/dist/pricing/gpu-pricing.js +484 -0
  184. package/dist/pricing/gpu-pricing.js.map +1 -0
  185. package/dist/pricing/rates.d.ts +17 -0
  186. package/dist/pricing/rates.d.ts.map +1 -0
  187. package/dist/pricing/rates.js +102 -0
  188. package/dist/pricing/rates.js.map +1 -0
  189. package/dist/pricing/service-catalog.d.ts +87 -0
  190. package/dist/pricing/service-catalog.d.ts.map +1 -0
  191. package/dist/pricing/service-catalog.js +406 -0
  192. package/dist/pricing/service-catalog.js.map +1 -0
  193. package/dist/schema/dexcost-event.v1.json +111 -0
  194. package/dist/schema/dexcost-task.v1.json +160 -0
  195. package/dist/schema/validate.d.ts +15 -0
  196. package/dist/schema/validate.d.ts.map +1 -0
  197. package/dist/schema/validate.js +87 -0
  198. package/dist/schema/validate.js.map +1 -0
  199. package/dist/security/redaction.d.ts +55 -0
  200. package/dist/security/redaction.d.ts.map +1 -0
  201. package/dist/security/redaction.js +144 -0
  202. package/dist/security/redaction.js.map +1 -0
  203. package/dist/transport/buffer.d.ts +117 -0
  204. package/dist/transport/buffer.d.ts.map +1 -0
  205. package/dist/transport/buffer.js +759 -0
  206. package/dist/transport/buffer.js.map +1 -0
  207. package/dist/transport/pusher.d.ts +89 -0
  208. package/dist/transport/pusher.d.ts.map +1 -0
  209. package/dist/transport/pusher.js +323 -0
  210. package/dist/transport/pusher.js.map +1 -0
  211. package/package.json +93 -0
@@ -0,0 +1,627 @@
1
+ /**
2
+ * Compute pricing engine — dispatches on `details.billing_model` and applies
3
+ * the per-billing-model math from spec §6.
4
+ *
5
+ * The per-runtime memory-unit conversion table (Decision #7) is pinned at the
6
+ * catalog-lookup boundary in §6.2 of the spec; the implementation enforces
7
+ * it via two Decimal divisor constants (decimal GB vs binary GiB) selected
8
+ * per billing model. Confusing them silently over-attributes Fargate memory
9
+ * cost by ~4.86% — the pricing tests pin the divisor choice per model.
10
+ *
11
+ * Fail-silent contract (convention §9): every code path returns a usable
12
+ * `ComputeCost` — the five-tier degradation ladder from convention §7
13
+ * applies (per-region exact → per-runtime default → universal _meta default
14
+ * → hardcoded constants → cost=0 with warning).
15
+ *
16
+ * Mirrors python/src/dexcost/compute_pricing.py.
17
+ */
18
+ import { Decimal } from "decimal.js";
19
+ import { readFileSync } from "node:fs";
20
+ import { createRequire } from "node:module";
21
+ // ─── Warn-once tracking (module-level, single-threaded JS → no lock) ─────────
22
+ const _warnedModes = new Set();
23
+ export function _resetWarningStateForTests() {
24
+ _warnedModes.clear();
25
+ }
26
+ function _warnOnce(mode, message) {
27
+ if (_warnedModes.has(mode))
28
+ return;
29
+ _warnedModes.add(mode);
30
+ // eslint-disable-next-line no-console
31
+ console.warn(message);
32
+ }
33
+ // ─── Conversion constants (Decision #7 pinned table) ─────────────────────────
34
+ const GB_DECIMAL = new Decimal("1000000000"); // 10^9 bytes — Lambda / Azure Funcs / Vercel
35
+ const GIB_BINARY = new Decimal(1024 * 1024 * 1024); // 2^30 bytes — Fargate / Cloud Run
36
+ const HOUR_S = new Decimal(3600);
37
+ const MS_PER_S = new Decimal(1000);
38
+ const HARDCODED = {
39
+ lambda: {
40
+ request_usd: new Decimal("0.0000002"),
41
+ gb_second_usd: new Decimal("0.0000166667"),
42
+ },
43
+ fargate: {
44
+ vcpu_second_usd: new Decimal("0.0000112444"),
45
+ gib_second_usd: new Decimal("0.0000012347"),
46
+ },
47
+ cloud_run_request: {
48
+ request_usd: new Decimal("0.0000004"),
49
+ vcpu_second_usd: new Decimal("0.000024"),
50
+ gib_second_usd: new Decimal("0.0000025"),
51
+ },
52
+ cloud_run_instance: {
53
+ vcpu_second_usd: new Decimal("0.000024"),
54
+ gib_second_usd: new Decimal("0.0000025"),
55
+ },
56
+ cloud_functions: {
57
+ request_usd: new Decimal("0.0000004"),
58
+ vcpu_second_usd: new Decimal("0.000024"),
59
+ gib_second_usd: new Decimal("0.0000025"),
60
+ },
61
+ azure_functions: {
62
+ execution_usd: new Decimal("0.0000002"),
63
+ gb_second_usd: new Decimal("0.000016"),
64
+ },
65
+ vercel_fluid: {
66
+ active_cpu_hour_usd: new Decimal("0.128"),
67
+ memory_gb_hour_usd: new Decimal("0.0106"),
68
+ invocation_usd: new Decimal("0.000000600"),
69
+ },
70
+ ec2: { vcpu_hour_usd: new Decimal("0.0464") },
71
+ gce: { vcpu_hour_usd: new Decimal("0.0475") },
72
+ azure_vm: { vcpu_hour_usd: new Decimal("0.046") },
73
+ k8s_pod: { vcpu_hour_usd: new Decimal("0.0464") },
74
+ };
75
+ // ─── Helpers ────────────────────────────────────────────────────────────────
76
+ function toDecimal(v) {
77
+ // Always go through String() so we never coerce through float — matches
78
+ // the Python `Decimal(str(x))` pattern.
79
+ return new Decimal(String(v));
80
+ }
81
+ function parseRateBlock(block, keys) {
82
+ const out = {};
83
+ for (const k of keys) {
84
+ out[k] = new Decimal(String(block[k]));
85
+ }
86
+ return out;
87
+ }
88
+ // ═════════════════════════════════════════════════════════════════════════════
89
+ // ComputePricingEngine
90
+ // ═════════════════════════════════════════════════════════════════════════════
91
+ export class ComputePricingEngine {
92
+ _catalog = {};
93
+ _catalogVersion = "unknown";
94
+ constructor(opts) {
95
+ if (opts?.catalog !== undefined) {
96
+ this._catalog = opts.catalog;
97
+ const meta = this._catalog._meta;
98
+ if (meta && typeof meta === "object") {
99
+ this._catalogVersion = String(meta.version ?? "unknown");
100
+ }
101
+ return;
102
+ }
103
+ this._load(opts?.catalogPath);
104
+ }
105
+ // -------------------------------------------------------------------------
106
+ // Catalog loading
107
+ // -------------------------------------------------------------------------
108
+ _load(catalogPath) {
109
+ let raw;
110
+ try {
111
+ if (catalogPath !== undefined) {
112
+ raw = readFileSync(catalogPath, "utf-8");
113
+ }
114
+ else {
115
+ // Use createRequire for the bundled JSON path — mirrors the egress
116
+ // pricing engine pattern. Resolves relative to this module.
117
+ try {
118
+ const req = createRequire(import.meta.url);
119
+ const obj = req("../data/compute_prices.json");
120
+ this._catalog = obj;
121
+ const meta = obj._meta;
122
+ if (meta && typeof meta === "object") {
123
+ this._catalogVersion = String(meta.version ?? "unknown");
124
+ }
125
+ return;
126
+ }
127
+ catch (err) {
128
+ _warnOnce("catalog_missing", `compute catalog file not found; falling back to hardcoded ` +
129
+ `per-billing-model defaults (${String(err)})`);
130
+ return;
131
+ }
132
+ }
133
+ }
134
+ catch (err) {
135
+ const msg = err?.code === "ENOENT"
136
+ ? `compute catalog file not found; falling back to hardcoded per-billing-model defaults`
137
+ : `compute catalog unreadable (${String(err)}); falling back to hardcoded per-billing-model defaults`;
138
+ _warnOnce(err?.code === "ENOENT"
139
+ ? "catalog_missing"
140
+ : "catalog_unreadable", msg);
141
+ return;
142
+ }
143
+ try {
144
+ this._catalog = JSON.parse(raw);
145
+ }
146
+ catch (err) {
147
+ _warnOnce("catalog_malformed", `compute catalog malformed JSON (${String(err)}); falling back to ` +
148
+ `hardcoded per-billing-model defaults`);
149
+ this._catalog = {};
150
+ return;
151
+ }
152
+ const meta = this._catalog._meta;
153
+ if (meta && typeof meta === "object") {
154
+ this._catalogVersion = String(meta.version ?? "unknown");
155
+ }
156
+ }
157
+ get catalogVersion() {
158
+ return this._catalogVersion;
159
+ }
160
+ // -------------------------------------------------------------------------
161
+ // Public entry point — Tier 5 wrapper
162
+ // -------------------------------------------------------------------------
163
+ resolveComputeCost(details, cloudEnv, overrides, windowS) {
164
+ const billingModel = (details && details.billing_model) || "unknown";
165
+ const ov = overrides ?? {};
166
+ try {
167
+ return this._dispatch(billingModel, details, cloudEnv, ov, windowS);
168
+ }
169
+ catch (exc) {
170
+ _warnOnce(`compute_failure:${billingModel}`, `compute pricing failed for billing_model=${billingModel}: ${String(exc)}; ` +
171
+ `emitting cost_usd=0`);
172
+ return {
173
+ costUsd: new Decimal(0),
174
+ pricingSource: `compute_catalog:error:${billingModel}`,
175
+ costConfidence: "unknown",
176
+ };
177
+ }
178
+ }
179
+ // -------------------------------------------------------------------------
180
+ // Dispatch
181
+ // -------------------------------------------------------------------------
182
+ _dispatch(billingModel, details, cloudEnv, overrides, windowS) {
183
+ // Cloud Run override — flip the math BEFORE catalog lookup.
184
+ if (billingModel === "cloud_run_request" && overrides.cloud_run === "instance") {
185
+ return this._cloudRunInstanceOverride(details, windowS);
186
+ }
187
+ if (billingModel === "lambda")
188
+ return this._lambda(details);
189
+ if (billingModel === "fargate")
190
+ return this._fargate(details, windowS);
191
+ if (billingModel === "cloud_run_request")
192
+ return this._cloudRunRequest(details);
193
+ if (billingModel === "cloud_run_instance")
194
+ return this._cloudRunInstanceOverride(details, windowS);
195
+ if (billingModel === "cloud_functions")
196
+ return this._cloudFunctions(details);
197
+ if (billingModel === "azure_functions")
198
+ return this._azureFunctions(details);
199
+ if (billingModel === "vercel_fluid")
200
+ return this._vercel(details);
201
+ if (billingModel === "ec2" || billingModel === "gce" || billingModel === "azure_vm") {
202
+ return this._iaasShare(billingModel, details, cloudEnv, windowS);
203
+ }
204
+ if (billingModel === "k8s_pod")
205
+ return this._k8sPodLimits(details, windowS);
206
+ _warnOnce(`unsupported_billing_model:${billingModel}`, `compute pricing has no math for billing_model=${billingModel}; emitting cost_usd=0`);
207
+ return {
208
+ costUsd: new Decimal(0),
209
+ pricingSource: `compute_catalog:unsupported:${billingModel}`,
210
+ costConfidence: "unknown",
211
+ };
212
+ }
213
+ // ─── Lambda ────────────────────────────────────────────────────────────────
214
+ _lambda(details) {
215
+ const region = details.region;
216
+ const architecture = details.architecture || "x86_64";
217
+ const { rate, source, confidence } = this._resolveLambdaRate(region, architecture);
218
+ const durationS = toDecimal(details.duration_ms).dividedBy(MS_PER_S);
219
+ const memoryGb = toDecimal(details.memory_bytes_limit).dividedBy(GB_DECIMAL);
220
+ const gbSeconds = memoryGb.times(durationS);
221
+ const invocations = toDecimal(details.invocation_count);
222
+ const cost = invocations
223
+ .times(rate.request_usd)
224
+ .plus(gbSeconds.times(rate.gb_second_usd));
225
+ return { costUsd: cost, pricingSource: source, costConfidence: confidence };
226
+ }
227
+ _resolveLambdaRate(region, architecture) {
228
+ const block = this._catalog?.aws?.lambda;
229
+ if (block && typeof block === "object") {
230
+ const regions = block.regions || {};
231
+ if (region && region in regions) {
232
+ const archBlock = regions[region][architecture];
233
+ if (archBlock) {
234
+ return {
235
+ rate: parseRateBlock(archBlock, ["request_usd", "gb_second_usd"]),
236
+ source: `compute_catalog:aws:lambda:${region}:${architecture}`,
237
+ confidence: "computed",
238
+ };
239
+ }
240
+ }
241
+ const def = block.default?.[architecture];
242
+ if (def) {
243
+ return {
244
+ rate: parseRateBlock(def, ["request_usd", "gb_second_usd"]),
245
+ source: `compute_catalog:aws:lambda:default:${architecture}`,
246
+ confidence: "estimated",
247
+ };
248
+ }
249
+ }
250
+ const meta = this._catalog?._meta;
251
+ try {
252
+ return {
253
+ rate: {
254
+ request_usd: new Decimal(String(meta.default_lambda_request_usd)),
255
+ gb_second_usd: new Decimal(String(meta.default_lambda_gb_second_usd)),
256
+ },
257
+ source: "compute_catalog:default:lambda",
258
+ confidence: "estimated",
259
+ };
260
+ }
261
+ catch {
262
+ return {
263
+ rate: HARDCODED.lambda,
264
+ source: "compute_catalog:hardcoded:lambda",
265
+ confidence: "estimated",
266
+ };
267
+ }
268
+ }
269
+ // ─── Fargate ───────────────────────────────────────────────────────────────
270
+ _fargate(details, windowS) {
271
+ let w = windowS;
272
+ if (!w || w.lte(0)) {
273
+ w = toDecimal(details.duration_ms).dividedBy(MS_PER_S);
274
+ }
275
+ const region = details.region;
276
+ const architecture = details.architecture || "x86_64";
277
+ const { rate, source, confidence } = this._resolveFargateRate(region, architecture);
278
+ const memoryGib = toDecimal(details.memory_bytes_limit).dividedBy(GIB_BINARY);
279
+ const vcpuCount = toDecimal(details.vcpu_count);
280
+ const cost = vcpuCount
281
+ .times(w)
282
+ .times(rate.vcpu_second_usd)
283
+ .plus(memoryGib.times(w).times(rate.gib_second_usd));
284
+ return { costUsd: cost, pricingSource: source, costConfidence: confidence };
285
+ }
286
+ _resolveFargateRate(region, architecture) {
287
+ const block = this._catalog?.aws?.fargate;
288
+ if (block && typeof block === "object") {
289
+ const regions = block.regions || {};
290
+ if (region && region in regions) {
291
+ const archBlock = regions[region][architecture];
292
+ if (archBlock) {
293
+ return {
294
+ rate: parseRateBlock(archBlock, ["vcpu_second_usd", "gib_second_usd"]),
295
+ source: `compute_catalog:aws:fargate:${region}:${architecture}`,
296
+ confidence: "computed",
297
+ };
298
+ }
299
+ }
300
+ const def = block.default?.[architecture];
301
+ if (def) {
302
+ return {
303
+ rate: parseRateBlock(def, ["vcpu_second_usd", "gib_second_usd"]),
304
+ source: `compute_catalog:aws:fargate:default:${architecture}`,
305
+ confidence: "estimated",
306
+ };
307
+ }
308
+ }
309
+ const meta = this._catalog?._meta;
310
+ try {
311
+ return {
312
+ rate: {
313
+ vcpu_second_usd: new Decimal(String(meta.default_fargate_vcpu_second_usd)),
314
+ gib_second_usd: new Decimal(String(meta.default_fargate_gib_second_usd)),
315
+ },
316
+ source: "compute_catalog:default:fargate",
317
+ confidence: "estimated",
318
+ };
319
+ }
320
+ catch {
321
+ return {
322
+ rate: HARDCODED.fargate,
323
+ source: "compute_catalog:hardcoded:fargate",
324
+ confidence: "estimated",
325
+ };
326
+ }
327
+ }
328
+ // ─── Cloud Run (request-based, default) ────────────────────────────────────
329
+ _cloudRunRequest(details) {
330
+ const region = details.region;
331
+ const { rate } = this._resolveCloudRunRate(region);
332
+ // Decision #1: Cloud Run defaults to request-based with estimated
333
+ // confidence — the container cannot discover the actual billing mode.
334
+ const source = "compute_catalog:cloud_run:request_based_default";
335
+ const confidence = "estimated";
336
+ const durationS = toDecimal(details.duration_ms).dividedBy(MS_PER_S);
337
+ const memoryGib = toDecimal(details.memory_bytes_limit).dividedBy(GIB_BINARY);
338
+ const vcpuCount = toDecimal(details.vcpu_count);
339
+ const invocations = toDecimal(details.invocation_count);
340
+ const cost = invocations
341
+ .times(rate.request_usd)
342
+ .plus(vcpuCount.times(durationS).times(rate.vcpu_second_usd))
343
+ .plus(memoryGib.times(durationS).times(rate.gib_second_usd));
344
+ return { costUsd: cost, pricingSource: source, costConfidence: confidence };
345
+ }
346
+ _cloudRunInstanceOverride(details, windowS) {
347
+ let w = windowS;
348
+ if (!w || w.lte(0)) {
349
+ w = toDecimal(details.duration_ms).dividedBy(MS_PER_S);
350
+ }
351
+ const region = details.region;
352
+ const { rate } = this._resolveCloudRunRate(region);
353
+ const memoryGib = toDecimal(details.memory_bytes_limit).dividedBy(GIB_BINARY);
354
+ const vcpuCount = toDecimal(details.vcpu_count);
355
+ const cost = vcpuCount
356
+ .times(w)
357
+ .times(rate.vcpu_second_usd)
358
+ .plus(memoryGib.times(w).times(rate.gib_second_usd));
359
+ return {
360
+ costUsd: cost,
361
+ pricingSource: "compute_catalog:cloud_run:instance_override",
362
+ costConfidence: "computed",
363
+ };
364
+ }
365
+ _resolveCloudRunRate(region) {
366
+ const block = this._catalog?.gcp?.cloud_run;
367
+ if (block && typeof block === "object") {
368
+ const regions = block.regions || {};
369
+ if (region && region in regions) {
370
+ return {
371
+ rate: parseRateBlock(regions[region], [
372
+ "request_usd",
373
+ "vcpu_second_usd",
374
+ "gib_second_usd",
375
+ ]),
376
+ source: `compute_catalog:gcp:cloud_run:${region}`,
377
+ confidence: "computed",
378
+ };
379
+ }
380
+ const def = block.default;
381
+ if (def) {
382
+ return {
383
+ rate: parseRateBlock(def, ["request_usd", "vcpu_second_usd", "gib_second_usd"]),
384
+ source: "compute_catalog:gcp:cloud_run:default",
385
+ confidence: "estimated",
386
+ };
387
+ }
388
+ }
389
+ const meta = this._catalog?._meta;
390
+ try {
391
+ return {
392
+ rate: {
393
+ request_usd: new Decimal(String(meta.default_cloud_run_request_usd)),
394
+ vcpu_second_usd: new Decimal(String(meta.default_cloud_run_vcpu_second_usd)),
395
+ gib_second_usd: new Decimal(String(meta.default_cloud_run_gib_second_usd)),
396
+ },
397
+ source: "compute_catalog:default:cloud_run",
398
+ confidence: "estimated",
399
+ };
400
+ }
401
+ catch {
402
+ return {
403
+ rate: HARDCODED.cloud_run_request,
404
+ source: "compute_catalog:hardcoded:cloud_run",
405
+ confidence: "estimated",
406
+ };
407
+ }
408
+ }
409
+ // ─── Cloud Functions Gen2 (Cloud Run pricing under the hood) ───────────────
410
+ _cloudFunctions(details) {
411
+ const region = details.region;
412
+ const { rate, source: cloudRunSource, confidence } = this._resolveCloudRunRate(region);
413
+ const source = cloudRunSource.replace("cloud_run", "cloud_functions");
414
+ const durationS = toDecimal(details.duration_ms).dividedBy(MS_PER_S);
415
+ const memoryGib = toDecimal(details.memory_bytes_limit).dividedBy(GIB_BINARY);
416
+ const vcpuCount = toDecimal(details.vcpu_count);
417
+ const invocations = toDecimal(details.invocation_count);
418
+ const cost = invocations
419
+ .times(rate.request_usd)
420
+ .plus(vcpuCount.times(durationS).times(rate.vcpu_second_usd))
421
+ .plus(memoryGib.times(durationS).times(rate.gib_second_usd));
422
+ return { costUsd: cost, pricingSource: source, costConfidence: confidence };
423
+ }
424
+ // ─── Azure Functions Consumption ───────────────────────────────────────────
425
+ _azureFunctions(details) {
426
+ const region = details.region;
427
+ const { rate, source, confidence } = this._resolveAzureFunctionsRate(region);
428
+ const durationS = toDecimal(details.duration_ms).dividedBy(MS_PER_S);
429
+ const memoryGb = toDecimal(details.memory_bytes_limit).dividedBy(GB_DECIMAL);
430
+ const invocations = toDecimal(details.invocation_count);
431
+ const cost = invocations
432
+ .times(rate.execution_usd)
433
+ .plus(memoryGb.times(durationS).times(rate.gb_second_usd));
434
+ return { costUsd: cost, pricingSource: source, costConfidence: confidence };
435
+ }
436
+ _resolveAzureFunctionsRate(region) {
437
+ const block = this._catalog?.azure?.functions_consumption;
438
+ if (block && typeof block === "object") {
439
+ const regions = block.regions || {};
440
+ if (region && region in regions) {
441
+ return {
442
+ rate: parseRateBlock(regions[region], ["execution_usd", "gb_second_usd"]),
443
+ source: `compute_catalog:azure:functions_consumption:${region}`,
444
+ confidence: "computed",
445
+ };
446
+ }
447
+ const def = block.default;
448
+ if (def) {
449
+ return {
450
+ rate: parseRateBlock(def, ["execution_usd", "gb_second_usd"]),
451
+ source: "compute_catalog:azure:functions_consumption:default",
452
+ confidence: "estimated",
453
+ };
454
+ }
455
+ }
456
+ const meta = this._catalog?._meta;
457
+ try {
458
+ return {
459
+ rate: {
460
+ execution_usd: new Decimal(String(meta.default_azure_functions_execution_usd)),
461
+ gb_second_usd: new Decimal(String(meta.default_azure_functions_gb_second_usd)),
462
+ },
463
+ source: "compute_catalog:default:azure_functions",
464
+ confidence: "estimated",
465
+ };
466
+ }
467
+ catch {
468
+ return {
469
+ rate: HARDCODED.azure_functions,
470
+ source: "compute_catalog:hardcoded:azure_functions",
471
+ confidence: "estimated",
472
+ };
473
+ }
474
+ }
475
+ // ─── Vercel Fluid ──────────────────────────────────────────────────────────
476
+ _vercel(details) {
477
+ const { rate, source, confidence } = this._resolveVercelRate();
478
+ const durationS = toDecimal(details.duration_ms).dividedBy(MS_PER_S);
479
+ const memoryGb = toDecimal(details.memory_bytes_limit).dividedBy(GB_DECIMAL);
480
+ const invocations = toDecimal(details.invocation_count);
481
+ const activeCpuHours = durationS.dividedBy(HOUR_S);
482
+ const memoryGbHours = memoryGb.times(durationS.dividedBy(HOUR_S));
483
+ const cost = invocations
484
+ .times(rate.invocation_usd)
485
+ .plus(activeCpuHours.times(rate.active_cpu_hour_usd))
486
+ .plus(memoryGbHours.times(rate.memory_gb_hour_usd));
487
+ return { costUsd: cost, pricingSource: source, costConfidence: confidence };
488
+ }
489
+ _resolveVercelRate() {
490
+ const block = this._catalog?.vercel?.fluid;
491
+ if (block && typeof block === "object") {
492
+ const def = block.default;
493
+ if (def) {
494
+ return {
495
+ rate: parseRateBlock(def, [
496
+ "active_cpu_hour_usd",
497
+ "memory_gb_hour_usd",
498
+ "invocation_usd",
499
+ ]),
500
+ source: "compute_catalog:vercel:fluid",
501
+ confidence: "computed",
502
+ };
503
+ }
504
+ }
505
+ const meta = this._catalog?._meta;
506
+ try {
507
+ return {
508
+ rate: {
509
+ active_cpu_hour_usd: new Decimal(String(meta.default_vercel_cpu_hour_usd)),
510
+ memory_gb_hour_usd: new Decimal(String(meta.default_vercel_memory_gb_hour_usd)),
511
+ invocation_usd: new Decimal("0.000000600"),
512
+ },
513
+ source: "compute_catalog:default:vercel",
514
+ confidence: "estimated",
515
+ };
516
+ }
517
+ catch {
518
+ return {
519
+ rate: HARDCODED.vercel_fluid,
520
+ source: "compute_catalog:hardcoded:vercel",
521
+ confidence: "estimated",
522
+ };
523
+ }
524
+ }
525
+ // ─── EC2 / GCE / Azure VM share ────────────────────────────────────────────
526
+ _iaasShare(billingModel, details, cloudEnv, windowS) {
527
+ let w = windowS;
528
+ if (!w || w.lte(0)) {
529
+ w = toDecimal(details.duration_ms).dividedBy(MS_PER_S);
530
+ }
531
+ const instanceType = cloudEnv.instanceType ?? null;
532
+ const region = details.region;
533
+ const { rate: instanceHourly, source, confidence } = this._resolveIaasRate(billingModel, region, instanceType);
534
+ const vcpuCount = toDecimal(details.vcpu_count);
535
+ const vcpuSeconds = toDecimal(details.vcpu_seconds_used);
536
+ if (vcpuCount.lte(0) || w.lte(0)) {
537
+ return { costUsd: new Decimal(0), pricingSource: source, costConfidence: confidence };
538
+ }
539
+ const shareFactor = vcpuSeconds.dividedBy(vcpuCount.times(w));
540
+ const taskInstanceHours = shareFactor.times(w.dividedBy(HOUR_S));
541
+ const cost = taskInstanceHours.times(instanceHourly);
542
+ return { costUsd: cost, pricingSource: source, costConfidence: confidence };
543
+ }
544
+ _resolveIaasRate(billingModel, region, instanceType) {
545
+ const mapping = {
546
+ ec2: ["aws", "ec2"],
547
+ gce: ["gcp", "gce"],
548
+ azure_vm: ["azure", "vm"],
549
+ };
550
+ const [providerKey, runtimeKey] = mapping[billingModel];
551
+ const block = this._catalog?.[providerKey]?.[runtimeKey];
552
+ if (block && typeof block === "object") {
553
+ const regions = block.regions || {};
554
+ if (region && region in regions && instanceType) {
555
+ const instances = regions[region].instance_types || {};
556
+ const sku = instances[instanceType];
557
+ if (sku) {
558
+ try {
559
+ return {
560
+ rate: new Decimal(String(sku.hourly_usd)),
561
+ source: `compute_catalog:${providerKey}:${runtimeKey}:${region}:${instanceType}`,
562
+ confidence: "computed",
563
+ };
564
+ }
565
+ catch {
566
+ // fall through
567
+ }
568
+ }
569
+ }
570
+ try {
571
+ return {
572
+ rate: new Decimal(String(block.default_vcpu_hour_usd)),
573
+ source: `compute_catalog:${providerKey}:${runtimeKey}:default`,
574
+ confidence: "estimated",
575
+ };
576
+ }
577
+ catch {
578
+ // fall through
579
+ }
580
+ }
581
+ const meta = this._catalog?._meta;
582
+ const metaKey = "default_ec2_vcpu_hour_usd";
583
+ try {
584
+ return {
585
+ rate: new Decimal(String(meta[metaKey])),
586
+ source: `compute_catalog:default:${billingModel}`,
587
+ confidence: "estimated",
588
+ };
589
+ }
590
+ catch {
591
+ return {
592
+ rate: HARDCODED[billingModel].vcpu_hour_usd,
593
+ source: `compute_catalog:hardcoded:${billingModel}`,
594
+ confidence: "estimated",
595
+ };
596
+ }
597
+ }
598
+ // ─── K8s pod (default — limits × duration × hourly) ────────────────────────
599
+ _k8sPodLimits(details, windowS) {
600
+ let w = windowS;
601
+ if (!w || w.lte(0)) {
602
+ w = toDecimal(details.duration_ms).dividedBy(MS_PER_S);
603
+ }
604
+ const { rate, source, confidence } = this._resolveK8sPodRate();
605
+ const vcpuCount = toDecimal(details.vcpu_count);
606
+ const cost = vcpuCount.times(w.dividedBy(HOUR_S)).times(rate);
607
+ return { costUsd: cost, pricingSource: source, costConfidence: confidence };
608
+ }
609
+ _resolveK8sPodRate() {
610
+ const meta = this._catalog?._meta;
611
+ try {
612
+ return {
613
+ rate: new Decimal(String(meta.default_k8s_pod_vcpu_hour_usd)),
614
+ source: "compute_catalog:k8s_pod:limits",
615
+ confidence: "computed",
616
+ };
617
+ }
618
+ catch {
619
+ return {
620
+ rate: HARDCODED.k8s_pod.vcpu_hour_usd,
621
+ source: "compute_catalog:hardcoded:k8s_pod",
622
+ confidence: "estimated",
623
+ };
624
+ }
625
+ }
626
+ }
627
+ //# sourceMappingURL=compute-pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute-pricing.js","sourceRoot":"","sources":["../../src/pricing/compute-pricing.ts"],"names":[],"mappings":"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"}