@simonecoelhosfo/optimizely-mcp-server
Version:
Optimizely MCP Server for AI assistants with integrated CLI tools
181 lines • 10.8 kB
JavaScript
/**
* System Template Registry for Template Orchestration
*
* Maps system_template_id values used in orchestration templates to the actual
* MODEL_FRIENDLY_TEMPLATES keys. This provides the bridge between orchestration
* templates and the MCP tools' expected template structures.
*
* @module SystemTemplateRegistry
*/
// Comprehensive System Template Registry
// Maps system_template_id values to MODEL_FRIENDLY_TEMPLATES keys
export const SYSTEM_TEMPLATE_REGISTRY = {
// ===== FEATURE EXPERIMENTATION ENTITIES =====
// Flag Templates
"flag_create": { templateKey: "flag", operation: "create", platform: "feature" },
"flag_v1": { templateKey: "flag", operation: "create", platform: "feature" },
"flag_update": { templateKey: "flag_simple_update", operation: "update", platform: "feature" },
"flag_simple_update": { templateKey: "flag_simple_update", operation: "update", platform: "feature" },
"flag_simple_update_v1": { templateKey: "flag_simple_update", operation: "update", platform: "feature" },
"flag_variation_addition": { templateKey: "flag_variation_addition", operation: "update", platform: "feature" },
"flag_variation_addition_v1": { templateKey: "flag_variation_addition", operation: "update", platform: "feature" },
"flag_remove_rule": { templateKey: "flag_remove_rule", operation: "update", platform: "feature" },
"flag_remove_rule_v1": { templateKey: "flag_remove_rule", operation: "update", platform: "feature" },
// Rule & Ruleset Templates
"rule_create": { templateKey: "rule", operation: "create", platform: "feature" },
"rule_basic_v1": { templateKey: "rule", operation: "create", platform: "feature" },
"rule_advanced_v1": { templateKey: "rule_advanced", operation: "create", platform: "feature" },
"ruleset_create": { templateKey: "ruleset", operation: "create", platform: "feature" },
"ruleset_basic_v1": { templateKey: "ruleset", operation: "create", platform: "feature" },
"ruleset_advanced_v1": { templateKey: "ruleset_advanced", operation: "create", platform: "feature" },
"ruleset_update": { templateKey: "ruleset", operation: "update", platform: "feature" },
// Feature & Variable Templates
"feature_create": { templateKey: "feature", operation: "create", platform: "feature" },
"feature_v1": { templateKey: "feature", operation: "create", platform: "feature" },
"variable_create": { templateKey: "variable", operation: "create", platform: "feature" },
"variable_v1": { templateKey: "variable", operation: "create", platform: "feature" },
"variable_definition_create": { templateKey: "variable_definition", operation: "create", platform: "feature" },
"variable_definition_v1": { templateKey: "variable_definition", operation: "create", platform: "feature" },
// ===== WEB EXPERIMENTATION ENTITIES =====
// Page Templates
"page_create": { templateKey: "page", operation: "create", platform: "web" },
"page_basic_v1": { templateKey: "page", operation: "create", platform: "web" },
"page_advanced_v1": { templateKey: "page_advanced", operation: "create", platform: "web" },
"page_update": { templateKey: "page", operation: "update", platform: "web" },
// Campaign Templates
"campaign_create": { templateKey: "campaign", operation: "create", platform: "web" },
"campaign_v1": { templateKey: "campaign", operation: "create", platform: "web" },
"campaign_update": { templateKey: "campaign", operation: "update", platform: "web" },
// Experiment Templates (Web)
"experiment_create": { templateKey: "experiment", operation: "create", platform: "web" },
"experiment_web_v1": { templateKey: "experiment", operation: "create", platform: "web" },
"experiment_update": { templateKey: "experiment", operation: "update", platform: "web" },
"personalization_experiment_create": { templateKey: "personalization_experiment", operation: "create", platform: "web" },
"personalization_experiment_v1": { templateKey: "personalization_experiment", operation: "create", platform: "web" },
// Extension Templates
"extension_create": { templateKey: "extension", operation: "create", platform: "web" },
"extension_v1": { templateKey: "extension", operation: "create", platform: "web" },
"extension_update": { templateKey: "extension", operation: "update", platform: "web" },
// List Attribute Templates (Web specific)
"list_attribute_create": { templateKey: "list_attribute", operation: "create", platform: "web" },
"list_attribute_v1": { templateKey: "list_attribute", operation: "create", platform: "web" },
// ===== SHARED ENTITIES (BOTH PLATFORMS) =====
// Event Templates
"event_create": { templateKey: "event", operation: "create", platform: "both" },
"event_v1": { templateKey: "event", operation: "create", platform: "both" },
"event_update": { templateKey: "event", operation: "update", platform: "both" },
// Audience Templates
"audience_create": { templateKey: "audience", operation: "create", platform: "both" },
"audience_v1": { templateKey: "audience", operation: "create", platform: "both" },
"audience_update": { templateKey: "audience", operation: "update", platform: "both" },
// Attribute Templates
"attribute_create": { templateKey: "attribute", operation: "create", platform: "both" },
"attribute_v1": { templateKey: "attribute", operation: "create", platform: "both" },
"attribute_update": { templateKey: "attribute", operation: "update", platform: "both" },
// Project Templates
"project_create": { templateKey: "project", operation: "create", platform: "both" },
"project_v1": { templateKey: "project", operation: "create", platform: "both" },
"project_update": { templateKey: "project", operation: "update", platform: "both" },
// Environment Templates
"environment_create": { templateKey: "environment", operation: "create", platform: "both" },
"environment_v1": { templateKey: "environment", operation: "create", platform: "both" },
"environment_update": { templateKey: "environment", operation: "update", platform: "both" },
// Webhook Templates
"webhook_create": { templateKey: "webhook", operation: "create", platform: "both" },
"webhook_v1": { templateKey: "webhook", operation: "create", platform: "both" },
"webhook_update": { templateKey: "webhook", operation: "update", platform: "both" },
// Group Templates (Mutual Exclusion)
"group_create": { templateKey: "group", operation: "create", platform: "both" },
"group_v1": { templateKey: "group", operation: "create", platform: "both" },
"group_update": { templateKey: "group", operation: "update", platform: "both" },
// Variation Templates
"variation_create": { templateKey: "variation", operation: "create", platform: "both" },
"variation_v1": { templateKey: "variation", operation: "create", platform: "both" },
"variation_update": { templateKey: "variation", operation: "update", platform: "both" },
// Segment Templates
"segment_create": { templateKey: "segment", operation: "create", platform: "both" },
"segment_v1": { templateKey: "segment", operation: "create", platform: "both" },
// Results Templates (Read-only)
"results_get": { templateKey: "results", operation: "get", platform: "web" },
"results_v1": { templateKey: "results", operation: "get", platform: "web" },
// Collaborator Templates (Read-only)
"collaborator_get": { templateKey: "collaborator", operation: "get", platform: "both" },
"collaborator_v1": { templateKey: "collaborator", operation: "get", platform: "both" },
// ===== CONCEPTUAL/WORKFLOW TEMPLATES =====
// These don't create entities but provide guidance
"ruleset_concepts": { templateKey: "ruleset_concepts", operation: "get", platform: "feature" },
"ruleset_concepts_v1": { templateKey: "ruleset_concepts", operation: "get", platform: "feature" },
"traffic_allocation_concepts": { templateKey: "traffic_allocation_concepts", operation: "get", platform: "both" },
"traffic_allocation_concepts_v1": { templateKey: "traffic_allocation_concepts", operation: "get", platform: "both" },
};
/**
* Helper function to validate platform compatibility
* @param systemTemplateId The system template ID to check
* @param projectPlatform The platform of the current project
* @returns True if the template is compatible with the platform
*/
export function isTemplateCompatibleWithPlatform(systemTemplateId, projectPlatform) {
const template = SYSTEM_TEMPLATE_REGISTRY[systemTemplateId];
if (!template)
return false;
return template.platform === 'both' || template.platform === projectPlatform;
}
/**
* Helper function to get all templates for a specific platform
* @param platform The platform to filter templates for
* @returns Array of system template IDs compatible with the platform
*/
export function getTemplatesForPlatform(platform) {
return Object.entries(SYSTEM_TEMPLATE_REGISTRY)
.filter(([_, template]) => platform === 'both' || template.platform === 'both' || template.platform === platform)
.map(([id]) => id);
}
/**
* Entity type mappings for platform validation
* Maps entity types to their compatible platforms
*/
export const ENTITY_PLATFORM_COMPATIBILITY = {
// Feature Experimentation only
flag: ['feature'],
rule: ['feature'],
ruleset: ['feature'],
feature: ['feature'],
variable: ['feature'],
variable_definition: ['feature'],
// Web Experimentation only
page: ['web'],
campaign: ['web'],
experiment: ['web'], // Note: Web experiments only; Feature uses rulesets
personalization_experiment: ['web'],
extension: ['web'],
list_attribute: ['web'],
results: ['web'],
// Both platforms
event: ['web', 'feature'],
audience: ['web', 'feature'],
attribute: ['web', 'feature'],
project: ['web', 'feature'],
environment: ['web', 'feature'],
webhook: ['web', 'feature'],
group: ['web', 'feature'],
variation: ['web', 'feature'],
segment: ['web', 'feature'],
collaborator: ['web', 'feature'],
};
/**
* Get the ModelFriendlyTemplate key for a system template ID
* @param systemTemplateId The system template ID
* @returns The corresponding ModelFriendlyTemplate key or undefined
*/
export function getTemplateKey(systemTemplateId) {
return SYSTEM_TEMPLATE_REGISTRY[systemTemplateId]?.templateKey;
}
/**
* Get template info for a system template ID
* @param systemTemplateId The system template ID
* @returns The template information or undefined
*/
export function getTemplateInfo(systemTemplateId) {
return SYSTEM_TEMPLATE_REGISTRY[systemTemplateId];
}
//# sourceMappingURL=SystemTemplateRegistry.js.map