oci-pricing-mcp 1.2.1

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 (49) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +24 -0
  3. package/README.md +299 -0
  4. package/dist/data/cache.d.ts +50 -0
  5. package/dist/data/cache.d.ts.map +1 -0
  6. package/dist/data/cache.js +90 -0
  7. package/dist/data/cache.js.map +1 -0
  8. package/dist/data/fetcher.d.ts +96 -0
  9. package/dist/data/fetcher.d.ts.map +1 -0
  10. package/dist/data/fetcher.js +232 -0
  11. package/dist/data/fetcher.js.map +1 -0
  12. package/dist/data/pricing-data.json +6162 -0
  13. package/dist/index.d.ts +21 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +582 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/tools/calculator.d.ts +17 -0
  18. package/dist/tools/calculator.d.ts.map +1 -0
  19. package/dist/tools/calculator.js +318 -0
  20. package/dist/tools/calculator.js.map +1 -0
  21. package/dist/tools/compute.d.ts +58 -0
  22. package/dist/tools/compute.d.ts.map +1 -0
  23. package/dist/tools/compute.js +172 -0
  24. package/dist/tools/compute.js.map +1 -0
  25. package/dist/tools/core.d.ts +70 -0
  26. package/dist/tools/core.d.ts.map +1 -0
  27. package/dist/tools/core.js +113 -0
  28. package/dist/tools/core.js.map +1 -0
  29. package/dist/tools/database.d.ts +66 -0
  30. package/dist/tools/database.d.ts.map +1 -0
  31. package/dist/tools/database.js +212 -0
  32. package/dist/tools/database.js.map +1 -0
  33. package/dist/tools/kubernetes.d.ts +65 -0
  34. package/dist/tools/kubernetes.d.ts.map +1 -0
  35. package/dist/tools/kubernetes.js +226 -0
  36. package/dist/tools/kubernetes.js.map +1 -0
  37. package/dist/tools/networking.d.ts +63 -0
  38. package/dist/tools/networking.d.ts.map +1 -0
  39. package/dist/tools/networking.js +248 -0
  40. package/dist/tools/networking.js.map +1 -0
  41. package/dist/tools/storage.d.ts +64 -0
  42. package/dist/tools/storage.d.ts.map +1 -0
  43. package/dist/tools/storage.js +175 -0
  44. package/dist/tools/storage.js.map +1 -0
  45. package/dist/types.d.ts +162 -0
  46. package/dist/types.d.ts.map +1 -0
  47. package/dist/types.js +5 -0
  48. package/dist/types.js.map +1 -0
  49. package/package.json +53 -0
@@ -0,0 +1,96 @@
1
+ /**
2
+ * OCI Pricing Data Fetcher
3
+ * Loads pricing data from bundled JSON or real-time Oracle API
4
+ */
5
+ import type { OCIPricingData } from '../types.js';
6
+ export interface RealTimePriceItem {
7
+ partNumber: string;
8
+ displayName: string;
9
+ metricName: string;
10
+ serviceCategory: string;
11
+ unitPrice: number;
12
+ currency: string;
13
+ }
14
+ export interface RealTimePricingResponse {
15
+ lastUpdated: string;
16
+ totalProducts: number;
17
+ items: RealTimePriceItem[];
18
+ }
19
+ /**
20
+ * Get OCI pricing data
21
+ * Uses cache if available, otherwise loads from bundled data
22
+ */
23
+ export declare function getPricingData(): OCIPricingData;
24
+ /**
25
+ * Get compute pricing data
26
+ */
27
+ export declare function getComputePricing(): import("../types.js").ComputeShapePricing[];
28
+ /**
29
+ * Get storage pricing data
30
+ */
31
+ export declare function getStoragePricing(): import("../types.js").StoragePricing[];
32
+ /**
33
+ * Get database pricing data
34
+ */
35
+ export declare function getDatabasePricing(): import("../types.js").DatabasePricing[];
36
+ /**
37
+ * Get networking pricing data
38
+ */
39
+ export declare function getNetworkingPricing(): import("../types.js").NetworkingPricing[];
40
+ /**
41
+ * Get Kubernetes pricing data
42
+ */
43
+ export declare function getKubernetesPricing(): import("../types.js").KubernetesPricing[];
44
+ /**
45
+ * Get services catalog
46
+ */
47
+ export declare function getServicesCatalog(): import("../types.js").ServiceCatalogEntry[];
48
+ /**
49
+ * Get available regions
50
+ */
51
+ export declare function getRegions(): import("../types.js").RegionInfo[];
52
+ /**
53
+ * Get free tier information
54
+ */
55
+ export declare function getFreeTier(): Record<string, unknown>;
56
+ /**
57
+ * Get pricing metadata
58
+ */
59
+ export declare function getPricingMetadata(): import("../types.js").PricingMetadata;
60
+ /**
61
+ * Get data last updated timestamp
62
+ */
63
+ export declare function getLastUpdated(): string;
64
+ /**
65
+ * Get all products from bundled data
66
+ */
67
+ export declare function getAllProducts(): import("../types.js").APIProduct[];
68
+ /**
69
+ * Get all categories from bundled data
70
+ */
71
+ export declare function getCategories(): string[];
72
+ /**
73
+ * Search products by category or search term
74
+ */
75
+ export declare function searchProducts(options?: {
76
+ category?: string;
77
+ search?: string;
78
+ }): import("../types.js").APIProduct[];
79
+ /**
80
+ * Force refresh of cached data
81
+ */
82
+ export declare function refreshCache(): void;
83
+ /**
84
+ * Fetch real-time pricing from Oracle's public API
85
+ * This provides 600+ products with current prices
86
+ */
87
+ export declare function fetchRealTimePricing(options?: {
88
+ currency?: string;
89
+ category?: string;
90
+ search?: string;
91
+ }): Promise<RealTimePricingResponse>;
92
+ /**
93
+ * Get available service categories from real-time API
94
+ */
95
+ export declare function getRealTimeCategories(): Promise<string[]>;
96
+ //# sourceMappingURL=fetcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/data/fetcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AASlD,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B;AAWD;;;GAGG;AACH,wBAAgB,cAAc,IAAI,cAAc,CAc/C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,gDAGhC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,2CAGhC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,4CAGjC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,8CAGnC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,8CAGnC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,gDAGjC;AAED;;GAEG;AACH,wBAAgB,UAAU,uCAGzB;AAED;;GAEG;AACH,wBAAgB,WAAW,4BAG1B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,0CAGjC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED;;GAEG;AACH,wBAAgB,cAAc,uCAG7B;AAED;;GAEG;AACH,wBAAgB,aAAa,aAG5B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,sCAkB9E;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,CAAC,EAAE;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAqEnC;AAkCD;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAO/D"}
@@ -0,0 +1,232 @@
1
+ /**
2
+ * OCI Pricing Data Fetcher
3
+ * Loads pricing data from bundled JSON or real-time Oracle API
4
+ */
5
+ import { readFileSync } from 'fs';
6
+ import { fileURLToPath } from 'url';
7
+ import { dirname, join } from 'path';
8
+ import { pricingCache, CACHE_KEYS } from './cache.js';
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = dirname(__filename);
11
+ // Oracle's public pricing API endpoint (no authentication required)
12
+ const OCI_PRICING_API = 'https://apexapps.oracle.com/pls/apex/cetools/api/v1/products/';
13
+ /**
14
+ * Load bundled pricing data from JSON file
15
+ */
16
+ function loadBundledPricingData() {
17
+ const dataPath = join(__dirname, 'pricing-data.json');
18
+ const rawData = readFileSync(dataPath, 'utf-8');
19
+ return JSON.parse(rawData);
20
+ }
21
+ /**
22
+ * Get OCI pricing data
23
+ * Uses cache if available, otherwise loads from bundled data
24
+ */
25
+ export function getPricingData() {
26
+ // Check cache first
27
+ const cached = pricingCache.get(CACHE_KEYS.PRICING_DATA);
28
+ if (cached) {
29
+ return cached;
30
+ }
31
+ // Load bundled data
32
+ const data = loadBundledPricingData();
33
+ // Cache for 24 hours (bundled data doesn't change frequently)
34
+ pricingCache.set(CACHE_KEYS.PRICING_DATA, data, 60 * 24);
35
+ return data;
36
+ }
37
+ /**
38
+ * Get compute pricing data
39
+ */
40
+ export function getComputePricing() {
41
+ const data = getPricingData();
42
+ return data.compute;
43
+ }
44
+ /**
45
+ * Get storage pricing data
46
+ */
47
+ export function getStoragePricing() {
48
+ const data = getPricingData();
49
+ return data.storage;
50
+ }
51
+ /**
52
+ * Get database pricing data
53
+ */
54
+ export function getDatabasePricing() {
55
+ const data = getPricingData();
56
+ return data.database;
57
+ }
58
+ /**
59
+ * Get networking pricing data
60
+ */
61
+ export function getNetworkingPricing() {
62
+ const data = getPricingData();
63
+ return data.networking;
64
+ }
65
+ /**
66
+ * Get Kubernetes pricing data
67
+ */
68
+ export function getKubernetesPricing() {
69
+ const data = getPricingData();
70
+ return data.kubernetes;
71
+ }
72
+ /**
73
+ * Get services catalog
74
+ */
75
+ export function getServicesCatalog() {
76
+ const data = getPricingData();
77
+ return data.services;
78
+ }
79
+ /**
80
+ * Get available regions
81
+ */
82
+ export function getRegions() {
83
+ const data = getPricingData();
84
+ return data.regions || [];
85
+ }
86
+ /**
87
+ * Get free tier information
88
+ */
89
+ export function getFreeTier() {
90
+ const data = getPricingData();
91
+ return data.freeTier || null;
92
+ }
93
+ /**
94
+ * Get pricing metadata
95
+ */
96
+ export function getPricingMetadata() {
97
+ const data = getPricingData();
98
+ return data.metadata;
99
+ }
100
+ /**
101
+ * Get data last updated timestamp
102
+ */
103
+ export function getLastUpdated() {
104
+ const data = getPricingData();
105
+ return data.metadata?.apiLastUpdated || data.metadata?.bundledDataGenerated || 'unknown';
106
+ }
107
+ /**
108
+ * Get all products from bundled data
109
+ */
110
+ export function getAllProducts() {
111
+ const data = getPricingData();
112
+ return data.products || [];
113
+ }
114
+ /**
115
+ * Get all categories from bundled data
116
+ */
117
+ export function getCategories() {
118
+ const data = getPricingData();
119
+ return data.categories || [];
120
+ }
121
+ /**
122
+ * Search products by category or search term
123
+ */
124
+ export function searchProducts(options) {
125
+ let products = getAllProducts();
126
+ if (options?.category) {
127
+ const cat = options.category.toLowerCase();
128
+ products = products.filter(p => p.serviceCategory.toLowerCase().includes(cat));
129
+ }
130
+ if (options?.search) {
131
+ const search = options.search.toLowerCase();
132
+ products = products.filter(p => p.displayName.toLowerCase().includes(search) ||
133
+ p.partNumber.toLowerCase().includes(search) ||
134
+ p.serviceCategory.toLowerCase().includes(search));
135
+ }
136
+ return products;
137
+ }
138
+ /**
139
+ * Force refresh of cached data
140
+ */
141
+ export function refreshCache() {
142
+ pricingCache.delete(CACHE_KEYS.PRICING_DATA);
143
+ getPricingData(); // Reload
144
+ }
145
+ /**
146
+ * Fetch real-time pricing from Oracle's public API
147
+ * This provides 600+ products with current prices
148
+ */
149
+ export async function fetchRealTimePricing(options) {
150
+ const currency = options?.currency || 'USD';
151
+ const cacheKey = `realtime_${currency}`;
152
+ // Check cache (5 minute TTL for real-time data)
153
+ const cached = pricingCache.get(cacheKey);
154
+ if (cached) {
155
+ // Apply filters to cached data
156
+ return filterRealTimeData(cached, options);
157
+ }
158
+ try {
159
+ const response = await fetch(OCI_PRICING_API);
160
+ if (!response.ok) {
161
+ throw new Error(`API request failed: ${response.status}`);
162
+ }
163
+ const data = await response.json();
164
+ // Transform to simpler format with selected currency
165
+ const items = data.items.map(item => {
166
+ let unitPrice = 0;
167
+ for (const curr of item.currencyCodeLocalizations || []) {
168
+ if (curr.currencyCode === currency) {
169
+ for (const p of curr.prices) {
170
+ if (p.model === 'PAY_AS_YOU_GO') {
171
+ unitPrice = p.value;
172
+ break;
173
+ }
174
+ }
175
+ break;
176
+ }
177
+ }
178
+ return {
179
+ partNumber: item.partNumber,
180
+ displayName: item.displayName,
181
+ metricName: item.metricName,
182
+ serviceCategory: item.serviceCategory,
183
+ unitPrice,
184
+ currency,
185
+ };
186
+ });
187
+ const result = {
188
+ lastUpdated: data.lastUpdated,
189
+ totalProducts: items.length,
190
+ items,
191
+ };
192
+ // Cache for 5 minutes
193
+ pricingCache.set(cacheKey, result, 5);
194
+ return filterRealTimeData(result, options);
195
+ }
196
+ catch (error) {
197
+ throw new Error(`Failed to fetch real-time pricing: ${error instanceof Error ? error.message : 'Unknown error'}`);
198
+ }
199
+ }
200
+ /**
201
+ * Filter real-time pricing data by category or search term
202
+ */
203
+ function filterRealTimeData(data, options) {
204
+ let items = data.items;
205
+ if (options?.category) {
206
+ const cat = options.category.toLowerCase();
207
+ items = items.filter(item => item.serviceCategory.toLowerCase().includes(cat));
208
+ }
209
+ if (options?.search) {
210
+ const search = options.search.toLowerCase();
211
+ items = items.filter(item => item.displayName.toLowerCase().includes(search) ||
212
+ item.partNumber.toLowerCase().includes(search) ||
213
+ item.serviceCategory.toLowerCase().includes(search));
214
+ }
215
+ return {
216
+ ...data,
217
+ items,
218
+ totalProducts: items.length,
219
+ };
220
+ }
221
+ /**
222
+ * Get available service categories from real-time API
223
+ */
224
+ export async function getRealTimeCategories() {
225
+ const data = await fetchRealTimePricing();
226
+ const categories = new Set();
227
+ for (const item of data.items) {
228
+ categories.add(item.serviceCategory);
229
+ }
230
+ return Array.from(categories).sort();
231
+ }
232
+ //# sourceMappingURL=fetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../src/data/fetcher.ts"],"names":[],"mappings":"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"}