import { JsmConfig, ApiError } from '../types';
export function getConfig(): JsmConfig {
const workspaceId = process.env.JSM_WORKSPACE_ID;
const authToken = process.env.JSM_AUTH_TOKEN;
const baseUrl = process.env.JSM_BASE_URL || 'https://api.atlassian.com/jsm/assets/workspace';
if (!workspaceId) {
throw new Error('JSM_WORKSPACE_ID environment variable is required');
}
if (!authToken) {
throw new Error('JSM_AUTH_TOKEN environment variable is required');
}
return {
workspaceId,
authToken,
baseUrl
};
}
export function validateAqlQuery(query: string): void {
if (!query || query.trim().length === 0) {
throw new Error('AQL query cannot be empty');
}
}
export function validateSchemaId(schemaId: number): void {
if (!Number.isInteger(schemaId) || schemaId <= 0) {
throw new Error('Schema ID must be a positive integer');
}
}
export function validateObjectTypeId(objectTypeId: number): void {
if (!Number.isInteger(objectTypeId) || objectTypeId <= 0) {
throw new Error('Object Type ID must be a positive integer');
}
}
export function validateParentObjectType(parentObjectType: string): void {
if (!parentObjectType || parentObjectType.trim().length === 0) {
throw new Error('Parent object type cannot be empty');
}
}
export function formatError(error: any): string {
if (error instanceof Error) {
return error.message;
}
if (typeof error === 'object' && error !== null) {
if ('message' in error) {
return error.message;
}
if ('details' in error && error.details) {
return JSON.stringify(error.details);
}
return JSON.stringify(error);
}
return String(error);
}
export function logDebug(message: string, data?: any): void {
if (process.env.NODE_ENV === 'development' || process.env.DEBUG === 'true') {
console.error(`[DEBUG] ${message}`, data ? JSON.stringify(data, null, 2) : '');
}
}
// Re-export pagination utilities
export { paginateAqlSearch, formatPaginationInfo } from './pagination.js';
export type { PaginationOptions, PaginatedResult } from './pagination.js';