@sassoftware/mcp-serverjs
Version:
A mcp server for SAS Viya
71 lines (64 loc) • 1.97 kB
JavaScript
/*
* Copyright © 2025, SAS Institute Inc., Cary, NC, USA. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
import restafedit from '@sassoftware/restafedit';
import getLogonPayload from './getLogonPayload.js';
import deleteSession from './deleteSession.js';
import debug from 'debug';
async function _readTable(params) {
const log = debug('readtable');
let { table, lib, start, limit, server, format, where } = params;
let logonPayload = await getLogonPayload();
log('logonPayload', logonPayload);
let itable = { name: table };
if (server === 'cas') {
itable.caslib = lib;
} else {
itable.libref = lib;
}
let config = {
source: server,
table: itable,
initialFetch: {
qs: {
start: start - 1, // Adjust for 0-based index
limit: limit,
format: format || false,
where: where || ''
}
}
};
log('config', config);
log('logonPayload', logonPayload);
let appControl = {};
try {
appControl = await restafedit.setup(
logonPayload,
config,
null,/* create a sessiion */
{},
'user',
{}
);
log('appControl', appControl);
await restafedit.scrollTable('first', appControl);
log('appControl.state.data', appControl.state.data);
let outdata = appControl.state.data.map((d) => {
delete d._rowIndex;
delete d._modified;
delete d._index_;
return d;
});
await deleteSession(appControl);
await appControl.store.logoff();
let t = (limit === 1) ? JSON.stringify(outdata[0]) : JSON.stringify(outdata);
return { content: [{ type: 'text', text: t }], structuredContent: outdata };
} catch (err) {
log(JSON.stringify(err));
await deleteSession(appControl);
await appControl.store.logoff();
return { content: [{ type: 'text', text: JSON.stringify(err) }] };
}
}
export default _readTable;