export function getRequestInformation()

in src/utilities.ts [58:158]


export function getRequestInformation(
    verb: string,
    urlPath: string,
): {
    operation: TypeOperation | SystemOperation;
    resourceType?: string;
    id?: string;
    vid?: string;
    bulkDataAuth?: BulkDataAuth;
} {
    const path = cleanUrlPath(urlPath);
    const urlSplit = path.split('/');
    const exportJobUrlRegExp = /\$export\/[\w|-]+/;
    switch (verb) {
        case 'PUT': {
            return {
                operation: 'update',
                resourceType: urlSplit[0],
                id: urlSplit[1],
            };
        }
        case 'PATCH': {
            return {
                operation: 'patch',
                resourceType: urlSplit[0],
                id: urlSplit[1],
            };
        }
        case 'DELETE': {
            if (exportJobUrlRegExp.test(urlPath)) {
                const exportType = getExportType(urlPath);
                const operation = 'cancel-export';
                return {
                    operation: 'delete',
                    bulkDataAuth: {
                        exportType,
                        operation,
                    },
                };
            }
            return {
                operation: 'delete',
                resourceType: urlSplit[0],
                id: urlSplit[1],
            };
        }
        case 'GET': {
            if (urlPath.includes('$export')) {
                const exportType = getExportType(urlPath);
                if (exportJobUrlRegExp.test(urlPath)) {
                    const operation = 'get-status-export';
                    return {
                        operation: 'read',
                        bulkDataAuth: {
                            exportType,
                            operation,
                        },
                    };
                }
                return {
                    operation: 'read',
                    bulkDataAuth: {
                        exportType,
                        operation: 'initiate-export',
                    },
                };
            }
            if (urlSplit[urlSplit.length - 1].startsWith('_history')) {
                // if the last section of the url string starts with history
                if (urlSplit[0].startsWith('_history')) {
                    // '_history' is at root or url
                    return { operation: 'history-system' };
                }
                if (urlSplit[1].startsWith('_history')) {
                    return { operation: 'history-type', resourceType: urlSplit[0] };
                }
                return { operation: 'history-instance', resourceType: urlSplit[0], id: urlSplit[1] };
            }
            if (path.includes('_history/'))
                return { operation: 'vread', resourceType: urlSplit[0], id: urlSplit[1], vid: urlSplit[3] };
            // For a generic read it has to be [type]/[id]
            if (urlSplit.length === 2) return { operation: 'read', resourceType: urlSplit[0], id: urlSplit[1] };
            if (path.includes('metadata')) return { operation: 'read', resourceType: 'metadata' };
            if (path.length === 0) return { operation: 'search-system' };
            return { operation: 'search-type', resourceType: urlSplit[0] };
        }
        case 'POST': {
            if (path.includes('_search')) {
                if (urlSplit[0] === '_search') {
                    return { operation: 'search-system' };
                }
                return { operation: 'search-type', resourceType: urlSplit[0] };
            }
            if (path.length === 0) return { operation: 'transaction' };
            return { operation: 'create', resourceType: urlSplit[0] };
        }
        default: {
            throw new Error('Unable to parse the http verb');
        }
    }
}