@reveldigital/mcp-graphql-proxy 1.0.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 (70) hide show
  1. package/dist/bin/cli.d.ts +6 -0
  2. package/dist/bin/cli.d.ts.map +1 -0
  3. package/dist/bin/cli.js +7 -0
  4. package/dist/bin/cli.js.map +1 -0
  5. package/dist/core/cache.d.ts +61 -0
  6. package/dist/core/cache.d.ts.map +1 -0
  7. package/dist/core/cache.js +147 -0
  8. package/dist/core/cache.js.map +1 -0
  9. package/dist/core/graphql-client.d.ts +48 -0
  10. package/dist/core/graphql-client.d.ts.map +1 -0
  11. package/dist/core/graphql-client.js +210 -0
  12. package/dist/core/graphql-client.js.map +1 -0
  13. package/dist/core/query-builder.d.ts +90 -0
  14. package/dist/core/query-builder.d.ts.map +1 -0
  15. package/dist/core/query-builder.js +259 -0
  16. package/dist/core/query-builder.js.map +1 -0
  17. package/dist/core/response-optimizer.d.ts +59 -0
  18. package/dist/core/response-optimizer.d.ts.map +1 -0
  19. package/dist/core/response-optimizer.js +197 -0
  20. package/dist/core/response-optimizer.js.map +1 -0
  21. package/dist/index.d.ts +16 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +377 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/types/auth.d.ts +146 -0
  26. package/dist/types/auth.d.ts.map +1 -0
  27. package/dist/types/auth.js +22 -0
  28. package/dist/types/auth.js.map +1 -0
  29. package/dist/types/cache.d.ts +162 -0
  30. package/dist/types/cache.d.ts.map +1 -0
  31. package/dist/types/cache.js +34 -0
  32. package/dist/types/cache.js.map +1 -0
  33. package/dist/types/config.d.ts +108 -0
  34. package/dist/types/config.d.ts.map +1 -0
  35. package/dist/types/config.js +37 -0
  36. package/dist/types/config.js.map +1 -0
  37. package/dist/types/graphql-proxy.d.ts +243 -0
  38. package/dist/types/graphql-proxy.d.ts.map +1 -0
  39. package/dist/types/graphql-proxy.js +142 -0
  40. package/dist/types/graphql-proxy.js.map +1 -0
  41. package/dist/types/index.d.ts +15 -0
  42. package/dist/types/index.d.ts.map +1 -0
  43. package/dist/types/index.js +16 -0
  44. package/dist/types/index.js.map +1 -0
  45. package/dist/types/logging.d.ts +223 -0
  46. package/dist/types/logging.d.ts.map +1 -0
  47. package/dist/types/logging.js +67 -0
  48. package/dist/types/logging.js.map +1 -0
  49. package/dist/types/mcp.d.ts +160 -0
  50. package/dist/types/mcp.d.ts.map +1 -0
  51. package/dist/types/mcp.js +126 -0
  52. package/dist/types/mcp.js.map +1 -0
  53. package/dist/types/metrics.d.ts +237 -0
  54. package/dist/types/metrics.d.ts.map +1 -0
  55. package/dist/types/metrics.js +26 -0
  56. package/dist/types/metrics.js.map +1 -0
  57. package/dist/types/rate-limit.d.ts +144 -0
  58. package/dist/types/rate-limit.d.ts.map +1 -0
  59. package/dist/types/rate-limit.js +43 -0
  60. package/dist/types/rate-limit.js.map +1 -0
  61. package/dist/types/tenant.d.ts +176 -0
  62. package/dist/types/tenant.d.ts.map +1 -0
  63. package/dist/types/tenant.js +63 -0
  64. package/dist/types/tenant.js.map +1 -0
  65. package/dist/types/transformation.d.ts +198 -0
  66. package/dist/types/transformation.d.ts.map +1 -0
  67. package/dist/types/transformation.js +51 -0
  68. package/dist/types/transformation.js.map +1 -0
  69. package/package.json +77 -0
  70. package/src/types/schema.graphql +2712 -0
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Multi-Tenant Types
3
+ *
4
+ * Multi-tenancy configuration, resolution, and context interfaces.
5
+ */
6
+ import type { RateLimitConfig } from './rate-limit.js';
7
+ import type { CacheConfig } from './cache.js';
8
+ import type { TransformationConfig } from './transformation.js';
9
+ /**
10
+ * Multi-tenant configuration
11
+ */
12
+ export interface TenantConfig {
13
+ /** Enable multi-tenancy */
14
+ enabled: boolean;
15
+ /** Tenant isolation level */
16
+ isolation: TenantIsolation;
17
+ /** Tenant resolution strategy */
18
+ resolution: TenantResolutionConfig;
19
+ /** Default tenant for unresolved requests */
20
+ defaultTenant: string;
21
+ /** Tenant definitions */
22
+ tenants: TenantDefinition[];
23
+ }
24
+ /**
25
+ * Tenant isolation levels
26
+ */
27
+ export type TenantIsolation = 'none' | 'soft' | 'strict';
28
+ /**
29
+ * Tenant resolution configuration
30
+ */
31
+ export interface TenantResolutionConfig {
32
+ /** Resolution strategies in priority order */
33
+ strategies: TenantResolutionStrategy[];
34
+ /** Cache resolved tenants */
35
+ cacheResolution: boolean;
36
+ /** Cache TTL in seconds */
37
+ cacheTtlSeconds: number;
38
+ }
39
+ /**
40
+ * Strategy for resolving tenant from request
41
+ */
42
+ export interface TenantResolutionStrategy {
43
+ /** Strategy type */
44
+ type: 'header' | 'api-key' | 'query-param' | 'path' | 'custom';
45
+ /** Header name, query param, or path pattern */
46
+ key?: string;
47
+ /** Custom resolver function name */
48
+ resolver?: string;
49
+ /** Extract tenant ID pattern (regex with capture group) */
50
+ pattern?: string;
51
+ /** Is this strategy required? */
52
+ required?: boolean;
53
+ }
54
+ /**
55
+ * Tenant definition
56
+ */
57
+ export interface TenantDefinition {
58
+ /** Unique tenant ID */
59
+ id: string;
60
+ /** Display name */
61
+ name: string;
62
+ /** Tenant-specific API key */
63
+ apiKey: string;
64
+ /** Secondary API keys (for rotation) */
65
+ secondaryApiKeys?: string[];
66
+ /** Tenant-specific configuration overrides */
67
+ config?: Partial<TenantOverrides>;
68
+ /** Tenant metadata */
69
+ metadata?: Record<string, unknown>;
70
+ /** Is tenant active? */
71
+ active: boolean;
72
+ /** Tenant tier for rate limiting */
73
+ tier?: TenantTier;
74
+ /** Created timestamp */
75
+ createdAt?: Date;
76
+ /** Contact email */
77
+ contactEmail?: string;
78
+ }
79
+ /**
80
+ * Tenant tier levels
81
+ */
82
+ export type TenantTier = 'free' | 'starter' | 'professional' | 'enterprise';
83
+ /**
84
+ * Tenant configuration overrides
85
+ */
86
+ export interface TenantOverrides {
87
+ /** Rate limit overrides */
88
+ rateLimit?: Partial<RateLimitConfig>;
89
+ /** Cache overrides */
90
+ cache?: Partial<CacheConfig>;
91
+ /** Transformation overrides */
92
+ transformations?: Partial<TransformationConfig>;
93
+ /** Custom overrides */
94
+ custom?: Record<string, unknown>;
95
+ }
96
+ /**
97
+ * Runtime tenant context resolved for a request
98
+ */
99
+ export interface TenantContext {
100
+ /** Tenant ID */
101
+ id: string;
102
+ /** Tenant definition */
103
+ definition: TenantDefinition;
104
+ /** Resolution method used */
105
+ resolvedBy: string;
106
+ /** Effective rate limit config (merged with overrides) */
107
+ effectiveRateLimit: RateLimitConfig;
108
+ /** Effective cache config (merged with overrides) */
109
+ effectiveCache: CacheConfig;
110
+ /** Usage statistics */
111
+ usage: TenantUsage;
112
+ /** Resolution timestamp */
113
+ resolvedAt: Date;
114
+ }
115
+ /**
116
+ * Tenant usage statistics
117
+ */
118
+ export interface TenantUsage {
119
+ /** Requests today */
120
+ requestsToday: number;
121
+ /** Requests this hour */
122
+ requestsThisHour: number;
123
+ /** Requests this month */
124
+ requestsThisMonth: number;
125
+ /** Bandwidth used in bytes (today) */
126
+ bandwidthBytesToday: number;
127
+ /** Bandwidth used in bytes (month) */
128
+ bandwidthBytesMonth: number;
129
+ /** Last request timestamp */
130
+ lastRequestAt?: Date;
131
+ /** Rate limit hits today */
132
+ rateLimitHitsToday: number;
133
+ /** Cache hits today */
134
+ cacheHitsToday: number;
135
+ /** Errors today */
136
+ errorsToday: number;
137
+ }
138
+ /**
139
+ * Tenant resolution result
140
+ */
141
+ export interface TenantResolutionResult {
142
+ /** Was tenant resolved? */
143
+ resolved: boolean;
144
+ /** Tenant context if resolved */
145
+ context?: TenantContext;
146
+ /** Resolution method used */
147
+ method?: string;
148
+ /** Error message if not resolved */
149
+ error?: string;
150
+ /** Should use default tenant? */
151
+ useDefault: boolean;
152
+ }
153
+ /**
154
+ * Tenant quota configuration
155
+ */
156
+ export interface TenantQuota {
157
+ /** Maximum requests per day */
158
+ maxRequestsPerDay: number;
159
+ /** Maximum requests per month */
160
+ maxRequestsPerMonth: number;
161
+ /** Maximum bandwidth per day (bytes) */
162
+ maxBandwidthPerDay: number;
163
+ /** Maximum bandwidth per month (bytes) */
164
+ maxBandwidthPerMonth: number;
165
+ /** Maximum concurrent connections */
166
+ maxConcurrentConnections: number;
167
+ }
168
+ /**
169
+ * Default tenant quotas by tier
170
+ */
171
+ export declare const DEFAULT_TENANT_QUOTAS: Record<TenantTier, TenantQuota>;
172
+ /**
173
+ * Default tenant configuration
174
+ */
175
+ export declare const DEFAULT_TENANT_CONFIG: TenantConfig;
176
+ //# sourceMappingURL=tenant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.d.ts","sourceRoot":"","sources":["../../src/types/tenant.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Multi-Tenant Types
3
+ *
4
+ * Multi-tenancy configuration, resolution, and context interfaces.
5
+ */
6
+ /**
7
+ * Default tenant quotas by tier
8
+ */
9
+ export const DEFAULT_TENANT_QUOTAS = {
10
+ free: {
11
+ maxRequestsPerDay: 1000,
12
+ maxRequestsPerMonth: 10000,
13
+ maxBandwidthPerDay: 100 * 1024 * 1024, // 100 MB
14
+ maxBandwidthPerMonth: 1024 * 1024 * 1024, // 1 GB
15
+ maxConcurrentConnections: 5,
16
+ },
17
+ starter: {
18
+ maxRequestsPerDay: 10000,
19
+ maxRequestsPerMonth: 100000,
20
+ maxBandwidthPerDay: 1024 * 1024 * 1024, // 1 GB
21
+ maxBandwidthPerMonth: 10 * 1024 * 1024 * 1024, // 10 GB
22
+ maxConcurrentConnections: 20,
23
+ },
24
+ professional: {
25
+ maxRequestsPerDay: 100000,
26
+ maxRequestsPerMonth: 1000000,
27
+ maxBandwidthPerDay: 10 * 1024 * 1024 * 1024, // 10 GB
28
+ maxBandwidthPerMonth: 100 * 1024 * 1024 * 1024, // 100 GB
29
+ maxConcurrentConnections: 100,
30
+ },
31
+ enterprise: {
32
+ maxRequestsPerDay: Infinity,
33
+ maxRequestsPerMonth: Infinity,
34
+ maxBandwidthPerDay: Infinity,
35
+ maxBandwidthPerMonth: Infinity,
36
+ maxConcurrentConnections: 1000,
37
+ },
38
+ };
39
+ /**
40
+ * Default tenant configuration
41
+ */
42
+ export const DEFAULT_TENANT_CONFIG = {
43
+ enabled: false,
44
+ isolation: 'soft',
45
+ resolution: {
46
+ strategies: [
47
+ {
48
+ type: 'api-key',
49
+ required: true,
50
+ },
51
+ {
52
+ type: 'header',
53
+ key: 'X-Tenant-ID',
54
+ required: false,
55
+ },
56
+ ],
57
+ cacheResolution: true,
58
+ cacheTtlSeconds: 300,
59
+ },
60
+ defaultTenant: 'default',
61
+ tenants: [],
62
+ };
63
+ //# sourceMappingURL=tenant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.js","sourceRoot":"","sources":["../../src/types/tenant.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA+NH;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAoC;IACpE,IAAI,EAAE;QACJ,iBAAiB,EAAE,IAAI;QACvB,mBAAmB,EAAE,KAAK;QAC1B,kBAAkB,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAO,SAAS;QACrD,oBAAoB,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,EAAI,OAAO;QACnD,wBAAwB,EAAE,CAAC;KAC5B;IACD,OAAO,EAAE;QACP,iBAAiB,EAAE,KAAK;QACxB,mBAAmB,EAAE,MAAM;QAC3B,kBAAkB,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,EAAM,OAAO;QACnD,oBAAoB,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,QAAQ;QACvD,wBAAwB,EAAE,EAAE;KAC7B;IACD,YAAY,EAAE;QACZ,iBAAiB,EAAE,MAAM;QACzB,mBAAmB,EAAE,OAAO;QAC5B,kBAAkB,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,EAAG,QAAQ;QACtD,oBAAoB,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,SAAS;QACzD,wBAAwB,EAAE,GAAG;KAC9B;IACD,UAAU,EAAE;QACV,iBAAiB,EAAE,QAAQ;QAC3B,mBAAmB,EAAE,QAAQ;QAC7B,kBAAkB,EAAE,QAAQ;QAC5B,oBAAoB,EAAE,QAAQ;QAC9B,wBAAwB,EAAE,IAAI;KAC/B;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,MAAM;IACjB,UAAU,EAAE;QACV,UAAU,EAAE;YACV;gBACE,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,GAAG,EAAE,aAAa;gBAClB,QAAQ,EAAE,KAAK;aAChB;SACF;QACD,eAAe,EAAE,IAAI;QACrB,eAAe,EAAE,GAAG;KACrB;IACD,aAAa,EAAE,SAAS;IACxB,OAAO,EAAE,EAAE;CACZ,CAAC"}
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Transformation Types
3
+ *
4
+ * Request and response transformation configuration interfaces.
5
+ */
6
+ /**
7
+ * Request/response transformation configuration
8
+ */
9
+ export interface TransformationConfig {
10
+ /** Enable transformations */
11
+ enabled: boolean;
12
+ /** Request transformation rules */
13
+ request: TransformationRule[];
14
+ /** Response transformation rules */
15
+ response: TransformationRule[];
16
+ }
17
+ /**
18
+ * Transformation rule definition
19
+ */
20
+ export interface TransformationRule {
21
+ /** Rule name for identification */
22
+ name: string;
23
+ /** Rule description */
24
+ description?: string;
25
+ /** Condition for applying this rule */
26
+ condition?: TransformationCondition;
27
+ /** Transformations to apply */
28
+ transforms: Transform[];
29
+ /** Rule priority (lower = first) */
30
+ priority: number;
31
+ /** Is this rule active? */
32
+ active: boolean;
33
+ /** Error handling behavior */
34
+ onError: 'skip' | 'fail' | 'log';
35
+ }
36
+ /**
37
+ * Condition for when to apply a transformation
38
+ */
39
+ export interface TransformationCondition {
40
+ /** Match on MCP method */
41
+ method?: string | string[];
42
+ /** Match on tenant ID */
43
+ tenantId?: string | string[];
44
+ /** Match on operation result (for response transforms) */
45
+ success?: boolean;
46
+ /** Match on error code (for response transforms) */
47
+ errorCode?: number | number[];
48
+ /** Custom condition expression (JSONPath or simple expression) */
49
+ expression?: string;
50
+ /** Combine multiple conditions */
51
+ and?: TransformationCondition[];
52
+ /** Alternative conditions */
53
+ or?: TransformationCondition[];
54
+ }
55
+ /**
56
+ * Union type for all transform types
57
+ */
58
+ export type Transform = HeaderTransform | BodyTransform | MetadataTransform | EnvTransform | ComputedTransform;
59
+ /**
60
+ * Header transformation
61
+ */
62
+ export interface HeaderTransform {
63
+ type: 'header';
64
+ /** Action: 'set' | 'delete' | 'rename' | 'copy' */
65
+ action: 'set' | 'delete' | 'rename' | 'copy';
66
+ /** Header name */
67
+ name: string;
68
+ /** Value for 'set', new name for 'rename', source for 'copy' */
69
+ value?: string;
70
+ /** Only set if not already present */
71
+ ifNotExists?: boolean;
72
+ }
73
+ /**
74
+ * Body/payload transformation
75
+ */
76
+ export interface BodyTransform {
77
+ type: 'body';
78
+ /** JSONPath to target */
79
+ path: string;
80
+ /** Action: 'set' | 'delete' | 'merge' | 'append' | 'prepend' */
81
+ action: 'set' | 'delete' | 'merge' | 'append' | 'prepend';
82
+ /** Value for the action */
83
+ value?: unknown;
84
+ /** Value source (literal or JSONPath) */
85
+ valueSource?: 'literal' | 'jsonpath' | 'env' | 'context';
86
+ /** JSONPath or env var name if valueSource is not 'literal' */
87
+ sourcePath?: string;
88
+ }
89
+ /**
90
+ * Metadata transformation (proxy-internal metadata)
91
+ */
92
+ export interface MetadataTransform {
93
+ type: 'metadata';
94
+ /** Metadata key */
95
+ key: string;
96
+ /** Metadata value */
97
+ value: unknown;
98
+ /** Action */
99
+ action: 'set' | 'delete';
100
+ }
101
+ /**
102
+ * Environment variable injection
103
+ */
104
+ export interface EnvTransform {
105
+ type: 'env';
106
+ /** Environment variable name to read from */
107
+ envVar: string;
108
+ /** Target path in the request/response */
109
+ targetPath: string;
110
+ /** Default value if env var not set */
111
+ defaultValue?: string;
112
+ /** Transform the value before injecting */
113
+ transform?: 'uppercase' | 'lowercase' | 'trim' | 'json';
114
+ }
115
+ /**
116
+ * Computed value transformation
117
+ */
118
+ export interface ComputedTransform {
119
+ type: 'computed';
120
+ /** Target path to set */
121
+ targetPath: string;
122
+ /** Computation type */
123
+ computation: ComputationType;
124
+ /** Computation-specific options */
125
+ options?: Record<string, unknown>;
126
+ }
127
+ /**
128
+ * Types of computed values
129
+ */
130
+ export type ComputationType = 'timestamp' | 'uuid' | 'hash' | 'concat' | 'template' | 'jsonpath' | 'custom';
131
+ /**
132
+ * Transformation result
133
+ */
134
+ export interface TransformationResult {
135
+ /** Was transformation applied? */
136
+ applied: boolean;
137
+ /** Transformation rule name */
138
+ ruleName: string;
139
+ /** Error if transformation failed */
140
+ error?: Error;
141
+ /** Fields modified */
142
+ fieldsModified: string[];
143
+ }
144
+ /**
145
+ * Transformation context passed to transformers
146
+ */
147
+ export interface TransformationContext {
148
+ /** Current tenant ID */
149
+ tenantId?: string;
150
+ /** MCP method */
151
+ method: string;
152
+ /** Correlation ID */
153
+ correlationId: string;
154
+ /** Request timestamp */
155
+ timestamp: Date;
156
+ /** Environment variables */
157
+ env: Record<string, string>;
158
+ /** Custom context data */
159
+ custom: Record<string, unknown>;
160
+ }
161
+ /**
162
+ * Default transformation configuration
163
+ */
164
+ export declare const DEFAULT_TRANSFORMATION_CONFIG: TransformationConfig;
165
+ /**
166
+ * Built-in transformation presets
167
+ */
168
+ export declare const TRANSFORMATION_PRESETS: {
169
+ /** Add correlation ID to all requests */
170
+ addCorrelationId: {
171
+ name: string;
172
+ description: string;
173
+ priority: number;
174
+ active: boolean;
175
+ onError: "log";
176
+ transforms: {
177
+ type: "header";
178
+ action: "set";
179
+ name: string;
180
+ value: string;
181
+ ifNotExists: boolean;
182
+ }[];
183
+ };
184
+ /** Add timestamp to requests */
185
+ addTimestamp: {
186
+ name: string;
187
+ description: string;
188
+ priority: number;
189
+ active: boolean;
190
+ onError: "skip";
191
+ transforms: {
192
+ type: "computed";
193
+ targetPath: string;
194
+ computation: ComputationType;
195
+ }[];
196
+ };
197
+ };
198
+ //# sourceMappingURL=transformation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformation.d.ts","sourceRoot":"","sources":["../../src/types/transformation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Transformation Types
3
+ *
4
+ * Request and response transformation configuration interfaces.
5
+ */
6
+ /**
7
+ * Default transformation configuration
8
+ */
9
+ export const DEFAULT_TRANSFORMATION_CONFIG = {
10
+ enabled: true,
11
+ request: [],
12
+ response: [],
13
+ };
14
+ /**
15
+ * Built-in transformation presets
16
+ */
17
+ export const TRANSFORMATION_PRESETS = {
18
+ /** Add correlation ID to all requests */
19
+ addCorrelationId: {
20
+ name: 'add-correlation-id',
21
+ description: 'Add correlation ID header to requests',
22
+ priority: 0,
23
+ active: true,
24
+ onError: 'log',
25
+ transforms: [
26
+ {
27
+ type: 'header',
28
+ action: 'set',
29
+ name: 'X-Correlation-ID',
30
+ value: '{{correlationId}}',
31
+ ifNotExists: true,
32
+ },
33
+ ],
34
+ },
35
+ /** Add timestamp to requests */
36
+ addTimestamp: {
37
+ name: 'add-timestamp',
38
+ description: 'Add request timestamp',
39
+ priority: 1,
40
+ active: true,
41
+ onError: 'skip',
42
+ transforms: [
43
+ {
44
+ type: 'computed',
45
+ targetPath: '$.metadata.timestamp',
46
+ computation: 'timestamp',
47
+ },
48
+ ],
49
+ },
50
+ };
51
+ //# sourceMappingURL=transformation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformation.js","sourceRoot":"","sources":["../../src/types/transformation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8NH;;GAEG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAyB;IACjE,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,yCAAyC;IACzC,gBAAgB,EAAE;QAChB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,uCAAuC;QACpD,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,KAAc;QACvB,UAAU,EAAE;YACV;gBACE,IAAI,EAAE,QAAiB;gBACvB,MAAM,EAAE,KAAc;gBACtB,IAAI,EAAE,kBAAkB;gBACxB,KAAK,EAAE,mBAAmB;gBAC1B,WAAW,EAAE,IAAI;aAClB;SACF;KACF;IAED,gCAAgC;IAChC,YAAY,EAAE;QACZ,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,uBAAuB;QACpC,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,MAAe;QACxB,UAAU,EAAE;YACV;gBACE,IAAI,EAAE,UAAmB;gBACzB,UAAU,EAAE,sBAAsB;gBAClC,WAAW,EAAE,WAA8B;aAC5C;SACF;KACF;CACF,CAAC"}
package/package.json ADDED
@@ -0,0 +1,77 @@
1
+ {
2
+ "name": "@reveldigital/mcp-graphql-proxy",
3
+ "version": "1.0.0",
4
+ "description": "MCP Server for proxying GraphQL queries to Revel Digital API with authentication, query optimization, and context window management",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "reveldigital-mcp": "dist/bin/cli.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsx watch src/index.ts",
13
+ "start": "node dist/index.js",
14
+ "test": "vitest run",
15
+ "test:watch": "vitest",
16
+ "test:coverage": "vitest run --coverage",
17
+ "test:ui": "vitest --ui",
18
+ "test:unit": "vitest run tests/unit",
19
+ "test:integration": "vitest run tests/integration",
20
+ "test:performance": "vitest run tests/performance",
21
+ "lint": "eslint src --ext .ts",
22
+ "typecheck": "tsc --noEmit",
23
+ "clean": "rm -rf dist coverage",
24
+ "prepare": "npm run build",
25
+ "release": "semantic-release",
26
+ "release:dry": "semantic-release --dry-run"
27
+ },
28
+ "keywords": [
29
+ "mcp",
30
+ "graphql",
31
+ "proxy",
32
+ "revel-digital",
33
+ "digital-signage",
34
+ "ai",
35
+ "claude"
36
+ ],
37
+ "author": "",
38
+ "license": "MIT",
39
+ "engines": {
40
+ "node": ">=20.0.0"
41
+ },
42
+ "dependencies": {
43
+ "@modelcontextprotocol/sdk": "^1.12.0",
44
+ "better-sqlite3": "^12.5.0",
45
+ "graphql": "^16.9.0",
46
+ "graphql-tag": "^2.12.6",
47
+ "node-fetch": "^3.3.2",
48
+ "zod": "^3.23.8"
49
+ },
50
+ "devDependencies": {
51
+ "@commitlint/cli": "^19.0.0",
52
+ "@commitlint/config-conventional": "^19.0.0",
53
+ "@semantic-release/changelog": "^6.0.0",
54
+ "@semantic-release/git": "^10.0.0",
55
+ "@types/node": "^22.0.0",
56
+ "@vitest/coverage-v8": "^2.1.0",
57
+ "@vitest/ui": "^2.1.0",
58
+ "conventional-changelog-conventionalcommits": "^8.0.0",
59
+ "eslint": "^9.0.0",
60
+ "semantic-release": "^24.0.0",
61
+ "tsx": "^4.19.0",
62
+ "typescript": "^5.6.0",
63
+ "vitest": "^2.1.0"
64
+ },
65
+ "files": [
66
+ "dist",
67
+ "src/types/schema.graphql"
68
+ ],
69
+ "repository": {
70
+ "type": "git",
71
+ "url": "https://github.com/RevelDigital/reveldigital-mcp-graphql-proxy"
72
+ },
73
+ "publishConfig": {
74
+ "access": "restricted",
75
+ "registry": "https://registry.npmjs.org/"
76
+ }
77
+ }