@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.
- package/dist/bin/cli.d.ts +6 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +7 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/core/cache.d.ts +61 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +147 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/graphql-client.d.ts +48 -0
- package/dist/core/graphql-client.d.ts.map +1 -0
- package/dist/core/graphql-client.js +210 -0
- package/dist/core/graphql-client.js.map +1 -0
- package/dist/core/query-builder.d.ts +90 -0
- package/dist/core/query-builder.d.ts.map +1 -0
- package/dist/core/query-builder.js +259 -0
- package/dist/core/query-builder.js.map +1 -0
- package/dist/core/response-optimizer.d.ts +59 -0
- package/dist/core/response-optimizer.d.ts.map +1 -0
- package/dist/core/response-optimizer.js +197 -0
- package/dist/core/response-optimizer.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +377 -0
- package/dist/index.js.map +1 -0
- package/dist/types/auth.d.ts +146 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +22 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/cache.d.ts +162 -0
- package/dist/types/cache.d.ts.map +1 -0
- package/dist/types/cache.js +34 -0
- package/dist/types/cache.js.map +1 -0
- package/dist/types/config.d.ts +108 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +37 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/graphql-proxy.d.ts +243 -0
- package/dist/types/graphql-proxy.d.ts.map +1 -0
- package/dist/types/graphql-proxy.js +142 -0
- package/dist/types/graphql-proxy.js.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +16 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/logging.d.ts +223 -0
- package/dist/types/logging.d.ts.map +1 -0
- package/dist/types/logging.js +67 -0
- package/dist/types/logging.js.map +1 -0
- package/dist/types/mcp.d.ts +160 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +126 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/types/metrics.d.ts +237 -0
- package/dist/types/metrics.d.ts.map +1 -0
- package/dist/types/metrics.js +26 -0
- package/dist/types/metrics.js.map +1 -0
- package/dist/types/rate-limit.d.ts +144 -0
- package/dist/types/rate-limit.d.ts.map +1 -0
- package/dist/types/rate-limit.js +43 -0
- package/dist/types/rate-limit.js.map +1 -0
- package/dist/types/tenant.d.ts +176 -0
- package/dist/types/tenant.d.ts.map +1 -0
- package/dist/types/tenant.js +63 -0
- package/dist/types/tenant.js.map +1 -0
- package/dist/types/transformation.d.ts +198 -0
- package/dist/types/transformation.d.ts.map +1 -0
- package/dist/types/transformation.js +51 -0
- package/dist/types/transformation.js.map +1 -0
- package/package.json +77 -0
- 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":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,6BAA6B;IAC7B,OAAO,EAAE,OAAO,CAAC;IAEjB,mCAAmC;IACnC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAE9B,oCAAoC;IACpC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IAEb,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,uCAAuC;IACvC,SAAS,CAAC,EAAE,uBAAuB,CAAC;IAEpC,+BAA+B;IAC/B,UAAU,EAAE,SAAS,EAAE,CAAC;IAExB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IAEjB,2BAA2B;IAC3B,MAAM,EAAE,OAAO,CAAC;IAEhB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE3B,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE7B,0DAA0D;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE9B,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,kCAAkC;IAClC,GAAG,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAEhC,6BAA6B;IAC7B,EAAE,CAAC,EAAE,uBAAuB,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,eAAe,GACf,aAAa,GACb,iBAAiB,GACjB,YAAY,GACZ,iBAAiB,CAAC;AAEtB;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,QAAQ,CAAC;IAEf,mDAAmD;IACnD,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IAE7C,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IAEb,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,sCAAsC;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IAEb,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IAEb,gEAAgE;IAChE,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IAE1D,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,yCAAyC;IACzC,WAAW,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,KAAK,GAAG,SAAS,CAAC;IAEzD,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAC;IAEjB,mBAAmB;IACnB,GAAG,EAAE,MAAM,CAAC;IAEZ,qBAAqB;IACrB,KAAK,EAAE,OAAO,CAAC;IAEf,aAAa;IACb,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,KAAK,CAAC;IAEZ,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;IAEf,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IAEnB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;CACzD;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAC;IAEjB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IAEnB,uBAAuB;IACvB,WAAW,EAAE,eAAe,CAAC;IAE7B,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,MAAM,GACN,MAAM,GACN,QAAQ,GACR,UAAU,GACV,UAAU,GACV,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IAEjB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IAEjB,qCAAqC;IACrC,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd,sBAAsB;IACtB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,iBAAiB;IACjB,MAAM,EAAE,MAAM,CAAC;IAEf,qBAAqB;IACrB,aAAa,EAAE,MAAM,CAAC;IAEtB,wBAAwB;IACxB,SAAS,EAAE,IAAI,CAAC;IAEhB,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE5B,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,eAAO,MAAM,6BAA6B,EAAE,oBAI3C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB;IACjC,yCAAyC;;;;;;;;;;;;;;;IAkBzC,gCAAgC;;;;;;;;;;yBAWE,eAAe;;;CAIlD,CAAC"}
|
|
@@ -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
|
+
}
|