@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,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphQL Query Builder for Revel Digital API
|
|
3
|
+
* Helps agents construct optimized queries with proper field selection and filtering
|
|
4
|
+
*/
|
|
5
|
+
// Available query operations and their return types
|
|
6
|
+
const QUERY_OPERATIONS = {
|
|
7
|
+
// Content Management
|
|
8
|
+
device: { returnType: '[Device]', supportsFilter: true, requiresDateRange: false },
|
|
9
|
+
deviceGroups: { returnType: '[Group]', supportsFilter: true, requiresDateRange: false },
|
|
10
|
+
media: { returnType: '[Media]', supportsFilter: true, requiresDateRange: false },
|
|
11
|
+
mediaGroups: { returnType: '[Group]', supportsFilter: true, requiresDateRange: false },
|
|
12
|
+
playlist: { returnType: '[Playlist]', supportsFilter: true, requiresDateRange: false },
|
|
13
|
+
playlistGroups: { returnType: '[Group]', supportsFilter: true, requiresDateRange: false },
|
|
14
|
+
schedule: { returnType: '[Schedule]', supportsFilter: true, requiresDateRange: false },
|
|
15
|
+
scheduleGroups: { returnType: '[Group]', supportsFilter: true, requiresDateRange: false },
|
|
16
|
+
template: { returnType: '[Template]', supportsFilter: true, requiresDateRange: false },
|
|
17
|
+
templateGroups: { returnType: '[Group]', supportsFilter: true, requiresDateRange: false },
|
|
18
|
+
user: { returnType: '[User]', supportsFilter: true, requiresDateRange: false },
|
|
19
|
+
// Analytics (require date range)
|
|
20
|
+
playLogs: { returnType: '[AdHawkPlayLog]', supportsFilter: true, requiresDateRange: true },
|
|
21
|
+
pingLogs: { returnType: '[AdHawkPingLog]', supportsFilter: true, requiresDateRange: true },
|
|
22
|
+
eventLogs: { returnType: '[AdHawkEventLog]', supportsFilter: true, requiresDateRange: true },
|
|
23
|
+
impressions: { returnType: '[AdHawkImpression]', supportsFilter: true, requiresDateRange: true },
|
|
24
|
+
deviceMetrics: { returnType: '[AdHawkDeviceMetrics]', supportsFilter: true, requiresDateRange: true },
|
|
25
|
+
audienceMetrics: { returnType: '[AdHawkAudienceMetrics]', supportsFilter: true, requiresDateRange: true },
|
|
26
|
+
mediaPlayStats: { returnType: '[AdHawkMediaPlayStats]', supportsFilter: true, requiresDateRange: true },
|
|
27
|
+
};
|
|
28
|
+
// Common field sets for quick selection
|
|
29
|
+
const FIELD_PRESETS = {
|
|
30
|
+
device: {
|
|
31
|
+
minimal: ['id', 'name', 'isOnline'],
|
|
32
|
+
basic: ['id', 'name', 'groupName', 'isOnline', 'registrationKey', 'timezone'],
|
|
33
|
+
status: ['id', 'name', 'isOnline', 'pingData { timestamp cpuUsage memoryUsage diskUsage }'],
|
|
34
|
+
location: ['id', 'name', 'location { city state country latitude longitude }'],
|
|
35
|
+
full: ['id', 'name', 'groupName', 'groupId', 'tags', 'isOnline', 'registrationKey', 'timezone',
|
|
36
|
+
'lastUpdate', 'enteredService', 'pingData { timestamp cpuUsage memoryUsage diskUsage playerVersion ipAddress }',
|
|
37
|
+
'location { city state country address latitude longitude }'],
|
|
38
|
+
},
|
|
39
|
+
media: {
|
|
40
|
+
minimal: ['id', 'name', 'fileName'],
|
|
41
|
+
basic: ['id', 'name', 'fileName', 'mimeType', 'fileSize', 'thumbnailUrl'],
|
|
42
|
+
full: ['id', 'name', 'fileName', 'mimeType', 'fileSize', 'fileUrl', 'thumbnailUrl',
|
|
43
|
+
'width', 'height', 'uploadedOn', 'groupName', 'tags'],
|
|
44
|
+
},
|
|
45
|
+
playlist: {
|
|
46
|
+
minimal: ['id', 'name', 'type'],
|
|
47
|
+
basic: ['id', 'name', 'type', 'groupName', 'duration'],
|
|
48
|
+
full: ['id', 'name', 'type', 'groupName', 'groupId', 'tags', 'duration',
|
|
49
|
+
'isRandomStart', 'createdOn', 'modifiedOn'],
|
|
50
|
+
},
|
|
51
|
+
schedule: {
|
|
52
|
+
minimal: ['id', 'name', 'isActive'],
|
|
53
|
+
basic: ['id', 'name', 'type', 'isActive', 'priority', 'startDate', 'endDate'],
|
|
54
|
+
full: ['id', 'name', 'type', 'groupName', 'groupId', 'isActive', 'priority',
|
|
55
|
+
'startDate', 'endDate', 'startTime', 'endTime', 'days'],
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
export class QueryBuilder {
|
|
59
|
+
/**
|
|
60
|
+
* Build a GraphQL query from options
|
|
61
|
+
*/
|
|
62
|
+
static build(options) {
|
|
63
|
+
const { operation, arguments: args = {}, filter, orderBy, limit } = options;
|
|
64
|
+
let { fields } = options;
|
|
65
|
+
// Check if operation exists
|
|
66
|
+
const opConfig = QUERY_OPERATIONS[operation];
|
|
67
|
+
if (!opConfig) {
|
|
68
|
+
throw new Error(`Unknown operation: ${operation}. Available: ${Object.keys(QUERY_OPERATIONS).join(', ')}`);
|
|
69
|
+
}
|
|
70
|
+
// Apply field preset if specified
|
|
71
|
+
if (options.preset && FIELD_PRESETS[operation]?.[options.preset]) {
|
|
72
|
+
fields = FIELD_PRESETS[operation][options.preset];
|
|
73
|
+
}
|
|
74
|
+
// Validate date range requirement
|
|
75
|
+
if (opConfig.requiresDateRange && (!args.startDate || !args.endDate)) {
|
|
76
|
+
throw new Error(`Operation ${operation} requires startDate and endDate arguments`);
|
|
77
|
+
}
|
|
78
|
+
// Build arguments
|
|
79
|
+
const queryArgs = [];
|
|
80
|
+
const variables = {};
|
|
81
|
+
// Add direct arguments
|
|
82
|
+
for (const [key, value] of Object.entries(args)) {
|
|
83
|
+
if (value !== undefined) {
|
|
84
|
+
const varName = `$${key}`;
|
|
85
|
+
queryArgs.push(`${key}: ${varName}`);
|
|
86
|
+
variables[key] = value;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Add filter
|
|
90
|
+
if (filter && Object.keys(filter).length > 0) {
|
|
91
|
+
queryArgs.push('where: $where');
|
|
92
|
+
variables.where = this.buildFilterInput(filter);
|
|
93
|
+
}
|
|
94
|
+
// Add ordering
|
|
95
|
+
if (orderBy) {
|
|
96
|
+
queryArgs.push('order: $order');
|
|
97
|
+
variables.order = [{ [orderBy.field]: orderBy.direction }];
|
|
98
|
+
}
|
|
99
|
+
// Add limit if not already in args
|
|
100
|
+
if (limit && !args.limit) {
|
|
101
|
+
queryArgs.push('limit: $limit');
|
|
102
|
+
variables.limit = limit;
|
|
103
|
+
}
|
|
104
|
+
// Build variable definitions
|
|
105
|
+
const varDefs = Object.entries(variables).map(([key, value]) => {
|
|
106
|
+
const type = this.inferGraphQLType(key, value);
|
|
107
|
+
return `$${key}: ${type}`;
|
|
108
|
+
});
|
|
109
|
+
// Build field selection
|
|
110
|
+
const fieldSelection = this.buildFieldSelection(fields);
|
|
111
|
+
// Construct query
|
|
112
|
+
const argsStr = queryArgs.length > 0 ? `(${queryArgs.join(', ')})` : '';
|
|
113
|
+
const varDefsStr = varDefs.length > 0 ? `(${varDefs.join(', ')})` : '';
|
|
114
|
+
const query = `
|
|
115
|
+
query ${this.capitalizeFirst(operation)}Query${varDefsStr} {
|
|
116
|
+
${operation}${argsStr} {
|
|
117
|
+
${fieldSelection}
|
|
118
|
+
}
|
|
119
|
+
}`.trim();
|
|
120
|
+
return { query, variables };
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Build field selection string, handling nested fields
|
|
124
|
+
*/
|
|
125
|
+
static buildFieldSelection(fields) {
|
|
126
|
+
const result = [];
|
|
127
|
+
const nested = {};
|
|
128
|
+
for (const field of fields) {
|
|
129
|
+
if (field.includes(' { ')) {
|
|
130
|
+
// Already formatted nested field
|
|
131
|
+
result.push(field);
|
|
132
|
+
}
|
|
133
|
+
else if (field.includes('.')) {
|
|
134
|
+
// Dot notation nested field
|
|
135
|
+
const [parent, ...rest] = field.split('.');
|
|
136
|
+
if (!nested[parent])
|
|
137
|
+
nested[parent] = [];
|
|
138
|
+
nested[parent].push(rest.join('.'));
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
result.push(field);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Process nested fields
|
|
145
|
+
for (const [parent, children] of Object.entries(nested)) {
|
|
146
|
+
const childFields = this.buildFieldSelection(children);
|
|
147
|
+
result.push(`${parent} { ${childFields} }`);
|
|
148
|
+
}
|
|
149
|
+
return result.join('\n ');
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Build filter input from simple object
|
|
153
|
+
*/
|
|
154
|
+
static buildFilterInput(filter) {
|
|
155
|
+
const result = {};
|
|
156
|
+
for (const [key, value] of Object.entries(filter)) {
|
|
157
|
+
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
|
|
158
|
+
// Already a filter object with operators
|
|
159
|
+
result[key] = value;
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
// Simple equality
|
|
163
|
+
result[key] = { eq: value };
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Infer GraphQL type from variable name and value
|
|
170
|
+
*/
|
|
171
|
+
static inferGraphQLType(name, value) {
|
|
172
|
+
// Special cases by name
|
|
173
|
+
if (name === 'startDate' || name === 'endDate')
|
|
174
|
+
return 'DateTime!';
|
|
175
|
+
if (name === 'limit')
|
|
176
|
+
return 'Int!';
|
|
177
|
+
if (name === 'where')
|
|
178
|
+
return `${this.capitalizeFirst(name.replace('where', ''))}FilterInput`;
|
|
179
|
+
if (name === 'order')
|
|
180
|
+
return '[SortInput!]';
|
|
181
|
+
if (name.endsWith('Id'))
|
|
182
|
+
return Array.isArray(value) ? '[String!]' : 'String';
|
|
183
|
+
// Infer from value
|
|
184
|
+
if (Array.isArray(value)) {
|
|
185
|
+
if (value.length > 0 && typeof value[0] === 'string')
|
|
186
|
+
return '[String!]';
|
|
187
|
+
return '[String]';
|
|
188
|
+
}
|
|
189
|
+
if (typeof value === 'string')
|
|
190
|
+
return 'String';
|
|
191
|
+
if (typeof value === 'number')
|
|
192
|
+
return Number.isInteger(value) ? 'Int' : 'Float';
|
|
193
|
+
if (typeof value === 'boolean')
|
|
194
|
+
return 'Boolean';
|
|
195
|
+
if (typeof value === 'object')
|
|
196
|
+
return 'JSON';
|
|
197
|
+
return 'String';
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Capitalize first letter
|
|
201
|
+
*/
|
|
202
|
+
static capitalizeFirst(str) {
|
|
203
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Get available operations
|
|
207
|
+
*/
|
|
208
|
+
static getOperations() {
|
|
209
|
+
return Object.keys(QUERY_OPERATIONS);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Get operation info
|
|
213
|
+
*/
|
|
214
|
+
static getOperationInfo(operation) {
|
|
215
|
+
return QUERY_OPERATIONS[operation] ?? null;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Get field presets for an operation
|
|
219
|
+
*/
|
|
220
|
+
static getFieldPresets(operation) {
|
|
221
|
+
return FIELD_PRESETS[operation] ?? null;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Build a quick query for common use cases
|
|
225
|
+
*/
|
|
226
|
+
static quick = {
|
|
227
|
+
/** Get all devices with status */
|
|
228
|
+
devicesStatus: () => QueryBuilder.build({
|
|
229
|
+
operation: 'device',
|
|
230
|
+
fields: FIELD_PRESETS.device.status,
|
|
231
|
+
}),
|
|
232
|
+
/** Get online devices only */
|
|
233
|
+
onlineDevices: () => QueryBuilder.build({
|
|
234
|
+
operation: 'device',
|
|
235
|
+
fields: FIELD_PRESETS.device.basic,
|
|
236
|
+
filter: { isOnline: true },
|
|
237
|
+
}),
|
|
238
|
+
/** Get recent media */
|
|
239
|
+
recentMedia: (limit = 50) => QueryBuilder.build({
|
|
240
|
+
operation: 'media',
|
|
241
|
+
fields: FIELD_PRESETS.media.basic,
|
|
242
|
+
orderBy: { field: 'uploadedOn', direction: 'DESC' },
|
|
243
|
+
limit,
|
|
244
|
+
}),
|
|
245
|
+
/** Get active schedules */
|
|
246
|
+
activeSchedules: () => QueryBuilder.build({
|
|
247
|
+
operation: 'schedule',
|
|
248
|
+
fields: FIELD_PRESETS.schedule.basic,
|
|
249
|
+
filter: { isActive: true },
|
|
250
|
+
}),
|
|
251
|
+
/** Get play logs for date range */
|
|
252
|
+
playLogs: (startDate, endDate, deviceId) => QueryBuilder.build({
|
|
253
|
+
operation: 'playLogs',
|
|
254
|
+
fields: ['id', 'timestamp', 'deviceId', 'fileId', 'fileName', 'duration'],
|
|
255
|
+
arguments: { startDate, endDate, ...(deviceId && { deviceId }) },
|
|
256
|
+
}),
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=query-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/core/query-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response Optimizer for Context Window Management
|
|
3
|
+
* Ensures responses fit within AI context limits while preserving important data
|
|
4
|
+
*/
|
|
5
|
+
export interface OptimizeOptions {
|
|
6
|
+
/** Maximum size in characters */
|
|
7
|
+
maxSize: number;
|
|
8
|
+
/** Fields to prioritize keeping */
|
|
9
|
+
priorityFields?: string[];
|
|
10
|
+
/** Whether to include metadata about truncation */
|
|
11
|
+
includeMetadata?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface OptimizedResult {
|
|
14
|
+
data: unknown;
|
|
15
|
+
metadata: {
|
|
16
|
+
originalSize: number;
|
|
17
|
+
optimizedSize: number;
|
|
18
|
+
truncated: boolean;
|
|
19
|
+
removedCount?: number;
|
|
20
|
+
removedFields?: string[];
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export declare class ResponseOptimizer {
|
|
24
|
+
private defaultMaxSize;
|
|
25
|
+
constructor(defaultMaxSize?: number);
|
|
26
|
+
/**
|
|
27
|
+
* Optimize response data to fit within size constraints
|
|
28
|
+
*/
|
|
29
|
+
optimize(data: unknown, options?: Partial<OptimizeOptions>): OptimizedResult;
|
|
30
|
+
/**
|
|
31
|
+
* Remove null, undefined, and empty string values
|
|
32
|
+
*/
|
|
33
|
+
private removeEmptyValues;
|
|
34
|
+
/**
|
|
35
|
+
* Reduce array size while trying to maintain diversity
|
|
36
|
+
*/
|
|
37
|
+
private reduceArraySize;
|
|
38
|
+
/**
|
|
39
|
+
* Keep only priority fields in objects
|
|
40
|
+
*/
|
|
41
|
+
private keepOnlyPriorityFields;
|
|
42
|
+
/**
|
|
43
|
+
* Truncate long string values
|
|
44
|
+
*/
|
|
45
|
+
private truncateStrings;
|
|
46
|
+
/**
|
|
47
|
+
* Build optimization result
|
|
48
|
+
*/
|
|
49
|
+
private buildResult;
|
|
50
|
+
/**
|
|
51
|
+
* Estimate response size
|
|
52
|
+
*/
|
|
53
|
+
static estimateSize(data: unknown): number;
|
|
54
|
+
/**
|
|
55
|
+
* Format size for display
|
|
56
|
+
*/
|
|
57
|
+
static formatSize(bytes: number): string;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=response-optimizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-optimizer.d.ts","sourceRoot":"","sources":["../../src/core/response-optimizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,mDAAmD;IACnD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE;QACR,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;CACH;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,cAAc,CAAS;gBAEnB,cAAc,GAAE,MAAc;IAI1C;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe;IA4E5E;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqC9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;IAI1C;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAKzC"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response Optimizer for Context Window Management
|
|
3
|
+
* Ensures responses fit within AI context limits while preserving important data
|
|
4
|
+
*/
|
|
5
|
+
export class ResponseOptimizer {
|
|
6
|
+
defaultMaxSize;
|
|
7
|
+
constructor(defaultMaxSize = 50000) {
|
|
8
|
+
this.defaultMaxSize = defaultMaxSize;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Optimize response data to fit within size constraints
|
|
12
|
+
*/
|
|
13
|
+
optimize(data, options) {
|
|
14
|
+
const opts = {
|
|
15
|
+
maxSize: options?.maxSize ?? this.defaultMaxSize,
|
|
16
|
+
priorityFields: options?.priorityFields ?? [],
|
|
17
|
+
includeMetadata: options?.includeMetadata ?? true,
|
|
18
|
+
};
|
|
19
|
+
const originalStr = JSON.stringify(data, null, 2);
|
|
20
|
+
const originalSize = originalStr.length;
|
|
21
|
+
// If already within limits, return as-is
|
|
22
|
+
if (originalSize <= opts.maxSize) {
|
|
23
|
+
return {
|
|
24
|
+
data,
|
|
25
|
+
metadata: {
|
|
26
|
+
originalSize,
|
|
27
|
+
optimizedSize: originalSize,
|
|
28
|
+
truncated: false,
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
// Try different optimization strategies
|
|
33
|
+
let optimized = data;
|
|
34
|
+
let removedCount = 0;
|
|
35
|
+
const removedFields = [];
|
|
36
|
+
// Strategy 1: Remove null/empty values
|
|
37
|
+
optimized = this.removeEmptyValues(optimized);
|
|
38
|
+
let currentSize = JSON.stringify(optimized).length;
|
|
39
|
+
if (currentSize <= opts.maxSize) {
|
|
40
|
+
return this.buildResult(optimized, originalSize, currentSize, false, removedFields);
|
|
41
|
+
}
|
|
42
|
+
// Strategy 2: If array, reduce number of items
|
|
43
|
+
if (Array.isArray(optimized)) {
|
|
44
|
+
const reduction = this.reduceArraySize(optimized, opts.maxSize, opts.priorityFields);
|
|
45
|
+
optimized = reduction.data;
|
|
46
|
+
removedCount = reduction.removedCount;
|
|
47
|
+
currentSize = JSON.stringify(optimized).length;
|
|
48
|
+
if (currentSize <= opts.maxSize) {
|
|
49
|
+
return this.buildResult(optimized, originalSize, currentSize, true, removedFields, removedCount);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Strategy 3: Remove non-priority fields from objects
|
|
53
|
+
if (opts.priorityFields && opts.priorityFields.length > 0) {
|
|
54
|
+
const fieldReduction = this.keepOnlyPriorityFields(optimized, opts.priorityFields);
|
|
55
|
+
optimized = fieldReduction.data;
|
|
56
|
+
removedFields.push(...fieldReduction.removedFields);
|
|
57
|
+
currentSize = JSON.stringify(optimized).length;
|
|
58
|
+
if (currentSize <= opts.maxSize) {
|
|
59
|
+
return this.buildResult(optimized, originalSize, currentSize, true, removedFields, removedCount);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Strategy 4: Truncate long string values
|
|
63
|
+
optimized = this.truncateStrings(optimized, 200);
|
|
64
|
+
currentSize = JSON.stringify(optimized).length;
|
|
65
|
+
// Strategy 5: Final array truncation if still too large
|
|
66
|
+
if (Array.isArray(optimized) && currentSize > opts.maxSize) {
|
|
67
|
+
const optimizedArray = optimized;
|
|
68
|
+
const targetItems = Math.floor((opts.maxSize / currentSize) * optimizedArray.length * 0.8);
|
|
69
|
+
const originalLength = optimizedArray.length;
|
|
70
|
+
optimized = optimizedArray.slice(0, Math.max(1, targetItems));
|
|
71
|
+
removedCount = originalLength - optimized.length;
|
|
72
|
+
currentSize = JSON.stringify(optimized).length;
|
|
73
|
+
}
|
|
74
|
+
return this.buildResult(optimized, originalSize, currentSize, true, removedFields, removedCount);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Remove null, undefined, and empty string values
|
|
78
|
+
*/
|
|
79
|
+
removeEmptyValues(data) {
|
|
80
|
+
if (data === null || data === undefined)
|
|
81
|
+
return undefined;
|
|
82
|
+
if (Array.isArray(data)) {
|
|
83
|
+
return data.map(item => this.removeEmptyValues(item)).filter(item => item !== undefined);
|
|
84
|
+
}
|
|
85
|
+
if (typeof data === 'object') {
|
|
86
|
+
const result = {};
|
|
87
|
+
for (const [key, value] of Object.entries(data)) {
|
|
88
|
+
const cleaned = this.removeEmptyValues(value);
|
|
89
|
+
if (cleaned !== undefined && cleaned !== '' && cleaned !== null) {
|
|
90
|
+
result[key] = cleaned;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
94
|
+
}
|
|
95
|
+
return data;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Reduce array size while trying to maintain diversity
|
|
99
|
+
*/
|
|
100
|
+
reduceArraySize(arr, maxSize, priorityFields) {
|
|
101
|
+
const itemSize = JSON.stringify(arr[0] ?? {}).length;
|
|
102
|
+
const estimatedItems = Math.floor(maxSize / (itemSize * 1.2)); // 20% buffer
|
|
103
|
+
const targetItems = Math.max(1, Math.min(arr.length, estimatedItems));
|
|
104
|
+
if (targetItems >= arr.length) {
|
|
105
|
+
return { data: arr, removedCount: 0 };
|
|
106
|
+
}
|
|
107
|
+
// Try to keep a representative sample
|
|
108
|
+
const result = arr.slice(0, targetItems);
|
|
109
|
+
return { data: result, removedCount: arr.length - targetItems };
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Keep only priority fields in objects
|
|
113
|
+
*/
|
|
114
|
+
keepOnlyPriorityFields(data, priorityFields) {
|
|
115
|
+
const removedFields = [];
|
|
116
|
+
const process = (obj) => {
|
|
117
|
+
if (Array.isArray(obj)) {
|
|
118
|
+
return obj.map(item => process(item));
|
|
119
|
+
}
|
|
120
|
+
if (typeof obj === 'object' && obj !== null) {
|
|
121
|
+
const result = {};
|
|
122
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
123
|
+
if (priorityFields.some(pf => key === pf || pf.startsWith(`${key}.`))) {
|
|
124
|
+
result[key] = process(value);
|
|
125
|
+
}
|
|
126
|
+
else if (typeof value === 'object' && value !== null) {
|
|
127
|
+
// Check if any priority field is nested within this object
|
|
128
|
+
const nestedPriority = priorityFields.filter(pf => pf.startsWith(`${key}.`));
|
|
129
|
+
if (nestedPriority.length > 0) {
|
|
130
|
+
result[key] = process(value);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
removedFields.push(key);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
removedFields.push(key);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
142
|
+
return obj;
|
|
143
|
+
};
|
|
144
|
+
return { data: process(data), removedFields: [...new Set(removedFields)] };
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Truncate long string values
|
|
148
|
+
*/
|
|
149
|
+
truncateStrings(data, maxLength) {
|
|
150
|
+
if (typeof data === 'string' && data.length > maxLength) {
|
|
151
|
+
return data.substring(0, maxLength) + '...';
|
|
152
|
+
}
|
|
153
|
+
if (Array.isArray(data)) {
|
|
154
|
+
return data.map(item => this.truncateStrings(item, maxLength));
|
|
155
|
+
}
|
|
156
|
+
if (typeof data === 'object' && data !== null) {
|
|
157
|
+
const result = {};
|
|
158
|
+
for (const [key, value] of Object.entries(data)) {
|
|
159
|
+
result[key] = this.truncateStrings(value, maxLength);
|
|
160
|
+
}
|
|
161
|
+
return result;
|
|
162
|
+
}
|
|
163
|
+
return data;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Build optimization result
|
|
167
|
+
*/
|
|
168
|
+
buildResult(data, originalSize, optimizedSize, truncated, removedFields = [], removedCount) {
|
|
169
|
+
return {
|
|
170
|
+
data,
|
|
171
|
+
metadata: {
|
|
172
|
+
originalSize,
|
|
173
|
+
optimizedSize,
|
|
174
|
+
truncated,
|
|
175
|
+
...(removedCount !== undefined && { removedCount }),
|
|
176
|
+
...(removedFields.length > 0 && { removedFields }),
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Estimate response size
|
|
182
|
+
*/
|
|
183
|
+
static estimateSize(data) {
|
|
184
|
+
return JSON.stringify(data).length;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Format size for display
|
|
188
|
+
*/
|
|
189
|
+
static formatSize(bytes) {
|
|
190
|
+
if (bytes < 1024)
|
|
191
|
+
return `${bytes} chars`;
|
|
192
|
+
if (bytes < 1024 * 1024)
|
|
193
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
194
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=response-optimizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-optimizer.js","sourceRoot":"","sources":["../../src/core/response-optimizer.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Revel Digital MCP GraphQL Proxy Server
|
|
4
|
+
*
|
|
5
|
+
* An MCP server that enables AI agents to interact with the Revel Digital
|
|
6
|
+
* GraphQL API for digital signage management.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Execute custom GraphQL queries
|
|
10
|
+
* - Build optimized queries with field selection
|
|
11
|
+
* - Authentication header proxying
|
|
12
|
+
* - Response caching
|
|
13
|
+
* - Context window optimization
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG"}
|