@cryptoquant_official/mcp 0.0.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 (55) hide show
  1. package/README.md +88 -0
  2. package/dist/auth/server.d.ts +3 -0
  3. package/dist/auth/server.d.ts.map +1 -0
  4. package/dist/auth/server.js +405 -0
  5. package/dist/auth/server.js.map +1 -0
  6. package/dist/auth/storage.d.ts +11 -0
  7. package/dist/auth/storage.d.ts.map +1 -0
  8. package/dist/auth/storage.js +53 -0
  9. package/dist/auth/storage.js.map +1 -0
  10. package/dist/cache/storage.d.ts +47 -0
  11. package/dist/cache/storage.d.ts.map +1 -0
  12. package/dist/cache/storage.js +140 -0
  13. package/dist/cache/storage.js.map +1 -0
  14. package/dist/cache/summary.d.ts +16 -0
  15. package/dist/cache/summary.d.ts.map +1 -0
  16. package/dist/cache/summary.js +85 -0
  17. package/dist/cache/summary.js.map +1 -0
  18. package/dist/cache/types.d.ts +76 -0
  19. package/dist/cache/types.d.ts.map +1 -0
  20. package/dist/cache/types.js +6 -0
  21. package/dist/cache/types.js.map +1 -0
  22. package/dist/config.d.ts +18 -0
  23. package/dist/config.d.ts.map +1 -0
  24. package/dist/config.js +23 -0
  25. package/dist/config.js.map +1 -0
  26. package/dist/data/metrics.toon +58 -0
  27. package/dist/discovery.d.ts +70 -0
  28. package/dist/discovery.d.ts.map +1 -0
  29. package/dist/discovery.js +159 -0
  30. package/dist/discovery.js.map +1 -0
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +23 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/permissions.d.ts +36 -0
  36. package/dist/permissions.d.ts.map +1 -0
  37. package/dist/permissions.js +135 -0
  38. package/dist/permissions.js.map +1 -0
  39. package/dist/plan-limits.d.ts +71 -0
  40. package/dist/plan-limits.d.ts.map +1 -0
  41. package/dist/plan-limits.js +400 -0
  42. package/dist/plan-limits.js.map +1 -0
  43. package/dist/tools/auth.d.ts +3 -0
  44. package/dist/tools/auth.d.ts.map +1 -0
  45. package/dist/tools/auth.js +157 -0
  46. package/dist/tools/auth.js.map +1 -0
  47. package/dist/tools/core.d.ts +3 -0
  48. package/dist/tools/core.d.ts.map +1 -0
  49. package/dist/tools/core.js +472 -0
  50. package/dist/tools/core.js.map +1 -0
  51. package/dist/utils.d.ts +32 -0
  52. package/dist/utils.d.ts.map +1 -0
  53. package/dist/utils.js +42 -0
  54. package/dist/utils.js.map +1 -0
  55. package/package.json +62 -0
@@ -0,0 +1,159 @@
1
+ let endpointCatalog = null;
2
+ export async function fetchDiscoveryEndpoints(apiKey, apiUrl) {
3
+ try {
4
+ const discoveryUrl = apiUrl.replace(/\/v1$/, "") + "/v1/discovery/endpoints?source=mcp";
5
+ const response = await fetch(discoveryUrl, {
6
+ method: "GET",
7
+ headers: { Authorization: `Bearer ${apiKey}` },
8
+ });
9
+ if (!response.ok) {
10
+ return { success: false, error: `Discovery API failed: ${response.status} ${response.statusText}` };
11
+ }
12
+ let data;
13
+ try {
14
+ data = await response.json();
15
+ }
16
+ catch {
17
+ return { success: false, error: "Failed to parse discovery response" };
18
+ }
19
+ if (data.status.code !== 200 || !data.result?.data) {
20
+ return { success: false, error: `Invalid discovery response: ${data.status.message}` };
21
+ }
22
+ endpointCatalog = parseEndpoints(data.result.data);
23
+ return { success: true };
24
+ }
25
+ catch (error) {
26
+ return { success: false, error: `Discovery fetch error: ${error}` };
27
+ }
28
+ }
29
+ function addToIndex(map, key, endpoint) {
30
+ const list = map.get(key);
31
+ if (list) {
32
+ list.push(endpoint);
33
+ }
34
+ else {
35
+ map.set(key, [endpoint]);
36
+ }
37
+ }
38
+ function parseEndpoints(rawEndpoints) {
39
+ const endpoints = [];
40
+ const assets = new Set();
41
+ const categories = new Set();
42
+ const byAsset = new Map();
43
+ const byCategory = new Map();
44
+ const byAssetCategory = new Map();
45
+ for (const ep of rawEndpoints) {
46
+ const parts = ep.path.split("/");
47
+ if (parts.length < 5)
48
+ continue;
49
+ const asset = parts[2];
50
+ const category = parts[3];
51
+ const parsed = {
52
+ path: ep.path,
53
+ asset,
54
+ category,
55
+ metric: parts.slice(4).join("/"),
56
+ parameters: ep.parameters,
57
+ required_parameters: ep.required_parameters,
58
+ };
59
+ endpoints.push(parsed);
60
+ assets.add(asset);
61
+ categories.add(category);
62
+ addToIndex(byAsset, asset, parsed);
63
+ addToIndex(byCategory, category, parsed);
64
+ addToIndex(byAssetCategory, `${asset}/${category}`, parsed);
65
+ }
66
+ return {
67
+ endpoints,
68
+ assets: Array.from(assets).sort(),
69
+ categories: Array.from(categories).sort(),
70
+ byAsset,
71
+ byCategory,
72
+ byAssetCategory,
73
+ fetched_at: Date.now(),
74
+ };
75
+ }
76
+ export function getEndpointCatalog() {
77
+ return endpointCatalog;
78
+ }
79
+ export function isDiscoveryLoaded() {
80
+ return endpointCatalog !== null;
81
+ }
82
+ function getBaseEndpoints(catalog, asset, category) {
83
+ if (asset && category) {
84
+ return catalog.byAssetCategory.get(`${asset}/${category}`) ?? [];
85
+ }
86
+ if (asset) {
87
+ return catalog.byAsset.get(asset) ?? [];
88
+ }
89
+ if (category) {
90
+ return catalog.byCategory.get(category) ?? [];
91
+ }
92
+ return catalog.endpoints;
93
+ }
94
+ export function searchEndpoints(options) {
95
+ if (!endpointCatalog)
96
+ return [];
97
+ const results = getBaseEndpoints(endpointCatalog, options.asset, options.category);
98
+ if (!options.query)
99
+ return results;
100
+ const queryLower = options.query.toLowerCase();
101
+ return results.filter((ep) => ep.path.toLowerCase().includes(queryLower) || ep.metric.toLowerCase().includes(queryLower));
102
+ }
103
+ export function getEndpointByPath(path) {
104
+ return endpointCatalog?.endpoints.find((ep) => ep.path === path);
105
+ }
106
+ export function validateEndpointParams(endpoint, params) {
107
+ const errors = [];
108
+ for (const required of endpoint.required_parameters) {
109
+ if (params[required] === undefined || params[required] === null) {
110
+ errors.push(`Missing required parameter: ${required}`);
111
+ }
112
+ }
113
+ for (const [key, value] of Object.entries(params)) {
114
+ if (value === undefined || value === null)
115
+ continue;
116
+ const allowedValues = endpoint.parameters[key];
117
+ if (allowedValues && typeof value === "string" && !allowedValues.includes(value)) {
118
+ errors.push(`Invalid value for '${key}': '${value}'. Allowed: ${allowedValues.join(", ")}`);
119
+ }
120
+ }
121
+ return { valid: errors.length === 0, errors };
122
+ }
123
+ export function getParameterOptions(path) {
124
+ const endpoint = getEndpointByPath(path);
125
+ if (!endpoint)
126
+ return null;
127
+ return { parameters: endpoint.parameters, required: endpoint.required_parameters };
128
+ }
129
+ export function getDiscoverySummary() {
130
+ if (!endpointCatalog)
131
+ return null;
132
+ return {
133
+ total_endpoints: endpointCatalog.endpoints.length,
134
+ assets: endpointCatalog.assets.map((asset) => ({
135
+ name: asset,
136
+ count: endpointCatalog.byAsset.get(asset)?.length ?? 0,
137
+ })),
138
+ categories: endpointCatalog.categories.map((cat) => ({
139
+ name: cat,
140
+ count: endpointCatalog.byCategory.get(cat)?.length ?? 0,
141
+ })),
142
+ fetched_at: new Date(endpointCatalog.fetched_at).toISOString(),
143
+ };
144
+ }
145
+ export function getAssetCategoryMap() {
146
+ if (!endpointCatalog)
147
+ return null;
148
+ const result = {};
149
+ for (const asset of endpointCatalog.assets) {
150
+ const assetEndpoints = endpointCatalog.byAsset.get(asset) ?? [];
151
+ const categories = new Set(assetEndpoints.map((ep) => ep.category));
152
+ result[asset] = Array.from(categories).sort();
153
+ }
154
+ return result;
155
+ }
156
+ export function resetDiscovery() {
157
+ endpointCatalog = null;
158
+ }
159
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAkCA,IAAI,eAAe,GAA2B,IAAI,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAc,EACd,MAAc;IAEd,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,oCAAoC,CAAC;QACxF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE;YACzC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE;SAC/C,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,yBAAyB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;QACtG,CAAC;QAED,IAAI,IAAuB,CAAC;QAC5B,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC;QACzE,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;YACnD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACzF,CAAC;QAED,eAAe,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,0BAA0B,KAAK,EAAE,EAAE,CAAC;IACtE,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAI,GAA6B,EAAE,GAAM,EAAE,QAAwB;IACpF,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,YAAiC;IACvD,MAAM,SAAS,GAAqB,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,GAAG,EAA4B,CAAC;IACpD,MAAM,UAAU,GAAG,IAAI,GAAG,EAA4B,CAAC;IACvD,MAAM,eAAe,GAAG,IAAI,GAAG,EAA4B,CAAC;IAE5D,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAE/B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAmB;YAC7B,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,KAAK;YACL,QAAQ;YACR,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAChC,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,mBAAmB,EAAE,EAAE,CAAC,mBAAmB;SAC5C,CAAC;QAEF,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClB,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEzB,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACnC,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzC,UAAU,CAAC,eAAe,EAAE,GAAG,KAAK,IAAI,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO;QACL,SAAS;QACT,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;QACjC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;QACzC,OAAO;QACP,UAAU;QACV,eAAe;QACf,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,eAAe,KAAK,IAAI,CAAC;AAClC,CAAC;AAED,SAAS,gBAAgB,CACvB,OAAwB,EACxB,KAAc,EACd,QAAiB;IAEjB,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;IACnE,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChD,CAAC;IACD,OAAO,OAAO,CAAC,SAAS,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAI/B;IACC,IAAI,CAAC,eAAe;QAAE,OAAO,EAAE,CAAC;IAEhC,MAAM,OAAO,GAAG,gBAAgB,CAAC,eAAe,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEnF,IAAI,CAAC,OAAO,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;IAEnC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAC/C,OAAO,OAAO,CAAC,MAAM,CACnB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CACnG,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,eAAe,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,QAAwB,EACxB,MAA+B;IAE/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QACpD,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;YAChE,MAAM,CAAC,IAAI,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAEpD,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,aAAa,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACjF,MAAM,CAAC,IAAI,CAAC,sBAAsB,GAAG,OAAO,KAAK,eAAe,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,mBAAmB,EAAE,CAAC;AACrF,CAAC;AASD,MAAM,UAAU,mBAAmB;IACjC,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAElC,OAAO;QACL,eAAe,EAAE,eAAe,CAAC,SAAS,CAAC,MAAM;QACjD,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC7C,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,eAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;SACxD,CAAC,CAAC;QACH,UAAU,EAAE,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACnD,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,eAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;SACzD,CAAC,CAAC;QACH,UAAU,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;KAC/D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAElC,MAAM,MAAM,GAA6B,EAAE,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;QAC3C,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpE,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,eAAe,GAAG,IAAI,CAAC;AACzB,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { registerAuthTools } from "./tools/auth.js";
5
+ import { registerCoreTools } from "./tools/core.js";
6
+ async function main() {
7
+ const server = new McpServer({
8
+ name: "cryptoquant",
9
+ version: "1.0.0",
10
+ });
11
+ // Register tool categories
12
+ registerAuthTools(server);
13
+ registerCoreTools(server);
14
+ // Start server with stdio transport
15
+ const transport = new StdioServerTransport();
16
+ await server.connect(transport);
17
+ console.error("CryptoQuant MCP Server running on stdio");
18
+ }
19
+ main().catch((error) => {
20
+ console.error("Failed to start server:", error);
21
+ process.exit(1);
22
+ });
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,2BAA2B;IAC3B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,oCAAoC;IACpC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;AAC3D,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { type UserPlan } from "./plan-limits.js";
2
+ import type { DiscoveryCacheSchema, DiscoverySummaryData } from "./cache/types.js";
3
+ export interface PermissionState {
4
+ authenticated: boolean;
5
+ api_key: string | null;
6
+ cached_at: number | null;
7
+ plan: UserPlan;
8
+ plan_limits_loaded: boolean;
9
+ from_cache: boolean;
10
+ }
11
+ export interface InitializeResult {
12
+ success: boolean;
13
+ error?: string;
14
+ discovery_error?: string;
15
+ from_cache: boolean;
16
+ cache_status: string;
17
+ summary?: DiscoverySummaryData;
18
+ }
19
+ export declare function initializePermissions(apiKey: string, apiUrl: string): Promise<InitializeResult>;
20
+ export declare function getPermissionState(): PermissionState;
21
+ export declare function setGuestMode(): void;
22
+ export declare function resetPermissions(): void;
23
+ /**
24
+ * Clear discovery cache (called by reset_session with clear_cache=true).
25
+ */
26
+ export declare function clearDiscoveryCache(apiUrl?: string): void;
27
+ /**
28
+ * Get cache file path for user display.
29
+ */
30
+ export declare function getDiscoveryCachePath(apiUrl: string): string;
31
+ /**
32
+ * Get current cached discovery data (for summary in response).
33
+ */
34
+ export declare function getCachedDiscovery(): DiscoveryCacheSchema | null;
35
+ export { getDiscoverySummary } from "./discovery.js";
36
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAC;AAW1B,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,kBAAkB,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;CACrB;AAcD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,CAAC,CAoG3B;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAEpD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAKvC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAOzD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,oBAAoB,GAAG,IAAI,CAEhE;AAED,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,135 @@
1
+ import { fetchDiscoveryEndpoints, resetDiscovery } from "./discovery.js";
2
+ import { fetchPlanLimits, resetPlanLimits, getPlanLimitsState, loadPlanLimitsFromCache, } from "./plan-limits.js";
3
+ import { readCache, writeCache, isCacheValid, invalidateCache, clearAllCaches, getCacheStatus, getCacheFilePath, } from "./cache/storage.js";
4
+ import { generateSummary, extractRawResponse } from "./cache/summary.js";
5
+ const DEFAULT_STATE = {
6
+ authenticated: false,
7
+ api_key: null,
8
+ cached_at: null,
9
+ plan: "unknown",
10
+ plan_limits_loaded: false,
11
+ from_cache: false,
12
+ };
13
+ let permissionState = { ...DEFAULT_STATE };
14
+ let cachedDiscovery = null;
15
+ export async function initializePermissions(apiKey, apiUrl) {
16
+ const apiKeyPrefix = apiKey.slice(0, 8);
17
+ // 1. Try cache first for /my/discovery data
18
+ const cache = readCache(apiUrl);
19
+ if (cache && isCacheValid(cache, apiUrl, apiKeyPrefix)) {
20
+ // Load plan limits from cache
21
+ loadPlanLimitsFromCache(cache.parsed.limits, cache.parsed.statics, cache.parsed.apiRateLimit, cache.metadata.plan);
22
+ // Still need to fetch /discovery/endpoints for parameter options
23
+ const discoveryResult = await fetchDiscoveryEndpoints(apiKey, apiUrl);
24
+ if (!discoveryResult.success) {
25
+ // Discovery failed but we have cache - continue with warning
26
+ console.warn(`Discovery fetch failed, using cache: ${discoveryResult.error}`);
27
+ }
28
+ const cacheStatus = getCacheStatus(cache, true);
29
+ cachedDiscovery = cache;
30
+ permissionState = {
31
+ authenticated: true,
32
+ api_key: apiKey,
33
+ cached_at: Date.now(),
34
+ plan: cache.metadata.plan,
35
+ plan_limits_loaded: true,
36
+ from_cache: true,
37
+ };
38
+ return {
39
+ success: true,
40
+ from_cache: true,
41
+ cache_status: cacheStatus,
42
+ summary: cache.summary,
43
+ };
44
+ }
45
+ // 2. Cache miss or invalid - fetch fresh data
46
+ try {
47
+ // Fetch /discovery/endpoints (for parameter options)
48
+ const discoveryResult = await fetchDiscoveryEndpoints(apiKey, apiUrl);
49
+ if (!discoveryResult.success) {
50
+ return { success: false, error: discoveryResult.error, from_cache: false, cache_status: "none" };
51
+ }
52
+ // Fetch /my/discovery/endpoints (for plan limits)
53
+ const planResult = await fetchPlanLimits(apiKey, apiUrl);
54
+ const planState = getPlanLimitsState();
55
+ if (!planResult.success) {
56
+ console.warn(`Plan limits fetch failed: ${planResult.error}`);
57
+ }
58
+ // 3. Generate summary and write cache
59
+ if (planResult.success && planResult.rawResponse && planResult.parsed) {
60
+ const rawResponse = extractRawResponse(planResult.rawResponse);
61
+ if (rawResponse) {
62
+ const summary = generateSummary(planResult.parsed.limits, planResult.parsed.statics);
63
+ writeCache(apiUrl, apiKey, rawResponse, planResult.parsed, summary, planResult.plan || "unknown");
64
+ // Store for later use
65
+ const newCache = readCache(apiUrl);
66
+ cachedDiscovery = newCache;
67
+ permissionState = {
68
+ authenticated: true,
69
+ api_key: apiKey,
70
+ cached_at: Date.now(),
71
+ plan: planState.plan,
72
+ plan_limits_loaded: planState.loaded,
73
+ from_cache: false,
74
+ };
75
+ return {
76
+ success: true,
77
+ from_cache: false,
78
+ cache_status: "fresh",
79
+ summary,
80
+ };
81
+ }
82
+ }
83
+ // Cache write failed but auth succeeded
84
+ permissionState = {
85
+ authenticated: true,
86
+ api_key: apiKey,
87
+ cached_at: Date.now(),
88
+ plan: planState.plan,
89
+ plan_limits_loaded: planState.loaded,
90
+ from_cache: false,
91
+ };
92
+ return { success: true, from_cache: false, cache_status: "none" };
93
+ }
94
+ catch (error) {
95
+ return { success: false, error: `Network error: ${error}`, from_cache: false, cache_status: "none" };
96
+ }
97
+ }
98
+ export function getPermissionState() {
99
+ return permissionState;
100
+ }
101
+ export function setGuestMode() {
102
+ permissionState = { ...DEFAULT_STATE, cached_at: Date.now(), from_cache: false };
103
+ }
104
+ export function resetPermissions() {
105
+ permissionState = { ...DEFAULT_STATE };
106
+ cachedDiscovery = null;
107
+ resetDiscovery();
108
+ resetPlanLimits();
109
+ }
110
+ /**
111
+ * Clear discovery cache (called by reset_session with clear_cache=true).
112
+ */
113
+ export function clearDiscoveryCache(apiUrl) {
114
+ if (apiUrl) {
115
+ invalidateCache(apiUrl);
116
+ }
117
+ else {
118
+ clearAllCaches();
119
+ }
120
+ cachedDiscovery = null;
121
+ }
122
+ /**
123
+ * Get cache file path for user display.
124
+ */
125
+ export function getDiscoveryCachePath(apiUrl) {
126
+ return getCacheFilePath(apiUrl);
127
+ }
128
+ /**
129
+ * Get current cached discovery data (for summary in response).
130
+ */
131
+ export function getCachedDiscovery() {
132
+ return cachedDiscovery;
133
+ }
134
+ export { getDiscoverySummary } from "./discovery.js";
135
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ export type DurationLimit = string;
2
+ export type UserPlan = "basic" | "advanced" | "professional" | "premium" | "custom" | "unknown";
3
+ export interface MetricLimits {
4
+ window: {
5
+ [windowType: string]: DurationLimit;
6
+ };
7
+ }
8
+ export interface PlanLimits {
9
+ [asset: string]: {
10
+ [category: string]: {
11
+ [metric: string]: MetricLimits;
12
+ };
13
+ };
14
+ }
15
+ export interface ApiRateLimit {
16
+ token: number;
17
+ window: string;
18
+ }
19
+ export interface PlanLimitsState {
20
+ loaded: boolean;
21
+ limits: PlanLimits | null;
22
+ plan: UserPlan;
23
+ statics: string[];
24
+ apiRateLimit: ApiRateLimit | null;
25
+ fetched_at: number | null;
26
+ }
27
+ export interface FetchPlanLimitsResult {
28
+ success: boolean;
29
+ error?: string;
30
+ rawResponse?: Record<string, unknown>;
31
+ parsed?: {
32
+ limits: PlanLimits | null;
33
+ statics: string[];
34
+ apiRateLimit: ApiRateLimit | null;
35
+ };
36
+ plan?: UserPlan;
37
+ }
38
+ export declare function fetchPlanLimits(apiKey: string, apiUrl: string): Promise<FetchPlanLimitsResult>;
39
+ export declare function detectPlanFromLimits(limits: PlanLimits | null): UserPlan;
40
+ export declare function getPlanLimitsState(): PlanLimitsState;
41
+ export declare function getPlanLimit(endpointPath: string, windowType?: string): DurationLimit | null;
42
+ export declare function getEndpointResultLimit(_endpointPath: string): number | null;
43
+ export declare function getEndpointWindowLimits(endpointPath: string): Record<string, DurationLimit>;
44
+ export declare function hasEndpointAccess(endpointPath: string): boolean;
45
+ export declare function parseDurationToDate(duration: DurationLimit): Date | null;
46
+ export declare function getEarliestAllowedDate(endpointPath: string, windowType?: string): Date | null;
47
+ export interface DateRangeValidation {
48
+ valid: boolean;
49
+ error?: string;
50
+ earliest_allowed?: string;
51
+ limit?: DurationLimit;
52
+ }
53
+ export declare function validateDateRange(endpointPath: string, fromDate: string | undefined, windowType?: string): DateRangeValidation;
54
+ export declare function getRequiredPlan(endpointPath: string): UserPlan;
55
+ export declare function getApiRateLimit(): ApiRateLimit | null;
56
+ export declare function getStaticEndpoints(): string[];
57
+ export declare function resetPlanLimits(): void;
58
+ /**
59
+ * Load plan limits state from cached data (no API call).
60
+ */
61
+ export declare function loadPlanLimitsFromCache(limits: PlanLimits | null, statics: string[], apiRateLimit: ApiRateLimit | null, plan: UserPlan): void;
62
+ export interface AccessibleEndpointInfo {
63
+ path: string;
64
+ date_limit: string;
65
+ }
66
+ export interface AccessibleEndpointsSummary {
67
+ count: number;
68
+ endpoints?: AccessibleEndpointInfo[];
69
+ }
70
+ export declare function getAccessibleEndpointsSummary(): AccessibleEndpointsSummary;
71
+ //# sourceMappingURL=plan-limits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-limits.d.ts","sourceRoot":"","sources":["../src/plan-limits.ts"],"names":[],"mappings":"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"}