@nutrient-sdk/document-engine-mcp-server
Version:
MCP server for Nutrient Document Engine
280 lines (279 loc) • 8.8 kB
JavaScript
/**
* Provides layer-aware wrappers for Document Engine API calls.
* When a layer is specified in the DocumentFingerprint, it uses layer-specific endpoints.
* Otherwise, it uses the default endpoints.
*/
/**
* Get text from a document page with layer support
*/
export async function getDocumentPageText(client, fingerprint, pageIndex, ocr) {
const params = {
documentId: fingerprint.document_id,
pageIndex,
...(ocr ? { ocr: 'true' } : {}),
};
if (fingerprint.layer) {
return client['get-document-layer-page-text']({
...params,
layerName: fingerprint.layer,
});
}
// Use default endpoint
return client['get-document-page-text'](params);
}
/**
* Get annotations with layer support
*/
export async function getDocumentAnnotations(client, fingerprint, pageIndex) {
const params = {
documentId: fingerprint.document_id,
...(pageIndex !== undefined ? { pageIndex } : {}),
};
const headers = { headers: { Accept: 'application/json' } };
if (fingerprint.layer) {
// Use layer-specific endpoint
return client['get-document-layer-annotations']({
...params,
layerName: fingerprint.layer,
}, null, headers);
}
// Use default endpoint
return client['get-document-annotations'](params, null, headers);
}
/**
* Create annotation with layer support
*/
export async function createDocumentAnnotation(client, fingerprint, annotation) {
const params = {
documentId: fingerprint.document_id,
};
if (fingerprint.layer) {
// Use layer-specific endpoint
return client['create-document-layer-annotation']({
...params,
layerName: fingerprint.layer,
}, annotation);
}
// Use default endpoint
return client['create-document-annotation'](params, annotation);
}
export async function getDocumentAnnotation(client, fingerprint, annotationId) {
const params = {
documentId: fingerprint.document_id,
annotationId,
};
if (fingerprint.layer) {
// Use layer-specific endpoint
return client['get-document-layer-annotation']({
...params,
layerName: fingerprint.layer,
});
}
// Use default endpoint
return client['get-document-annotation'](params);
}
/**
* Delete annotation with layer support
*/
export async function deleteDocumentAnnotation(client, fingerprint, annotationId) {
const params = {
documentId: fingerprint.document_id,
annotationId,
};
if (fingerprint.layer) {
// Use layer-specific endpoint
return client['delete-document-layer-annotation']({
...params,
layerName: fingerprint.layer,
});
}
// Use default endpoint
return client['delete-document-annotation'](params);
}
/**
* Get form field values with layer support
*/
export async function getDocumentFormFieldValues(client, fingerprint) {
const params = {
documentId: fingerprint.document_id,
};
if (fingerprint.layer) {
// Use layer-specific endpoint
return client['get-document-layer-form-field-values']({
...params,
layerName: fingerprint.layer,
}, null, {
headers: {
Accept: 'application/json',
},
});
}
// Use default endpoint
return client['get-document-form-field-values'](params, null, {
headers: {
Accept: 'application/json',
},
});
}
/**
* Update form field values with layer support
*/
export async function updateDocumentFormFieldValues(client, fingerprint, formFieldValues) {
const params = {
documentId: fingerprint.document_id,
formFieldValues,
};
if (fingerprint.layer) {
// Use layer-specific endpoint
return client['update-document-layer-form-field-values']({
...params,
layerName: fingerprint.layer,
});
}
// Use default endpoint
return client['update-document-form-field-values'](params);
}
/**
* Apply redactions with layer support
*/
export async function applyDocumentRedactions(client, fingerprint, options) {
const params = {
documentId: fingerprint.document_id,
...options,
};
if (fingerprint.layer) {
// Use layer-specific endpoint
return client['apply-document-layer-redactions']({
...params,
layerName: fingerprint.layer,
}, null, {
headers: {
'Content-Type': 'application/json',
},
});
}
// Use default endpoint
return client['apply-document-redactions'](params, null, {
headers: {
'Content-Type': 'application/json',
},
});
}
/**
* Create redactions with layer support
*/
export async function createDocumentRedactions(client, fingerprint, redactionPayload) {
const params = {
documentId: fingerprint.document_id,
};
if (fingerprint.layer) {
// Use layer-specific endpoint
return client['create-document-layer-redactions']({
...params,
layerName: fingerprint.layer,
}, redactionPayload);
}
// Use default endpoint
return client['create-document-redactions'](params, redactionPayload);
}
/**
* List all layers for a document
*/
export async function listDocumentLayers(client, documentId) {
return client['list-layers']({
documentId,
});
}
/**
* Create a new layer
*/
export async function createDocumentLayer(client, documentId, layerName, sourceLayer) {
return client['create-new-layer']({ documentId }, { name: layerName, source_layer_name: sourceLayer });
}
/**
* Apply build instructions to a document with layer support
*/
export async function applyDocumentInstructions(client, fingerprint, buildInstructions) {
const params = {
documentId: fingerprint.document_id,
};
if (fingerprint.layer) {
// Use layer-specific endpoint
return client['document-layer-apply-instructions']({
...params,
layerName: fingerprint.layer,
}, buildInstructions);
}
// Use default endpoint
return client['document-apply-instructions'](params, buildInstructions);
}
/**
* Copy a document using the Document Engine API
*/
export async function copyDocument(client, fingerprint) {
if (fingerprint.layer) {
// Use layer-specific endpoint
const response = await client['copy-document-layer-with-instant-json']({
documentId: fingerprint.document_id,
layerName: fingerprint.layer,
});
return response.data.documentId;
}
// Use default endpoint
const response = await client['copy-document']({}, { document_id: fingerprint.document_id });
return response.data.data.document_id;
}
export async function renderDocumentPage(client, fingerprint, pageIndex, queryParams, config) {
const params = {
documentId: fingerprint.document_id,
pageIndex,
...queryParams,
};
if (fingerprint.layer) {
// Use layer-specific endpoint
return client['render-document-layer-page']({
...params,
layerName: fingerprint.layer,
}, null, config);
}
// Use default endpoint
return client['render-document-page'](params, null, config);
}
export async function getDocumentFormFields(client, fingerprint) {
const params = {
documentId: fingerprint.document_id,
};
if (fingerprint.layer) {
// Use layer-specific endpoint
return client['get-document-layer-form-fields']({
...params,
layerName: fingerprint.layer,
});
}
// Use default endpoint
return client['get-document-form-fields'](params);
}
/**
* Get document information using DocumentFingerprint
* Note: Document info is always fetched from the base document, not from layers
*/
export async function getDocumentInfo(client, fingerprint) {
const params = {
documentId: fingerprint.document_id,
};
let documentInfoResponse;
if (fingerprint.layer) {
// Use layer-specific endpoint
documentInfoResponse = await client['fetch-document-layer-info']({
...params,
layerName: fingerprint.layer,
});
}
else {
documentInfoResponse = await client['fetch-document-info'](params);
}
if (!documentInfoResponse?.data?.data) {
throw new Error(`No document info returned for document ID: ${fingerprint.document_id}${fingerprint.layer ? `, layer name: ${fingerprint.layer}` : ''}`);
}
return documentInfoResponse.data.data;
}