const SUPERGLUE_ENDPOINT = 'https://graphql.superglue.cloud';
const API_KEY = 'your_api_key_here';
async function makeGraphQLRequest(query, variables = {}) {
const response = await fetch(SUPERGLUE_ENDPOINT, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
query,
variables
})
});
const result = await response.json();
if (result.errors) {
throw new Error(`GraphQL Error: ${result.errors.map(e => e.message).join(', ')}`);
}
return result.data;
}
async function createTestIntegration(id, name, urlPath, description) {
const query = `
mutation CreateTestIntegration($id: ID!, $input: IntegrationInput!) {
upsertIntegration(id: $id, input: $input) {
id
name
urlHost
documentationPending
}
}
`;
const variables = {
id,
input: {
id,
name,
urlHost: "https://api-staging.mycompany.com",
urlPath,
credentials: {
api_key: `<<${id}_api_key>>`
},
documentation: description
}
};
return await makeGraphQLRequest(query, variables);
}
async function testSchemaWorkflow(integrationId, testName) {
const query = `
mutation TestSchemaWorkflow($input: WorkflowInput!) {
buildAndRunWorkflow(input: $input) {
result {
... on WorkflowResult {
success
data
error
workflow {
id
steps {
id
instruction
executionMode
responseMapping
}
finalTransform
}
executionTime
}
}
}
}
`;
const variables = {
input: {
instruction: "Get all products with categories and sync to inventory management system",
integrationIds: [integrationId, "inventory-system"],
responseSchema: {
type: "object",
properties: {
syncedProducts: { type: "number" },
categories: { type: "array" },
errors: { type: "array" }
}
}
}
};
const result = await makeGraphQLRequest(query, variables);
return {
testName,
success: result.buildAndRunWorkflow.result.success,
stepCount: result.buildAndRunWorkflow.result.workflow?.steps.length || 0,
executionTime: result.buildAndRunWorkflow.result.executionTime || 0,
error: result.buildAndRunWorkflow.result.error
};
}
async function runSchemaComparison() {
console.log('π Starting schema comparison test...\n');
try {
// Step 1: Create test integrations
console.log('π Creating test integrations...');
await createTestIntegration(
'products-api-v1',
'Products API v1 - Nested Schema',
'/v1/products',
'Products API with nested category structure'
);
await createTestIntegration(
'products-api-v2',
'Products API v2 - Flat Schema',
'/v2/products',
'Products API with flat structure'
);
console.log('β
Test integrations created\n');
// Step 2: Test both schemas
console.log('π§ͺ Testing schema versions...');
const v1Result = await testSchemaWorkflow('products-api-v1', 'Nested Schema (v1)');
const v2Result = await testSchemaWorkflow('products-api-v2', 'Flat Schema (v2)');
// Step 3: Compare results
console.log('π Schema Comparison Results:\n');
console.log(`${v1Result.testName}:`);
console.log(` Success: ${v1Result.success ? 'β
' : 'β'}`);
console.log(` Steps: ${v1Result.stepCount}`);
console.log(` Execution Time: ${v1Result.executionTime}ms`);
if (v1Result.error) console.log(` Error: ${v1Result.error}`);
console.log(`\n${v2Result.testName}:`);
console.log(` Success: ${v2Result.success ? 'β
' : 'β'}`);
console.log(` Steps: ${v2Result.stepCount}`);
console.log(` Execution Time: ${v2Result.executionTime}ms`);
if (v2Result.error) console.log(` Error: ${v2Result.error}`);
// Step 4: Determine winner
console.log('\nπ Analysis:');
if (v1Result.success && v2Result.success) {
const v1Score = v1Result.stepCount;
const v2Score = v2Result.stepCount;
if (v1Score < v2Score) {
console.log(`Winner: ${v1Result.testName} (${v1Score} steps vs ${v2Score} steps)`);
} else if (v2Score < v1Score) {
console.log(`Winner: ${v2Result.testName} (${v2Score} steps vs ${v1Score} steps)`);
} else {
console.log('Tie: Both schemas have equal complexity');
}
} else {
console.log('Some tests failed - review errors above');
}
} catch (error) {
console.error('β Schema comparison failed:', error.message);
}
}
// Run the comparison
runSchemaComparison();