snow-flow
Version:
Snow-Flow v3.2.0: Complete ServiceNow Enterprise Suite with 180+ MCP Tools. ATF Testing, Knowledge Management, Service Catalog, Change Management with CAB scheduling, Virtual Agent chatbots with NLU, Performance Analytics KPIs, Flow Designer automation, A
172 lines • 6.34 kB
JavaScript
;
/**
* ServiceNow ID Generator - Dynamic sys_id and identifier generation
*
* Replaces hardcoded sys_ids with proper dynamic generation
* Ensures consistent ServiceNow-compatible identifiers across the system
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.COMMON_NOTIFICATION_TEMPLATES = void 0;
exports.generateServiceNowSysId = generateServiceNowSysId;
exports.generateMultipleSysIds = generateMultipleSysIds;
exports.generateDeterministicSysId = generateDeterministicSysId;
exports.generateMockSysId = generateMockSysId;
exports.generateUpdateSetName = generateUpdateSetName;
exports.generateTestUserName = generateTestUserName;
exports.generateTestGroupName = generateTestGroupName;
exports.generateCatalogItemName = generateCatalogItemName;
exports.generateRequestNumber = generateRequestNumber;
exports.generateIncidentNumber = generateIncidentNumber;
exports.isValidServiceNowSysId = isValidServiceNowSysId;
exports.generateMockRecords = generateMockRecords;
exports.generateFlowIdentifiers = generateFlowIdentifiers;
exports.getNotificationTemplateSysId = getNotificationTemplateSysId;
const uuid_1 = require("uuid");
const crypto_1 = __importDefault(require("crypto"));
/**
* Generate a ServiceNow-compatible sys_id (32-character hex string)
* ServiceNow uses lowercase 32-character hex strings without dashes
*/
function generateServiceNowSysId() {
return (0, uuid_1.v4)().replace(/-/g, '').toLowerCase();
}
/**
* Generate multiple unique sys_ids at once
*/
function generateMultipleSysIds(count) {
return Array.from({ length: count }, () => generateServiceNowSysId());
}
/**
* Generate a deterministic sys_id based on input string
* Useful for generating consistent sys_ids for the same input
*/
function generateDeterministicSysId(input) {
const hash = crypto_1.default.createHash('md5').update(input).digest('hex');
return hash.toLowerCase();
}
/**
* Generate a prefixed sys_id for mock/test scenarios
* Maintains the 32-character requirement while being identifiable
*/
function generateMockSysId(prefix = 'mock') {
const timestamp = Date.now().toString(16);
const random = Math.random().toString(16).substring(2, 10);
const base = `${prefix}_${timestamp}_${random}`;
// Ensure it's exactly 32 characters by padding or truncating
const hash = crypto_1.default.createHash('md5').update(base).digest('hex');
return hash.toLowerCase();
}
/**
* Generate dynamic update set names with timestamp
*/
function generateUpdateSetName(prefix = 'Auto') {
const timestamp = new Date().toISOString().replace(/[:.]/g, '_');
return `${prefix}_${timestamp}`;
}
/**
* Generate dynamic user names for testing
*/
function generateTestUserName(prefix = 'test_user') {
const timestamp = Date.now();
const random = Math.random().toString(36).substring(7);
return `${prefix}_${timestamp}_${random}`;
}
/**
* Generate dynamic group names
*/
function generateTestGroupName(prefix = 'test_group') {
const timestamp = Date.now();
const random = Math.random().toString(36).substring(7);
return `${prefix}_${timestamp}_${random}`;
}
/**
* Generate dynamic catalog item names
*/
function generateCatalogItemName(baseType) {
const timestamp = Date.now();
const random = Math.random().toString(36).substring(7);
return `${baseType}_${timestamp}_${random}`;
}
/**
* Generate dynamic request numbers in ServiceNow format
*/
function generateRequestNumber(prefix = 'REQ') {
const number = Math.floor(Math.random() * 999999).toString().padStart(7, '0');
return `${prefix}${number}`;
}
/**
* Generate dynamic incident numbers in ServiceNow format
*/
function generateIncidentNumber(prefix = 'INC') {
const number = Math.floor(Math.random() * 999999).toString().padStart(7, '0');
return `${prefix}${number}`;
}
/**
* Validate if a string is a valid ServiceNow sys_id format
*/
function isValidServiceNowSysId(sysId) {
const sysIdPattern = /^[a-f0-9]{32}$/;
return sysIdPattern.test(sysId);
}
function generateMockRecords(count, type) {
return Array.from({ length: count }, (_, index) => ({
sys_id: generateServiceNowSysId(),
name: `${type}_${index + 1}_${Date.now()}`,
type
}));
}
/**
* Generate workflow/flow-related identifiers
*/
function generateFlowIdentifiers(flowName) {
const baseSysId = generateDeterministicSysId(flowName);
return {
flowSysId: baseSysId,
triggerSysId: generateDeterministicSysId(`${flowName}_trigger`),
updateSetSysId: generateServiceNowSysId(),
updateSetName: generateUpdateSetName(`Flow_${flowName.replace(/\s+/g, '_')}`)
};
}
/**
* ServiceNow system notification IDs - for common notification templates
* These should be looked up dynamically in real implementations
*/
exports.COMMON_NOTIFICATION_TEMPLATES = {
// Generic notification template - should be replaced with actual lookup
generic_notification: '3c7d23a4db01030077c9a4d3ca961985',
// Default fallback - generates a deterministic sys_id for consistent behavior
default: generateDeterministicSysId('default_notification_template')
};
/**
* Get a notification template sys_id
* In production, this should query ServiceNow for actual notification templates
*/
function getNotificationTemplateSysId(templateName = 'default') {
if (templateName in exports.COMMON_NOTIFICATION_TEMPLATES) {
return exports.COMMON_NOTIFICATION_TEMPLATES[templateName];
}
// Generate a consistent sys_id for unknown templates
return generateDeterministicSysId(`notification_template_${templateName}`);
}
exports.default = {
generateServiceNowSysId,
generateMultipleSysIds,
generateDeterministicSysId,
generateMockSysId,
generateUpdateSetName,
generateTestUserName,
generateTestGroupName,
generateCatalogItemName,
generateRequestNumber,
generateIncidentNumber,
isValidServiceNowSysId,
generateMockRecords,
generateFlowIdentifiers,
getNotificationTemplateSysId,
COMMON_NOTIFICATION_TEMPLATES: exports.COMMON_NOTIFICATION_TEMPLATES
};
//# sourceMappingURL=servicenow-id-generator.js.map