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.
- package/LICENSE +201 -0
- package/NOTICE +24 -0
- package/README.md +299 -0
- package/dist/data/cache.d.ts +50 -0
- package/dist/data/cache.d.ts.map +1 -0
- package/dist/data/cache.js +90 -0
- package/dist/data/cache.js.map +1 -0
- package/dist/data/fetcher.d.ts +96 -0
- package/dist/data/fetcher.d.ts.map +1 -0
- package/dist/data/fetcher.js +232 -0
- package/dist/data/fetcher.js.map +1 -0
- package/dist/data/pricing-data.json +6162 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +582 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/calculator.d.ts +17 -0
- package/dist/tools/calculator.d.ts.map +1 -0
- package/dist/tools/calculator.js +318 -0
- package/dist/tools/calculator.js.map +1 -0
- package/dist/tools/compute.d.ts +58 -0
- package/dist/tools/compute.d.ts.map +1 -0
- package/dist/tools/compute.js +172 -0
- package/dist/tools/compute.js.map +1 -0
- package/dist/tools/core.d.ts +70 -0
- package/dist/tools/core.d.ts.map +1 -0
- package/dist/tools/core.js +113 -0
- package/dist/tools/core.js.map +1 -0
- package/dist/tools/database.d.ts +66 -0
- package/dist/tools/database.d.ts.map +1 -0
- package/dist/tools/database.js +212 -0
- package/dist/tools/database.js.map +1 -0
- package/dist/tools/kubernetes.d.ts +65 -0
- package/dist/tools/kubernetes.d.ts.map +1 -0
- package/dist/tools/kubernetes.js +226 -0
- package/dist/tools/kubernetes.js.map +1 -0
- package/dist/tools/networking.d.ts +63 -0
- package/dist/tools/networking.d.ts.map +1 -0
- package/dist/tools/networking.js +248 -0
- package/dist/tools/networking.js.map +1 -0
- package/dist/tools/storage.d.ts +64 -0
- package/dist/tools/storage.d.ts.map +1 -0
- package/dist/tools/storage.js +175 -0
- package/dist/tools/storage.js.map +1 -0
- package/dist/types.d.ts +162 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- 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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"}
|